Repository navigation
Let CI runners give Chromium a usable sandbox - #11
Merged
Merged
Conversation
GitHub's Ubuntu runners confine unprivileged user namespaces with AppArmor, so the dashboard renderer's sandboxed Chromium launch failed the real-browser gate. Allow user namespaces on the runner instead of rendering without a sandbox, and document the same requirement for Linux hosts that confine them. Co-authored-by: Gersham Meharg <gersham@users.noreply.github.com>
screenrig/cli main is unchanged at ce737dd, but that commit has since been tagged v26.09.204, so package-release.sh stamps a later CalVer and the tarball no longer hashes to the recorded digest. Re-pack that commit and record the artifact CI packs today; the generated bundle is unchanged because the bundled CLI version is normalized. Co-authored-by: Gersham Meharg <gersham@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Public plugin gates have been red on
mainsince the dashboard skill landed.verifyfails intest_real_browser_repeat_and_failed_render_preserves_latest:skills/screenrig-dashboard/scripts/dashboard_runtime/render.pydeliberately launches withchromium_sandbox=True, and the dashboarding design says not to weaken that sandbox when launch fails. GitHub'subuntu-latestimage shipskernel.apparmor_restrict_unprivileged_userns=1, and Playwright's Chromium carries no SUID sandbox helper, so the only sandbox it can use is unavailable there. This is not a regression in the renderer: the browser gate is new with the dashboard skill and has never run green on a GitHub runner.Fix
Take Chromium's own preferred option — make the environment support sandboxing — rather than disabling the sandbox:
.github/workflows/ci.yml: a new step before the dashboard gate clears/proc/sys/kernel/apparmor_restrict_unprivileged_usernswhen that knob exists, on a throwaway runner. This is the workaround Chromium documents and that projects such as pa11y use in Actions.skills/screenrig-dashboard/references/runtime.md: records that rendering always keeps the sandbox on, and that Linux hosts confining unprivileged user namespaces must grant them to the browser instead of rendering unsandboxed.plugins/screenrig/: regenerated. The CLI bundle and manifests are unchanged.No product launch flag, no
--no-sandbox, and no change to local developer defaults.CLI provenance refresh
The first run on this branch failed before the dashboard step, in "Rebuild and verify the committed plugin bundle":
screenrig/climain has not moved: it is stillce737dde6dd179fa5bcbfe2bb2a59ddb266bfa5c, the commit already incomponents.lock.json. That commit has since collected eight CalVer tags (v26.09.190…v26.09.204), andscripts/calver.py cli-stamppicks the highest, sopackage-release.shstamps a later version and the same source packs to different bytes. Packing that commit locally confirms it: stamp26.09.200reproducese0e0606…(the old recorded digest) and stamp26.09.204reproducesf5feb90…byte-for-byte, the digest CI packed.components.lock.jsonnow records that current pack. The generated bundle is byte-identical because the build normalizes the bundled CLI version, so this commit is provenance only.Verification
On a real
ubuntu-latestrunner, via a temporary probe workflow on a scratch branch (run 35940119744, branch since deleted), running exactly these steps against this tree:Full local gate set against the re-packed artifact:
build-plugin.py --check --cli-artifact— generated plugin is currentvalidate-plugin.py --cli-artifact --cli-source— validation passedcheck-public-repo.py— passedtest-public-dependencies.py,test-skill-commands.py,test-launcher.py,test-plugin-freshness.py,test-docs-only.py— passedscreenrig version— clean JSON envelopetest-dashboard.py --browser— 13 tests pass withchromium_sandbox=TrueMarketplace installation, live API use, native hardware and production deployment were not exercised.