@echo off setlocal EnableExtensions EnableDelayedExpansion REM ============================================================ REM You Were Slain - Gitea Release Script REM Windows REM ============================================================ cd /d "%~dp0" if not defined GITEA_BASE_URL set "GITEA_BASE_URL=https://git.darto.id" if not defined GITEA_OWNER set "GITEA_OWNER=dartokloning" if not defined GITEA_REPO set "GITEA_REPO=you-were-slain" set "MOD_VERSION=" set "MINECRAFT_VERSION=" 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 not defined MOD_VERSION ( echo [ERROR] mod_version tidak ditemukan di gradle.properties. exit /b 1 ) set "TAG=v%MOD_VERSION%" set "JAR_NAME=you-were-slain-%MOD_VERSION%.jar" set "JAR_PATH=%CD%\build\libs\%JAR_NAME%" echo ============================================ echo You Were Slain - Release %TAG% echo Minecraft: %MINECRAFT_VERSION% echo Gitea: %GITEA_BASE_URL%/%GITEA_OWNER%/%GITEA_REPO% echo ============================================ echo. echo [INFO] Menjalankan build terlebih dahulu... call "%CD%\compile.bat" --build-only if errorlevel 1 ( echo [ERROR] Release dibatalkan karena build gagal. exit /b 1 ) if not exist "%JAR_PATH%" ( echo [ERROR] JAR release tidak ditemukan: echo %JAR_PATH% exit /b 1 ) where git.exe >nul 2>&1 if errorlevel 1 ( echo [ERROR] Git tidak ditemukan di PATH. exit /b 1 ) where curl.exe >nul 2>&1 if errorlevel 1 ( echo [ERROR] curl.exe tidak ditemukan di PATH. exit /b 1 ) git rev-parse --is-inside-work-tree >nul 2>&1 if errorlevel 1 ( echo [ERROR] Folder ini bukan Git repository. exit /b 1 ) 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. exit /b 1 ) git remote get-url origin >nul 2>&1 if errorlevel 1 ( echo [ERROR] Remote 'origin' belum dikonfigurasi. exit /b 1 ) echo. echo ============================================ echo Git Release Preparation echo ============================================ set "HAS_CHANGES=" for /f "delims=" %%G in ('git status --porcelain') do set "HAS_CHANGES=1" if defined HAS_CHANGES ( echo. echo Perubahan source belum di-commit: git status --short echo. choice /C YN /N /M "Commit dan push perubahan sebelum membuat release? [Y/N]: " if errorlevel 2 ( echo [WARN] Release dibatalkan. Source harus bersih agar tag sesuai dengan build. exit /b 0 ) set "COMMIT_MESSAGE=" set /p "COMMIT_MESSAGE=Commit message [Prepare You Were Slain %TAG% release]: " if not defined COMMIT_MESSAGE set "COMMIT_MESSAGE=Prepare You Were Slain %TAG% release" git add -A if errorlevel 1 exit /b 2 git commit -m "!COMMIT_MESSAGE!" if errorlevel 1 exit /b 2 ) echo [INFO] Push branch !CURRENT_BRANCH! ke origin... git push origin "!CURRENT_BRANCH!" if errorlevel 1 ( echo [ERROR] Push branch gagal. Release dibatalkan. exit /b 2 ) set "HEAD_COMMIT=" for /f "delims=" %%H in ('git rev-parse HEAD') do set "HEAD_COMMIT=%%H" set "TAG_COMMIT=" for /f "delims=" %%T in ('git rev-list -n 1 "%TAG%" 2^>nul') do set "TAG_COMMIT=%%T" if defined TAG_COMMIT ( if /I not "!TAG_COMMIT!"=="!HEAD_COMMIT!" ( echo [ERROR] Tag %TAG% sudah ada tetapi menunjuk commit lain. echo Tag : !TAG_COMMIT! echo HEAD: !HEAD_COMMIT! echo Naikkan mod_version sebelum membuat release baru. exit /b 2 ) echo [INFO] Tag lokal %TAG% sudah ada pada commit saat ini. ) else ( echo [INFO] Membuat tag %TAG%... git tag -a "%TAG%" -m "You Were Slain %TAG%" if errorlevel 1 exit /b 2 ) git ls-remote --exit-code --tags origin "refs/tags/%TAG%" >nul 2>&1 if errorlevel 1 ( echo [INFO] Push tag %TAG% ke origin... git push origin "%TAG%" if errorlevel 1 exit /b 2 ) else ( echo [INFO] Tag %TAG% sudah ada di origin. ) echo. echo ============================================ echo Gitea Release echo ============================================ choice /C YN /N /M "Buat Release %TAG% dan upload %JAR_NAME%? [Y/N]: " if errorlevel 2 ( echo [INFO] Pembuatan Gitea Release dilewati. Tag %TAG% tetap sudah tersimpan. exit /b 0 ) if not defined GITEA_TOKEN ( echo. set /p "GITEA_TOKEN=Gitea Personal Access Token: " ) if not defined GITEA_TOKEN ( echo [ERROR] Token Gitea kosong. exit /b 2 ) set "API_BASE=%GITEA_BASE_URL%/api/v1/repos/%GITEA_OWNER%/%GITEA_REPO%" set "RELEASE_JSON=%TEMP%\youwereslain-release-%RANDOM%.json" set "CREATE_JSON=%TEMP%\youwereslain-create-%RANDOM%.json" set "ASSET_JSON=%TEMP%\youwereslain-asset-%RANDOM%.json" set "HTTP_CODE=" for /f "delims=" %%H in ('curl.exe -sS -o "!RELEASE_JSON!" -w "%%{http_code}" -H "Authorization: token !GITEA_TOKEN!" "!API_BASE!/releases/tags/%TAG%"') do set "HTTP_CODE=%%H" if "!HTTP_CODE!"=="200" ( echo [INFO] Release %TAG% sudah ada. Akan menggunakan release tersebut. ) else if "!HTTP_CODE!"=="404" ( >"!CREATE_JSON!" echo { >>"!CREATE_JSON!" echo "tag_name": "%TAG%", >>"!CREATE_JSON!" echo "target_commitish": "!CURRENT_BRANCH!", >>"!CREATE_JSON!" echo "name": "You Were Slain %TAG%", >>"!CREATE_JSON!" echo "body": "You Were Slain %TAG% untuk Minecraft %MINECRAFT_VERSION%.", >>"!CREATE_JSON!" echo "draft": false, >>"!CREATE_JSON!" echo "prerelease": false >>"!CREATE_JSON!" echo } echo [INFO] Membuat Release %TAG% di Gitea... set "HTTP_CODE=" for /f "delims=" %%H in ('curl.exe -sS -o "!RELEASE_JSON!" -w "%%{http_code}" -X POST -H "Authorization: token !GITEA_TOKEN!" -H "Content-Type: application/json" --data-binary "@!CREATE_JSON!" "!API_BASE!/releases"') do set "HTTP_CODE=%%H" if not "!HTTP_CODE!"=="201" ( echo [ERROR] Gitea gagal membuat release. HTTP !HTTP_CODE! type "!RELEASE_JSON!" del /q "!RELEASE_JSON!" "!CREATE_JSON!" "!ASSET_JSON!" >nul 2>&1 exit /b 2 ) ) else ( echo [ERROR] Gagal memeriksa release. HTTP !HTTP_CODE! type "!RELEASE_JSON!" del /q "!RELEASE_JSON!" "!CREATE_JSON!" "!ASSET_JSON!" >nul 2>&1 exit /b 2 ) set "RELEASE_ID=" for /f "delims=" %%I in ('powershell.exe -NoProfile -Command "$r=Get-Content -Raw -LiteralPath '!RELEASE_JSON!' ^| ConvertFrom-Json; $r.id"') do set "RELEASE_ID=%%I" if not defined RELEASE_ID ( echo [ERROR] Tidak dapat membaca release ID dari response Gitea. type "!RELEASE_JSON!" exit /b 2 ) echo [INFO] Release ID: !RELEASE_ID! echo [INFO] Mengupload %JAR_NAME%... set "ASSET_CODE=" for /f "delims=" %%H in ('curl.exe -sS -o "!ASSET_JSON!" -w "%%{http_code}" -X POST -H "Authorization: token !GITEA_TOKEN!" -F "attachment=@%JAR_PATH%" "!API_BASE!/releases/!RELEASE_ID!/assets?name=%JAR_NAME%"') do set "ASSET_CODE=%%H" if "!ASSET_CODE!"=="201" ( echo. echo [SUCCESS] Release %TAG% berhasil dibuat dan JAR berhasil diupload. ) else if "!ASSET_CODE!"=="409" ( echo. echo [WARN] Release sudah ada dan asset %JAR_NAME% tampaknya sudah terupload. ) else ( echo [ERROR] Upload JAR gagal. HTTP !ASSET_CODE! type "!ASSET_JSON!" exit /b 2 ) del /q "!RELEASE_JSON!" "!CREATE_JSON!" "!ASSET_JSON!" >nul 2>&1 echo. echo ============================================ echo RELEASE SUCCESS echo Tag: %TAG% echo Asset: %JAR_NAME% echo ============================================ exit /b 0