Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,7 @@ jobs:
# * `run-heavy`: the Linux build/test/lint lane. Pushes always; pull
# requests only when trusted (this repository, or a fork targeting an
# integration branch) and either ready for review or labelled `ci-full`.
# A draft gets the light gates (this job, commit lint, drift, harness)
# and nothing else: with 20 free runner slots, a swarm of drafts each
# spending ~30 jobs per push queued the integration branch for hours.
# A draft runs no job at all (see the `if` below).
# * `run-os`: the macOS and Windows matrices. Pushes, or a pull request
# labelled `ci-os`. macOS has its own 5-slot cap and Windows shards take
# 7 jobs; both verify the same code the Linux lane already covers and
Expand All @@ -54,6 +52,11 @@ jobs:
# hotpath profile/coverage workflows.
scope-gate:
name: Scope gate
# A draft runs nothing at all. A swarm opened 130 drafts in ten minutes
# and even three light gates apiece queued the release behind ~400 jobs;
# a job that is skipped here costs no runner, and every guarded job reads
# this job's outputs, so skipping it skips them. `ci-full` opts a draft in.
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft || contains(github.event.pull_request.labels.*.name, 'ci-full') }}
runs-on: ubuntu-latest
timeout-minutes: 5
permissions:
Expand Down Expand Up @@ -239,6 +242,7 @@ jobs:

benchmark-harness:
name: Benchmark harness self-tests
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft || contains(github.event.pull_request.labels.*.name, 'ci-full') }}
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
Expand All @@ -256,6 +260,7 @@ jobs:
# queue entries per push doing what one does.
gates:
name: Repository gates
if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft || contains(github.event.pull_request.labels.*.name, 'ci-full') }}
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
Expand Down
4 changes: 2 additions & 2 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -257,8 +257,8 @@ integration branch waits behind, so a run spends only what its state earns:

| State | Runs |
|---|---|
| Draft | Light gates only: scope gate, repository gates (commit lint, release guards, rustfmt), benchmark-harness self-tests. |
| Ready for review (or labelled `ci-full`) | The Linux lane: build, clippy, feature gates, dashboard, Linux test partitions, PR dogfood with the MCP conformance smoke. |
| Draft | Nothing. Mark it ready or add `ci-full` to run CI. |
| Ready for review (or labelled `ci-full`) | Repository gates (commit lint, release guards, rustfmt), benchmark-harness self-tests, and the Linux lane: build, clippy, feature gates, dashboard, Linux test partitions, PR dogfood with the MCP conformance smoke. |
| Labelled `ci-os` | Adds the macOS and Windows matrices. |
| Labelled `ci-hosts` | Adds the stock Hermes / Claude Code / OpenCode integrations. |
| Labelled `perf` | Adds hotpath parity and runs the hotpath profile, coverage, and runtime-core workflows. |
Expand Down
Loading