Conversation
|
Hey A couple of things to address before this is ready for review:
If you'd like a hand splitting and implementing, here's a ready-to-use prompt:
|
…files
- Export GH_AW_NODE_BIN from install_awf_binary.sh when bundle installed
- Use ${GH_AW_NODE_BIN:-node} in copilot AWF execution to fix node not found
on aw-gpu-runner-T4 where sudo resets PATH
- Regenerate all 191 stale lock files from PR #26372 regression
- Update golden test files for new command format
Fixes: node: command not found in Daily Issues Report (#26393)
Fixes: 18 stale lock files from context propagation refactor (#26372)
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/d5f4442b-0f77-44b6-87f9-be3cba9165a0
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
node: command not found on GPU runners + regenerate stale lock files
There was a problem hiding this comment.
Pull request overview
This PR fixes AWF-based Copilot workflow execution on GPU runners where sudo resets PATH (causing node: command not found), and regenerates previously-stale compiled workflow lock files / golden fixtures.
Changes:
- Export an absolute Node binary path (
GH_AW_NODE_BIN) during AWF bundle installation for reuse in later steps. - Update Copilot engine execution to invoke the driver via
${GH_AW_NODE_BIN:-node}instead of plainnode. - Regenerate workflow lock files and WASM golden fixtures to reflect the updated command format.
Show a summary per file
| File | Description |
|---|---|
| actions/setup/sh/install_awf_binary.sh | Exports GH_AW_NODE_BIN to GITHUB_ENV during bundle install. |
| pkg/workflow/copilot_engine_execution.go | Switches driver invocation prefix from node to ${GH_AW_NODE_BIN:-node}. |
| pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden | Updates golden output to new driver invocation. |
| pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden | Updates golden output to new driver invocation. |
| .github/workflows/workflow-health-manager.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/workflow-generator.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/weekly-safe-outputs-spec-review.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/weekly-blog-post-writer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/video-analyzer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/update-astro.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/test-workflow.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/test-project-url-default.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/test-dispatcher.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/terminal-stylist.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/super-linter.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/sub-issue-closer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/smoke-update-cross-repo-pr.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/smoke-service-ports.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/smoke-create-cross-repo-pr.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/security-review.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/security-compliance.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/repository-quality-improver.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/repo-tree-map.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/repo-audit-analyzer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/refiner.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/refactoring-cadence.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/q.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/pr-triage-agent.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/pr-nitpick-reviewer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/plan.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/pdf-summary.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/notion-issue-summary.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/metrics-collector.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/jsweep.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/issue-triage-agent.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/issue-monster.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/gpclean.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/github-remote-mcp-auth-test.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/functional-pragmatist.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/firewall.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/example-permissions-warning.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/dictation-prompt.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/dev.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/dependabot-go-checker.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/dependabot-burner.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/dead-code-remover.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-workflow-updater.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-team-status.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-semgrep-scan.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-secrets-analysis.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-regulatory.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-malicious-code-scan.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-cli-tools-tester.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-cli-performance.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-assign-issue-to-user.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/daily-architecture-diagram.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/craft.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/copilot-token-optimizer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/copilot-pr-merged-report.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/contribution-check.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/constraint-solving-potd.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/code-simplifier.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/code-scanning-fixer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/ci-coach.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/brave.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/bot-detection.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/artifacts-summary.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/archie.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/agentic-observability-kit.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/agent-persona-explorer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/agent-performance-analyzer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/agent-performance-analyzer.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
| .github/workflows/ace-editor.lock.yml | Regenerated lock output uses ${GH_AW_NODE_BIN:-node} for driver execution. |
Copilot's findings
Tip
Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Files reviewed: 131/131 changed files
- Comments generated: 1
|
@copilot do NOT modify GITHUB_ENV. Instead resolve node inlined when launching the driver. |
Instead of writing GH_AW_NODE_BIN to GITHUB_ENV in install_awf_binary.sh,
capture the absolute node path inline in the AWF execution step's PathSetup
(before sudo resets PATH). sudo -E preserves the exported var, and AWF's
--env-all forwards it into the container where ${GH_AW_NODE_BIN:-node}
resolves to the correct binary.
- Revert install_awf_binary.sh GITHUB_ENV export
- Add GH_AW_NODE_BIN resolution to PathSetup in copilot_engine_execution.go
- Update golden test fixtures and regenerate all 191 lock files
Agent-Logs-Url: https://github.com/github/gh-aw/sessions/54d6db18-494d-4caf-97f8-b62b0157dfef
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Done in eb8b970. The GITHUB_ENV write is removed from Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
|
📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing... |
|
✅ All tools validated successfully! Agent Container Smoke Test confirms agent container is ready. |
|
✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟 |
|
|
|
🎬 THE END — Smoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨ |
Agent Container Tool Check
Result: 12/12 tools available ✅ Overall Status: PASS
|
|
Smoke test summary (run 24462380478):
Warning
|
|
🤖 Smoke test complete for run §24462380446
Overall: ✅ PASS
|
There was a problem hiding this comment.
This PR correctly addresses the node: command not found issue on GPU runners by capturing the absolute node path before sudo strips the PATH. The approach is sound — resolve once, export, and use ${GH_AW_NODE_BIN:-node} as a safe fallback. The lock file regeneration is also a good cleanup. LGTM.
📰 BREAKING: Report filed by Smoke Copilot · ● 805.7K
| run: | | ||
| set -o pipefail | ||
| touch /tmp/gh-aw/agent-step-summary.md | ||
| GH_AW_NODE_BIN=$(command -v node 2>/dev/null || true) |
There was a problem hiding this comment.
Good fix — capturing node path before sudo strips the PATH. The || true guard prevents set -e failures when node is not installed, ensuring the export is graceful.
| set -o pipefail | ||
| touch /tmp/gh-aw/agent-step-summary.md | ||
| GH_AW_NODE_BIN=$(command -v node 2>/dev/null || true) | ||
| export GH_AW_NODE_BIN |
There was a problem hiding this comment.
Exporting GH_AW_NODE_BIN before the sudo -E invocation ensures sudo -E can forward it. This pattern is correct — the variable will be available in the AWF container environment.
|
Commit pushed:
|
|
📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤 |
There was a problem hiding this comment.
💥 Automated smoke test review — all systems nominal! Run 24462380538. The GH_AW_NODE_BIN fix looks solid across all regenerated lock files.
💥 [THE END] — Illustrated by Smoke Claude · ● 173.6K
| run: | | ||
| set -o pipefail | ||
| touch /tmp/gh-aw/agent-step-summary.md | ||
| GH_AW_NODE_BIN=$(command -v node 2>/dev/null || true) |
There was a problem hiding this comment.
✅ Good fix: Capturing the absolute node path before sudo resets PATH is the right approach. The 2>/dev/null || true graceful fallback ensures this doesn't break in environments where command -v behaves differently. Consider adding a comment here explaining why this capture is needed (e.g., # Capture node path before sudo strips PATH).
| run: | | ||
| set -o pipefail | ||
| touch /tmp/gh-aw/agent-step-summary.md | ||
| GH_AW_NODE_BIN=$(command -v node 2>/dev/null || true) |
There was a problem hiding this comment.
🔍 These lock file regenerations look correct — the pattern \$\{GH_AW_NODE_BIN:-node} is consistently applied. Since this is a generated file, the fix in pkg/workflow/copilot_engine_execution.go is the source of truth; the lock file regeneration here correctly reflects the upstream template change.
Two issues from the Apr 15 workflow health dashboard:
node: command not foundrecurring in Daily Issues Report Generator (aw-gpu-runner-T4), and 18 stale lock files from PR #26372 (context propagation refactor) that touched source without triggering recompile.node: command not foundfixRoot cause: On
aw-gpu-runner-T4,sudoresetsPATHvia security policy. Whensudo -E awfexecutes, theactions/setup-nodepath is stripped from the environment. AWF's chroot mode buildsAWF_HOST_PATHfrom the environment at startup — but by then,nodeis gone fromPATH. The copilot driver command inside the container:Changes:
pkg/workflow/copilot_engine_execution.go: The absolute node binary path is now resolved inline in the generated AWF execution step'sPathSetup, beforesudo -E awfruns.sudo -Epreserves the exported variable, and AWF's--env-allforwards it into the container where${GH_AW_NODE_BIN:-node}resolves to the correct binary. The generated script looks like:The fallback to
nodepreserves compatibility where PATH propagation works normally.Stale lock files
make recompile— all 191 workflow lock files regenerated.Changeset
sudostripsPATHby using an absolute Node.js binary path, and documents regenerated stale workflow lock files.Warning
The following domains were blocked by the firewall during workflow execution:
ab.chatgpt.comchatgpt.comTo allow these domains, add them to the
network.allowedlist in your workflow frontmatter:See Network Configuration for more information.
✨ PR Review Safe Output Test - Run 24462380538