jamesfredley opened a new issue, #15613:
URL: https://github.com/apache/grails-core/issues/15613

   ## Summary
   
   The `CI - Groovy Joint Validation Build` workflow (`build_grails` job) has 
been **failing on every push to `8.0.x` since 2026-04-29** with a Spock vs. 
Groovy major-version mismatch:
   
   ```
   > Task :grails-test-examples-issue-11767:compileIntegrationTestGroovy
   startup failed:
   
   Could not instantiate global transform class
   org.spockframework.compiler.SpockTransform specified at
   
jar:file:.../spock-core/2.4-groovy-5.0/.../spock-core-2.4-groovy-5.0.jar!/META-INF/services/...
   because of exception
   org.spockframework.util.IncompatibleGroovyVersionException:
   The Spock compiler plugin cannot execute because Spock 2.4.0-groovy-5.0
   is not compatible with Groovy 4.0.32-SNAPSHOT.
   
   Spock artifact: file:.../spock-core-2.4-groovy-5.0.jar
   Groovy artifact: file:.../groovy-4.0.32-SNAPSHOT.jar
   
   > Task :grails-test-examples-issue-11767:compileIntegrationTestGroovy FAILED
   > Task :grails-test-examples-micronaut:compileIntegrationTestGroovy FAILED
   ```
   
   ## Affected runs (10 most recent `8.0.x` runs of the workflow)
   
   | Run | Commit | Result |
   |---|---|---|
   | 
[25144143636](https://github.com/apache/grails-core/actions/runs/25144143636) | 
7cf1d19 | failure |
   | 
[25134285481](https://github.com/apache/grails-core/actions/runs/25134285481) | 
1b33cf8 | failure |
   | 
[25086923954](https://github.com/apache/grails-core/actions/runs/25086923954) | 
7174dd2 | failure |
   | 
[25086897319](https://github.com/apache/grails-core/actions/runs/25086897319) | 
919802e | failure |
   | 
[25082518134](https://github.com/apache/grails-core/actions/runs/25082518134) | 
6e4c6a3 | failure |
   
   The same failure is reproduced on every PR that merges latest `8.0.x` (e.g. 
[PR #15467 / run 
25170545059](https://github.com/apache/grails-core/actions/runs/25170545059/job/73789008877)).
   
   ## Root cause
   
   Commit 
[ae7ee513ec](https://github.com/apache/grails-core/commit/ae7ee513ecefdc391e27563a4fdd934744c8cb0a)
 (`Override spock to match the micronaut bom's version`) bumped the Spock 
artifact to `spock-core:2.4-groovy-5.0` because the Micronaut BOM moved to 
Groovy 5. `spock-core:2.4-groovy-5.0` ships an AST-transform with a hard-coded 
major-version check that rejects Groovy 4.x at compile time.
   
   The Joint Validation Build (`.github/workflows/groovy-joint-workflow.yml`) 
deliberately swaps the Groovy artifact to the Apache Groovy 4.x main snapshot 
(currently `4.0.32-SNAPSHOT`) so we catch breakages before Groovy ships them. 
With the Spock-5 artifact pinned in the BOM, every Spock spec compiled in the 
joint build now fails the version check.
   
   ## Existing precedent
   
   Commit 
[5d71eb4035](https://github.com/apache/grails-core/commit/5d71eb4035de02016162ef98eb681cdc691624a5)
 (`fix(forge): bypass Spock Groovy-version check in generated app 
build.gradle`) already adopted Spock's documented escape hatch for 
**forge-generated apps**:
   
   ```
   tasks.withType(GroovyCompile).configureEach {
       options.forkOptions.jvmArgs = (options.forkOptions.jvmArgs ?: []) +
           ['-Dspock.iKnowWhatImDoing.disableGroovyVersionCheck=true']
   }
   tasks.withType(Test).configureEach {
       systemProperty 'spock.iKnowWhatImDoing.disableGroovyVersionCheck', 'true'
   }
   ```
   
   The same workaround was **not** applied to the grails-core build itself. 
`grep -r 'disableGroovyVersionCheck' origin/8.0.x` returns nothing on the 
framework build files - only the rocker template carries it.
   
   ## Suggested options (please pick one)
   
   1. **Apply the existing forge bypass to the framework build.** Add 
`-Dspock.iKnowWhatImDoing.disableGroovyVersionCheck=true` to the shared 
compile/test conventions used by the test-examples and the grails-core 
integration-test compile classpaths (`gradle/test-config.gradle`, 
`build-logic/.../CompilePlugin.groovy`). Lowest-risk: matches what the forge 
templates already do, restores the joint build immediately.
   2. **Publish or pin a Groovy-4-compatible Spock alongside the Groovy-5 
one.** Use a Gradle resolution rule (or a `spock.version` override) so when 
`groovy.version` resolves to 4.x the dependency picks 
`spock-core:2.3-groovy-4.0` (already on the classpath) instead of 
`2.4-groovy-5.0`. Keeps the framework on a sanctioned Spock build for the Joint 
matrix; requires more BOM logic.
   3. **Drop the Joint Groovy 4 matrix.** If the project is consciously moving 
to Groovy 5 for 8.0.x, retire the joint validation against 
`apache/groovy:GROOVY_4_0_X` and validate against the 5.x main only.
   
   ## Repro
   
   ```
   ./gradlew :grails-test-examples-issue-11767:compileIntegrationTestGroovy
   ```
   
   with the local Maven repo populated by `mvn install -P 
-groovydoc,jaxb,asciidoctor,nodoc -DskipTests` from the `apache/groovy` 4.0.x 
branch (mirroring what the workflow does).
   
   ## Related
   
   - `apache/grails-core#15467` (PR currently bouncing off this failure)
   - Spock issue: spockframework/spock#1916 
(`IncompatibleGroovyVersionException` rationale)
   - Apache Groovy 4.x main: https://github.com/apache/groovy/tree/GROOVY_4_0_X
   
   cc @jamesfredley @jdaugherty


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to