#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$SCRIPT_DIR" ROOT_DIR="$(cd -- "$SCRIPT_DIR/../.." && pwd)" # ─── Gradle resolution ─── # 1. Local Gradle at ~/.gradle/gradle-8.5 # 2. Root project gradlew (with local dist cache) # 3. System gradle command find_gradle() { local candidate # Priority 1: User-provided local Gradle if [ -x "$HOME/.gradle/gradle-8.5/bin/gradle" ]; then echo "$HOME/.gradle/gradle-8.5/bin/gradle" return 0 fi # Priority 2: Root project gradlew (may use cached distribution) if [ -x "$ROOT_DIR/gradlew" ]; then echo "$ROOT_DIR/gradlew" return 0 fi # Priority 3: System gradle if command -v gradle >/dev/null 2>&1; then echo "gradle" return 0 fi return 1 } if ! GRADLE_CMD="$(find_gradle)"; then cat >&2 <<'EOF' ERROR: Gradle not found. Options: 1. Place Gradle at ~/.gradle/gradle-8.5/ 2. Ensure the project root has gradlew 3. Install Gradle: brew install gradle EOF exit 1 fi echo "Using Gradle: $GRADLE_CMD" # ─── JDK check ─── java_major_version() { local java_bin="$1" local version_line version_line="$($java_bin -version 2>&1 | head -n 1)" printf '%s\n' "$version_line" | sed -E 's/.*version "([0-9]+)(\.[0-9]+)?.*/\1/' } if command -v java >/dev/null 2>&1; then JAVA_VERSION="$(java_major_version java)" if [[ "$JAVA_VERSION" =~ ^[0-9]+$ ]] && { [ "$JAVA_VERSION" -lt 17 ] || [ "$JAVA_VERSION" -gt 21 ]; }; then cat >&2 </dev/null || \ "$GRADLE_CMD" packageDmg --no-daemon --no-configuration-cache 2>/dev/null || \ echo "Note: Packaging requires the target OS native environment" ;; clean) echo "=== Cleaning ===" "$GRADLE_CMD" clean --no-daemon --no-configuration-cache ;; *) echo "Usage: $0 {run|build|package|clean}" echo " run - Build and run the app (default: build)" echo " build - Compile only (default)" echo " package - Create distributable app bundle" echo " clean - Clean build artifacts" exit 1 ;; esac