Repository navigation
Run the Selenium contract for real and build pull requests on fewer entries - #27
Merged
Merged
Conversation
…ntries On Ubuntu the Selenium contract step reported a pass without running a test. ci/setup-environment.ps1 deletes /usr/share/dotnet to free disk space, which leaves /usr/bin/dotnet as a link to nothing. PowerShell then opens that file with xdg-open rather than running it, which sets no exit code, so the check after it saw the 0 left by curl. - ci/setup-environment.ps1 keeps .NET, as the contract runs on it. The disk had 105GB free after the cleanup in job 125818028013. - ci/run-integration-tests.ps1 finds dotnet as a program and fails when it is missing, or when dotnet test reports no test that passed. - ci/select-options.ps1 chooses the configurations for common-ci. The standard set is Node 24 and Node 22 on Linux, with the contract on Node 24 alone. A native change adds Windows and Linux ARM for Node 24, and a change outside the package folders adds every configuration but macOS. macOS and performance run only when rc itself or a release is built. - 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, and starts at 02:30 rather than 03:00, when the Java and Python nightlies also start and want macOS runners. - 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.
Merged
jwrosewell
marked this pull request as ready for review
November 14, 2026 00:47
This was referenced Nov 14, 2026
Draft
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
On Ubuntu the Selenium contract step reports a pass without running a test, so the browser contract has had no Linux coverage. And a pull request into
rcruns all eight configurations, two of them on macOS, of which only five run at once across the whole organisation.The false pass comes from
ci/setup-environment.ps1, which deletes/usr/share/dotnetto free disk space. That leaves/usr/bin/dotnetas a link to nothing. PowerShell then opens the file withxdg-openrather than running it, which sets no exit code, so the$LASTEXITCODEcheck afterdotnet testsees the 0 thatcurlleft.Cost, measured from run history
curlrefused, then three seconds later "Selenium contract tests passed" beside "xdg-open: file '/usr/bin/dotnet' does not exist", with no test count. On Windows Node 24 the same step ran 9 tests against each example.rcin full, using 510 runner minutes, and configurations cancelled when another failed threw away 362.Change
ci/setup-environment.ps1keeps .NET when it frees disk space.ci/run-integration-tests.ps1findsdotnetas a program and fails when it is missing, and fails whendotnet testreports no test that passed, as a run that finds no test also exits with 0.ci/select-options.ps1chooses the configurations for common-ci's selection step, which a companion common-ci change adds.Ubuntu_Node_24andUbuntu_Node_22, as each builds its own native addon, with the Selenium contract onUbuntu_Node_24alone.cxxsubmodule, changed in more than its comments, addsWindows_Node_24andUbuntu_ARM_Node_24.cior the rootpackage.json, adds every configuration but macOS.rcitself or a release is built do the two macOS configurations and the performance tests run.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. It starts at 02:30 rather than 03:00, when the Java and Python nightlies also started and wanted macOS runners.release-pull-request.ymlbuilds the release pull request fromrcintomainon every configuration, as a dry run that merges nothing.Expected saving
cxxsubmoduleUbuntu_Node_24gains about 2 minutes for a contract that really runs, being the 49 and 39 seconds of tests in the Windows job. Applied to the changed files of the 17 pull requests opened since 31 October, the mean runner minutes fall from 128 to about 68, and no pull request build takes a macOS runner. With the fail-fast setting and the by-hand builds ofrcit stops, that is about 370 runner minutes a day over those days. The release pull request adds one full build, about 128 runner minutes, for each release.How it was checked
ci/setup-environment.ps1.nightly-pipeline.ymlare identical to the old ones apart from their order,needs,if, the new input and the schedule.rcat 24592ac. The one conflict wasAGENTS.md, whererchad added the Releases, Versions and timing sections after the CI section, and both are kept.Setting 'PullRequestSha'lines are e1a3546.ci/select-options.ps1saw a change outside the package folders and chose every entry but macOS, so six jobs ran, each with 1,355 unit tests passed and 2 skipped and 132 integration tests passed and 4 skipped. The Selenium contract ran onUbuntu_Node_24alone, "Passed! - Failed: 0, Passed: 9" against the cloud example and again against the on-premise example, with noxdg-openline, and the other five said "Another entry runs the Selenium contract tests for this pull request."rcstill prints "Selenium contract tests passed" beside "xdg-open: file '/usr/bin/dotnet' does not exist" in both Ubuntu jobs on Node 22 and 24, with no test count.ad948739, after that build, changes one sentence of
AGENTS.mdalone, so that it says a native change adds Node 24 on Windows and on Linux ARM.This draft changes only CI scripts, workflows and their notes, so under James Rosewell's decision of 11:35 UTC on 12 November it needs only its quick checks. The build above was run as well because the Selenium contract can now fail on Linux.
What it gives up
On a pull request, macOS, Node 22 on Windows and ARM unless a change falls outside the package folders, Node 24 on Windows and ARM unless native code changes, the Selenium contract on all but one configuration, and performance. A fault that shows only there is found by the nightly build of
rcor by the release pull request build, before anything reachesmain. The contract now really runs on Linux, which it did not before.Merge order
The common-ci change it needs is on common-ci
main(1c5c0e0), which hasfull-matrix,fail-fastandbuild-without-pull-requestsinnightly-pull-requests.yml, theci/select-options.ps1step innightly-pull-request.configure-pr.ps1lines 36 to 41 andrelease-pull-request.yml. So it can merge intorcand reachmainwith the next release.What remains
pull_requesttrigger onmainalone (cloud-51did.ymllines 32 to 36 at 24592acb), so no pull request intorchas run them since changes moved torc. Addingrcis left for a change of its own, because changing that workflow runs it on the pull request.