You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor(test): run L5 E2E on GH Actions macOS runner, drop Tart VMs (#26)
Cirrus CI was gated on `only_if: $CIRRUS_CRON` and the repo has no paid
credits, so the ~900 lines of Tart-based L5 tests have never run. Replace
the VM wrapper with a MacHost helper that exec's directly against the
host, and trigger it from the free GitHub Actions macos-latest runner on
release tags / workflow_dispatch.
- testutil/tartvm.go -> testutil/machost.go: drop SSH/scp/expect-over-SSH
and the tart clone/boot/destroy lifecycle; require CI=true or
OPENBOOT_E2E_DESTRUCTIVE=1 to activate so local `go test -tags=e2e,vm`
is a no-op rather than a foot-gun.
- test/e2e/: rename TartVM -> MacHost across call sites; relax bare-system
assumptions that no longer hold on a GH runner (brew is preinstalled,
common CLI tools may be); make vmInstallHomebrew idempotent.
- Drop .cirrus.yml; add macos-e2e workflow job gated on release tags /
workflow_dispatch.
- Makefile: trim the test-vm-release -run regex to tests that actually
exist; reword comments to reflect destructive-host semantics.
- CLAUDE.md / CONTRIBUTING.md: update L5 references.
https://claude.ai/code/session_01Dg8nibLFZGKmeYgfUBQrsA
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -38,14 +38,14 @@ Tests are split across six tiers. Which one runs where:
38
38
|**L2 Integration**| Real `brew` / `git` / `npm` against temp dirs; real `httptest` servers |`make test-integration` (~75s) | CI on push/PR |
39
39
|**L3 Contract schema**| JSON schema validation against [openboot-contract](https://github.com/openbootdotdev/openboot-contract)| (runs in CI only) | CI on push/PR |
40
40
|**L4 E2E binary**| Compiled binary driven by scripts; `-tags=e2e`|`make test-e2e`| CI on release |
41
-
|**L5 E2E VM**|[Tart](https://github.com/cirruslabs/tart)macOS VMs (install Homebrew, run real flows) |`make test-vm-quick`(2 min) / `test-vm-release`(20 min) / `test-vm-full`(60 min) | Manual, before tagging a release |
41
+
|**L5 Destructive macOS**|Runs against a real macOS host (installs packages, modifies `~/.zshrc`, writes `defaults`) |`make test-vm-quick` / `test-vm-release` / `test-vm-full`— requires `CI=true` or `OPENBOOT_E2E_DESTRUCTIVE=1`| GH Actions `macos-latest` on release tags + manual dispatch|
42
42
|**L6 Destructive**| Actually installs real packages into a real system |`make test-destructive` / `test-smoke`| CI on release, plus manual `workflow_dispatch`|
43
43
44
44
Rules of thumb:
45
45
46
46
-**Local dev:** run nothing manually if hooks are installed. `make test-unit` on demand when you want a sanity check. Skip L2+ unless you're touching code that interacts with real brew/git/npm.
47
47
-**Before pushing:**`make test-unit` (the pre-push hook does this automatically).
48
-
-**Before tagging a release:**`make test-vm-release` locally (needs Tart).
48
+
-**Before tagging a release:**trigger the `macos-e2e` job via GitHub Actions (manual dispatch or tag push). To run locally on a throwaway macOS machine: `OPENBOOT_E2E_DESTRUCTIVE=1 make test-vm-release`.
0 commit comments