Skip to content

ci: adopt nextest profiles; reshape the KVM lane to its end state - #702

Merged
norrietaylor merged 6 commits into
mainfrom
ci/nextest-profile
Jul 10, 2026
Merged

ci: adopt nextest profiles; reshape the KVM lane to its end state#702
norrietaylor merged 6 commits into
mainfrom
ci/nextest-profile

Conversation

@norrietaylor

@norrietaylor norrietaylor commented Jul 10, 2026

Copy link
Copy Markdown
Member

What

Two halves, one dependency chain (the KVM reshape consumes the nextest config):

1. .config/nextest.toml + --profile ci in core-tests

  • default (local runs): surface slow tests at 60s, never kill.
  • ci (core-tests composite → ci.yml test, ci-linux-native tests, release.yml test): fail-fast = false, hung tests hard-killed at 5 min, leak visibility, --no-tests=fail so an empty selection fails loudly.
  • vm (the KVM lane's archived harnesses): one VM at a time, boots get a generous 120s slow period but a hung boot dies at 6 minutes instead of burning the 30-minute job timeout, longer leak window for the vmm children.
  • No retries anywhere: a same-invocation retry of a failed VM boot runs against the leaked __krun-vmm/gvproxy of the previous attempt (#588); reap + terminate-after remain the mitigation. And the workspace suite has no recorded flakes to paper over.

2. KVM lane end shape (ci-linux-kvm.yml)

  • nextest archive replaces testbins.json + run-testbin.sh (deleted): build-linux ships nextest-archive.tar.zst in the testbed; test-kvm — still toolchain-free — selects harnesses with filtersets under --profile vm.
  • The unified session e2e joins the lane (scripts/session-e2e.sh, the same proof the native and macOS lanes run), covering Deployment Model 3: minimal --minvmd activate auto-spawns minvmd, boots the microVM, round-trips a session exec over the vsock bridge, destroy/stop. The CLI is built in build-linux as a separate cargo invocation (a combined build feature-unifies libkrun into the CLI — the regression class the macOS lane hit) and ships in the testbed; a sudo reap precedes it (relay leftovers are root-owned); cli-e2e-boot.log joins the log artifact.
  • Daemon lifecycle blob → scripts/lifecycle-e2e.sh: PATH-resolved minvmd (no cargo, macOS-reusable), temp workdir, EXIT-trap teardown so a failed assert can't strand a daemon.
  • krun_add_disk3 export assert moves into setup-libkrun-linux, mirroring the macOS composite and closing a gap: release.yml uses the composite and previously had no check. Early actionable failure; minvmd's compile-time link is the real backstop.

Also per owner direction: workflow comments drop PR/issue and R-numbers (history belongs in commits), and DM labels are corrected against docs/specs/03-spec-networking (DM1 is the macOS model; this lane is DM3 — session-e2e.sh header fixed, "DM1 relay" step names now mechanism-descriptive).

Part of the CI end-state migration (#687).

Verification

  • This PR's own KVM lane run is the proof: filterset selections must match the previous explicit list (boot, minimald_exec_over_bridge, relay), then daemon lifecycle OK and session e2e OK.
  • nextest config parse-checked locally (profiles ci/vm resolve); scripts shellcheck-clean.
  • Native lane runs the workspace suite under profile: ci (verified live on the earlier run of this PR: 943 tests, 9 skipped, nothing slow-flagged).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Tests
    • Added separate Nextest execution profiles for local, CI, and VM runs with tuned timeouts, retries, and failure behavior.
    • Updated CI test execution to use archived harness artifacts and targeted nextest binary filters for Linux/KVM e2e coverage (boot, sessions, relay, and CLI).
    • Added lifecycle e2e coverage validating daemon start/running/stop transitions.
    • Improved clarity when test selections are empty.
  • Bug Fixes
    • Added early verification that required virtualization library symbols are available during setup.

Add a nextest config with two profiles: profile.default for local runs
(surface slow tests, never kill), and profile.ci for the core-tests
composite (fail-fast off for full failure reports, hard-kill at 5
minutes via slow-timeout terminate-after, leak detection at 1s).

No retries anywhere: the workspace suite has no recorded flakes, and a
same-invocation retry of a VM boot test would run against the leaked
__krun-vmm/gvproxy processes of the failed attempt (#588) - the lane
reap steps plus terminate-after remain the mitigation.

core-tests also gains --no-tests=fail: an empty selection is a broken
filter or a dropped target, not a pass.

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 70ceff4f-ba03-41d9-8db9-00cb31f7af21

📥 Commits

Reviewing files that changed from the base of the PR and between b557f46 and bcbc445.

📒 Files selected for processing (2)
  • .github/workflows/ci-linux-kvm.yml
  • .github/workflows/ci-linux-native.yml
🚧 Files skipped from review as they are similar to previous changes (2)
  • .github/workflows/ci-linux-native.yml
  • .github/workflows/ci-linux-kvm.yml

📝 Walkthrough

Walkthrough

Nextest gains local, CI, and VM profiles. Linux/KVM CI switches to archived harness execution, adds lifecycle and CLI e2e coverage, validates libkrun setup, and updates native workflow triggers.

Changes

Nextest configuration and test selection

Layer / File(s) Summary
Configure Nextest profiles and core tests
.config/nextest.toml, .github/actions/core-tests/action.yml, .github/workflows/ci-linux-native.yml
Adds default, CI, and VM profiles; Core Tests selects CI behavior and rejects empty selections; native CI runs when Nextest configuration changes.

Linux/KVM archive-based execution

Layer / File(s) Summary
Stage the archived KVM testbed
.github/workflows/ci-linux-kvm.yml
Builds and unpacks Nextest archives, stages binaries and libkrun files, and prepares relay execution.
Run archived KVM e2e coverage
.github/workflows/ci-linux-kvm.yml, scripts/session-e2e.sh
Runs selected e2e harnesses, adds CLI and lifecycle coverage, cleans processes, uploads logs, and updates VM deployment comments.

Lifecycle and setup validation

Layer / File(s) Summary
Validate daemon and libkrun behavior
.github/actions/setup-libkrun-linux/action.yml, scripts/lifecycle-e2e.sh
Checks the krun_add_disk3 export and verifies daemon transitions from detached startup to running and stopped states.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related issues

Possibly related PRs

Suggested reviewers: twitchyliquid64, jtnkminimal, msample

Poem

A rabbit archives tests with care,
Sends VM harnesses through the air.
Daemons start, then gently cease,
While libkrun checks bring CI peace.
Hop to green CI everywhere!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is specific and matches the main changes: Nextest profiles plus the KVM CI lane refactor.
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.

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.github/actions/core-tests/action.yml (1)

22-24: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Pin or require the validated nextest version.

The workflow installs nextest without a version, so the tool can drift independently from the 0.9.140 version used for validation. Pin the installer (tool: nextest@0.9.140) or add nextest-version = "0.9.140" to the repository config. The installer supports explicit tool-version syntax. (github.com)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/actions/core-tests/action.yml around lines 22 - 24, Pin the nextest
version used by the workflow to the validated 0.9.140 release. Update the
install-action configuration to use explicit tool-version syntax, such as tool:
nextest@0.9.140, or define nextest-version = "0.9.140" in the repository
configuration, ensuring it matches the cargo nextest invocation in the test
step.

Source: MCP tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In @.github/actions/core-tests/action.yml:
- Around line 22-24: Pin the nextest version used by the workflow to the
validated 0.9.140 release. Update the install-action configuration to use
explicit tool-version syntax, such as tool: nextest@0.9.140, or define
nextest-version = "0.9.140" in the repository configuration, ensuring it matches
the cargo nextest invocation in the test step.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c04bc493-c27d-4691-b3c4-a4b26e21e59d

📥 Commits

Reviewing files that changed from the base of the PR and between 4695f55 and edf167d.

📒 Files selected for processing (2)
  • .config/nextest.toml
  • .github/actions/core-tests/action.yml

norrietaylor and others added 2 commits July 9, 2026 22:14
A PR touching only .config/nextest.toml (e.g. a future profile edit)
must re-run the tests that consume it; this PR's own run only triggered
because it also edited the core-tests composite.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@norrietaylor norrietaylor changed the title ci: adopt .config/nextest.toml with a ci profile (no retries) ci: adopt nextest profiles; reshape the KVM lane to its end state Jul 10, 2026
Four changes, one review story (nextest archive, unified session e2e,
scripts over YAML, composite verify):

- nextest archive replaces the hand-rolled testbins.json + run-testbin.sh:
  build-linux ships testbed/nextest-archive.tar.zst and the test job
  selects harnesses with filtersets under the new profile.vm (one VM at
  a time, hung boots hard-killed at 6 min, no retries - a same-invocation
  retry runs against the leaked vmm/gvproxy of the failed attempt, #588).
- the unified session e2e (scripts/session-e2e.sh) joins the lane,
  covering Deployment Model 3 (native Linux + VM): the minimal CLI is
  built in build-linux (separate invocation - a combined build unifies
  libkrun into the CLI, the #694 regression class), ships in the
  testbed, and drives activate/exec/destroy from PATH, with the #588
  reap (sudo: relay leftovers are root-owned) before it and
  cli-e2e-boot.log uploaded.
- the daemon-lifecycle shell blob becomes scripts/lifecycle-e2e.sh:
  PATH-resolved minvmd (no cargo, macOS-reusable), temp workdir, and an
  EXIT-trap teardown so a failed assert cannot strand a daemon.
- the krun_add_disk3 export assert moves into setup-libkrun-linux,
  mirroring the macOS composite and covering release.yml (which uses the
  composite but had no check); an early actionable failure - minvmd's
  compile-time link is the real backstop.

Also per owner direction: workflow comments drop PR/issue and R-numbers
(history belongs in commits, not YAML), and the DM labels are corrected
against docs/specs/03-spec-networking (DM1 is the macOS model; this
lane is DM3, session-e2e.sh header fixed accordingly).

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@norrietaylor
norrietaylor enabled auto-merge (squash) July 10, 2026 05:44

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/ci-linux-kvm.yml:
- Around line 308-326: Move the “Reap leftover VM processes” step so it runs
immediately before the “Daemon lifecycle (run --detach → status → stop)” step.
Preserve its existing sudo pkill commands and explanatory comments, ensuring
leaked minvmd, __krun-vmm, and gvproxy processes are removed before the
lifecycle script starts a fresh daemon.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3a4c74ed-c620-4fbe-aef6-e4a1e2fb5336

📥 Commits

Reviewing files that changed from the base of the PR and between edf167d and 3633d0a.

📒 Files selected for processing (6)
  • .config/nextest.toml
  • .github/actions/setup-libkrun-linux/action.yml
  • .github/workflows/ci-linux-kvm.yml
  • .github/workflows/ci-linux-native.yml
  • scripts/lifecycle-e2e.sh
  • scripts/session-e2e.sh
✅ Files skipped from review due to trivial changes (2)
  • scripts/session-e2e.sh
  • .github/workflows/ci-linux-native.yml

Comment thread .github/workflows/ci-linux-kvm.yml Outdated
The lifecycle step spawns a fresh daemon just like the CLI session e2e,
so it was equally exposed to leaked __krun-vmm/gvproxy children from a
failed harness run. Move the reap to run immediately after the harness
e2es, ahead of both fresh-daemon steps.

Addresses CodeRabbit review on #702.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@norrietaylor

Copy link
Copy Markdown
Member Author

CodeRabbit findings addressed in b557f46:

  • Reap ordering (Major) — valid: the Daemon lifecycle step spawns a fresh daemon just like the CLI session e2e and was equally exposed to leaked __krun-vmm/gvproxy children. The reap now runs immediately after the harness e2es, ahead of both fresh-daemon steps.
  • Pin nextest version (Trivial) — skipped: every taiki-e/install-action use in this repo (cross, nextest in core-tests) is deliberately unpinned-latest; pinning one instance here would just drift from the others. Tool-version pinning is a policy call for the upcoming docs/contract PR.

@norrietaylor

Copy link
Copy Markdown
Member Author

@CodeRabbit review

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

# Conflicts:
#	.github/workflows/ci-linux-native.yml
@norrietaylor
norrietaylor merged commit 579260a into main Jul 10, 2026
19 checks passed
@norrietaylor
norrietaylor deleted the ci/nextest-profile branch July 10, 2026 16:59
norrietaylor added a commit that referenced this pull request Jul 10, 2026
* ci: adopt .config/nextest.toml with a ci profile

Add a nextest config with two profiles: profile.default for local runs
(surface slow tests, never kill), and profile.ci for the core-tests
composite (fail-fast off for full failure reports, hard-kill at 5
minutes via slow-timeout terminate-after, leak detection at 1s).

No retries anywhere: the workspace suite has no recorded flakes, and a
same-invocation retry of a VM boot test would run against the leaked
__krun-vmm/gvproxy processes of the failed attempt (#588) - the lane
reap steps plus terminate-after remain the mitigation.

core-tests also gains --no-tests=fail: an empty selection is a broken
filter or a dropped target, not a pass.

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(linux-native): trigger the lane on nextest config changes

A PR touching only .config/nextest.toml (e.g. a future profile edit)
must re-run the tests that consume it; this PR's own run only triggered
because it also edited the core-tests composite.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(linux-kvm): reshape the lane to its end state

Four changes, one review story (nextest archive, unified session e2e,
scripts over YAML, composite verify):

- nextest archive replaces the hand-rolled testbins.json + run-testbin.sh:
  build-linux ships testbed/nextest-archive.tar.zst and the test job
  selects harnesses with filtersets under the new profile.vm (one VM at
  a time, hung boots hard-killed at 6 min, no retries - a same-invocation
  retry runs against the leaked vmm/gvproxy of the failed attempt, #588).
- the unified session e2e (scripts/session-e2e.sh) joins the lane,
  covering Deployment Model 3 (native Linux + VM): the minimal CLI is
  built in build-linux (separate invocation - a combined build unifies
  libkrun into the CLI, the #694 regression class), ships in the
  testbed, and drives activate/exec/destroy from PATH, with the #588
  reap (sudo: relay leftovers are root-owned) before it and
  cli-e2e-boot.log uploaded.
- the daemon-lifecycle shell blob becomes scripts/lifecycle-e2e.sh:
  PATH-resolved minvmd (no cargo, macOS-reusable), temp workdir, and an
  EXIT-trap teardown so a failed assert cannot strand a daemon.
- the krun_add_disk3 export assert moves into setup-libkrun-linux,
  mirroring the macOS composite and covering release.yml (which uses the
  composite but had no check); an early actionable failure - minvmd's
  compile-time link is the real backstop.

Also per owner direction: workflow comments drop PR/issue and R-numbers
(history belongs in commits, not YAML), and the DM labels are corrected
against docs/specs/03-spec-networking (DM1 is the macOS model; this
lane is DM3, session-e2e.sh header fixed accordingly).

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(linux-kvm): reap harness leftovers before the daemon lifecycle step

The lifecycle step spawns a fresh daemon just like the CLI session e2e,
so it was equally exposed to leaked __krun-vmm/gvproxy children from a
failed harness run. Move the reap to run immediately after the harness
e2es, ahead of both fresh-daemon steps.

Addresses CodeRabbit review on #702.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: cache discipline, slim CI debug info, and a --locked sweep

Three cross-lane changes that must fork every cache exactly once:

- rust-cache gains shared-key (one per job class that compiles the same
  artifacts: workspace/tests/clippy/native-e2e/mac-unit) and save-if
  restricted to main, via new setup-rust inputs forwarded from
  core-tests. PR branches restore but never write, so PR churn stops
  LRU-evicting the main caches every PR restores from (the 10 GB pool
  is shared repo-wide).
- the two multi-GB raw actions/cache users (KVM build-linux, macOS
  artifacts stage2) split into cache/restore + main-only cache/save
  guarded on cache-hit.
- CARGO_PROFILE_DEV_DEBUG=line-tables-only in CI (setup-rust env step;
  explicit job env on the mac and KVM jobs that bypass the composite):
  usable backtraces, smaller target trees and caches, faster links -
  without a named Cargo profile, which would move output out of
  target/debug and break codesign/testbed/justfile paths.
- --locked on every workflow cargo invocation (build/test/clippy/
  archive), so a stale Cargo.lock fails loudly instead of silently
  re-resolving; previously only core-tests' cargo fetch enforced it.

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
norrietaylor added a commit that referenced this pull request Jul 10, 2026
* ci: adopt .config/nextest.toml with a ci profile

Add a nextest config with two profiles: profile.default for local runs
(surface slow tests, never kill), and profile.ci for the core-tests
composite (fail-fast off for full failure reports, hard-kill at 5
minutes via slow-timeout terminate-after, leak detection at 1s).

No retries anywhere: the workspace suite has no recorded flakes, and a
same-invocation retry of a VM boot test would run against the leaked
__krun-vmm/gvproxy processes of the failed attempt (#588) - the lane
reap steps plus terminate-after remain the mitigation.

core-tests also gains --no-tests=fail: an empty selection is a broken
filter or a dropped target, not a pass.

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(linux-native): trigger the lane on nextest config changes

A PR touching only .config/nextest.toml (e.g. a future profile edit)
must re-run the tests that consume it; this PR's own run only triggered
because it also edited the core-tests composite.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(linux-kvm): reshape the lane to its end state

Four changes, one review story (nextest archive, unified session e2e,
scripts over YAML, composite verify):

- nextest archive replaces the hand-rolled testbins.json + run-testbin.sh:
  build-linux ships testbed/nextest-archive.tar.zst and the test job
  selects harnesses with filtersets under the new profile.vm (one VM at
  a time, hung boots hard-killed at 6 min, no retries - a same-invocation
  retry runs against the leaked vmm/gvproxy of the failed attempt, #588).
- the unified session e2e (scripts/session-e2e.sh) joins the lane,
  covering Deployment Model 3 (native Linux + VM): the minimal CLI is
  built in build-linux (separate invocation - a combined build unifies
  libkrun into the CLI, the #694 regression class), ships in the
  testbed, and drives activate/exec/destroy from PATH, with the #588
  reap (sudo: relay leftovers are root-owned) before it and
  cli-e2e-boot.log uploaded.
- the daemon-lifecycle shell blob becomes scripts/lifecycle-e2e.sh:
  PATH-resolved minvmd (no cargo, macOS-reusable), temp workdir, and an
  EXIT-trap teardown so a failed assert cannot strand a daemon.
- the krun_add_disk3 export assert moves into setup-libkrun-linux,
  mirroring the macOS composite and covering release.yml (which uses the
  composite but had no check); an early actionable failure - minvmd's
  compile-time link is the real backstop.

Also per owner direction: workflow comments drop PR/issue and R-numbers
(history belongs in commits, not YAML), and the DM labels are corrected
against docs/specs/03-spec-networking (DM1 is the macOS model; this
lane is DM3, session-e2e.sh header fixed accordingly).

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci(linux-kvm): reap harness leftovers before the daemon lifecycle step

The lifecycle step spawns a fresh daemon just like the CLI session e2e,
so it was equally exposed to leaked __krun-vmm/gvproxy children from a
failed harness run. Move the reap to run immediately after the harness
e2es, ahead of both fresh-daemon steps.

Addresses CodeRabbit review on #702.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: cache discipline, slim CI debug info, and a --locked sweep

Three cross-lane changes that must fork every cache exactly once:

- rust-cache gains shared-key (one per job class that compiles the same
  artifacts: workspace/tests/clippy/native-e2e/mac-unit) and save-if
  restricted to main, via new setup-rust inputs forwarded from
  core-tests. PR branches restore but never write, so PR churn stops
  LRU-evicting the main caches every PR restores from (the 10 GB pool
  is shared repo-wide).
- the two multi-GB raw actions/cache users (KVM build-linux, macOS
  artifacts stage2) split into cache/restore + main-only cache/save
  guarded on cache-hit.
- CARGO_PROFILE_DEV_DEBUG=line-tables-only in CI (setup-rust env step;
  explicit job env on the mac and KVM jobs that bypass the composite):
  usable backtraces, smaller target trees and caches, faster links -
  without a named Cargo profile, which would move output out of
  target/debug and break codesign/testbed/justfile paths.
- --locked on every workflow cargo invocation (build/test/clippy/
  archive), so a stale Cargo.lock fails loudly instead of silently
  re-resolving; previously only core-tests' cargo fetch enforced it.

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: flip every lane to always-trigger with in-workflow gates

The last two trigger-level path filters (ci.yml's paths-ignore +
ci-macos.yml/ci-shell-installer.yml's paths) become dorny/paths-filter
changes jobs with if: always() aggregators, completing the lane pattern
the native and KVM lanes established. This unblocks the ruleset flip:
a required context a trigger filter skips stays Expected forever and
wedges the PR; a skipped in-workflow job reports skipped, which the
aggregators treat as pass.

- ci.yml: changes job (code = everything minus md/docs/LICENSE, the old
  paths-ignore inverted); all six jobs gated; ci-success skip-tolerant.
- ci-macos.yml: trigger paths move into a changes filter (keeping the
  rust-toolchain.toml entry); artifacts/e2e/unit gated (the e2e keeps
  the RUN_MACOS_CI kill-switch, ANDed); NEW ci-macos-success aggregator
  - the fifth and final required-check context.
- ci-shell-installer.yml: same flip; aggregator now skip-tolerant.
- ci-docs-skip.yml DELETED: the inverse-path hack (and its wedge and
  silent-ungate failure modes) is obsolete - docs-only changes now skip
  jobs inside always-running workflows.
- ci-gvproxy.yml DELETED: pin verification lives at point-of-use
  (fetch-gvproxy.sh SHA-checks in the KVM lane and release);
  vendor/gvproxy/** joins the KVM changes filter so a pin bump re-runs
  the lane that consumes it.
- workflow comments drop remaining PR/issue and R-numbers (owner
  direction: history belongs in commits, not YAML).

The ruleset itself still requires only ci-success; flipping it to the
five aggregator contexts happens after the soak.

Refs: #687

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: gate the new path filters to pull_request events

Same fix as the lane hotfix: dorny cannot diff push events against our
shallow, credential-free checkouts; pushes to main and dispatches run
everything, PRs keep path economy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: persist-credentials false on every checkout

The changes jobs hardened their checkouts but the pre-existing job
checkouts still left the token in git config; make it uniform across
ci.yml and ci-shell-installer.yml. No job in either workflow needs git
credentials after checkout.

Addresses CodeRabbit review on #712.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants