Repository navigation
Build each pull request on the configurations its changes need - #43
Merged
Merged
Conversation
A pull request into rc runs all 15 configurations whatever it changes, six of them on macOS, of which only five run at once across the organisation. The one build where every job passed first time waited 109 minutes and used 601 runner minutes. A change to comments, a message and a link took 143 minutes and 1,006 runner minutes over three attempts. - ci/select-options.ps1 chooses the configurations for common-ci. The standard set is JDK 17 and JDK 8 on Linux. A change to a native module or the cxx submodule adds Windows and Linux ARM, a pom.xml change adds JDK 11 and 21, and a change outside the package trees, such as ci, adds every configuration but macOS. macOS and performance run only when rc itself or a release is built. - The standard set leaves out the three IP Intelligence tests that load the Enterprise data file, listed in ci/standard-excludes.txt, and so does not install WMIC, which is only there for them. A change to IP Intelligence or the cxx submodule runs them. - The Selenium contract runs on one configuration of a pull request rather than fourteen. - The Pull Requests workflow lets one failure leave the other configurations running, and builds nothing when no pull request is eligible. The nightly publishes before it builds pull requests, as the publish builds main, so it has the runners first. - The release pull request from rc into main is built on every configuration. These need common-ci's fail-fast, full-matrix and build-without-pull-requests inputs and its release-pull-request.yml on common-ci main before this reaches main.
This was referenced Nov 10, 2026
Merged
PowerShell names are not case sensitive, so $native, set to whether a native module changed, replaced the list $Native of the entries a native change adds. $true -contains '<name>' is true for every name, so a change to a native module or the cxx submodule built every entry but macOS.
Changes reach main only through rc, so a pull request that changes the 51Did package had not run these tests since the move to rc.
jwrosewell
marked this pull request as ready for review
November 14, 2026 06:04
This was referenced Nov 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
A pull request into
rcruns all 15 configurations inci/options.json, whatever it changes. Six of them are macOS, and only five macOS jobs run at once across the whole organisation. Every configuration runs the three IP Intelligence tests that load the multi-gigabyte Enterprise data file, every Windows configuration installs WMIC, which is only there for one of those tests, and fourteen configurations run the Selenium contract, the flakiest check in the window.Cost, measured from run history
IPIntelligenceTests,MetadataOnPremTestandCompareOnPremTesttook 12.5 of the 16.7 unit test minutes. In Windows Java 17, 56 minutes, WMIC took 12.5 minutes to install and the same three tests 22.7.rcin full, using 1,234 runner minutes. Configurations cancelled when another failed threw away 1,148 runner minutes in the window.Change
ci/select-options.ps1chooses the configurations for common-ci's selection step, which common-ci#309 added.Ubuntu_Java_17andUbuntu_Java_8, the main JDK and the oldest, with the Selenium contract onUbuntu_Java_17alone.cxxsubmodule, in more than its comments, addsWindows_Java_17andUbuntu_ARM_Java_17, where the native library is built differently.pom.xmlchange addsUbuntu_Java_11andUbuntu_Java_21.ci, adds every configuration but macOS.rcitself or a release is built do the six macOS configurations and the performance tests run.ci/run-unit-tests.ps1leaves out the three tests in the newci/standard-excludes.txtthrough Surefire'ssurefire.excludesFile, andci/setup-environment.ps1does not install WMIC. A change to IP Intelligence or thecxxsubmodule runs them.ci/run-integration-tests.ps1runs the Selenium contract only where the selection leavesSeleniumContracttrue, which it is by default.fail-fast: falseandbuild-without-pull-requests: false, and gains afull-matrixbox for a full build of a pull request by hand.main, which the pull requests intorcdo not change.release-pull-request.ymlbuilds the release pull request fromrcintomainon every configuration, as a dry run that merges nothing.ci/README.mddescribes the selection.ci/select-options.Tests.ps1holds seven Pester 5 tests of the selection, one for each kind of change (below).rcas well asmain. Changes reachmainonly throughrc, so a pull request that changed the 51Did package had not run them since the move torc..github/workflows/ci-script-tests.ymlruns every Pester test incionubuntu-latestandwindows-latest, for each pull request that changescior the workflow and each push of such a change tomainorrc, so the tests in item 8 keep running once this merges. It leaves outci/check-environment-variable-names.Tests.ps1, which the Environment variable names workflow already runs.ci/README.mdnames it beside the tests.Expected saving
From the job times above, by the kind of change.
pom.xmlcxxsubmoduleThe reduced times take the measured minutes of the three tests, WMIC and performance off the median of each configuration. Applied to the changed files of the 26 pull requests opened since 1 November, many of them CI set-up, the median wait falls from 109 to about 40 minutes and the mean runner minutes from 601 to about 151. Over 2 and 3 November the change, the fail-fast setting and the by-hand builds of
rcit stops come to about 2,300 runner minutes a day. The release pull request adds one full build, about 601 runner minutes, for each release, and no pull request build takes a macOS runner.How it was checked
nightly-pipeline.ymlare identical to the old ones apart from their order,needs,ifand the new input.ci/standard-excludes.txtare the ones the Ubuntu Java 17 log reports, and the Device DetectionMetadataOnPremTestis not matched. Surefire 2.22.2, which the poms name, reads the file from thesurefire.excludesFileproperty and ignores its#lines (SurefirePlugin.java). A file of excludes replaces Surefire's own**/*$*default (AbstractSurefireMojo.java), so the file lists it too.mainhas run a repository'sci/select-options.ps1for a pull request since common-ci#312 on 12 November, unless the build is of the branch itself or asks for the full matrix (nightly-pull-request.configure-pr.ps1lines 36 to 42).rchas noci/select-options.ps1, so today every pull request intorcbuilds every configuration, and once this merges the nightly's pull request builds choose as above.mainat the root, made one local commit for each kind of change on this branch, and ran common-ci'ssteps/select-options.ps1on it as the nightly does. A README alone chose nothing, a change topipeline.corethe standard set, a comment in a native module the standard set, a change to IP Intelligence the standard set at depth deep, apom.xmlchange JDK 11 and 21 as well, and aciscript every entry but macOS at depth deep. A change to a native module, and a new commit of thecxxsubmodule, chose all nine entries but macOS where four were meant. PowerShell names are not case sensitive, so$native, set to whether a native module changed, had replaced the list$Nativeof the entries a native change adds, and$true -contains '<name>'is true for every name.ci/select-options.Tests.ps1, and 7615d50c names the list$NativeEntries. Red, run 43531443600 ontmp/java-43-red(2c8c460 with a temporary workflow that runs the file withInvoke-Pesteronubuntu-latestandwindows-latest), failed the native module andcxxtests, each choosing the nine, and passed the other five, on both systems. Green, run 43531443597 ontmp/java-43-green(7615d50), passed all seven on both.ci/select-options.Tests.ps1. 32095737 addsci-script-tests.yml(item 10), and 4aa6c312 names it inci/README.md. Red, run 43558755258 on the throwaway branchtmp/java-43-wf-red(3209573 withci/select-options.ps1as it was at 2c8c460, before its fix, and the workflow set to run on that branch), failed the native module andcxxtests and passed the other five, on both systems. Green, the workflow's own run on this head, run 43559030818, ranselect-options.Tests.ps1and passed all seven on both systems.rc, run 43559030813, and passed.What it gives up
On a pull request, macOS, JDK 11 and 21 unless a
pom.xmlchanges, the Windows and ARM native builds unless native code changes, the three IP Intelligence tests unless IP Intelligence changes, thirteen of the fourteen Selenium runs, and performance. A fault that shows only there is found by the nightly build ofrcor by the release pull request build, before anything reachesmain.Merge order
The common-ci half, common-ci#309, reached common-ci
mainin common-ci#312 on 12 November, so the inputs these workflows pass are there. This merges intorclast of the drafts for the 16 November release. Once it is inrc, a full build of a later draft started by hand chooses fewer configurations unless it passesfull-matrix: true.Merges with rc
rcwas merged in at 8baec75, with a merge commit, bringing 96 commits. Three files conflicted.ci/run-unit-tests.ps1.rcnow calls common-ci'sjava/run-unit-tests.ps1with the Maven arguments inExtraArgs. The merge keeps that call and adds this branch'ssurefire.excludesFileargument toExtraArgswhen the depth isstandard, with theDepthparameter kept.ci/run-integration-tests.ps1. The merge keeps this branch'sSeleniumContractswitch andrc's wording, as the contract now runs against two web examples.ci/README.md. The merge keeps this branch's paragraph onselect-options.ps1andrc's on the asset cache.rcwas merged in again at f099547, bringing #127, #128 and #130, with no conflict.The three tests in
ci/standard-excludes.txtstill exist under the same names onrc.What remains
DataUpdateServiceTests.DataUpdateService_Register_AutoUpdateConfiguredIntervaland of the Selenium WebDriver timeouts, neither established.