feat(ci): add push_all.bat script to push to all remotes or demo remotes with summary
This commit is contained in:
1 parent
5796e4d868
commit
63e3a2895d
1 file changed
+151
+151
@@ -0,0 +1,151 @@
|
||||
@echo off
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
echo ========================================================
|
||||
echo HomAroma Omnichannel - Git Push All Remotes
|
||||
echo ========================================================
|
||||
|
||||
:: Check for help flags
|
||||
if "%~1"=="--help" goto SHOW_HELP
|
||||
if "%~1"=="-h" goto SHOW_HELP
|
||||
if "%~1"=="/?" goto SHOW_HELP
|
||||
|
||||
:: Detect current git branch
|
||||
for /f "tokens=*" %%b in ('git rev-parse --abbrev-ref HEAD 2^>nul') do (
|
||||
set CURRENT_BRANCH=%%b
|
||||
)
|
||||
if "%CURRENT_BRANCH%"=="" set CURRENT_BRANCH=master
|
||||
|
||||
set TARGET_BRANCH=%CURRENT_BRANCH%
|
||||
set FILTER_PREFIX=
|
||||
set DRY_RUN=0
|
||||
|
||||
:: Parse arguments
|
||||
:PARSE_ARGS
|
||||
if "%~1"=="" goto AFTER_ARGS
|
||||
|
||||
if /i "%~1"=="demo" (
|
||||
set FILTER_PREFIX=demo-
|
||||
shift
|
||||
goto PARSE_ARGS
|
||||
)
|
||||
if /i "%~1"=="--demo" (
|
||||
set FILTER_PREFIX=demo-
|
||||
shift
|
||||
goto PARSE_ARGS
|
||||
)
|
||||
if /i "%~1"=="--dry-run" (
|
||||
set DRY_RUN=1
|
||||
shift
|
||||
goto PARSE_ARGS
|
||||
)
|
||||
if /i "%~1"=="-n" (
|
||||
set DRY_RUN=1
|
||||
shift
|
||||
goto PARSE_ARGS
|
||||
)
|
||||
|
||||
set TARGET_BRANCH=%~1
|
||||
shift
|
||||
goto PARSE_ARGS
|
||||
|
||||
:AFTER_ARGS
|
||||
|
||||
echo Target Branch : [%TARGET_BRANCH%]
|
||||
if not "%FILTER_PREFIX%"=="" (
|
||||
echo Filter Mode : Only remotes starting with '%FILTER_PREFIX%'
|
||||
)
|
||||
if "%DRY_RUN%"=="1" (
|
||||
echo Mode : [DRY-RUN] ^(Will not actually push^)
|
||||
)
|
||||
echo.
|
||||
|
||||
:: Collect remotes
|
||||
set REMOTES=
|
||||
for /f "tokens=*" %%r in ('git remote') do (
|
||||
set R_NAME=%%r
|
||||
if "%FILTER_PREFIX%"=="" (
|
||||
set REMOTES=!REMOTES! %%r
|
||||
) else (
|
||||
echo !R_NAME! | findstr /b /c:"%FILTER_PREFIX%" >nul
|
||||
if !errorlevel! equ 0 (
|
||||
set REMOTES=!REMOTES! %%r
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if "%REMOTES%"=="" (
|
||||
echo [ERROR] No matching git remotes found.
|
||||
pause
|
||||
exit /b 1
|
||||
)
|
||||
|
||||
echo Remotes to push (%REMOTES% ):
|
||||
for %%r in (%REMOTES%) do (
|
||||
echo * %%r
|
||||
)
|
||||
echo ========================================================
|
||||
echo.
|
||||
|
||||
set SUCCESS_COUNT=0
|
||||
set FAIL_COUNT=0
|
||||
set SUCCESS_LIST=
|
||||
set FAIL_LIST=
|
||||
|
||||
for %%r in (%REMOTES%) do (
|
||||
echo --------------------------------------------------------
|
||||
echo [^>] Pushing branch '%TARGET_BRANCH%' to remote '%%r'...
|
||||
echo --------------------------------------------------------
|
||||
if "%DRY_RUN%"=="1" (
|
||||
git push --dry-run %%r %TARGET_BRANCH%
|
||||
) else (
|
||||
git push %%r %TARGET_BRANCH%
|
||||
)
|
||||
if !errorlevel! equ 0 (
|
||||
echo [OK] Successfully pushed to %%r
|
||||
set /a SUCCESS_COUNT+=1
|
||||
set SUCCESS_LIST=!SUCCESS_LIST! %%r
|
||||
) else (
|
||||
echo [FAILED] Push failed for %%r
|
||||
set /a FAIL_COUNT+=1
|
||||
set FAIL_LIST=!FAIL_LIST! %%r
|
||||
)
|
||||
echo.
|
||||
)
|
||||
|
||||
echo ========================================================
|
||||
echo PUSH SUMMARY
|
||||
echo ========================================================
|
||||
echo Total: %SUCCESS_COUNT% succeeded, %FAIL_COUNT% failed
|
||||
echo.
|
||||
if not "!SUCCESS_LIST!"=="" (
|
||||
echo [SUCCESS]:!SUCCESS_LIST!
|
||||
)
|
||||
if not "!FAIL_LIST!"=="" (
|
||||
echo [FAILED] :!FAIL_LIST!
|
||||
)
|
||||
echo ========================================================
|
||||
echo Done.
|
||||
echo.
|
||||
pause
|
||||
exit /b 0
|
||||
|
||||
:SHOW_HELP
|
||||
echo.
|
||||
echo Usage:
|
||||
echo push_all.bat [OPTIONS] [BRANCH]
|
||||
echo.
|
||||
echo Options:
|
||||
echo demo, --demo Push only to showcase demo remotes (demo-wellness, demo-fashion, etc.)
|
||||
echo --dry-run, -n Simulate push without modifying remotes
|
||||
echo --help, -h, /? Show this help message
|
||||
echo.
|
||||
echo Examples:
|
||||
echo push_all.bat Push current branch to ALL remotes
|
||||
echo push_all.bat demo Push current branch only to demo-* remotes
|
||||
echo push_all.bat master Push 'master' branch to ALL remotes
|
||||
echo push_all.bat demo master Push 'master' branch to demo-* remotes
|
||||
echo push_all.bat --dry-run Test push to all remotes without changing anything
|
||||
echo.
|
||||
pause
|
||||
exit /b 0
|
||||
Reference in new issue
Block a user