v2.2.3
·
444 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
Breaking Changes
-
Rename the
sandboxaction torun(#166)dash14/buildcage/sandbox@...doesn't describe what the action does — it applies buildcage's network-isolation technology to run an arbitrary command, not "sandbox" it in some more general sense. The action is nowdash14/buildcage/run, matching what a workflow author actually calls it for. No backward-compatible alias is kept.
Before (v2.2.x):
- uses: dash14/buildcage/sandbox@<sha> with: run: npm install
After (v2.2.3):
- uses: dash14/buildcage/run@<sha> with: run: npm install
Features
- Generate a restrict-mode example in the
runaction's audit report (#170)- The
reportaction's audit-mode Job Summary already includes a ready-to-paste restrict-mode YAML example built from the audited hosts, saving a workflow author from hand-copying hostnames out of the table. Therunaction's own report renderer now generates the same kind of example — arun@<ref>step withproxy_mode: restrictand the discovered allowlist rules, plus the originalrun:command preserved so it stays copy-pasteable on its own
- The
Bug Fixes
- Handle read-only remount rejections on Docker-masked
/procmounts (#167)run-isolated.sh's read-only pass walks every mount under/proc/self/mountinfoand fails closed if a remount is rejected. Under Docker Desktop,/proc/scsiand/proc/interruptsare masked before the sandbox re-parents them under a fresh procfs, and the kernel then rejects an otherwise-harmless remount on them, breaking the mac dev loop without indicating any actual isolation gap. Mounts already reported read-only are now skipped, and remaining rejections get one retry re-bound onto themselves
- Fix
run'sactionRef/actionRepofallback for local-path invocations (#171)run/src/main.jsfell through to an empty string instead ofreport/src/main.js's"v2"/"dash14/buildcage"defaults when invoked viauses: ./run, rendering a brokenuses: /run@in the generated audit-mode example
- Fix a trailing blank line in the generated restrict-mode example's
run:block (#172)- GitHub Actions'
run: |block scalar always keeps one trailing newline, whichsplit()turned into a spurious empty line
- GitHub Actions'
- Fix
parseVertexAllowedLogto handlebuildctl's multi-document JSON output (#172)- A single
JSON.parse()on the whole log text threw wheneverbuildctl debug logs --progress=rawjsonflushed more than one newline-separated JSON document, silently dropping theexplicitengine's Audited Hosts table and Communication details section
- A single
Improvements
- Add a
labelinput to therunaction (#172)- Aligns its Job Summary heading (
## Outbound Traffic Report — <label> (mode)) and Audited/Blocked/Allowed Hosts sub-headings with thereportaction's, so multiplerunsteps in the same job can be told apart in the summary
- Aligns its Job Summary heading (
Documentation
- Add
example-explicit.yml, an example workflow for the experimentalexplicitproxy engine (#172) - Add
example-run-audit.yml, an example workflow for therunaction'sauditmode (#172)
CI / Maintenance
- Split
test.ymlintotest-unit.yml,test-integration.yml, andtest-e2e.yml(#157)- Each keeps its own path-filter job and labeled job names (
unit: test,integration: test (...),e2e: test (...)), replacing the singleall-tests-passedrequired check with one aggregator per tier
- Each keeps its own path-filter job and labeled job names (
- Split the
runaction's e2e tests by case and consolidate its integration tests (#171)writable:/privilege-drop/filesystem-default cases and direct concurrent proxy lifecycles don't depend on the action wrapper, so they've moved out oftest-e2e.ymlinto real shell scripts underrun/test/, run via a singlemake test_sandbox_integrationtarget; a newtest_sandbox_audit_modee2e job covers the restrict-mode example added in #170
- Apply the
latestDocker tag on release publish, not draft creation (#169)docker-publish.ymlruns on tag push, which happens while creating the draft release, solatestwas moving onto a new version before anyone reviewed or published it. Tagginglatestis now handled byupdate-major-tag.yml, gated onrelease: published, alongside the existing major/minor floating tags
Refactoring
- Move each action's Docker build context and test fixtures under its own directory (#160)
setup/docker/,sandbox/docker/(nowrun/docker/),setup/test/,sandbox/test/were shared across actions despite belonging to only one of them, making ownership unclear as the actions diverged. Code actually shared across actions (image verification, Sigstore, rule/log parsing) was consolidated into a newcore/
Dependencies
- Bump self-referential
dash14/buildcageaction pin to v2.2.2 (#130) - Bump
github/codeql-actionto v4.36.3 (#158) - Bump
docker/build-push-actionto v7.3.0 (#159) - Bump
docker/login-actionto v4.4.0 (#161) - Bump
docker/setup-buildx-actionto v4.2.0 (#162) - Bump
docker/metadata-actionto v6.2.0 (#163) - Bump
docker/setup-qemu-actionto v4.2.0 (#164) - Bump
google.golang.org/grpcto v1.82.0 (#165)
Full Changelog: v2.2.2...v2.2.3