Files
lobby-systems/compile.bat
T

321 lines
8.8 KiB
Batchfile

@echo off
setlocal EnableExtensions EnableDelayedExpansion
REM ============================================================
REM Lobby Systems - Fabric Build Script
REM Windows
REM ============================================================
cd /d "%~dp0"
set "BUILD_ONLY=0"
if /I "%~1"=="--build-only" set "BUILD_ONLY=1"
set "GRADLE_PROPERTIES=%CD%\gradle.properties"
set "LOCAL_GRADLE_DIR=%CD%\.gradle-local"
set "GRADLE_VERSION=9.5.1"
set "GRADLE_HOME=%LOCAL_GRADLE_DIR%\gradle-%GRADLE_VERSION%"
set "GRADLE_BIN=%GRADLE_HOME%\bin\gradle.bat"
set "MOD_VERSION="
set "MINECRAFT_VERSION="
set "MAVEN_GROUP="
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"=="maven_group" set "MAVEN_GROUP=%%B"
)
if not defined MOD_VERSION set "MOD_VERSION=unknown"
if not defined MINECRAFT_VERSION set "MINECRAFT_VERSION=26.2"
if not defined MAVEN_GROUP set "MAVEN_GROUP=id.dartokloning"
echo ============================================
echo Lobby Systems - Fabric %MINECRAFT_VERSION% Build
echo Version: %MOD_VERSION%
echo Namespace: id.dartokloning.lobbysystems
echo Mod ID: dartokloning
echo ============================================
where java.exe >nul 2>&1
if errorlevel 1 (
echo [ERROR] Java tidak ditemukan di PATH.
echo Install JDK 25, buka terminal baru, lalu jalankan script lagi.
goto :failed
)
for /f "delims=" %%J in ('where java.exe 2^>nul') do (
set "JAVA_PATH=%%J"
goto :java_path_found
)
:java_path_found
echo [INFO] Java executable: %JAVA_PATH%
set "JAVA_VERSION="
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] Tidak dapat membaca versi Java.
goto :failed
)
for /f "tokens=1 delims=." %%M in ("%JAVA_VERSION%") do set "JAVA_MAJOR=%%M"
if not "%JAVA_MAJOR%"=="25" (
echo [ERROR] Java 25 diperlukan.
echo [INFO] Java yang terdeteksi: %JAVA_VERSION%
goto :failed
)
echo [OK] Java 25 terdeteksi.
if exist "%GRADLE_BIN%" goto :gradle_ready
echo [INFO] Gradle %GRADLE_VERSION% belum tersedia.
echo [INFO] Mengunduh distribusi resmi...
if not exist "%LOCAL_GRADLE_DIR%" mkdir "%LOCAL_GRADLE_DIR%"
set "GRADLE_ZIP=%LOCAL_GRADLE_DIR%\gradle-%GRADLE_VERSION%-bin.zip"
set "GRADLE_URL=https://services.gradle.org/distributions/gradle-%GRADLE_VERSION%-bin.zip"
where curl.exe >nul 2>&1
if errorlevel 1 (
echo [ERROR] curl.exe tidak ditemukan.
goto :failed
)
curl.exe -L --fail --progress-bar "%GRADLE_URL%" -o "%GRADLE_ZIP%"
if errorlevel 1 (
echo [ERROR] Gagal mengunduh Gradle %GRADLE_VERSION%.
goto :failed
)
echo [INFO] Mengekstrak Gradle %GRADLE_VERSION%...
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "Expand-Archive -LiteralPath '%GRADLE_ZIP%' -DestinationPath '%LOCAL_GRADLE_DIR%' -Force"
if errorlevel 1 (
echo [ERROR] Gagal mengekstrak Gradle.
goto :failed
)
del /q "%GRADLE_ZIP%" >nul 2>&1
if not exist "%GRADLE_BIN%" (
echo [ERROR] Gradle berhasil diekstrak tetapi executable tidak ditemukan.
goto :failed
)
:gradle_ready
echo [OK] Gradle %GRADLE_VERSION% tersedia.
echo [INFO] Menjalankan clean build Lobby Systems v%MOD_VERSION%...
echo.
call "%GRADLE_BIN%" clean build --no-daemon
if errorlevel 1 goto :build_failed
echo.
echo ============================================
echo BUILD SUCCESS
echo ============================================
set "JAR_PATH=%CD%\build\libs\lobby-systems-%MOD_VERSION%.jar"
if exist "%JAR_PATH%" (
echo JAR:
echo %JAR_PATH%
) else (
echo [WARN] Build berhasil, tetapi JAR utama tidak ditemukan pada:
echo %JAR_PATH%
)
REM release.bat memakai mode ini supaya prompt Git tidak muncul dua kali.
if "%BUILD_ONLY%"=="1" exit /b 0
echo.
choice /C YN /N /M "Commit dan push perubahan ke Git/Gitea? [Y/N]: "
if errorlevel 2 goto :skip_git
if errorlevel 1 goto :git_integration
:git_integration
echo.
echo ============================================
echo Git Integration
echo ============================================
where git.exe >nul 2>&1
if errorlevel 1 (
echo [ERROR] Git tidak ditemukan di PATH.
echo Build tetap berhasil, tetapi Git tidak dapat dijalankan.
goto :success
)
git rev-parse --is-inside-work-tree >nul 2>&1
if errorlevel 1 (
echo [ERROR] Folder ini belum menjadi Git repository.
echo.
echo Jalankan terlebih dahulu:
echo git init
echo git branch -M main
echo git remote add origin ^<URL-GITEA^>
echo.
goto :success
)
echo [INFO] Memeriksa perubahan...
set "HAS_CHANGES="
for /f "delims=" %%G in ('git status --porcelain') do set "HAS_CHANGES=1"
if defined HAS_CHANGES (
echo.
echo Perubahan ditemukan:
git status --short
echo.
call :suggest_commit_message
echo [SUGGEST] Commit message: !SUGGESTED_COMMIT!
echo [INFO] Tekan Enter untuk memakai saran tersebut, atau ketik pesan sendiri.
set "COMMIT_MESSAGE="
set /p "COMMIT_MESSAGE=Commit message [!SUGGESTED_COMMIT!]: "
if not defined COMMIT_MESSAGE set "COMMIT_MESSAGE=!SUGGESTED_COMMIT!"
echo.
echo [INFO] Menambahkan perubahan ke staging...
git add -A
if errorlevel 1 (
echo [ERROR] git add gagal.
goto :git_failed
)
echo [INFO] Membuat commit...
git commit -m "!COMMIT_MESSAGE!"
if errorlevel 1 (
echo [ERROR] git commit gagal.
goto :git_failed
)
) else (
echo [INFO] Tidak ada perubahan source yang perlu di-commit.
echo [INFO] Akan mencoba push commit yang sudah ada.
)
set "CURRENT_BRANCH="
for /f "delims=" %%B in ('git branch --show-current') do set "CURRENT_BRANCH=%%B"
if not defined CURRENT_BRANCH (
echo [ERROR] Tidak dapat menentukan branch Git aktif.
goto :git_failed
)
git remote get-url origin >nul 2>&1
if errorlevel 1 (
echo [ERROR] Remote Git 'origin' belum dikonfigurasi.
echo Commit lokal tetap tersimpan.
goto :git_failed
)
call :push_branch_with_retry
if errorlevel 1 goto :git_failed
echo.
echo [SUCCESS] Push ke Git/Gitea berhasil.
goto :success
:suggest_commit_message
set "SUGGESTED_COMMIT=Update Lobby Systems v%MOD_VERSION%"
set "HAS_SRC_CHANGE="
set "HAS_SCRIPT_CHANGE="
set "HAS_DOC_CHANGE="
for /f "delims=" %%F in ('git status --porcelain') do (
set "LINE=%%F"
echo !LINE! | findstr /I /C:"src/" >nul && set "HAS_SRC_CHANGE=1"
echo !LINE! | findstr /I /C:"compile.bat" /C:"compile.sh" /C:"release.bat" /C:"release.sh" >nul && set "HAS_SCRIPT_CHANGE=1"
echo !LINE! | findstr /I /C:"README.md" /C:"LICENSE" >nul && set "HAS_DOC_CHANGE=1"
)
if defined HAS_SRC_CHANGE set "SUGGESTED_COMMIT=Update Lobby Systems v%MOD_VERSION%"
if not defined HAS_SRC_CHANGE if defined HAS_SCRIPT_CHANGE set "SUGGESTED_COMMIT=Improve build and Git workflow"
if not defined HAS_SRC_CHANGE if not defined HAS_SCRIPT_CHANGE if defined HAS_DOC_CHANGE set "SUGGESTED_COMMIT=Update Lobby Systems documentation"
exit /b 0
:push_branch_with_retry
set /a PUSH_ROUND=1
:push_round_start
set /a PUSH_ATTEMPT=1
:push_attempt_start
echo.
echo [INFO] Push attempt !PUSH_ATTEMPT!/3 ^(round !PUSH_ROUND!^) ke origin/!CURRENT_BRANCH!...
git push origin "!CURRENT_BRANCH!"
if not errorlevel 1 exit /b 0
echo [WARN] Push attempt !PUSH_ATTEMPT!/3 gagal.
if !PUSH_ATTEMPT! LSS 3 (
set /a PUSH_ATTEMPT+=1
echo [INFO] Mencoba lagi dalam 2 detik...
timeout /t 2 /nobreak >nul
goto :push_attempt_start
)
echo.
echo ============================================
echo GIT PUSH FAILED - 3 ATTEMPTS
echo ============================================
echo [INFO] Commit lokal tetap aman dan tidak perlu compile ulang.
choice /C YN /N /M "Coba push 3x lagi? [Y/N]: "
if errorlevel 2 exit /b 1
set /a PUSH_ROUND+=1
goto :push_round_start
:skip_git
echo.
echo [INFO] Git commit/push dilewati.
goto :success
:success
echo.
echo ============================================
echo Lobby Systems v%MOD_VERSION% selesai.
echo ============================================
echo.
pause
exit /b 0
:build_failed
echo.
echo ============================================
echo BUILD FAILED
echo ============================================
echo.
echo [ERROR] Build gagal.
echo [INFO] Git Integration tidak dijalankan.
echo.
if "%BUILD_ONLY%"=="1" exit /b 1
pause
exit /b 1
:git_failed
echo.
echo ============================================
echo GIT FAILED
echo ============================================
echo.
echo [INFO] Build Lobby Systems tetap berhasil.
echo [INFO] Commit lokal tetap tersimpan.
echo [INFO] Anda bisa menjalankan compile.bat lagi dan memilih Y; jika tidak ada perubahan, script langsung mencoba push commit yang tertunda.
echo.
pause
exit /b 2
:failed
echo.
echo Build gagal.
echo.
if "%BUILD_ONLY%"=="1" exit /b 1
pause
exit /b 1