fix: restore 9.0.x CI after the 8.1.x merge-up - #16298
Conversation
Hoist Groovy 6 collection-binding type checks out of || so STC no longer treats << item as leftShift(void). Set the Gradle extra property mainClass instead of removed mainClassName so Forge shadow scripts work on Gradle 9.7.1. Drop Micronaut island snapshot/release publishing on this Groovy 6 branch, where those projects are not in the graph.
There was a problem hiding this comment.
🔵 Needs a closer look
It changes multiple CI/release workflows and reproducibility scripts, which warrants a final human verification pass despite no functional defects found in the reviewed hunks.
Pull request overview
Restores the 9.0.x branch CI after the 8.1.x merge-up by addressing three independent failures: a Groovy 6 STC compilation regression in GrailsWebDataBinder, a Gradle 9 Application plugin property change affecting Forge shadow start scripts, and removal of Micronaut “island” CI/release paths that are incompatible with the branch’s Groovy major.
Changes:
- Adjust
GrailsWebDataBindercollection/map binding to avoid Groovy 6 STC flow-state issues by hoisting||checks into a boolean local. - Update the Grails Gradle plugin to use
mainClass(instead of removedmainClassName) for main-class propagation. - Remove Micronaut “island” dual-JDK/release/publish/reproducibility wiring from docs, scripts, and GitHub workflows on this branch.
File summaries
| File | Description |
|---|---|
RELEASE.md |
Removes dual-JDK Micronaut “island” release/reproducibility documentation. |
grails-web-databinding/src/main/groovy/grails/web/databinding/GrailsWebDataBinder.groovy |
Hoists ` |
grails-gradle/plugins/src/main/groovy/org/grails/gradle/plugin/core/GrailsGradlePlugin.groovy |
Switches extra property from mainClassName to mainClass to match Gradle 9 Application plugin. |
etc/bin/verify.sh |
Removes JDK 25 preflight checks tied to the Micronaut “island”. |
etc/bin/verify-reproducible.sh |
Drops the JDK 25 Micronaut “island” build/restore flow; now runs a single JDK pass. |
etc/bin/test-reproducible-builds.sh |
Removes the JDK 25 Micronaut “island” pass and related env validation. |
etc/bin/Dockerfile |
Removes installation of the secondary JDK 25 used for the Micronaut “island”. |
.github/workflows/release.yml |
Removes JDK 25 Micronaut publish steps; aligns release flow with island exclusion on this branch. |
.github/workflows/release-verify.yml |
Removes JDK 25 setup/export steps previously used for reproducible verification. |
.github/workflows/gradle.yml |
Removes publishMicronaut job and updates snapshot publish commentary for island exclusion. |
Review details
- Files reviewed: 6/10 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
The comment in .github/workflows/gradle.yml |
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## 9.0.x #16298 +/- ##
===================================================
+ Coverage 30.1177% 55.7202% +25.6025%
- Complexity 519 21395 +20876
===================================================
Files 83 2147 +2064
Lines 4758 102618 +97860
Branches 815 18166 +17351
===================================================
+ Hits 1433 57179 +55746
- Misses 3082 37491 +34409
- Partials 243 7948 +7705
🚀 New features to boost your workflow:
|
Accept pre-release groovy.version when selecting the snapshot canary branch so 6.0.0-beta-2 is not skipped for the Micronaut 5.x pin. Align GroovyPageAttributes subscript assignment with Groovy 6 Map.put semantics. Opt the end-to-end taglib harness out of Spock's Groovy version check.
Groovy 6 snapshot rejects List<String> and Map<String, Object> as class tokens. Use the raw types for Environment.getProperty and getDeclaredConstructor.
🚨 TestLens detected 1 failed test 🚨Here is what you can do:
Test SummaryCI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-gsp-sitemesh3:integrationTest
🏷️ Commit: 9f208a8 Test FailuresEndToEndSpec > async multiple levels of layouts (:grails-test-examples-gsp-sitemesh3:integrationTest in CI / Functional Tests (Java 21, indy=true, shard 1))
Rerun ControlsSelect tests to mute in this pull request:
Reuse successful test results:
Click the checkbox to trigger a rerun:
Learn more about TestLens at testlens.app/docs. |
Description
Restores 9.0.x CI after merging 8.1.x. Before that merge, 9.0.x CI was already red on Forge (
mainClassName) andpublishMicronaut. The merge then added a Groovy 6 static-compile failure inGrailsWebDataBinderthat took down Core, Forge, functional, Hibernate, MongoDB, Redis, Neo4j, Spring Security, and Code Style jobs.This PR fixes the three unique root causes.
Groovy 6 collection binding compile
GrailsWebDataBindernow hoistsitem == null || referencedType.isAssignableFrom(...)into a boolean local, matching the existing array/map workaround. Groovy 6.0.0-beta-2 STC otherwise collapses||flow state inside the closure tovoidand fails withArrayList#leftShift(void).Verified:
./gradlew :grails-web-databinding:compileGroovy -PskipCodeStyleForge shadow scripts on Gradle 9.7.1
The Application plugin no longer has
mainClassName. Setting that extra property made:grails-forge-web-netty:startShadowScriptsfail withYou can't map a property that does not exist: propertyName=mainClassName. The plugin now sets extra propertymainClass.Verified:
cd grails-forge && ./gradlew :grails-forge-web-netty:startShadowScripts -PskipCodeStyleMicronaut island is not on Groovy 6
settings.gradleonly includesgrails-micronaut/grails-micronaut-bomwhen the build uses Groovy 5. 9.0.x uses Groovy 6, sopublishMicronautand the matching release/reproducibility paths invoked missing projects. Those jobs and the dual-JDK Micronaut docs/scripts are removed on this branch.Contributor Checklist
9.0.x