Files
Darto KLoning 4699c90e80
build / build (17, ubuntu-22.04) (push) Failing after 1h12m2s
build / build (17, windows-2022) (push) Canceled after 0s
port to 26.2
2026-10-01 07:48:04 +07:00

243 lines
7.4 KiB
Batchfile

@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