Files
intellijai/jaigradle
2026-08-06 13:07:31 -04:00

55 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# Gradle wrapper that resolves a JDK via mise before delegating to ./gradlew.
#
# Why this exists: ./gradlew is a shell script that needs a JVM to launch
# itself, so it cannot be fixed by org.gradle.java.home in gradle.properties.
# This project has no JDK on PATH, so agents must go through this script.
#
# ./jaigradle check # run all tests
# ./jaigradle test # unit tests only
#
# The JDK version is pinned in ./mise.toml. It must be 21+: the IntelliJ
# Platform test-framework jars are Java 21 bytecode (class major version 65)
# and throw UnsupportedClassVersionError on 17.
set -euo pipefail
cd "$(dirname "$0")"
source ./gradle-lock.sh
# `--stop` is an explicit recovery operation; it must be able to stop a
# daemon even when a stale lock was left by an interrupted run.
if [[ "${1:-}" != "--stop" ]]; then
jai_gradle_lock_acquire
trap jai_gradle_lock_release EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
fi
status=0
if command -v mise >/dev/null 2>&1; then
mise exec -- ./gradlew "$@" || status=$?
else
# Fallback: mise is not installed. Try an already-set JAVA_HOME, then any
# JDK 21 that Gradle has auto-provisioned.
if [ ! -x "${JAVA_HOME:-}/bin/java" ]; then
for candidate in "$HOME"/.gradle/jdks/*/*/Contents/Home "$HOME"/.gradle/jdks/*/*; do
if [ -x "$candidate/bin/java" ]; then
export JAVA_HOME="$candidate"
break
fi
done
fi
if [ ! -x "${JAVA_HOME:-}/bin/java" ]; then
echo "jaigradle: no JDK found. Install mise (https://mise.jdx.dev) and run 'mise install'," >&2
echo " or set JAVA_HOME to a JDK 21+ installation." >&2
exit 1
fi
./gradlew "$@" || status=$?
fi
jai_gradle_lock_release
trap - EXIT INT TERM
exit "$status"