Skip to content

test(ci): add indy matrix to functional test CI jobs#15415

Open
jamesfredley wants to merge 1 commit intoapache:7.1.xfrom
jamesfredley:test/indy-ci-coverage
Open

test(ci): add indy matrix to functional test CI jobs#15415
jamesfredley wants to merge 1 commit intoapache:7.1.xfrom
jamesfredley:test/indy-ci-coverage

Conversation

@jamesfredley
Copy link
Contributor

Summary

  • Add indy: [false, true] matrix dimension to all functional test CI jobs to ensure Groovy invokedynamic is tested both enabled and disabled
  • Add -PgrailsIndy property toggle to grails-extension-gradle-config.gradle so all 45 test example projects respect the CI matrix setting
  • Include indy status in job names for clear CI dashboard visibility

Context

PR #15375 moved indy configuration from generated build.gradle files to the Grails Gradle Plugin (GrailsExtension.indy, default: false). After that merge, CI was only testing with the default indy=false, leaving indy=true completely untested. If a user sets grails { indy = true }, we had zero CI coverage for that code path.

Changes

gradle/grails-extension-gradle-config.gradle

  • Added conditional indy property toggle inside the grails { } block
  • When -PgrailsIndy=true is passed, sets grails { indy = true } on all test example projects
  • All 45 test example build files apply this config, so no per-project changes needed

.github/workflows/gradle.yml

  • Functional Tests: 3 Java versions x 2 indy = 6 jobs (was 3)
  • Hibernate5 Functional Tests: 2 Java versions x 2 indy = 4 jobs (was 2)
  • MongoDB Functional Tests: 2 Java versions x 2 MongoDB versions x 2 indy = 8 jobs (was 4)
  • Build Grails Forge: 2 Java versions x 2 indy = 4 jobs (was 2)
  • Job names now include indy=true/false for dashboard clarity

Note on Forge Tests

The forge test-core tests 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 -PgrailsIndy property is passed to the forge build itself. Full end-to-end indy coverage for forge-generated apps would require additional work to inject grails { indy = true } into the Rocker template or TestKit configuration.

Relates to #15321, follow-up to #15375

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>
Copilot AI review requested due to automatic review settings February 19, 2026 16:27
@jamesfredley jamesfredley self-assigned this Feb 19, 2026
@jamesfredley jamesfredley moved this to In Progress in Apache Grails Feb 19, 2026
@jamesfredley jamesfredley added this to the grails:7.1.0 milestone Feb 19, 2026
Copy link
Contributor

@jdaugherty jdaugherty left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like this and I think this makes sense, but will this impact our run times? @matrei what are your thoughts?

@jamesfredley
Copy link
Contributor Author

We might be able to trim the number of jobs, by only running indy on a subset.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 -PgrailsIndy property handling in grails-extension-gradle-config.gradle to 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.

@jamesfredley
Copy link
Contributor Author

@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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Progress

Development

Successfully merging this pull request may close these issues.

2 participants

Comments