test(ci): add indy matrix to functional test CI jobs#15415
test(ci): add indy matrix to functional test CI jobs#15415jamesfredley wants to merge 1 commit intoapache:7.1.xfrom
Conversation
Add indy: [false, true] matrix dimension to all functional test CI jobs (functional, hibernate5, mongodb, forge) to ensure Groovy invokedynamic is tested both enabled and disabled. After PR apache#15375 moved indy configuration from generated build.gradle files to the Grails Gradle Plugin, CI was only testing with the default (indy=false). This leaves indy=true completely untested. Changes: - Add grailsIndy property toggle to grails-extension-gradle-config.gradle so test example projects respect -PgrailsIndy=true/false - Add indy matrix to functional, hibernate5Functional, mongodbFunctional, and buildForge CI jobs - Include indy status in job names for clear CI dashboard visibility Assisted-by: Claude Code <Claude@Claude.ai>
jdaugherty
left a comment
There was a problem hiding this comment.
I like this and I think this makes sense, but will this impact our run times? @matrei what are your thoughts?
|
We might be able to trim the number of jobs, by only running indy on a subset. |
There was a problem hiding this comment.
Pull request overview
This PR adds comprehensive CI testing coverage for Groovy's invokedynamic (indy) feature by introducing a matrix dimension to test both indy=false and indy=true configurations across all functional test jobs. This addresses a gap introduced by PR #15375, which moved indy configuration to the Grails Gradle Plugin but left CI only testing the default indy=false setting.
Changes:
- Added
-PgrailsIndyproperty handling ingrails-extension-gradle-config.gradleto enable CI-controlled indy toggling for all 45 test example projects - Expanded CI matrix to test both indy configurations across 4 functional test job types (Functional, Hibernate5, MongoDB, Forge)
- Enhanced job naming to include indy status for clear dashboard visibility
- Optimized artifact uploads to avoid duplicates
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
gradle/grails-extension-gradle-config.gradle |
Added conditional property handler to set grails { indy = value } based on -PgrailsIndy property, enabling centralized CI control of invokedynamic setting |
.github/workflows/gradle.yml |
Added indy: [false, true] matrix dimension to all 4 functional test jobs (Functional, Hibernate5, MongoDB, Forge), updated job names to include indy status, passed -PgrailsIndy property to all test commands, and optimized CLI artifact upload to only occur for one matrix combination |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@jdaugherty It puts more load on github, but the large set of jobs took 41m 36s and the longest running task was grails-core on windows 41m 30s Additionally the longest running overall was still the joint validation build at 51m 51s, we could save a few minutes there by using the published Groovy snapshot instead of building it, which should be equivalent. |
Summary
indy: [false, true]matrix dimension to all functional test CI jobs to ensure Groovy invokedynamic is tested both enabled and disabled-PgrailsIndyproperty toggle tograils-extension-gradle-config.gradleso all 45 test example projects respect the CI matrix settingContext
PR #15375 moved indy configuration from generated
build.gradlefiles to the Grails Gradle Plugin (GrailsExtension.indy, default:false). After that merge, CI was only testing with the defaultindy=false, leavingindy=truecompletely untested. If a user setsgrails { indy = true }, we had zero CI coverage for that code path.Changes
gradle/grails-extension-gradle-config.gradleindyproperty toggle inside thegrails { }block-PgrailsIndy=trueis passed, setsgrails { indy = true }on all test example projects.github/workflows/gradle.ymlindy=true/falsefor dashboard clarityNote on Forge Tests
The forge
test-coretests use Gradle TestKit, which creates an isolated build environment. The generated apps resolve the Grails Gradle plugin from Maven repositories rather than the local composite build, so the-PgrailsIndyproperty is passed to the forge build itself. Full end-to-end indy coverage for forge-generated apps would require additional work to injectgrails { indy = true }into the Rocker template or TestKit configuration.Relates to #15321, follow-up to #15375