65 lines
3.1 KiB
Batchfile
65 lines
3.1 KiB
Batchfile
@echo off
|
|
setlocal EnableExtensions DisableDelayedExpansion
|
|
|
|
if "%~1"=="" goto :usage
|
|
if "%~2"=="" goto :usage
|
|
if "%~3"=="" goto :usage
|
|
if "%~4"=="" goto :usage
|
|
|
|
set "REPO_ROOT=%~f1"
|
|
set "EXPECTED_COMMIT=%~2"
|
|
set "SQL_SERVER=%~3"
|
|
set "DATABASE=%~4"
|
|
set "EXPECTED_BRANCH=test/ft546wms-shadow-v3-20260903"
|
|
set "MAIN_COMMIT=916ac6bda32a5b102a3181cc8c5dbd5319c5656d"
|
|
|
|
where git >nul 2>nul
|
|
if errorlevel 1 (call :fail "git is not available on PATH" & exit /b 1)
|
|
where jps >nul 2>nul
|
|
if errorlevel 1 (call :fail "jps is not available on PATH" & exit /b 1)
|
|
where sqlcmd >nul 2>nul
|
|
if errorlevel 1 (call :fail "sqlcmd is not available on PATH" & exit /b 1)
|
|
if not exist "%REPO_ROOT%\.git" (call :fail "REPO_ROOT is not a Git repository" & exit /b 1)
|
|
|
|
pushd "%REPO_ROOT%" >nul
|
|
if errorlevel 1 (call :fail "cannot enter REPO_ROOT" & exit /b 1)
|
|
|
|
git rev-parse --is-inside-work-tree >nul 2>nul
|
|
if errorlevel 1 (call :fail "REPO_ROOT is not a Git worktree" & exit /b 1)
|
|
|
|
set "CURRENT_BRANCH="
|
|
for /f "usebackq delims=" %%I in (`git branch --show-current`) do set "CURRENT_BRANCH=%%I"
|
|
if /I not "%CURRENT_BRANCH%"=="%EXPECTED_BRANCH%" (call :fail "unexpected branch" & exit /b 1)
|
|
|
|
set "CURRENT_COMMIT="
|
|
for /f "usebackq delims=" %%I in (`git rev-parse HEAD`) do set "CURRENT_COMMIT=%%I"
|
|
if /I not "%CURRENT_COMMIT%"=="%EXPECTED_COMMIT%" (call :fail "HEAD does not match EXPECTED_COMMIT" & exit /b 1)
|
|
|
|
set "DIRTY="
|
|
for /f "usebackq delims=" %%I in (`git status --porcelain`) do set "DIRTY=1"
|
|
if defined DIRTY (call :fail "Git worktree is not clean" & exit /b 1)
|
|
|
|
git merge-base --is-ancestor %MAIN_COMMIT% HEAD
|
|
if errorlevel 1 (call :fail "required main commit is not an ancestor" & exit /b 1)
|
|
popd >nul
|
|
|
|
set "WMS_PROCESS_COUNT=0"
|
|
for /f %%I in ('jps -lv 2^>nul ^| findstr /I /C:"com.ruoyi.RuoYiApplication" /C:"FT546WMS" ^| find /C /V ""') do set "WMS_PROCESS_COUNT=%%I"
|
|
if %WMS_PROCESS_COUNT% GTR 1 (call :fail "more than one FT546WMS JVM is running" & exit /b 1)
|
|
|
|
set "PREFLIGHT_SQL=SET NOCOUNT ON; IF SCHEMA_ID(N'alg') IS NULL SELECT N'CLEAN_INSTALL_ELIGIBLE' AS package_state; ELSE BEGIN IF OBJECT_ID(N'alg.shadow_package_manifest', N'U') IS NULL BEGIN; THROW 51050, 'shadow manifest is missing', 1; END; IF NOT EXISTS (SELECT 1 FROM alg.shadow_package_manifest WHERE package_id='FT546WMS_SHADOW_ONLY' AND package_version IN ('2026-08-12-1','2026-09-03-3')) BEGIN; THROW 51051, 'shadow manifest is not a supported version', 1; END; SELECT package_id, package_version, installed_at FROM alg.shadow_package_manifest; IF OBJECT_ID(N'alg.shadow_snapshot_state', N'U') IS NOT NULL SELECT warehouse_id, snapshot_generation, snapshot_status, synchronized_at, CONVERT(varchar(64), source_signature, 2) AS source_signature FROM alg.shadow_snapshot_state; END"
|
|
sqlcmd -S "%SQL_SERVER%" -d "%DATABASE%" -E -b -r1 -Q "%PREFLIGHT_SQL%"
|
|
if errorlevel 1 (call :fail "SQL connectivity or shadow package validation failed" & exit /b 1)
|
|
|
|
echo PREFLIGHT_OK branch=%CURRENT_BRANCH% commit=%CURRENT_COMMIT% wmsProcesses=%WMS_PROCESS_COUNT%
|
|
exit /b 0
|
|
|
|
:usage
|
|
echo Usage: %~nx0 REPO_ROOT EXPECTED_COMMIT SQL_SERVER DATABASE 1>&2
|
|
exit /b 2
|
|
|
|
:fail
|
|
echo PREFLIGHT_FAILED %~1 1>&2
|
|
popd >nul 2>nul
|
|
exit /b 1
|