124 lines
4.9 KiB
Bash
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
|