slachiewicz opened a new issue, #1759:
URL: https://github.com/apache/maven-dependency-plugin/issues/1759

   A push to master costs 133 to 155 job-minutes across 18 jobs, and the 
slowest job takes about 15 minutes (six green master runs, 2026-10-06 to 
2026-10-13). The integration tests are most of it, and they run one at a time: 
neither this POM nor maven-plugins 50 or maven-parent 50 sets 
`invoker.parallelThreads`.
   
   ## Where the time goes
   
   Run 
[38349168648](https://github.com/apache/maven-dependency-plugin/actions/runs/38349168648),
 155 job-minutes:
   
   | Runner | Jobs | Job-minutes |
   |---|---|---|
   | Windows | 5 | 63.8 |
   | Linux | 7 | 50.8 |
   | macOS | 5 | 40.5 |
   
   Inside a job, the ITs dominate:
   
   | Job | Total | Unit tests (440) | ITs (105, serial) |
   |---|---|---|---|
   | ubuntu, JDK 21, Maven 3.10.0 | 6:10 | 0:37 | 5:01 |
   | windows, JDK 21, Maven 4.0.0-rc-7 | 13:33 | 0:58 | 11:48 |
   
   IT time is spread evenly (2.9 s average on Linux, slowest 6.6 s), so no 
single IT is worth moving for speed alone.
   
   ## Local measurements
   
   macOS, 8 cores, JDK 17, Maven 3.10.0-rc-1, `-P run-its verify -DskipTests`, 
one run each unless noted:
   
   | Configuration | Wall time | Result |
   |---|---|---|
   | Serial (master) | 208 s | 114 passed |
   | `0.75C` parallel + cheap forked JVMs | 84 s | `get-artifact-no-transitive` 
failed, passed on rerun |
   | Parallel + serial group for shared-repo ITs, no JVM flags | 178 s | 115 
passed |
   | Parallel + serial group + cheap forked JVMs (3 runs) | 93 to 108 s | 115 
passed |
   
   115 includes `setup-custom-ear-lifecycle`, which invoker runs in each 
execution.
   
   The failure is a real race: `get-artifact-no-transitive` asserts that 
`get-artifact-transitive` is absent from the shared `target/local-repo` while 
another `get-*` IT downloads it. 22 ITs delete fixtures from, or assert on, 
that shared repository (`get-*`, `purge-local-repository*`, 
`copy-from-remote-repository`, `unpack-from-remote-repository`, `mdep-592`, 
`mdep-803`, `build-classpath-output-file-and-property`, 
`copy-dependencies-graphroots`), so they run serially in a second invoker 
execution.
   
   The forked-JVM flags (`-XX:TieredStopAtLevel=1 -XX:+UseSerialGC` through 
`JAVA_TOOL_OPTIONS`) carry most of the gain once ITs run in parallel: C2 
compiler threads compete with the other builds for CPU.
   
   ## Plan
   
   - [ ] Run ITs in parallel, with the shared-repo ITs in a serial execution 
and cheaper forked JVMs
   - [ ] Re-measure job-minutes on master after it merges; CI runners have 3 to 
4 cores, so expect less than the local gain
   - [ ] Make the shared-repo ITs independent (fixture coordinates of their 
own) so the serial group shrinks
   - [ ] Triage the `analyze` (16) and `tree` (11) ITs: those that only check 
how parameters shape the output move to unit tests
   - [ ] Convert the 40 of 96 verify scripts that still use `throw new 
Exception` or `return false` to `assert`
   
   Not planned: trimming the OS and JDK matrix. Windows is 41% of job-minutes, 
but the matrix is the shared workflow's default for every Maven plugin.
   


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