Skip to content

ci: balance acceptance slices by measured suite duration - #754

Merged
oc-tmueller merged 3 commits into
masterfrom
ci/balance-acceptance-slices
Nov 3, 2026
Merged

oc-tmueller merged 3 commits into
masterfrom
ci/balance-acceptance-slices

Conversation

@oc-tmueller

Copy link
Copy Markdown
Member

Acceptance runs on pushes and PRs take about an hour; weekly and manual full runs take 3–4 hours. Two causes:

  • Unbalanced parts. run.sh --part splits the sorted suite list by count. In the smoke run 41643543217, 10.16.7 cli 2/2 ran 55 min (cliLocalStorage + cliMain + cliProvisioning) while cli 1/2 took 14. Full-run API parts ran from 30 to 118 min.
  • Runner cap. The org's plan allows 20 concurrent jobs, a full run has 24 test jobs, and PR runs pile up. In 41616785584 jobs waited up to 146 min to start.

Changes

  • .github/acceptance/suite-minutes.tsv: minutes per suite, the longest seen in recent 10.16.x / 11.0.1 / 11.1.0 runs.
  • .github/acceptance/plan-slices.sh: packs the suites into slices of about equal duration (longest first, each into the least-loaded slice). The plan job takes the suite list from the checksum-verified -qa tarball, and each slice runs with run.sh --suites (supported by both 10.16.7 and 11.1.0).
    • A suite missing from the table still runs, with a default duration and a warning.
    • The plan fails if any suite is missing, duplicated, or a slice comes out empty.
  • main.yml: a new push to a PR cancels that PR's older run. Runs on master, tags, the schedule and manual runs each get their own concurrency group, so they are never cancelled and never wait for each other.

Expected effect

Predicted from the table, not yet measured:

before after
smoke (push/PR) ~60 min, 8 jobs ~25 min: 4 api × ~20 + 3 cli × ~23 min per release, 14 jobs
full (weekly/manual) 3–4 h, 24 jobs ~90 min when nothing else runs: 26 api × 28–33 + 3 cli per release, 58 jobs

Full runs stay bounded by the 20-runner cap (~1,600 runner-minutes).

The table needs refreshing when the suites change a lot. A suite it doesn't know only costs some balance, not coverage.

🤖 Generated with Claude Code

oc-tmueller and others added 3 commits November 3, 2026 16:30
run.sh --part splits the sorted suite list by count, so one part could run
55 minutes while its sibling finished in 14. Pack the suites into slices of
about equal duration instead, by the minutes each took in recent runs, and
run each slice with run.sh --suites.

Also cancel a pull request's superseded runs: they compete for the
organization's 20 concurrent runners and queued later jobs for up to
two hours.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
More slices than suites left some empty, and run.sh --suites "" runs every
suite of the type. The cli suites always run in full, so weigh them by the
full column in smoke runs too, as the table's header says.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
Several suites of 0 minutes went to the same empty slice and left another
one without any. Break ties by the number of suites in a slice. Weigh the
cli suites by the longer of both columns, as the table records the
longest time seen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
@oc-tmueller
oc-tmueller merged commit 4fbb3f4 into master Nov 3, 2026
23 checks passed
@oc-tmueller
oc-tmueller deleted the ci/balance-acceptance-slices branch November 3, 2026 16:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant