212 lines
5.4 KiB
Batchfile
212 lines
5.4 KiB
Batchfile
@echo off
|
|
setlocal EnableExtensions EnableDelayedExpansion
|
|
cd /d "%~dp0"
|
|
|
|
set "BUILD_ONLY=0"
|
|
if /I "%~1"=="--build-only" set "BUILD_ONLY=1"
|
|
|
|
if not exist "gradle.properties" (
|
|
echo [ERROR] gradle.properties tidak ditemukan.
|
|
goto :failed
|
|
)
|
|
|
|
for /f "tokens=1,* delims==" %%A in (gradle.properties) do (
|
|
if "%%A"=="mod_version" set "MOD_VERSION=%%B"
|
|
if "%%A"=="minecraft_version" set "MC_VERSION=%%B"
|
|
if "%%A"=="archives_base_name" set "ARCHIVES_BASE_NAME=%%B"
|
|
)
|
|
|
|
if not defined MOD_VERSION goto :properties_failed
|
|
if not defined MC_VERSION goto :properties_failed
|
|
if not defined ARCHIVES_BASE_NAME set "ARCHIVES_BASE_NAME=item-despawn-timer"
|
|
|
|
set "PROJECT_VERSION=%MOD_VERSION%+mc%MC_VERSION%"
|
|
set "JAR_PATH=%CD%\build\libs\%ARCHIVES_BASE_NAME%-%PROJECT_VERSION%.jar"
|
|
set "GIT_ONLY=0"
|
|
|
|
echo ============================================
|
|
echo Item Despawn Timer - Fabric %MC_VERSION%
|
|
echo Version: %PROJECT_VERSION%
|
|
echo ============================================
|
|
|
|
REM Nama JAR Gradle berasal langsung dari gradle.properties/build.gradle.
|
|
REM Jadi jika JAR versi saat ini sudah ada, jangan compile otomatis.
|
|
if "%BUILD_ONLY%"=="0" if exist "%JAR_PATH%" (
|
|
echo.
|
|
echo [INFO] Build untuk versi %PROJECT_VERSION% sudah tersedia:
|
|
echo %JAR_PATH%
|
|
echo.
|
|
choice /C CGQ /N /M "[C] Compile ulang / [G] Git saja / [Q] Keluar: "
|
|
if errorlevel 3 exit /b 0
|
|
if errorlevel 2 (
|
|
set "GIT_ONLY=1"
|
|
goto :git_integration
|
|
)
|
|
)
|
|
|
|
call :check_java
|
|
if errorlevel 1 goto :failed
|
|
|
|
echo.
|
|
echo [INFO] Menjalankan clean build...
|
|
call gradlew.bat clean build
|
|
if errorlevel 1 goto :build_failed
|
|
|
|
if not exist "%JAR_PATH%" (
|
|
echo.
|
|
echo [ERROR] Gradle selesai tanpa error, tetapi JAR yang diharapkan tidak ditemukan:
|
|
echo %JAR_PATH%
|
|
echo [INFO] Isi build\libs:
|
|
dir /b build\libs\*.jar 2>nul
|
|
goto :failed
|
|
)
|
|
|
|
echo.
|
|
echo ============================================
|
|
echo BUILD SUCCESS
|
|
echo ============================================
|
|
echo JAR: %JAR_PATH%
|
|
|
|
if "%BUILD_ONLY%"=="1" exit /b 0
|
|
|
|
echo.
|
|
choice /C YN /N /M "Commit dan push perubahan ke Git? [Y/N]: "
|
|
if errorlevel 2 goto :success
|
|
|
|
:git_integration
|
|
echo.
|
|
echo ============================================
|
|
echo Git Integration
|
|
echo ============================================
|
|
if "%GIT_ONLY%"=="1" echo [INFO] Build dilewati karena JAR %PROJECT_VERSION% sudah tersedia.
|
|
|
|
where git.exe >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo [ERROR] Git tidak ditemukan di PATH.
|
|
goto :git_failed
|
|
)
|
|
|
|
git rev-parse --is-inside-work-tree >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo [ERROR] Folder ini bukan Git repository.
|
|
goto :git_failed
|
|
)
|
|
|
|
set "HAS_CHANGES="
|
|
for /f "delims=" %%G in ('git status --porcelain') do set "HAS_CHANGES=1"
|
|
|
|
if defined HAS_CHANGES (
|
|
echo.
|
|
git status --short
|
|
echo.
|
|
set "DEFAULT_MSG=Update Item Despawn Timer v%PROJECT_VERSION%"
|
|
set "COMMIT_MESSAGE="
|
|
set /p "COMMIT_MESSAGE=Commit message [!DEFAULT_MSG!]: "
|
|
if not defined COMMIT_MESSAGE set "COMMIT_MESSAGE=!DEFAULT_MSG!"
|
|
|
|
git add -A
|
|
if errorlevel 1 goto :git_failed
|
|
|
|
git commit -m "!COMMIT_MESSAGE!"
|
|
if errorlevel 1 goto :git_failed
|
|
) else (
|
|
echo [INFO] Tidak ada perubahan source untuk di-commit.
|
|
)
|
|
|
|
for /f "delims=" %%B in ('git branch --show-current') do set "CURRENT_BRANCH=%%B"
|
|
if not defined CURRENT_BRANCH (
|
|
echo [ERROR] Branch aktif tidak dapat ditentukan.
|
|
goto :git_failed
|
|
)
|
|
|
|
git remote get-url origin >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo [ERROR] Remote 'origin' belum dikonfigurasi.
|
|
goto :git_failed
|
|
)
|
|
|
|
call :push_with_retry
|
|
if errorlevel 1 goto :git_failed
|
|
|
|
echo.
|
|
echo [SUCCESS] Git push berhasil.
|
|
goto :success
|
|
|
|
:check_java
|
|
where java.exe >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo [ERROR] Java tidak ditemukan di PATH.
|
|
exit /b 1
|
|
)
|
|
set "JAVA_MAJOR="
|
|
for /f "tokens=2" %%V in ('java --version 2^>^&1 ^| findstr /R /C:"^openjdk " /C:"^java "') do (
|
|
if not defined JAVA_VERSION set "JAVA_VERSION=%%V"
|
|
)
|
|
if not defined JAVA_VERSION (
|
|
echo [ERROR] Versi Java tidak dapat dibaca.
|
|
exit /b 1
|
|
)
|
|
for /f "tokens=1 delims=." %%M in ("%JAVA_VERSION%") do set "JAVA_MAJOR=%%M"
|
|
if %JAVA_MAJOR% LSS 25 (
|
|
echo [ERROR] Minecraft 26.2 memerlukan Java 25+. Terdeteksi: %JAVA_VERSION%
|
|
exit /b 1
|
|
)
|
|
echo [OK] Java %JAVA_VERSION%
|
|
exit /b 0
|
|
|
|
:push_with_retry
|
|
set /a PUSH_ROUND=1
|
|
:push_round
|
|
set /a PUSH_ATTEMPT=1
|
|
:push_try
|
|
echo [INFO] Push attempt !PUSH_ATTEMPT!/3 ^(round !PUSH_ROUND!^)...
|
|
git push origin "!CURRENT_BRANCH!"
|
|
if not errorlevel 1 exit /b 0
|
|
if !PUSH_ATTEMPT! LSS 3 (
|
|
set /a PUSH_ATTEMPT+=1
|
|
timeout /t 2 /nobreak >nul
|
|
goto :push_try
|
|
)
|
|
echo.
|
|
choice /C YN /N /M "Push gagal 3x. Coba 3x lagi? [Y/N]: "
|
|
if errorlevel 2 exit /b 1
|
|
set /a PUSH_ROUND+=1
|
|
goto :push_round
|
|
|
|
:properties_failed
|
|
echo [ERROR] mod_version atau minecraft_version tidak ditemukan di gradle.properties.
|
|
goto :failed
|
|
|
|
:build_failed
|
|
echo.
|
|
echo ============================================
|
|
echo BUILD FAILED
|
|
echo ============================================
|
|
if "%BUILD_ONLY%"=="1" exit /b 1
|
|
pause
|
|
exit /b 1
|
|
|
|
:git_failed
|
|
echo.
|
|
echo ============================================
|
|
echo GIT FAILED
|
|
echo ============================================
|
|
echo [INFO] Build/JAR yang sudah ada tetap aman.
|
|
pause
|
|
exit /b 2
|
|
|
|
:success
|
|
echo.
|
|
echo ============================================
|
|
echo Item Despawn Timer %PROJECT_VERSION% selesai.
|
|
echo ============================================
|
|
pause
|
|
exit /b 0
|
|
|
|
:failed
|
|
echo.
|
|
echo [ERROR] Proses dihentikan.
|
|
if "%BUILD_ONLY%"=="1" exit /b 1
|
|
pause
|
|
exit /b 1
|