- 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
143 lines
4.1 KiB
Bash
Executable File
143 lines
4.1 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)"
|
|
|
|
# ─── JDK resolution ───
|
|
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/'
|
|
}
|
|
|
|
is_supported_java() {
|
|
local java_bin="$1"
|
|
local major
|
|
major="$(java_major_version "$java_bin")"
|
|
[[ "$major" =~ ^[0-9]+$ ]] && [ "$major" -ge 17 ] && [ "$major" -le 21 ]
|
|
}
|
|
|
|
try_set_java_home() {
|
|
local candidate
|
|
|
|
if [ -n "${JAVA_HOME:-}" ] && [ -x "$JAVA_HOME/bin/java" ] && is_supported_java "$JAVA_HOME/bin/java"; then
|
|
return 0
|
|
fi
|
|
|
|
if command -v /usr/libexec/java_home >/dev/null 2>&1; then
|
|
for candidate in 21 17; do
|
|
if JAVA_HOME_CANDIDATE="$(/usr/libexec/java_home -v "$candidate" 2>/dev/null)" \
|
|
&& [ -x "$JAVA_HOME_CANDIDATE/bin/java" ] \
|
|
&& is_supported_java "$JAVA_HOME_CANDIDATE/bin/java"; then
|
|
export JAVA_HOME="$JAVA_HOME_CANDIDATE"
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
echo "Using JAVA_HOME=$JAVA_HOME"
|
|
return 0
|
|
fi
|
|
done
|
|
fi
|
|
|
|
for candidate in \
|
|
/Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home \
|
|
/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home \
|
|
/opt/homebrew/opt/openjdk@21/libexec/openjdk.jdk/Contents/Home \
|
|
/opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home \
|
|
/usr/lib/jvm/java-21-openjdk \
|
|
/usr/lib/jvm/java-17-openjdk \
|
|
/usr/lib/jvm/java-21-openjdk-amd64 \
|
|
/usr/lib/jvm/java-17-openjdk-amd64; do
|
|
if [ -x "$candidate/bin/java" ] && is_supported_java "$candidate/bin/java"; then
|
|
export JAVA_HOME="$candidate"
|
|
export PATH="$JAVA_HOME/bin:$PATH"
|
|
echo "Using JAVA_HOME=$JAVA_HOME"
|
|
return 0
|
|
fi
|
|
done
|
|
|
|
return 1
|
|
}
|
|
|
|
if ! try_set_java_home; then
|
|
if ! command -v java >/dev/null 2>&1; then
|
|
cat >&2 <<'EOF'
|
|
ERROR: java was not found in PATH.
|
|
Please install JDK 17 or JDK 21, then rerun this script.
|
|
EOF
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if ! command -v java >/dev/null 2>&1; then
|
|
cat >&2 <<'EOF'
|
|
ERROR: java was not found in PATH.
|
|
Please install JDK 17 or JDK 21, then rerun this script.
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
JAVA_VERSION_OUTPUT="$(java -version 2>&1 | head -n 1)"
|
|
JAVA_VERSION="$(java_major_version java)"
|
|
if ! [[ "$JAVA_VERSION" =~ ^[0-9]+$ ]]; then
|
|
echo "ERROR: Unable to parse Java version from: $JAVA_VERSION_OUTPUT" >&2
|
|
exit 1
|
|
elif [ "$JAVA_VERSION" -lt 17 ] || [ "$JAVA_VERSION" -gt 21 ]; then
|
|
cat >&2 <<EOF
|
|
ERROR: This project currently requires JDK 17 or JDK 21.
|
|
Found: $JAVA_VERSION_OUTPUT
|
|
|
|
Kotlin 2.1.0 / this Gradle setup fails with newer Java versions such as 26.0.1.
|
|
Install a supported JDK and rerun, for example on macOS:
|
|
brew install --cask temurin@21
|
|
export JAVA_HOME=\$(/usr/libexec/java_home -v 21)
|
|
|
|
If JDK 17/21 is already installed, set JAVA_HOME before running build.sh.
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
# ─── Gradle resolution ───
|
|
# 1. Local Gradle at ~/.gradle/gradle-8.5
|
|
# 2. Root project gradlew
|
|
# 3. System gradle command
|
|
find_gradle() {
|
|
# 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
|
|
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: Neither local Gradle, root gradlew, nor system gradle was found.
|
|
|
|
Options:
|
|
1. Place Gradle 8.5 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"
|
|
|
|
cd "$PROJECT_DIR"
|
|
"$GRADLE_CMD" --no-configuration-cache build "$@"
|