compile & release script feature
This commit is contained in:
+112
-19
@@ -1,30 +1,123 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
set -u
|
||||
cd "$(dirname "$0")"
|
||||
GRADLE_VERSION=9.5.1
|
||||
|
||||
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"
|
||||
MOD_VERSION="$(sed -n 's/^mod_version=//p' gradle.properties | head -n1)"
|
||||
MINECRAFT_VERSION="$(sed -n 's/^minecraft_version=//p' gradle.properties | head -n1)"
|
||||
MOD_VERSION="${MOD_VERSION:-unknown}"
|
||||
|
||||
[[ -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 "============================================"
|
||||
command -v java >/dev/null || { 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; }
|
||||
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..."
|
||||
curl -L --fail --progress-bar "https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip" -o "$ZIP"
|
||||
unzip -q -o "$ZIP" -d "$LOCAL_GRADLE_DIR"
|
||||
rm -f "$ZIP"
|
||||
|
||||
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
|
||||
"$GRADLE_BIN" clean build --no-daemon
|
||||
echo "[OK] BUILD SUCCESS"
|
||||
find build/libs -maxdepth 1 -type f -name 'lrarmor-*.jar' -print
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user