Files
item-despawn-timer/compiler.sh
T

97 lines
3.3 KiB
Bash

#!/usr/bin/env bash
set -u
cd "$(dirname "$0")" || exit 1
BUILD_ONLY=0
[[ "${1:-}" == "--build-only" ]] && BUILD_ONLY=1
prop() { sed -n "s/^$1=//p" gradle.properties | tail -n 1 | tr -d '\r'; }
[[ -f gradle.properties ]] || { echo "[ERROR] gradle.properties tidak ditemukan."; exit 1; }
MOD_VERSION="$(prop mod_version)"
MC_VERSION="$(prop minecraft_version)"
ARCHIVES_BASE_NAME="$(prop archives_base_name)"
ARCHIVES_BASE_NAME="${ARCHIVES_BASE_NAME:-item-despawn-timer}"
[[ -n "$MOD_VERSION" && -n "$MC_VERSION" ]] || { echo "[ERROR] Versi tidak lengkap di gradle.properties."; exit 1; }
PROJECT_VERSION="${MOD_VERSION}+mc${MC_VERSION}"
JAR_PATH="$PWD/build/libs/${ARCHIVES_BASE_NAME}-${PROJECT_VERSION}.jar"
echo "============================================"
echo " Item Despawn Timer - Fabric $MC_VERSION"
echo " Version: $PROJECT_VERSION"
echo "============================================"
git_integration() {
command -v git >/dev/null || { echo "[ERROR] Git tidak ditemukan."; return 2; }
git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "[ERROR] Bukan Git repository."; return 2; }
if [[ -n "$(git status --porcelain)" ]]; then
git status --short
default="Update Item Despawn Timer v$PROJECT_VERSION"
read -r -p "Commit message [$default]: " msg
msg="${msg:-$default}"
git add -A || return 2
git commit -m "$msg" || return 2
else
echo "[INFO] Tidak ada perubahan source untuk di-commit."
fi
branch="$(git branch --show-current)"
[[ -n "$branch" ]] || { echo "[ERROR] Branch aktif tidak ditemukan."; return 2; }
git remote get-url origin >/dev/null 2>&1 || { echo "[ERROR] Remote origin belum dikonfigurasi."; return 2; }
local round=1
while true; do
local attempt=1
while (( attempt <= 3 )); do
echo "[INFO] Push attempt $attempt/3 (round $round)..."
git push origin "$branch" && return 0
((attempt++))
(( attempt <= 3 )) && sleep 2
done
read -r -p "Push gagal 3x. Coba 3x lagi? [y/N]: " again
[[ "$again" =~ ^[Yy]$ ]] || return 2
((round++))
done
}
if (( BUILD_ONLY == 0 )) && [[ -f "$JAR_PATH" ]]; then
echo
echo "[INFO] Build untuk versi $PROJECT_VERSION sudah tersedia:"
echo " $JAR_PATH"
while true; do
read -r -p "[C] Compile ulang / [G] Git saja / [Q] Keluar: " action
case "$action" in
C|c) break ;;
G|g) git_integration; exit $? ;;
Q|q) exit 0 ;;
esac
done
fi
command -v java >/dev/null || { echo "[ERROR] Java tidak ditemukan."; exit 1; }
JAVA_MAJOR="$(java --version 2>&1 | head -n1 | sed -E 's/.* ([0-9]+)(\..*)? .*/\1/')"
[[ "$JAVA_MAJOR" =~ ^[0-9]+$ ]] && (( JAVA_MAJOR >= 25 )) || { echo "[ERROR] Java 25+ diperlukan."; exit 1; }
chmod +x gradlew 2>/dev/null || true
./gradlew clean build || { echo "[ERROR] Build gagal."; exit 1; }
[[ -f "$JAR_PATH" ]] || {
echo "[ERROR] Build selesai tetapi JAR yang diharapkan tidak ditemukan:"
echo " $JAR_PATH"
ls -1 build/libs/*.jar 2>/dev/null || true
exit 1
}
echo
echo "BUILD SUCCESS"
echo "JAR: $JAR_PATH"
(( BUILD_ONLY == 1 )) && exit 0
read -r -p "Commit dan push perubahan ke Git? [y/N]: " push
[[ "$push" =~ ^[Yy]$ ]] && git_integration
exit $?