fix(docker): multi-theme packaging with PS1 orchestration and full bundle export
Replace all-themes bat logic with PowerShell to survive branch checkout; add api-admin and full-themes service modes; fix bat findstr path check and cmd exit codes; document six-in-one tar and update gitignore for player/full-themes artifacts.
This commit is contained in:
@@ -69,7 +69,7 @@ goto parse_args
|
||||
echo.
|
||||
echo Usage: docs\docker\build-and-export-images.bat [options]
|
||||
echo.
|
||||
echo --service SVC api ^| player ^| admin ^| all (default: all)
|
||||
echo --service SVC api ^| player ^| admin ^| api-admin ^| full-themes ^| all (default: all)
|
||||
echo --tag TAG Image tag (default: latest)
|
||||
echo --use-cache Use Docker build cache
|
||||
echo --export-only Skip build, export existing images only
|
||||
@@ -117,8 +117,7 @@ if errorlevel 1 exit /b 1
|
||||
if not defined OUTPUT call :default_output
|
||||
|
||||
set "OUTPUT_PATH=%OUTPUT%"
|
||||
echo %OUTPUT_PATH%| findstr /r "^[A-Za-z]:\\" >nul
|
||||
if errorlevel 1 set "OUTPUT_PATH=%CD%\%OUTPUT%"
|
||||
if /i not "%OUTPUT:~1,1%"==":" set "OUTPUT_PATH=%CD%\%OUTPUT%"
|
||||
|
||||
where docker >nul 2>&1
|
||||
if errorlevel 1 (
|
||||
@@ -126,7 +125,7 @@ if errorlevel 1 (
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
if "%EXPORT_ONLY%"=="0" goto do_build
|
||||
if "%EXPORT_ONLY%"=="0" if /i not "%SERVICE%"=="full-themes" goto do_build
|
||||
goto do_export
|
||||
|
||||
:do_build
|
||||
@@ -135,6 +134,8 @@ set "IMAGE_TAG=%TAG%"
|
||||
if "%NO_CACHE%"=="1" goto build_no_cache
|
||||
if /i "%SERVICE%"=="all" (
|
||||
docker compose -f "%COMPOSE_FILE%" --env-file "%ENV_FILE%" build api player admin
|
||||
) else if /i "%SERVICE%"=="api-admin" (
|
||||
docker compose -f "%COMPOSE_FILE%" --env-file "%ENV_FILE%" build api admin
|
||||
) else (
|
||||
docker compose -f "%COMPOSE_FILE%" --env-file "%ENV_FILE%" build %SERVICE%
|
||||
)
|
||||
@@ -143,6 +144,8 @@ goto build_done
|
||||
:build_no_cache
|
||||
if /i "%SERVICE%"=="all" (
|
||||
docker compose -f "%COMPOSE_FILE%" --env-file "%ENV_FILE%" build --no-cache api player admin
|
||||
) else if /i "%SERVICE%"=="api-admin" (
|
||||
docker compose -f "%COMPOSE_FILE%" --env-file "%ENV_FILE%" build --no-cache api admin
|
||||
) else (
|
||||
docker compose -f "%COMPOSE_FILE%" --env-file "%ENV_FILE%" build --no-cache %SERVICE%
|
||||
)
|
||||
@@ -157,6 +160,10 @@ if errorlevel 1 (
|
||||
echo ==^> Exporting %SERVICE% to %OUTPUT_PATH%
|
||||
if /i "%SERVICE%"=="all" (
|
||||
docker save thebet365-api:%TAG% thebet365-player:%TAG% thebet365-admin:%TAG% -o "%OUTPUT_PATH%"
|
||||
) else if /i "%SERVICE%"=="api-admin" (
|
||||
docker save thebet365-api:%TAG% thebet365-admin:%TAG% -o "%OUTPUT_PATH%"
|
||||
) else if /i "%SERVICE%"=="full-themes" (
|
||||
docker save thebet365-api:%TAG% thebet365-admin:%TAG% thebet365-player:main thebet365-player:theme-2 thebet365-player:theme-3 thebet365-player:theme-4 -o "%OUTPUT_PATH%"
|
||||
) else (
|
||||
docker save thebet365-%SERVICE%:%TAG% -o "%OUTPUT_PATH%"
|
||||
)
|
||||
@@ -187,16 +194,34 @@ for %%F in ("%OUTPUT_PATH%") do set /a SIZE_MB=%%~zF/1048576
|
||||
echo git_dirty=!GIT_DIRTY!
|
||||
echo tar=!TAR_NAME!
|
||||
echo tar_sha256=!TAR_SHA256!
|
||||
if /i not "!SERVICE!"=="all" (
|
||||
echo image=thebet365-!SERVICE!:%TAG%
|
||||
echo image_id=!SVC_IMAGE_ID!
|
||||
) else (
|
||||
if /i "!SERVICE!"=="all" (
|
||||
echo api_image=thebet365-api:%TAG%
|
||||
echo api_image_id=!API_IMAGE_ID!
|
||||
echo player_image=thebet365-player:%TAG%
|
||||
echo player_image_id=!PLAYER_IMAGE_ID!
|
||||
echo admin_image=thebet365-admin:%TAG%
|
||||
echo admin_image_id=!ADMIN_IMAGE_ID!
|
||||
) else if /i "!SERVICE!"=="api-admin" (
|
||||
echo api_image=thebet365-api:%TAG%
|
||||
echo api_image_id=!API_IMAGE_ID!
|
||||
echo admin_image=thebet365-admin:%TAG%
|
||||
echo admin_image_id=!ADMIN_IMAGE_ID!
|
||||
) else if /i "!SERVICE!"=="full-themes" (
|
||||
echo api_image=thebet365-api:%TAG%
|
||||
echo api_image_id=!API_IMAGE_ID!
|
||||
echo admin_image=thebet365-admin:%TAG%
|
||||
echo admin_image_id=!ADMIN_IMAGE_ID!
|
||||
echo player_main_image=thebet365-player:main
|
||||
echo player_main_image_id=!PLAYER_MAIN_IMAGE_ID!
|
||||
echo player_theme_2_image=thebet365-player:theme-2
|
||||
echo player_theme_2_image_id=!PLAYER_THEME2_IMAGE_ID!
|
||||
echo player_theme_3_image=thebet365-player:theme-3
|
||||
echo player_theme_3_image_id=!PLAYER_THEME3_IMAGE_ID!
|
||||
echo player_theme_4_image=thebet365-player:theme-4
|
||||
echo player_theme_4_image_id=!PLAYER_THEME4_IMAGE_ID!
|
||||
) else (
|
||||
echo image=thebet365-!SERVICE!:%TAG%
|
||||
echo image_id=!SVC_IMAGE_ID!
|
||||
)
|
||||
)
|
||||
|
||||
@@ -207,6 +232,12 @@ echo Server load and recreate:
|
||||
if /i "%SERVICE%"=="all" (
|
||||
echo docker load -i !TAR_NAME!
|
||||
echo docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --force-recreate api player admin
|
||||
) else if /i "%SERVICE%"=="api-admin" (
|
||||
echo docker load -i !TAR_NAME!
|
||||
echo docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --force-recreate api admin
|
||||
) else if /i "%SERVICE%"=="full-themes" (
|
||||
echo docker load -i !TAR_NAME!
|
||||
echo docker compose -f docker-compose.prod.yml -f docker-compose.themes.yml --env-file .env.docker up -d
|
||||
) else (
|
||||
echo docker load -i !TAR_NAME!
|
||||
echo docker compose -f docker-compose.prod.yml --env-file .env.docker up -d --force-recreate %SERVICE%
|
||||
@@ -223,6 +254,10 @@ exit /b 0
|
||||
:default_output
|
||||
if /i "%SERVICE%"=="all" (
|
||||
set "OUTPUT=thebet365-images-%TAG%.tar"
|
||||
) else if /i "%SERVICE%"=="api-admin" (
|
||||
set "OUTPUT=thebet365-images-%TAG%.tar"
|
||||
) else if /i "%SERVICE%"=="full-themes" (
|
||||
set "OUTPUT=thebet365-full-themes-%TAG%.tar"
|
||||
) else (
|
||||
set "OUTPUT=thebet365-%SERVICE%-%TAG%.tar"
|
||||
)
|
||||
@@ -230,10 +265,12 @@ exit /b 0
|
||||
|
||||
:validate_service
|
||||
if /i "%SERVICE%"=="all" exit /b 0
|
||||
if /i "%SERVICE%"=="api-admin" exit /b 0
|
||||
if /i "%SERVICE%"=="full-themes" exit /b 0
|
||||
if /i "%SERVICE%"=="api" exit /b 0
|
||||
if /i "%SERVICE%"=="player" exit /b 0
|
||||
if /i "%SERVICE%"=="admin" exit /b 0
|
||||
echo ERROR: invalid --service: %SERVICE% (use api, player, admin, or all)
|
||||
echo ERROR: invalid --service: %SERVICE% (use api, player, admin, api-admin, full-themes, or all)
|
||||
echo TIP: 四套主题一键打包请使用 docs\docker\build-and-export-all-themes.bat
|
||||
exit /b 1
|
||||
|
||||
@@ -273,10 +310,19 @@ set "API_IMAGE_ID="
|
||||
set "PLAYER_IMAGE_ID="
|
||||
set "ADMIN_IMAGE_ID="
|
||||
set "SVC_IMAGE_ID="
|
||||
set "PLAYER_MAIN_IMAGE_ID="
|
||||
set "PLAYER_THEME2_IMAGE_ID="
|
||||
set "PLAYER_THEME3_IMAGE_ID="
|
||||
set "PLAYER_THEME4_IMAGE_ID="
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-api:%TAG% --format "{{.Id}}" 2^>nul') do set "API_IMAGE_ID=%%I"
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-player:%TAG% --format "{{.Id}}" 2^>nul') do set "PLAYER_IMAGE_ID=%%I"
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-admin:%TAG% --format "{{.Id}}" 2^>nul') do set "ADMIN_IMAGE_ID=%%I"
|
||||
if /i not "%SERVICE%"=="all" (
|
||||
if /i "%SERVICE%"=="full-themes" (
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-player:main --format "{{.Id}}" 2^>nul') do set "PLAYER_MAIN_IMAGE_ID=%%I"
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-player:theme-2 --format "{{.Id}}" 2^>nul') do set "PLAYER_THEME2_IMAGE_ID=%%I"
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-player:theme-3 --format "{{.Id}}" 2^>nul') do set "PLAYER_THEME3_IMAGE_ID=%%I"
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-player:theme-4 --format "{{.Id}}" 2^>nul') do set "PLAYER_THEME4_IMAGE_ID=%%I"
|
||||
) else if /i not "%SERVICE%"=="all" (
|
||||
for /f "delims=" %%I in ('docker image inspect thebet365-%SERVICE%:%TAG% --format "{{.Id}}" 2^>nul') do set "SVC_IMAGE_ID=%%I"
|
||||
)
|
||||
exit /b 0
|
||||
|
||||
Reference in New Issue
Block a user