Repository navigation
Description
The CI of the repositories that use apache/maven-gh-actions-shared/.github/workflows/maven-verify.yml costs more than it needs to, in two ways.
The matrix
Across the last 148 CI runs of these repositories (6,107 job-minutes), Windows took 42% of the job-minutes and macOS 25%. A run has up to 16 jobs: JDK 8, 21 and 25 with Maven 3, plus JDK 21 and 25 with Maven 4, on each OS, plus the fail-fast job. In bursts of Dependabot PRs, one job in ten waited 8 to 13 minutes for a runner, macOS the longest.
Each repository now excludes, through matrix-exclude:
- on macOS, every JDK but the newest one in its matrix;
- on Windows, every JDK but the oldest and the newest.
Linux keeps the full matrix. With the default JDK matrix that is 11 jobs instead of 16, 2 of them on macOS instead of 5, and about a third fewer job-minutes, going by the measured share of each OS and JDK. An OS-specific bug that shows up only on a middle JDK is the coverage given up.
The integration tests
Each IT is a Maven run of a few seconds, and mojo-parent sets no invoker.parallelThreads, so the ITs ran one at a time and were bound by JVM startup. Repositories with enough ITs to matter now set invoker.parallelThreads to 0.75C and start the IT JVMs with -XX:TieredStopAtLevel=1 -XX:+UseSerialGC through JAVA_TOOL_OPTIONS. These flags stay out of mojo-parent: every JVM that reads JAVA_TOOL_OPTIONS prints a Picked up line, which can break ITs that compare output, so each repository's own CI has to show it is safe.
The first three:
| Repository | Job-minutes per run | Windows median job |
|---|---|---|
| mojohaus/versions#1411 | — | 28–30 → 13.7 min (Maven 4) |
| mojohaus/license-maven-plugin#753 | 150 → 77 | 12.8 → 6.1 min |
| mojohaus/flatten-maven-plugin#538 | 85 → 49 | 7.2 → 4.0 min |
Two repositories forced one IT thread on Windows. The exec-maven-plugin profile cites MRESOLVER-372, fixed in Resolver 1.9.17 (Maven 3.9.5); CI runs Maven 3.10.0 and 4.0.0-rc-7.
Pull requests
The ITs, merged: mojohaus/versions#1411, mojohaus/license-maven-plugin#753, mojohaus/flatten-maven-plugin#538.
This sweep:
- Run fewer JDKs on macOS and Windows and the ITs in parallel animal-sniffer#355: Run fewer JDKs on macOS and Windows and the ITs in parallel
- Run the ITs in parallel with C1 only and the serial GC aspectj-maven-plugin#274: Run the ITs in parallel with C1 only and the serial GC (stacked on Fix the flaky classpath IT and the site build aspectj-maven-plugin#275, which fixes a flaky IT and the site build)
- Run fewer JDKs on macOS and Windows and the ITs in parallel build-helper-maven-plugin#252: Run fewer JDKs on macOS and Windows and the ITs in parallel
- Run fewer JDKs on macOS and Windows buildnumber-maven-plugin#289: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows and the ITs in parallel exec-maven-plugin#545: Run fewer JDKs on macOS and Windows and the ITs in parallel (JVM options through
MAVEN_OPTS: its ITs compare what forked JVMs print) - Run fewer JDKs on macOS and Windows and the ITs in parallel extra-enforcer-rules#371: Run fewer JDKs on macOS and Windows and the ITs in parallel
- Run fewer JDKs on macOS and Windows flatten-maven-plugin#540: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows and the ITs in parallel javacc-maven-plugin#119: Run fewer JDKs on macOS and Windows and the ITs in parallel
- Run fewer JDKs on macOS and Windows and the ITs in parallel jaxb2-maven-plugin#437: Run fewer JDKs on macOS and Windows and the ITs in parallel
- Run fewer JDKs on macOS and Windows jdepend-maven-plugin#99: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows keytool#153: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows l10n-maven-plugin#62: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows license-maven-plugin#754: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows mrm#323: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows properties-maven-plugin#170: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows taglist-maven-plugin#203: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows tidy-maven-plugin#139: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows versions#1412: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows wagon-maven-plugin#181: Run fewer JDKs on macOS and Windows
- Run fewer JDKs on macOS and Windows xml-maven-plugin#187: Run fewer JDKs on macOS and Windows
Not changed: templating-maven-plugin tests one JDK, rpm-maven-plugin runs on Linux only, and maven-native, buildplan-maven-plugin, native2ascii-maven-plugin, servicedocgen-maven-plugin and mojo-parent do not use the shared workflow.
Dependabot
Dependabot PRs were 124 of the 366 CI runs between 2026-09-10 and 2026-10-10. Each repository now checks monthly instead of daily; Maven minor and patch updates come as one PR, GitHub Actions updates as another, and Maven major updates one PR each. Security updates are not affected.
- Check dependencies monthly and group the updates animal-sniffer#356
- Check dependencies monthly and group the updates aspectj-maven-plugin#276
- Check dependencies monthly and group the updates build-helper-maven-plugin#253
- Check dependencies monthly and group the updates buildnumber-maven-plugin#290
- Check dependencies monthly and group the updates buildplan-maven-plugin#307
- Check dependencies monthly and group the updates exec-maven-plugin#546
- Check dependencies monthly and group the updates extra-enforcer-rules#373
- Check dependencies monthly and group the updates flatten-maven-plugin#541
- Check dependencies monthly and group the updates javacc-maven-plugin#120
- Check dependencies monthly and group the updates jaxb2-maven-plugin#438
- Check dependencies monthly and group the updates jdepend-maven-plugin#100
- Check dependencies monthly and group the updates keytool#154
- Check dependencies monthly and group the updates l10n-maven-plugin#63
- Check dependencies monthly and group the updates license-maven-plugin#755
- Check dependencies monthly and group the updates maven-native#190
- Check dependencies monthly and group the updates mojo-parent#788
- Check dependencies monthly and group the updates mojohaus.github.io#108
- Check dependencies monthly and group the updates mrm#324
- Check dependencies monthly and group the updates native2ascii-maven-plugin#98
- Check dependencies monthly and group the updates properties-maven-plugin#171
- Check dependencies monthly and group the updates taglist-maven-plugin#204
- Check dependencies monthly and group the updates templating-maven-plugin#127
- Check dependencies monthly and group the updates tidy-maven-plugin#140
- Check dependencies monthly and group the updates versions#1413
- Check dependencies monthly and group the updates wagon-maven-plugin#182
- Check dependencies monthly and group the updates xml-maven-plugin#188
Activity
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
Run macOS and Windows on fewer JDKs
20 remaining items
Check dependencies monthly and group the updates (#190)
Check dependencies monthly and group the updates (#788)
Check dependencies monthly and group the updates (#108)
Check dependencies monthly and group the updates (#324)
Check dependencies monthly and group the updates (#98)
Check dependencies monthly and group the updates (#171)
Check dependencies monthly and group the updates (#204)
Check dependencies monthly and group the updates (#127)
Check dependencies monthly and group the updates (#140)
Check dependencies monthly and group the updates (#1413)
Check dependencies monthly and group the updates (#182)
Check dependencies monthly and group the updates (#188)
slachiewicz commentedon Oct 11, 2026
Results from mojohaus/versions, where the recipe started, and the lessons that carry over to the other plugin repositories.
One run per stage, so the exact percentages carry runner noise. Elsewhere: mojohaus/license-maven-plugin#753 went from 150 to 77 job-minutes per run, and mojohaus/flatten-maven-plugin#538 from 85 to 49.
Lessons for the other repositories:
invoker.parallelThreads=1, and mojo-parent sets no parallelism, so most invoker-heavy repositories run their ITs one at a time.JAVA_TOOL_OPTIONScut local IT time by 32%. Where a test reads stderr (exec-maven-plugin), use<mavenOpts>instead, because every JVM prints "Picked up…". That is also why it is not in mojo-parent.trueor null, so a trailing.eachfails the IT.test*methods without@Test, and one dropped out silently during the migration.