#!/usr/bin/env bash # ============================================================ # Lobby Systems - Fabric Build Script # Linux / macOS # # Features: # - Read version from gradle.properties # - Check Java 25 # - Download Gradle 9.5.1 automatically if needed # - Clean build # - Ask for Git commit + push ONLY after BUILD SUCCESS # ============================================================ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" || exit 1 GRADLE_PROPERTIES="$SCRIPT_DIR/gradle.properties" LOCAL_GRADLE_DIR="$SCRIPT_DIR/.gradle-local" GRADLE_VERSION="9.5.1" GRADLE_HOME="$LOCAL_GRADLE_DIR/gradle-$GRADLE_VERSION" GRADLE_BIN="$GRADLE_HOME/bin/gradle" # ============================================================ # Helper functions # ============================================================ info() { echo "[INFO] $1" } ok() { echo "[OK] $1" } warn() { echo "[WARN] $1" } error() { echo "[ERROR] $1" } separator() { echo "============================================" } read_property() { local key="$1" grep -E "^${key}=" "$GRADLE_PROPERTIES" \ | head -n 1 \ | cut -d'=' -f2- \ | tr -d '\r' } # ============================================================ # Read gradle.properties # ============================================================ if [[ ! -f "$GRADLE_PROPERTIES" ]]; then error "gradle.properties tidak ditemukan." exit 1 fi MOD_VERSION="$(read_property "mod_version")" MINECRAFT_VERSION="$(read_property "minecraft_version")" MAVEN_GROUP="$(read_property "maven_group")" if [[ -z "$MOD_VERSION" ]]; then MOD_VERSION="unknown" fi if [[ -z "$MINECRAFT_VERSION" ]]; then MINECRAFT_VERSION="26.2" fi if [[ -z "$MAVEN_GROUP" ]]; then MAVEN_GROUP="id.dartokloning" fi separator echo " Lobby Systems - Fabric $MINECRAFT_VERSION Build" echo " Version: $MOD_VERSION" echo " Namespace: id.dartokloning.lobbysystems" echo " Mod ID: dartokloning" separator # ============================================================ # Check Java # ============================================================ if ! command -v java >/dev/null 2>&1; then error "Java tidak ditemukan di PATH." echo "Install JDK 25 lalu jalankan script lagi." exit 1 fi JAVA_PATH="$(command -v java)" info "Java executable: $JAVA_PATH" JAVA_VERSION_OUTPUT="$(java --version 2>&1 | head -n 1)" JAVA_VERSION="$(echo "$JAVA_VERSION_OUTPUT" | awk '{print $2}')" JAVA_MAJOR="$(echo "$JAVA_VERSION" | cut -d'.' -f1)" if [[ "$JAVA_MAJOR" != "25" ]]; then error "Java 25 diperlukan." echo "[INFO] Java yang terdeteksi:" echo " $JAVA_VERSION_OUTPUT" exit 1 fi ok "Java 25 terdeteksi." # ============================================================ # Prepare Gradle # ============================================================ if [[ ! -x "$GRADLE_BIN" ]]; then info "Gradle $GRADLE_VERSION belum tersedia." info "Mengunduh distribusi resmi..." mkdir -p "$LOCAL_GRADLE_DIR" GRADLE_ZIP="$LOCAL_GRADLE_DIR/gradle-$GRADLE_VERSION-bin.zip" GRADLE_URL="https://services.gradle.org/distributions/gradle-$GRADLE_VERSION-bin.zip" if command -v curl >/dev/null 2>&1; then curl \ -L \ --fail \ --progress-bar \ "$GRADLE_URL" \ -o "$GRADLE_ZIP" DOWNLOAD_RESULT=$? elif command -v wget >/dev/null 2>&1; then wget \ "$GRADLE_URL" \ -O "$GRADLE_ZIP" DOWNLOAD_RESULT=$? else error "curl atau wget tidak ditemukan." exit 1 fi if [[ $DOWNLOAD_RESULT -ne 0 ]]; then error "Gagal mengunduh Gradle $GRADLE_VERSION." exit 1 fi info "Mengekstrak Gradle $GRADLE_VERSION..." if ! command -v unzip >/dev/null 2>&1; then error "Command 'unzip' tidak ditemukan." exit 1 fi unzip \ -q \ -o \ "$GRADLE_ZIP" \ -d "$LOCAL_GRADLE_DIR" EXTRACT_RESULT=$? if [[ $EXTRACT_RESULT -ne 0 ]]; then error "Gagal mengekstrak Gradle." exit 1 fi rm -f "$GRADLE_ZIP" fi if [[ ! -x "$GRADLE_BIN" ]]; then error "Gradle executable tidak ditemukan:" echo "$GRADLE_BIN" exit 1 fi ok "Gradle $GRADLE_VERSION tersedia." # ============================================================ # Build # ============================================================ info "Menjalankan clean build Lobby Systems v$MOD_VERSION..." echo "$GRADLE_BIN" clean build --no-daemon BUILD_RESULT=$? # ============================================================ # BUILD FAILED # ============================================================ if [[ $BUILD_RESULT -ne 0 ]]; then echo separator echo " BUILD FAILED" separator echo error "Build gagal dengan exit code $BUILD_RESULT." info "Git Integration tidak dijalankan." exit "$BUILD_RESULT" fi # ============================================================ # BUILD SUCCESS # ============================================================ echo separator echo " BUILD SUCCESS" separator JAR_PATH="$SCRIPT_DIR/build/libs/lobby-systems-$MOD_VERSION.jar" if [[ -f "$JAR_PATH" ]]; then echo "JAR:" echo "$JAR_PATH" else warn "Build berhasil, tetapi JAR utama tidak ditemukan pada:" echo "$JAR_PATH" fi # ============================================================ # Ask whether to use Git # ============================================================ echo read -r -p "Commit dan push perubahan ke Git/Gitea? [Y/N]: " GIT_CONFIRM case "$GIT_CONFIRM" in y|Y|yes|YES|Yes) ;; *) echo info "Git commit/push dilewati." echo separator echo " Lobby Systems v$MOD_VERSION selesai." separator exit 0 ;; esac # ============================================================ # Git Integration # ============================================================ echo separator echo " Git Integration" separator # ------------------------------------------------------------ # Check Git # ------------------------------------------------------------ if ! command -v git >/dev/null 2>&1; then error "Git tidak ditemukan di PATH." info "Build tetap berhasil." exit 0 fi # ------------------------------------------------------------ # Check repository # ------------------------------------------------------------ if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then error "Folder ini belum menjadi Git repository." echo echo "Jalankan terlebih dahulu:" echo echo " git init" echo " git branch -M main" echo " git remote add origin " echo exit 0 fi # ------------------------------------------------------------ # Check source changes # ------------------------------------------------------------ info "Memeriksa perubahan Git..." CHANGES="$(git status --porcelain)" if [[ -n "$CHANGES" ]]; then echo echo "Perubahan ditemukan:" echo git status --short echo read -r -p \ "Commit message [Lobby Systems v$MOD_VERSION build]: " \ COMMIT_MESSAGE if [[ -z "$COMMIT_MESSAGE" ]]; then TIMESTAMP="$(date '+%Y-%m-%d %H:%M:%S')" COMMIT_MESSAGE="Lobby Systems v$MOD_VERSION build - $TIMESTAMP" fi # -------------------------------------------------------- # Git Add # -------------------------------------------------------- info "Menambahkan perubahan ke staging..." if ! git add -A; then error "git add gagal." exit 2 fi # -------------------------------------------------------- # Git Commit # -------------------------------------------------------- info "Membuat commit..." if ! git commit -m "$COMMIT_MESSAGE"; then error "git commit gagal." exit 2 fi else info "Tidak ada perubahan source yang perlu di-commit." info "Akan mencoba push commit yang sudah ada." fi # ============================================================ # Determine current branch # ============================================================ CURRENT_BRANCH="$(git branch --show-current)" if [[ -z "$CURRENT_BRANCH" ]]; then error "Tidak dapat menentukan branch Git aktif." exit 2 fi info "Branch aktif: $CURRENT_BRANCH" # ============================================================ # Check origin # ============================================================ if ! git remote get-url origin >/dev/null 2>&1; then error "Remote Git 'origin' belum dikonfigurasi." echo echo "Tambahkan remote Gitea dengan:" echo echo " git remote add origin " echo info "Commit lokal tetap tersimpan." exit 2 fi REMOTE_URL="$(git remote get-url origin)" info "Remote origin: $REMOTE_URL" # ============================================================ # Git Push # ============================================================ info "Push ke origin/$CURRENT_BRANCH..." if ! git push origin "$CURRENT_BRANCH"; then echo error "Git push gagal." info "Commit lokal tetap tersimpan." exit 2 fi # ============================================================ # Complete # ============================================================ echo ok "Push ke Git/Gitea berhasil." echo separator echo " Lobby Systems v$MOD_VERSION selesai." separator exit 0