97 lines
3.3 KiB
Bash
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 $?
|