Files

124 lines
4.9 KiB
Bash

#!/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