Skip to content

ci: shard e2e into 4 legs + repair release publish#193

Merged
sunib merged 3 commits into
mainfrom
e2e-runner-sharding
Jul 3, 2026
Merged

ci: shard e2e into 4 legs + repair release publish#193
sunib merged 3 commits into
mainfrom
e2e-runner-sharding

Conversation

@sunib

@sunib sunib commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Three things land on this branch, plus the design doc that motivated them.

Repair the release publish pipeline

The first real release (0.29.1) failed in both final publish jobs:

  • Immutable releases — release-please publishes the GitHub release, and GitHub now rejects post-publish asset uploads. Fix: create the release as a draft, attach every asset to the draft, and add a publish-release job that flips it to published only after both publish jobs succeed.
  • Helm chart signingcosign failed UNAUTHORIZED because helm registry login doesn't populate ~/.docker/config.json. Fix: add a cosign login before signing.

Shard the e2e suite across 4 runners

Cuts the wall-clock e2e gate now that up to 20 concurrent runners are available:

  • fullfull-manager (manager) + full-core (!manager && !image-refresh) — exact-complement label filters (--dry-run: 37 + 18 = 55 specs = the old lane, nothing added/dropped). Both shards still collect coverage; Codecov unions the e2e uploads, so merged coverage is unchanged.
  • quickstartquickstart-install (helm + manifest installs) + image-refresh (local rebuild chain, own runner).
  • Leg balance is a provisional first cut — rebalance from the per-leg timings once a green run produces them.

README badges

Add the OpenSSF Best Practices badge, drop the retired Go Report Card badge.


Also adds the design doc docs/design/e2e-ci-runner-sharding-plan.md.

Closes #189
Closes #183

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds a new design document, docs/design/e2e-ci-runner-sharding-plan.md, describing a plan to shard the e2e GitHub Actions workflow into ~6 balanced legs across up to 20 runners, including baseline timings, a target matrix, constraints, rollout phases, and open questions.

Changes

E2E CI Sharding Plan

Layer / File(s) Summary
Problem statement and baseline timings
docs/design/e2e-ci-runner-sharding-plan.md
Documents the concurrency limitation, rationale for sharding over increasing --procs, and measured baseline timings for full and quickstart lanes.
Prior attempt analysis and target matrix proposal
docs/design/e2e-ci-runner-sharding-plan.md
Explains why an earlier sharding attempt was insufficient and proposes a target matrix of shard legs with projected wall-clock and cost estimates.
Constraints, rollout, and open questions
docs/design/e2e-ci-runner-sharding-plan.md
Covers coverage merging, required status check aggregation, operational guardrails, phased rollout, rollback plan, and remaining open questions with references.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Related Issues: None specified

Related PRs: None specified

Suggested labels: documentation, ci

Suggested reviewers: None specified

Poem:

A rabbit plans in markdown light,
Six shards to run through CI's night,
Twenty runners, timed with care,
Coverage merged from everywhere,
Rollback ready, rollout planned—
A tidy doc, by rabbit hand. 🐇

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Description check ⚠️ Warning The description is informative but does not follow the required template sections or checkbox format. Rewrite it using the repo template: Description, Type of Change, Testing, Checklist, Related Issues, Screenshots, and Additional Notes.
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title matches the main changes: e2e CI sharding and release publish pipeline fixes.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch e2e-runner-sharding

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@codecov

codecov Bot commented Jul 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

sunib and others added 2 commits July 3, 2026 19:44
With the concurrent-runner limit raised to 20, revisit the matrix-sharding
idea that e2e-speedup-plan.md deferred ("Considered and skipped", item 2)
solely because of the old ~3-runner throttle.

Grounds the plan in measured step-level timings from a green PR run: both
e2e lanes are execution-dominated (full 636s exec / 4.6m overhead;
quickstart 823s exec / 4.2m overhead), and quickstart (~18m) — not full
(~15m) — is the real critical path. Proposes reshaping the 2-lane matrix
into ~6 balanced legs (label-filter split of the functional suite + break
up the sequential quickstart chain), each on its own runner + k3d cluster,
projecting the e2e gate from ~18m to ~8-10m.

Covers the details that must be handled: per-shard coverage merge via
Codecov flags, an e2e-complete aggregator so branch protection is matrix-
agnostic, keeping fail-fast:false, and why per-cluster isolation makes
sharding strictly safer than raising --procs on the singleton controller.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The 0.29.1 release — the first to exercise the new sign/attest + retag
pipeline — failed in both final publish jobs:

- publish-manifest could not attach sbom.spdx.json or append notes:
  release-please publishes the GitHub release and GitHub now enforces
  immutable releases, which reject post-publish asset/body edits. Create
  the release as a draft, attach every asset while it is still a draft, and
  add a publish-release job that flips it to published only after both
  publish jobs succeed (a failure now leaves an unpublished draft, not a
  half-populated immutable release).

- publish-helm's cosign chart signature failed with UNAUTHORIZED:
  `helm registry login` writes helm's own registry config, but cosign reads
  ~/.docker/config.json. Add an explicit `cosign login` before signing.

Also refresh the README badges:
- add the OpenSSF Best Practices badge (closes #189)
- drop the retired Go Report Card badge (closes #183)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sunib sunib force-pushed the e2e-runner-sharding branch from 7fc34fc to d0d257b Compare July 3, 2026 19:44
With up to 20 concurrent runners now available, split both e2e lanes to cut
the wall-clock gate (was max(full ~15m, quickstart ~18m)). Per
docs/design/e2e-ci-runner-sharding-plan.md this is Phases 1+2 at a 2-way split:

- full -> full-manager (`manager`) + full-core (`!manager && !image-refresh`).
  The two filters are exact complements of the old `!image-refresh` full
  filter; a ginkgo --dry-run confirms 37 + 18 = 55 specs, so no spec is added,
  dropped, or double-run. Both shards run config-dir installs and collect e2e
  coverage; Codecov unions same-flag uploads, so merged coverage is unchanged.
- quickstart -> quickstart-install (helm + manifest install validations on one
  cluster) + image-refresh (the local rebuild/reload/rollout chain on its own
  runner — the plan's likely-slowest slice).

test-e2e gains E2E_LABEL_FILTER / E2E_REPORT_NAME (defaults preserve a plain
`task test-e2e`); CI forwards them by env-name so the filter's `&&` never
reaches the shell. e2e is not a required status check, so no branch-protection
change is needed.

Leg membership is a provisional first cut — rebalance from the
e2e-ginkgo-reports-* per-spec timings once a green run produces them.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@sunib sunib changed the title docs: plan for sharding e2e CI across multiple runners ci: shard e2e into 4 legs + repair release publish Jul 3, 2026
@sunib sunib merged commit bda7e63 into main Jul 3, 2026
17 checks passed
@sunib sunib deleted the e2e-runner-sharding branch July 3, 2026 20:29
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.

OpenSSF best practices batch in README [BUG] Remove goreportcard from README.md

1 participant