Skip to content

CI perf: coverage and e2e-build wait ~1.4 min for clippy on every run; clippy failed 0 of 256 PR runs in 7 days #1681

Closed

Description

Problem

coverage and e2e-build (needs: clippy) can't start until clippy finishes. Both critical-path chains, coverage and e2e-build → e2e (Gradle), therefore start about 1.4 min late on every CI run.

run event created → clippy done coverage e2e-build + Gradle e2e ci-ok
39880331011 merge_group 00:48:48 → 00:50:13 (1.42 min) 00:50:14 → 00:56:34 (6.33) 00:50:14 → 00:56:24 (1.25 + 4.91) 7.90
39882946034 pull_request clippy 01:15:19 → 01:16:47 (1.46 min) 01:16:48 → 01:24:43 (7.91, slow host) 01:16:48 → 01:22:26 (1.28 + 4.33) 9.57

The gate is meant to save money when clippy fails. It didn't fire in the last 7 days: across 256 pull_request CI runs since 10-16, 6 failed, and clippy failed in none of them. coverage failed in all 6. In the merge queue, merge-queue-fail-fast.yml already cancels the run on the first failed job, and windows-compile-check already skips the gate for that reason (#1385).

Proposed fix

  • Add a tiny preflight job (checkout plus the two reuse checks, ci-reuse-merge-group.py and ci-reuse-pr-head.py) that owns the reuse / pr_unchanged outputs. Change every needs.clippy.outputs.* to needs.preflight.outputs.*.
  • coverage and e2e-build get needs: preflight. The other needs: clippy jobs get needs: [preflight, clippy], so nothing else changes. Add preflight to ci-ok's needs. clippy keeps its name and stays required.
  • Every test still runs where it runs today. Only the start order changes.

Expected saving

About 1.2–1.4 min off every merge_group and PR ci-ok. That is ~1.4 min, minus a ~10–20 s runner start for preflight, on a ~7.9 min critical path, so about 16%. On a red clippy, the cost is at most one coverage + e2e-build (+ fan-out) on PRs, about 30 Linux job-min per incident. That's 0 incidents in 7 days.

ROI: (1.3 critical-path + 1.3 PR-latency) × 0.8 ÷ S(1) ≈ 2.1

Blocker

Not implemented this run: open PR #1639 (ci-janitor, agent:needs-human) also changes .github/workflows/ci.yml, and the implementer skips files another open PR changes. #1639's uv pin is already on main (ci.yml:1468-1472, pipenv-compatibility.yml:109), so #1639 is a no-op. Once it is closed, the next implementer run can take this issue.


Generated by Claude Code

Activity

  1. mikolalysenko commented on Oct 23, 2026

    @mikolalysenko
    CollaboratorAuthor

    [agent] Claiming this issue (CI lane). Branch: agent/fix-ci-coverage-skip-clippy-wait. Claim-ID: 2026-10-23T04:50:43Z-897958

    Plan: move the two reuse checks out of clippy into the existing release-readiness job (already a ~10 s Depot-4 job with no needs) so no new job is added, then let coverage and e2e-build depend on it instead of clippy. #1639 also touches ci.yml, but it is a no-op against main (its uv pin landed in aea79f5) and changes different lines, so it does not overlap this change.


    Generated by Claude Code

  2. mikolalysenko commented on Oct 23, 2026

    @mikolalysenko
    CollaboratorAuthor

    [agent] Draft PR: #1682


    Generated by Claude Code

  3. added a commit that references this issue on Oct 23, 2026
    f826f8c
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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions