docs: clarify arc-dind tool staging and --mount rw/ro output-path pitfalls - #8457
Conversation
…dance Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
There was a problem hiding this comment.
🟡 Changes recommended
The staging guidance contains inaccurate claims and examples that fail without additional mounts or directories.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Clarifies ARC/DinD staging and writable-output mount requirements.
Changes:
- Documents staging additional CLI tools.
- Explains nested read-write mounts and consistent output paths.
- Cross-links selective-mounting guidance.
File summaries
| File | Description |
|---|---|
docs/arc-dind.md |
Adds tool staging and output-path guidance. |
docs/environment.md |
Documents read-only versus writable mounts. |
docs/selective-mounting.md |
Links to the expanded guidance. |
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 5
- Review effort level: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| AWF only auto-stages the **invoking CLI binary** (`copilot`, `claude`, `codex`, | ||
| etc. — see `dind.stageEngineBinary` and "What AWF handles automatically" | ||
| below) into the daemon-visible filesystem. It does **not** discover or stage |
| **Fix:** copy any additional tool binary your workflow invokes inside AWF to | ||
| a path under the same daemon-visible shared directory used for other ARC/DinD | ||
| staging (e.g. `${RUNNER_TEMP}/gh-aw` when `--docker-host-path-prefix` points | ||
| there), *before* the AWF-wrapped step runs, and pass that staged path (not the | ||
| runner-only install path) as the command to run: |
| - name: Run my-tool under AWF | ||
| run: | | ||
| sudo awf --docker-host-path-prefix /host \ | ||
| --allow-domains api.example.com \ | ||
| -- "${RUNNER_TEMP}/gh-aw/bin/my-tool" --output /tmp/gh-aw/my-tool/result.json | ||
| ``` |
| --mount /tmp/gh-aw:/tmp/gh-aw:ro \ | ||
| --mount /tmp/gh-aw/my-tool:/tmp/gh-aw/my-tool:rw |
| the writable subpath explicitly as `:rw` in addition to the `:ro` parent: | ||
|
|
||
| ```bash | ||
| awf --mount /tmp/gh-aw:/tmp/gh-aw:ro \ |
|
@copilot address the review feedback |
Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
Addressed the review feedback in 9d0c797:
|
|
✅ Copilot review passed with no inline comments. @copilot Add the |
Documentation PreviewDocumentation has been built for this PR. To view locally:
Built from commit 8313abb |
|
❌ Smoke Gemini reports failed. Facets need polishing...
|
|
❌ Smoke Copilot BYOK AOAI (api-key) reports failed. AOAI BYOK (api-key) mode investigation needed...
|
|
📡 Smoke OTel Tracing completed. All tracing scenarios validated. ✅
|
|
📰 DEVELOPING STORY: Smoke Docker Sbx reports failed. Our correspondents are investigating the incident...
|
|
✅ Smoke Claude passed Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "api.anthropic.com"See Network Configuration for more information.
|
|
🔌 Smoke Services — All services reachable! ✅
|
|
🚀 Security Guard has started processing this pull request |
|
✅ Smoke Copilot BYOK completed. Copilot BYOK mode operational. 🔓
|
|
🛡️ Smoke Copilot Network Isolation confirmed the egress allowlist is enforced. ✅ Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "example.com"See Network Configuration for more information.
|
|
❌ Smoke Copilot BYOK AOAI (Entra) reports failed. AOAI BYOK (Entra) mode investigation needed...
|
|
Chroot tests passed! Smoke Chroot - All security and functionality tests succeeded.
|
|
✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟 Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "msfeed25.pkgs.visualstudio.com"See Network Configuration for more information.
|
|
📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤
|
|
✅ Build Test Suite completed successfully!
|
Smoke Test: Claude Engine Validation
Overall result: PASS Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "api.anthropic.com"See Network Configuration for more information.
|
Smoke Test Results
Overall: PASS
|
Smoke Test: Copilot BYOK (Direct)✅ GitHub MCP Testing — PR #8451, #8442 verified Status: PASS Running in direct BYOK mode via
|
|
EGRESS_RESULT allow=pass deny=pass ✅ Allowed domain (github.com) reachable: Overall: PASS
Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "example.com"See Network Configuration for more information.
|
|
Smoke Test: Copilot Engine
Overall: PASS
|
Chroot Version Comparison
Overall: FAILED — Node.js version inside the chroot (
|
🏗️ Build Test Suite Results
Overall: 7/8 ecosystems passed — FAIL ❌ Java Failure DetailsBoth Root cause:
|
|
Merged PRs: Warning Firewall blocked 1 domainThe following domain was blocked by the firewall during workflow execution:
To allow these domains, add them to the network:
allowed:
- defaults
- "msfeed25.pkgs.visualstudio.com"See Network Configuration for more information.
|
📡 OTel Tracing Smoke Test Results
Overall: ✅ Pass. All code-level checks and the full OTEL unit test suite (68 tests) succeeded. Scenario 5 had no exported spans because this run didn't route API traffic through the api-proxy sidecar, which is expected behavior, not a failure.
|
On
runner.topology: arc-dind, AWF only auto-stages the invoking engine binary (Copilot/Claude/Codex) into the daemon-visible filesystem. Any other tool a workflow calls inside the sandbox (e.g. a threat-detection binary) is invisible to the chroot sysroot unless separately staged, so it fails with exit 127. Even once staged, a:romount of a parent directory doesn't grant write access to output paths beneath it, and producer/consumer steps can silently disagree on the effective path — both failure modes surfaced in gh-aw#59935. The actual codegen fix belongs in gh-aw; this PR covers the documentation/guidance gap on the AWF side.docs/arc-dind.md:rwmount needed even under a:roparent) and keeping producer/consumer paths consistent.docs/environment.md--mountand read-only vs. writable output paths" subsection: a:romount of a parent never grants write access to a subpath; add a more specific:rwmount for the tool's output directory.docs/selective-mounting.mdExample pattern now documented for tools needing both staged input and writable output:
awf --mount /tmp/gh-aw:/tmp/gh-aw:ro \ --mount /tmp/gh-aw/my-tool:/tmp/gh-aw/my-tool:rw \ --allow-domains github.com \ -- my-tool --output /tmp/gh-aw/my-tool/result.json