From 81555a21e05503977d678fe692c6aae3fc876bfd Mon Sep 17 00:00:00 2001 From: Eric Wout van der Steen <92432523+ericwout-overheid@users.noreply.github.com> Date: Tue, 26 May 2026 09:03:14 +0000 Subject: [PATCH 1/2] fix(sandbox): fail-fast op SDKman- en JAVA_HOME-fouten in Maven run.sh Twee aanpassingen aan de JVM-detectie in claude-sandbox/host-agents/maven/run.sh die werden afgesplitst uit de PR #38-review (out-of-scope daar): 1. SDKman-init: exit-status expliciet capturen. Eerder werd `set +euo pipefail` actief gelaten over de hele `source ... || echo`-regel, waardoor de meeste fouten binnen sdkman-init.sh stil verdwenen en de `|| echo`-fallback onbereikbaar was voor partial-init-scenario's. Nu vangen we $? netjes op en loggen de exit-code als er iets fout ging. 2. Ontbrekende JAVA_HOME na SDKman-pad: van waarschuwing naar harde exit 1. Eerder ging het script vrolijk door zonder JVM en kreeg de gebruiker pas verderop in Maven of de agent een onbegrijpelijke fout. Consistent met het arg-required-beleid uit PR #38: een ontbrekende randvoorwaarde melden we hier, niet pas in een vendored tool. Co-Authored-By: Claude Opus 4.7 (1M context) --- claude-sandbox/host-agents/maven/run.sh | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/claude-sandbox/host-agents/maven/run.sh b/claude-sandbox/host-agents/maven/run.sh index e39e8ca..6fb4539 100755 --- a/claude-sandbox/host-agents/maven/run.sh +++ b/claude-sandbox/host-agents/maven/run.sh @@ -63,18 +63,29 @@ echo "→ deps installeren/controleren…" # init hier expliciet zodat Maven (of ./mvnw) een JVM vindt zonder dat je vanuit # een SDKman-shell hoeft te starten. Bestaande JAVA_HOME respecteren we. if [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]]; then - # SDKman-init draait in déze shell; strict-mode tijdelijk uit zodat een - # non-zero return of unset var in het vendored script de launcher niet - # afbreekt met een onbegrijpelijke fout in SDKman-internals. + # SDKman-init draait in déze shell; strict-mode tijdelijk uit omdat de + # vendored init unset-vars en non-zero returns gebruikt voor normaal + # gedrag. Exit-status capturen we expliciet zodat een echte fout (kapotte + # install, ontbrekend candidate-symlink) niet stil verdwijnt onder + # `set +e`. set +euo pipefail # shellcheck disable=SC1091 - source "$HOME/.sdkman/bin/sdkman-init.sh" || \ - echo "⚠️ SDKman-init faalde; ga verder zonder." >&2 + source "$HOME/.sdkman/bin/sdkman-init.sh" + SDKMAN_RC=$? set -euo pipefail + if (( SDKMAN_RC != 0 )); then + echo "⚠️ SDKman-init exit $SDKMAN_RC — JAVA_HOME wordt niet via SDKman" \ + "gezet; controleer ~/.sdkman of zet JAVA_HOME handmatig." >&2 + fi fi +# Zonder JVM faalt Maven straks alsnog, met een onbegrijpelijke foutmelding +# diep in de agent. Liever hier hard stoppen met een duidelijke instructie, +# net als bij de ontbrekende project-dir hierboven. if [[ -z "${JAVA_HOME:-}" ]]; then - echo "⚠️ JAVA_HOME is niet gezet en geen SDKman gevonden — Maven kan straks" \ - "geen JVM vinden. Zet JAVA_HOME of installeer een JDK via SDKman." >&2 + echo "ERROR: JAVA_HOME is niet gezet en SDKman heeft geen JVM geactiveerd." >&2 + echo " Zet JAVA_HOME naar een JDK, of installeer er één via SDKman" \ + "('sdk install java')." >&2 + exit 1 fi # --- Bind-adres ----------------------------------------------------------- From f120a5e2f6721c2fa7fd11ecaf0e3530b0cd03e3 Mon Sep 17 00:00:00 2001 From: Eric Wout van der Steen <92432523+ericwout-overheid@users.noreply.github.com> Date: Tue, 26 May 2026 09:06:55 +0000 Subject: [PATCH 2/2] fix(sandbox): accepteer ook 'java' op PATH in Maven run.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review op de eerste versie van deze PR signaleerde drie zaken: 1. Hard exit op enkel een lege JAVA_HOME was een regressie voor stock Debian/Ubuntu/Fedora/Arch/Homebrew, waar `mvn` zonder geëxporteerde JAVA_HOME werkt via de Apache-wrapper (resolved `java` op PATH + readlink). Check nu beide: alleen exit 1 als JAVA_HOME leeg is én `command -v java` niets vindt. Foutmelding dekt nu beide paden ("geen JAVA_HOME gezet en geen 'java' op PATH gevonden."). 2. Comment bij de SDKman-init noemde `set +e` waar de code `set +euo pipefail` doet en suggereerde dat `set +e` $? swallowed; herformuleerd naar de feitelijke reden (status capturen vóór strict-mode-restore). 3. Foutmelding "SDKman heeft geen JVM geactiveerd" klopte niet als SDKman helemaal niet geïnstalleerd was. Tekst nu neutraal. Geverifieerd: JAVA_HOME leeg + geen java op PATH → exit 1; JAVA_HOME leeg + java op PATH → doorgaan; JAVA_HOME gezet → doorgaan. Co-Authored-By: Claude Opus 4.7 (1M context) --- claude-sandbox/host-agents/maven/run.sh | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/claude-sandbox/host-agents/maven/run.sh b/claude-sandbox/host-agents/maven/run.sh index 6fb4539..ebad70e 100755 --- a/claude-sandbox/host-agents/maven/run.sh +++ b/claude-sandbox/host-agents/maven/run.sh @@ -65,9 +65,10 @@ echo "→ deps installeren/controleren…" if [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]]; then # SDKman-init draait in déze shell; strict-mode tijdelijk uit omdat de # vendored init unset-vars en non-zero returns gebruikt voor normaal - # gedrag. Exit-status capturen we expliciet zodat een echte fout (kapotte - # install, ontbrekend candidate-symlink) niet stil verdwijnt onder - # `set +e`. + # gedrag. Exit-status capturen we vóór we strict-mode terugzetten, zodat + # een echte fout (kapotte install, ontbrekend candidate-symlink) alsnog + # zichtbaar wordt in plaats van te verdwijnen achter de tijdelijke + # `set +euo pipefail`. set +euo pipefail # shellcheck disable=SC1091 source "$HOME/.sdkman/bin/sdkman-init.sh" @@ -79,10 +80,12 @@ if [[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]]; then fi fi # Zonder JVM faalt Maven straks alsnog, met een onbegrijpelijke foutmelding -# diep in de agent. Liever hier hard stoppen met een duidelijke instructie, -# net als bij de ontbrekende project-dir hierboven. -if [[ -z "${JAVA_HOME:-}" ]]; then - echo "ERROR: JAVA_HOME is niet gezet en SDKman heeft geen JVM geactiveerd." >&2 +# diep in de agent. Veel distro's en Homebrew leveren echter een werkende +# `mvn` zonder geëxporteerde JAVA_HOME (de Apache-wrapper resolved `java` via +# PATH en `readlink`), dus we accepteren ook een `java` op PATH; pas als +# beide ontbreken stoppen we hard. +if [[ -z "${JAVA_HOME:-}" ]] && ! command -v java >/dev/null 2>&1; then + echo "ERROR: geen JAVA_HOME gezet en geen 'java' op PATH gevonden." >&2 echo " Zet JAVA_HOME naar een JDK, of installeer er één via SDKman" \ "('sdk install java')." >&2 exit 1