Skip to content

CI: a push to main runs every test job, and the Linux/Windows relinker jobs repeat tests the full builds run #5227

Closed

Description

@LeandroLP23

What

Build jobs on main often wait several minutes for a runner before they start. Part of that wait comes from jobs that don't need to run.

Nine recent completed Build runs on main (2026-10-13, push and manual PR builds):

Phase linux windows
Wait for a runner (job start minus run creation) 129–417 s 48–341 s
Checkout with submodules 26–41 s 39–57 s
Configure 13–27 s 43–70 s
Build 135–609 s 253–510 s
ctest 66–133 s 47–83 s

Between 14:41 and 14:54 UTC more than 25 manual builds were queued. On top of those, every push to main starts up to 12 jobs: eligibility, relinker ×3, register context ×4 (two on macos-15-intel), write watch ×2, linux and windows.

Two kinds of these jobs don't add anything:

  1. A push to main runs every test job, whatever it changed. Pull requests already get path rules (register context only for its files, libc and the workflow, and so on), but the push branch of the gate sets every output to true. A merge that touches only AGC code still runs four register context jobs, two write watch jobs and three relinker jobs.
  2. When the full builds run, the Linux and Windows relinker jobs repeat their tests. In run 38397922579 the relinker-only ctest lists are subsets of the full builds' lists: 150 of the 1052 Linux tests and 145 of the 1069 Windows tests, with no test missing from the full lists. Only the macOS relinker job (clang, no full build) covers something the full builds don't. Automatic pull request builds have no full build, so all three relinker hosts are needed there.

A separate observation, not addressed here: ccache hit rates drop between merges (Linux 77 % and Windows 89 % in the manual builds at 14:31–14:42, 99 % at 14:48–14:50). The cache is saved only by push builds, which finish about 10 minutes after the merge, so the builds started in between work from an older main.

Proposal

#5228 applies the same path rules to pushes, falling back to every job when the files can't be listed. It also runs only the macOS relinker host when the full builds run.

AI-assisted: yes (Claude Code)

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions