From 368c95f8c2517920f1261c268e35981ff5118832 Mon Sep 17 00:00:00 2001 From: Adam Basfop Cavendish Date: Mon, 22 Jun 2026 09:45:36 +0800 Subject: [PATCH] test: batch JVM golden builds through Gradle - Build Java golden fixtures as subprojects in one temporary Gradle invocation - Build Kotlin golden fixtures as subprojects in one temporary Gradle invocation - Keep fixture names in Gradle task paths so failures remain easy to trace --- scripts/golden-build-java.sh | 60 ++++++++++++++++++---------------- scripts/golden-build-kotlin.sh | 60 ++++++++++++++++++---------------- 2 files changed, 62 insertions(+), 58 deletions(-) diff --git a/scripts/golden-build-java.sh b/scripts/golden-build-java.sh index e59a0a0a6..67258c8ac 100755 --- a/scripts/golden-build-java.sh +++ b/scripts/golden-build-java.sh @@ -9,50 +9,52 @@ if [ ! -d "$golden" ]; then exit 1 fi -total=0; passed=0; failed=0; fails=() +tmp=$(mktemp -d) +log=$(mktemp) +trap 'rm -rf "$tmp" "$log"' EXIT + +settings="$tmp/settings.gradle" +cat > "$settings" <<'SETTINGS' +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} +rootProject.name = "golden-java" +SETTINGS + +total=0 +tasks=() for test_dir in "$golden"/*/; do [ -f "$test_dir/build.gradle.golden" ] || continue total=$((total + 1)) name=$(basename "$test_dir") - printf "[%d] %s... " "$total" "$name" - - tmp=$(mktemp -d) - trap 'rm -rf "$tmp"' EXIT + tasks+=(":$name:compileJava") + mkdir -p "$tmp/$name" while IFS= read -r -d '' f; do rel="${f#"$test_dir"}" - dst="$tmp/${rel%.golden}" + dst="$tmp/$name/${rel%.golden}" mkdir -p "$(dirname "$dst")" cp "$f" "$dst" done < <(find "$test_dir" -type f -name '*.golden' -print0) - cat > "$tmp/settings.gradle" <<'SETTINGS' -plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" -} -rootProject.name = "golden-test" + cat >> "$settings" <"$log" 2>&1; then - echo "ok" - passed=$((passed + 1)) - else - echo "FAIL" - failed=$((failed + 1)) - fails+=("$name") - sed 's/^/ /' "$log" || true - fi - - rm -rf "$tmp" "$log" - trap - EXIT done echo -echo "Java: $passed/$total passed" -if [ "$failed" -gt 0 ]; then - echo "failed:" - for n in "${fails[@]}"; do echo " - $n"; done +if [ "$total" -eq 0 ]; then + echo "Java: 0/0 passed" + exit 0 +fi + +echo "Java: compiling $total golden projects" +if (cd "$tmp" && gradle --no-daemon --quiet --parallel --continue "${tasks[@]}") >"$log" 2>&1; then + echo "Java: $total/$total passed" +else + echo "Java: build failed" + sed 's/^/ /' "$log" || true exit 1 fi diff --git a/scripts/golden-build-kotlin.sh b/scripts/golden-build-kotlin.sh index 80555ed2e..328cebcd7 100755 --- a/scripts/golden-build-kotlin.sh +++ b/scripts/golden-build-kotlin.sh @@ -9,50 +9,52 @@ if [ ! -d "$golden" ]; then exit 1 fi -total=0; passed=0; failed=0; fails=() +tmp=$(mktemp -d) +log=$(mktemp) +trap 'rm -rf "$tmp" "$log"' EXIT + +settings="$tmp/settings.gradle.kts" +cat > "$settings" <<'SETTINGS' +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" +} +rootProject.name = "golden-kotlin" +SETTINGS + +total=0 +tasks=() for test_dir in "$golden"/*/; do [ -f "$test_dir/build.gradle.kts.golden" ] || continue total=$((total + 1)) name=$(basename "$test_dir") - printf "[%d] %s... " "$total" "$name" - - tmp=$(mktemp -d) - trap 'rm -rf "$tmp"' EXIT + tasks+=(":$name:compileKotlin") + mkdir -p "$tmp/$name" while IFS= read -r -d '' f; do rel="${f#"$test_dir"}" - dst="$tmp/${rel%.golden}" + dst="$tmp/$name/${rel%.golden}" mkdir -p "$(dirname "$dst")" cp "$f" "$dst" done < <(find "$test_dir" -type f -name '*.golden' -print0) - cat > "$tmp/settings.gradle.kts" <<'SETTINGS' -plugins { - id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" -} -rootProject.name = "golden-test" + cat >> "$settings" <"$log" 2>&1; then - echo "ok" - passed=$((passed + 1)) - else - echo "FAIL" - failed=$((failed + 1)) - fails+=("$name") - sed 's/^/ /' "$log" || true - fi - - rm -rf "$tmp" "$log" - trap - EXIT done echo -echo "Kotlin: $passed/$total passed" -if [ "$failed" -gt 0 ]; then - echo "failed:" - for n in "${fails[@]}"; do echo " - $n"; done +if [ "$total" -eq 0 ]; then + echo "Kotlin: 0/0 passed" + exit 0 +fi + +echo "Kotlin: compiling $total golden projects" +if (cd "$tmp" && gradle --no-daemon --quiet --parallel --continue "${tasks[@]}") >"$log" 2>&1; then + echo "Kotlin: $total/$total passed" +else + echo "Kotlin: build failed" + sed 's/^/ /' "$log" || true exit 1 fi