PRD prd-new: macOS (Apple Container) CI runner #479
Reference in New Issue
Block a user
Delete Branch "prd-macos-container-ci-runner"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #426.
PRD:
docs/prds/prd-new-macos-container-ci-runner.mdSummary
CI had no runner for the
macos-container(Apple Container) backend — Docker and Firecracker are exercised, macOS is not — which is how thegateway_init.pysupervisor regression survived onmainfor that backend. Builds on #470 (#414), whoseis_backend_readypreflight and backend-agnostic guards this job plugs into.Adds
integration-macos(.gitea/workflows/test.yml): runstests/integrationagainstBOT_BOTTLE_BACKEND=macos-containeron a self-hosted host-mode macOS runner (labelmacos; Apple Container can't run in a Linux container, so it can't reuse thekvmrunner).main+workflow_dispatchonly, never PRs, and deliberately not in thecoveragejob'sneeds. A single laptop that sleeps/roams must not block a merge, and not gating on PRs also keeps fork PRs off the host-mode runner.command -v container,container system status, and./cli.py backend status --backend=macos-container.bot-bottle-mac-infrasingleton (#425): aconcurrencygroup serializes runs and anif: always()teardown removes the container on exit.Relaxes the
TestSandboxEscapeCI skip guard. It skipped every backend butfirecrackerunderGITEA_ACTIONS, so it would also skip on a host-mode macOS runner — leaving the macOS job green while skipping the one end-to-end test that actually boots a bottle (and the test whosesetUpClasslaunch would catch a revertedinfra.pysupervisor fix, satisfying AC#4). The guard's real target is the containerized act_runner, so it now allows both host-mode backends (firecracker,macos-container) through.Docs: README "macOS Apple Container" CI note (runner provisioning) and
docs/ci.md. Also corrects a stale README line that claimed git-gate is "deferred" on the macOS backend — it isn't; it runs over the gateway's consolidatedgit-httpdaemon with dynamic key provisioning/revocation (only the legacy per-bottlegit://daemon is unused), so sandbox-escape attack 5 runs the same as on the other backends.Notes
Full unit suite (2233) green; workflow YAML validated; skip-guard truth table verified.
152726dc8ctoa65eff45f5@didericis-claude remove the push-to-main, and make it dispatch only
Done in
74632db.integration-macosis now dispatch-only — dropped thepushtrigger so itsifis justgithub.event_name == 'workflow_dispatch'. Never runs on push (or PRs) anymore; a manualworkflow_dispatchis the only way to trigger it. Updated the job comment,docs/ci.md, the README CI note, and the PRD to match.74632dbaebto27dea58ae1