#!/usr/bin/env bash set -u cd "$(dirname "$0")" BUILD_ONLY=0 [[ "${1:-}" == "--build-only" ]] && BUILD_ONLY=1 GRADLE_PROPERTIES="$PWD/gradle.properties" GRADLE_VERSION="9.5.1" LOCAL_GRADLE_DIR="$PWD/.gradle-local" GRADLE_HOME="$LOCAL_GRADLE_DIR/gradle-$GRADLE_VERSION" GRADLE_BIN="$GRADLE_HOME/bin/gradle" [[ -f "$GRADLE_PROPERTIES" ]] || { echo "[ERROR] gradle.properties tidak ditemukan."; exit 1; } prop() { sed -n "s/^$1=//p" "$GRADLE_PROPERTIES" | head -n1; } MOD_VERSION="$(prop mod_version)" MINECRAFT_VERSION="$(prop minecraft_version)" ARCHIVES_BASE_NAME="$(prop archives_base_name)" MINECRAFT_VERSION="${MINECRAFT_VERSION:-26.2}" ARCHIVES_BASE_NAME="${ARCHIVES_BASE_NAME:-lrarmor}" [[ -n "$MOD_VERSION" ]] || { echo "[ERROR] mod_version tidak ditemukan atau kosong di gradle.properties."; exit 1; } JAR_PATH="$PWD/build/libs/${ARCHIVES_BASE_NAME}-${MOD_VERSION}.jar" SOURCES_JAR_PATH="$PWD/build/libs/${ARCHIVES_BASE_NAME}-${MOD_VERSION}-sources.jar" echo "============================================" echo " LesRaisinsArmor - Fabric $MINECRAFT_VERSION Build" echo " Mod Version: $MOD_VERSION" echo " Archive: $ARCHIVES_BASE_NAME" echo "============================================" GIT_ONLY=0 if [[ $BUILD_ONLY -eq 0 && -f "$JAR_PATH" ]]; then echo echo "[INFO] JAR untuk v$MOD_VERSION sudah tersedia:" echo " $JAR_PATH" echo read -r -p "[C] Compile ulang / [G] Git saja: " ans if [[ "${ans,,}" == "g" ]]; then GIT_ONLY=1; fi fi if [[ $GIT_ONLY -eq 0 ]]; then command -v java >/dev/null 2>&1 || { echo "[ERROR] Java tidak ditemukan di PATH."; exit 1; } JAVA_VERSION="$(java --version 2>&1 | head -n1 | awk '{print $2}')" JAVA_MAJOR="${JAVA_VERSION%%.*}" [[ "$JAVA_MAJOR" == "25" ]] || { echo "[ERROR] Java 25 diperlukan. Terdeteksi: $JAVA_VERSION"; exit 1; } echo "[OK] Java 25 terdeteksi." if [[ ! -x "$GRADLE_BIN" ]]; then mkdir -p "$LOCAL_GRADLE_DIR" ZIP="$LOCAL_GRADLE_DIR/gradle-$GRADLE_VERSION-bin.zip" echo "[INFO] Mengunduh Gradle $GRADLE_VERSION..." command -v curl >/dev/null 2>&1 || { echo "[ERROR] curl tidak ditemukan."; exit 1; } command -v unzip >/dev/null 2>&1 || { echo "[ERROR] unzip tidak ditemukan."; exit 1; } curl -L --fail --progress-bar "https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip" -o "$ZIP" || exit 1 unzip -q -o "$ZIP" -d "$LOCAL_GRADLE_DIR" || exit 1 rm -f "$ZIP" fi echo "[INFO] Menjalankan clean build LesRaisinsArmor v$MOD_VERSION..." "$GRADLE_BIN" clean build --no-daemon || { echo "[ERROR] BUILD FAILED"; exit 1; } echo echo "============================================" echo " BUILD SUCCESS" echo "============================================" [[ -f "$JAR_PATH" ]] && echo "JAR: $JAR_PATH" || echo "[WARN] JAR utama tidak ditemukan: $JAR_PATH" [[ -f "$SOURCES_JAR_PATH" ]] && echo "SOURCES JAR: $SOURCES_JAR_PATH" [[ $BUILD_ONLY -eq 1 ]] && exit 0 echo read -r -p "Commit dan push perubahan ke Git? [Y/N]: " ans [[ "${ans,,}" == "y" ]] || { echo "[INFO] Git commit/push dilewati."; exit 0; } fi command -v git >/dev/null 2>&1 || { echo "[ERROR] Git tidak ditemukan di PATH."; exit 2; } git rev-parse --is-inside-work-tree >/dev/null 2>&1 || { echo "[ERROR] Folder ini bukan Git repository."; exit 2; } CURRENT_BRANCH="$(git branch --show-current)" [[ -n "$CURRENT_BRANCH" ]] || { echo "[ERROR] Tidak dapat menentukan branch Git aktif."; exit 2; } ORIGIN_URL="$(git remote get-url origin 2>/dev/null)" || { echo "[ERROR] Remote origin belum dikonfigurasi."; exit 2; } echo echo "============================================" echo " Git Integration" echo "============================================" echo "[INFO] Branch : $CURRENT_BRANCH" echo "[INFO] Origin : $ORIGIN_URL" if [[ -n "$(git status --porcelain)" ]]; then git status --short SUGGESTED="Update LesRaisinsArmor v$MOD_VERSION" if git status --porcelain | grep -qi 'src/'; then SUGGESTED="Port LesRaisinsArmor v$MOD_VERSION" elif git status --porcelain | grep -Eqi 'compile\.(bat|sh)|release\.bat|run-(client|server)\.(bat|sh)'; then SUGGESTED="Update build scripts for v$MOD_VERSION" elif git status --porcelain | grep -Eqi 'README|LICENSE|PORT-CHANGELOG'; then SUGGESTED="Update documentation for v$MOD_VERSION" fi read -r -p "Commit message [$SUGGESTED]: " COMMIT_MESSAGE COMMIT_MESSAGE="${COMMIT_MESSAGE:-$SUGGESTED}" git add -A || exit 2 git commit -m "$COMMIT_MESSAGE" || exit 2 else echo "[INFO] Tidak ada perubahan source yang perlu di-commit." fi round=1 while true; do for attempt in 1 2 3; do echo "[INFO] Push attempt $attempt/3 (round $round) ke origin/$CURRENT_BRANCH..." if git push -u origin "$CURRENT_BRANCH"; then echo "[SUCCESS] Push ke Git berhasil." exit 0 fi echo "[WARN] Push attempt $attempt/3 gagal." [[ $attempt -lt 3 ]] && sleep 2 done read -r -p "Coba push 3x lagi? [Y/N]: " ans [[ "${ans,,}" == "y" ]] || exit 2 round=$((round + 1)) done