- build.sh scripts prioritize ~/.gradle/gradle-8.5/bin/gradle - New build_all.sh orchestrates generic-client and sageclient builds - sageclient build includes JDK 17/21 auto-detection - Avoids network timeouts from services.gradle.org
101 lines
2.8 KiB
Bash
Executable File
101 lines
2.8 KiB
Bash
Executable File
#!/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 <<EOF
|
|
WARNING: Java $JAVA_VERSION detected. This project requires JDK 17-21.
|
|
If build fails, install JDK 21 and set JAVA_HOME.
|
|
EOF
|
|
fi
|
|
fi
|
|
|
|
cd "$PROJECT_DIR"
|
|
|
|
MODE="${1:-build}"
|
|
|
|
case "$MODE" in
|
|
run)
|
|
echo "=== Building and running generic-client ==="
|
|
"$GRADLE_CMD" run --no-daemon --no-configuration-cache
|
|
;;
|
|
build)
|
|
echo "=== Building generic-client ==="
|
|
"$GRADLE_CMD" compileKotlinJvm --no-daemon --no-configuration-cache
|
|
echo "Build OK. Use 'run' to launch, or 'package' for distributable."
|
|
;;
|
|
package)
|
|
echo "=== Packaging generic-client ==="
|
|
"$GRADLE_CMD" createDistributable --no-daemon --no-configuration-cache 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
|