diff --git a/test/build_all.sh b/test/build_all.sh new file mode 100755 index 0000000..0be487c --- /dev/null +++ b/test/build_all.sh @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +# ────────────────────────────────────────────────────────────── +# bricks-mp — Build all test clients (generic-client, sageclient) +# +# Usage: +# ./build_all.sh # Build all +# ./build_all.sh generic # Build generic-client only +# ./build_all.sh sage # Build sageclient only +# ./build_all.sh run # Run generic-client +# ./build_all.sh clean # Clean all +# ────────────────────────────────────────────────────────────── +set -euo pipefail + +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" + +# ─── Find Gradle ─── +find_gradle() { + if [ -x "$HOME/.gradle/gradle-8.5/bin/gradle" ]; then + echo "$HOME/.gradle/gradle-8.5/bin/gradle" + return 0 + fi + if [ -x "$SCRIPT_DIR/../gradlew" ]; then + echo "$SCRIPT_DIR/../gradlew" + return 0 + fi + if command -v gradle >/dev/null 2>&1; then + echo "gradle" + return 0 + fi + return 1 +} + +if ! GRADLE_CMD="$(find_gradle)"; then + echo "ERROR: Gradle not found. Place at ~/.gradle/gradle-8.5 or install system gradle." >&2 + exit 1 +fi + +echo "Using Gradle: $GRADLE_CMD" + +MODE="${1:-build}" + +gradle_build() { + local client="$1" + local dir="$SCRIPT_DIR/$client" + if [ ! -d "$dir" ]; then + echo "SKIP: $client (directory not found)" + return 0 + fi + echo "" + echo "══════════════════════════════════════════════" + echo " Building: $client" + echo "══════════════════════════════════════════════" + cd "$dir" + + case "$MODE" in + build|*) + "$GRADLE_CMD" compileKotlinJvm --no-daemon --no-configuration-cache + ;; + run) + "$GRADLE_CMD" run --no-daemon --no-configuration-cache + ;; + clean) + "$GRADLE_CMD" clean --no-daemon --no-configuration-cache + ;; + package) + "$GRADLE_CMD" createDistributable --no-daemon --no-configuration-cache + ;; + esac + echo "OK: $client" +} + +case "$MODE" in + generic) + gradle_build generic-client + ;; + sage) + gradle_build sageclient + ;; + clean) + gradle_build generic-client + gradle_build sageclient + ;; + run) + gradle_build generic-client + ;; + build|*) + gradle_build generic-client + gradle_build sageclient + echo "" + echo "══════════════════════════════════════════════" + echo " All builds completed" + echo "══════════════════════════════════════════════" + ;; +esac diff --git a/test/generic-client/build.sh b/test/generic-client/build.sh index 3ef63f1..43f253a 100755 --- a/test/generic-client/build.sh +++ b/test/generic-client/build.sh @@ -1,36 +1,99 @@ #!/usr/bin/env bash set -euo pipefail -cd "$(dirname "$0")" +SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$SCRIPT_DIR" +ROOT_DIR="$(cd -- "$SCRIPT_DIR/../.." && pwd)" -MODE="${1:-run}" +# ─── 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 || \ - ./gradlew packageDeb --no-daemon 2>/dev/null || \ - ./gradlew packageMsi --no-daemon 2>/dev/null || \ - echo "Note: Packaging requires the target OS (macOS/Windows/Linux)" + "$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 ===" - ./gradlew clean --no-daemon + "$GRADLE_CMD" clean --no-daemon --no-configuration-cache ;; *) echo "Usage: $0 {run|build|package|clean}" - echo " run - Build and run the app (default)" - echo " build - Create distributable app bundle" - echo " package - Create OS-specific installer (dmg/deb/msi)" + 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 ;; diff --git a/test/sageclient/build.sh b/test/sageclient/build.sh index 99583cd..3b3e438 100755 --- a/test/sageclient/build.sh +++ b/test/sageclient/build.sh @@ -5,85 +5,86 @@ 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/' + 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 ] + 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 + 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" + if [ -n "${JAVA_HOME:-}" ] && [ -x "$JAVA_HOME/bin/java" ] && is_supported_java "$JAVA_HOME/bin/java"; then 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 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 + 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 -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 + 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 <&2 </dev/null 2>&1; then - GRADLE_CMD=(gradle) -else - cat >&2 <<'EOF' -ERROR: Neither root gradlew nor system gradle was found. -Run from a checkout that contains the Gradle wrapper, or install Gradle. +# ─── 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 + exit 1 fi +echo "Using Gradle: $GRADLE_CMD" + cd "$PROJECT_DIR" -"${GRADLE_CMD[@]}" --no-configuration-cache build "$@" +"$GRADLE_CMD" --no-configuration-cache build "$@"