@echo off setlocal EnableExtensions EnableDelayedExpansion REM ============================================================ REM LesRaisinsArmor - Fabric Release Helper (Windows) REM Version is read exclusively from gradle.properties. REM ============================================================ cd /d "%~dp0" set "GRADLE_PROPERTIES=%CD%\gradle.properties" set "MOD_VERSION=" set "MINECRAFT_VERSION=" set "ARCHIVES_BASE_NAME=" if not exist "%GRADLE_PROPERTIES%" ( echo [ERROR] gradle.properties tidak ditemukan. goto :failed ) for /f "usebackq tokens=1,* delims==" %%A in ("%GRADLE_PROPERTIES%") do ( if "%%A"=="mod_version" set "MOD_VERSION=%%B" if "%%A"=="minecraft_version" set "MINECRAFT_VERSION=%%B" if "%%A"=="archives_base_name" set "ARCHIVES_BASE_NAME=%%B" ) if not defined MOD_VERSION ( echo [ERROR] mod_version tidak ditemukan atau kosong di gradle.properties. goto :failed ) if not defined MINECRAFT_VERSION set "MINECRAFT_VERSION=26.2" if not defined ARCHIVES_BASE_NAME set "ARCHIVES_BASE_NAME=lrarmor" set "JAR_PATH=%CD%\build\libs\%ARCHIVES_BASE_NAME%-%MOD_VERSION%.jar" set "SOURCES_JAR_PATH=%CD%\build\libs\%ARCHIVES_BASE_NAME%-%MOD_VERSION%-sources.jar" set "RELEASE_ROOT=%CD%\release" set "RELEASE_DIR=%RELEASE_ROOT%\%MOD_VERSION%" set "RELEASE_JAR=%RELEASE_DIR%\%ARCHIVES_BASE_NAME%-%MOD_VERSION%.jar" echo ============================================ echo LesRaisinsArmor - Release Helper echo Minecraft : %MINECRAFT_VERSION% echo Version : %MOD_VERSION% echo Tag : v%MOD_VERSION% echo ============================================ echo. if not exist "%JAR_PATH%" ( echo [INFO] JAR v%MOD_VERSION% belum ditemukan. choice /C YN /N /M "Compile sekarang? [Y/N]: " if errorlevel 2 goto :cancelled call "%CD%\compile.bat" --build-only if errorlevel 1 ( echo [ERROR] Compile gagal. Release dibatalkan. goto :failed ) ) if not exist "%JAR_PATH%" ( echo [ERROR] JAR release tetap tidak ditemukan: echo %JAR_PATH% goto :failed ) if exist "%RELEASE_DIR%" ( echo [INFO] Folder release v%MOD_VERSION% sudah ada: echo %RELEASE_DIR% choice /C YN /N /M "Timpa artifact release versi ini? [Y/N]: " if errorlevel 2 goto :cancelled rmdir /S /Q "%RELEASE_DIR%" ) mkdir "%RELEASE_DIR%" >nul 2>&1 copy /Y "%JAR_PATH%" "%RELEASE_JAR%" >nul if errorlevel 1 goto :failed if exist "%SOURCES_JAR_PATH%" copy /Y "%SOURCES_JAR_PATH%" "%RELEASE_DIR%\" >nul if exist "%CD%\README.md" copy /Y "%CD%\README.md" "%RELEASE_DIR%\README.md" >nul if exist "%CD%\PORT-CHANGELOG.md" copy /Y "%CD%\PORT-CHANGELOG.md" "%RELEASE_DIR%\PORT-CHANGELOG.md" >nul if exist "%CD%\LICENSE" copy /Y "%CD%\LICENSE" "%RELEASE_DIR%\LICENSE" >nul where certutil.exe >nul 2>&1 if not errorlevel 1 ( certutil -hashfile "%RELEASE_JAR%" SHA256 | findstr /V /I "hash CertUtil" > "%RELEASE_DIR%\SHA256SUMS.txt" ) echo. echo [SUCCESS] Artifact release siap: echo %RELEASE_DIR% echo. dir /B "%RELEASE_DIR%" echo. choice /C YN /N /M "Buat dan push Git tag v%MOD_VERSION%? [Y/N]: " if errorlevel 2 goto :success where git.exe >nul 2>&1 if errorlevel 1 ( echo [ERROR] Git tidak ditemukan di PATH. Artifact tetap aman. goto :git_failed ) git rev-parse --is-inside-work-tree >nul 2>&1 if errorlevel 1 ( echo [ERROR] Folder ini bukan Git repository. Artifact tetap aman. goto :git_failed ) set "DIRTY=" for /f "delims=" %%G in ('git status --porcelain') do set "DIRTY=1" if defined DIRTY ( echo [ERROR] Working tree masih memiliki perubahan yang belum di-commit. echo [INFO] Commit/push dulu dengan compile.bat agar tag menunjuk source release yang benar. git status --short goto :git_failed ) git rev-parse "v%MOD_VERSION%" >nul 2>&1 if not errorlevel 1 ( echo [INFO] Tag v%MOD_VERSION% sudah ada secara lokal; tidak membuat ulang. ) else ( git tag -a "v%MOD_VERSION%" -m "LesRaisinsArmor v%MOD_VERSION%" if errorlevel 1 goto :git_failed ) set /a PUSH_ROUND=1 :push_round set /a PUSH_ATTEMPT=1 :push_attempt echo [INFO] Push tag attempt !PUSH_ATTEMPT!/3 ^(round !PUSH_ROUND!^)... git push origin "v%MOD_VERSION%" if not errorlevel 1 goto :success if !PUSH_ATTEMPT! LSS 3 ( set /a PUSH_ATTEMPT+=1 timeout /t 2 /nobreak >nul goto :push_attempt ) echo [WARN] Push tag gagal setelah 3 percobaan. choice /C YN /N /M "Coba push tag 3x lagi? [Y/N]: " if errorlevel 2 goto :git_failed set /a PUSH_ROUND+=1 goto :push_round :git_failed echo. echo [WARN] Tahap Git/tag belum selesai, tetapi artifact release sudah dibuat. goto :end_error :success echo. echo ============================================ echo RELEASE v%MOD_VERSION% SIAP echo ============================================ echo Artifact: %RELEASE_DIR% echo ============================================ goto :end_ok :cancelled echo. echo [INFO] Release dibatalkan oleh pengguna. goto :end_ok :failed echo. echo [ERROR] Release gagal. goto :end_error :end_ok echo. pause exit /b 0 :end_error echo. pause exit /b 1