Skip to content

fix: resolve node: command not found in Copilot engine on GPU self-hosted runners#28451

Merged
pelikhan merged 3 commits intomainfrom
copilot/debug-daily-issues-report-generator
Apr 25, 2026
Merged

fix: resolve node: command not found in Copilot engine on GPU self-hosted runners#28451
pelikhan merged 3 commits intomainfrom
copilot/debug-daily-issues-report-generator

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 25, 2026

The daily-issues-report workflow (and any Copilot-engine workflow) fails with node: command not found inside the AWF container on aw-gpu-runner-T4 self-hosted runners.

Root cause

Two gaps combine to cause the failure:

  1. Wrong tool cache path: GetNpmBinPathSetup() only searched /opt/hostedtoolcache (GitHub-hosted runners). Self-hosted GPU runners use RUNNER_TOOL_CACHE=/home/runner/work/_tool, so find returns nothing and node is never added to PATH inside the container.

  2. Copilot engine skipped npm PATH setup entirely: Claude, Codex, Gemini, and Crush all prepend GetNpmBinPathSetup() to their AWF container command. Copilot didn't. Without it, sudo's secure_path strips the tool cache directory from PATH inside the container, command -v node fails as a fallback, and the final fallback resolves to the literal string node → "command not found".

Changes

  • pkg/workflow/nodejs.goGetNpmBinPathSetup() now searches both /opt/hostedtoolcache and /home/runner/work/_tool:

    return `export PATH="$(find /opt/hostedtoolcache /home/runner/work/_tool -maxdepth 4 -type d -name bin 2>/dev/null | tr '\n' ':')$PATH"; ...`
  • pkg/workflow/copilot_engine_execution.go — Prepends GetNpmBinPathSetup() to the Copilot AWF engine command, matching the Claude/Codex/Gemini pattern. The existing GH_AW_NODE_BIN resolution remains as the primary mechanism; this makes the command -v node fallback reliable:

    npmPathSetup := GetNpmBinPathSetup()
    engineCommand := fmt.Sprintf("%s && %s", npmPathSetup, copilotCommand)
  • Tests & golden files updated to reflect the expanded search path and new command structure. All 202 workflow lock files recompiled.

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:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw aww7prvu0x3E (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw !.git --with-filename 64/pkg/tool/linu--write --no�� --noprofile (http block)
  • https://api.github.com/orgs/test-owner/actions/secrets
    • Triggering command: /usr/bin/gh gh api /orgs/test-owner/actions/secrets --jq .secrets[].name --check scripts/**/*.js 64/bin/go .prettierignore -lname 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv printf '%s' "$1"; printf '%s' "$2" 1>&2 sh /usr/bin/git diagnostic noisegit GO111MODULE 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/compile /usr/bin/git 8/001/test-simplnode GO111MODULE ache/go/1.25.8/xinstall git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE 64/bin/go git init�� GOMODCACHE go (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linuTest User env 1086820119 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE cal/bin/bash git rev-�� --show-toplevel go /usr/bin/git Onlymin-integritgit GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel git-receive-pack /usr/bin/infocmp 4NdI/8Q9GQkqehLXgit /sa1 1/x64/bin/node infocmp -1 xterm-color 1/x64/bin/node /usr/bin/git --show-toplevel (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv /tmp/TestGuardPolicyMinIntegrityOnlymin-integrity_with_repos=public_464115929/001 remote /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -m -json 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile -o thImports4035433410/001 -trimpath om/org1/repo1.git -p main -lang=go1.25 git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git 4100-35198/test-bash GO111MODULE /opt/hostedtoolcache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel go /usr/bin/git rt.go rt_test.go sv git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv get --local x_amd64/vet pull.rebase (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv get --local x_amd64/vet core.hooksPath (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv npx prettier --cGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go sh -c "prettier" --cheGOINSECURE bash 64/bin/go --noprofile /opt/hostedtoolc-atomic 64/bin/go go (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv get --local x_amd64/vet pull.rebase (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel x_amd64/compile /usr/bin/git -json GO111MODULE x_amd64/compile /usr/bin/git remo�� -v x_amd64/compile /usr/bin/git -json GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv get --local x_amd64/vet pull.rebase (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /tmp/TestGuardPolicyMinIntegrityOnlymin-integrity_with_repos_array_c915686040/001 config /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link remote.origin.urgit GO111MODULE 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link -o /tmp/go-build294778067/b441/sliceutil.test -importcfg ache/node/24.14.1/x64/bin/node -s -w -buildmode=exe git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/infocmp add-source-path-git GO111MODULE 64/bin/go infocmp -1 xterm-color go /usr/bin/git 294051289/.githugit GO111MODULE 64/pkg/tool/linu--show-toplevel git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv r-test2867977164/test1.md r-test2867977164/test2.lock.yml /usr/bin/git 79187809/001' 79187809/001' 64/bin/go git -C s/test.md remote /opt/hostedtoolcache/node/24.14.1/x64/bin/node 01 GO111MODULE 64/bin/go node (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv ily-issues-repor**/*.json .cfg 64/pkg/tool/linu../../../.prettierignore ACCEPT (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch -bool -buildtags de_modules/.bin/sh -errorsas -ifaceassert -nilfunc bash --no�� *.json' '!../../remote.origin.url -tests repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/infocmp matter-with-arragit GO111MODULE 64/bin/go infocmp -1 heckout/git/ref/tags/v5 go bject.type] | @tsv -json GO111MODULE 64/pkg/tool/linu--show-toplevel gh (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv ithub-script/git/ref/tags/v9 /opt/hostedtoolcGO111MODULE test /tmp/go-build330git -trimpath 64/bin/go test lope�� /tmp/gh-aw-test-runs/20260425-124100-35198/test-2272893408/.github/workflows remote om/other/repo.git 1 GO111MODULE 64/bin/go git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv ons-test2243891843 config /usr/bin/git remote.origin.urgit -trimpath 64/bin/go git -C 2" 1>&2 rev-parse rue,"errors":[],"warnings":[]}] eturned GO111MODULE 64/bin/go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/compile (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/1/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linu-nolocalimports GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu/tmp/go-build294778067/b459/_testmain.go env 2272893408/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE ylQP4Z8/vCNYLdc7D8RXanEmFBss stlo�� -json GO111MODULE ck GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12345/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 4043593880 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env 115134130 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/12346/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 4043593880 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 115134130 GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/2/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 2272893408/.github/workflows GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com stlo�� -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/3/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/vet GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env 2272893408/.github/workflows GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env ole.test GO111MODULE rtcfg.link GOINSECURE GOMOD GOMODCACHE -wuZlOqJzhrwFnYKVh/3kqicL-RT7wNVconfig (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/4/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com env _.a GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env _.a GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts
    • Triggering command: /usr/bin/gh gh api --paginate repos/{owner}/{repo}/actions/runs/5/artifacts --jq .artifacts[].name GO111MODULE 64/pkg/tool/linux_amd64/link GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/link env tdrain.test GO111MODULE rtcfg.link GOINSECURE GOMOD GOMODCACHE b4L7Ikj7IChhS-MVF4/opxEl9d6gxDxh-buildtags (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 GO111MODULE 64/pkg/tool/linu-importcfg GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linu/home/REDACTED/work/gh-aw/gh-aw/pkg/typeutil/convert_test.go stlo�� -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --check scripts/**/*.js 64/bin/go .prettierignore -ignore_readdir_-o 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 100 GOMOD GOMODCACHE go env 3055211520/.github/workflows GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --workflow nonexistent-workflow-12345 --limit 6 GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/vet env -json cfg 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linutest@example.com (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github/workflows/shared/reporting.md
    • Triggering command: /tmp/go-build294778067/b404/cli.test /tmp/go-build294778067/b404/cli.test -test.testlogfile=/tmp/go-build294778067/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE 2944837/b436/impGO111MODULE /hom�� che/go-build/12/GOINSECURE **/*.cjs 64/bin/go **/*.json --ignore-path ../../../.pretti--noprofile /opt/hostedtoolcGOPROXY (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git 4100-35198/test-git tmain.go ache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel ache/go/1.25.8/xowner/test-repo /usr/bin/git t.go t_test.go 1/x64/bin/node git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env sRemoteWithRealGitcustom_branch4129380771/001 sRemoteWithRealGitcustom_branch4129380771/002/work ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm GOINSECURE GOMOD GOMODCACHE ache/go/1.25.8/x64/pkg/tool/linumyorg (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env 199124388/001 199124388/002/work 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env lGitmaster_brancremote.origin.url lGitmaster_branch4199124388/001' 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv 4100-35198/test-source-field-variant-1842300515/.github/workflows GO111MODULE k GOINSECURE GOMOD GOMODCACHE go sRem�� -json GO111MODULE /opt/hostedtoolcache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/nonexistent/repo/actions/runs/12345
    • Triggering command: /usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE go env 4100-35198/test-source-field-variant-1842300515/.github/workflows GO111MODULE k GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/owner/repo/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo -importcfg /tmp/go-build294778067/b434/importcfg -pack /home/REDACTED/work/gh-aw/gh-aw/pkg/repoutil/repoutil.go /home/REDACTED/work/gh-aw/gh-aw/pkg/repoutil/repoutil_test.go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go --noprofile /opt/hostedtoolc-o 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh workflow list --repo owner/repo --json name,path,state ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env 4100-35198/test-add-source-path-3055211520/.github/workflows GO111MODULE cfg GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/test-owner/test-repo/actions/secrets
    • Triggering command: /usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name --check scripts/**/*.js 64/bin/go .prettierignore php8.3 64/bin/go go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/test/repo
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE cfg GOINSECURE GOMOD GOMODCACHE go (http block)

If you need me to access, download, or install something from one of these locations, you can either:


Changeset

  • Type: patch
  • Description: Fixed Copilot-engine workflows failing with node: command not found on GPU self-hosted runners.

Warning

Firewall blocked 2 domains

The following domains were blocked by the firewall during workflow execution:

  • ab.chatgpt.com
  • chatgpt.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "ab.chatgpt.com"
    - "chatgpt.com"

See Network Configuration for more information.

Generated by Changeset Generator for issue #28451 ·



✨ PR Review Safe Output Test - Run 24931278162

Note

🔒 Integrity filter blocked 1 item

The following item was blocked because it doesn't meet the GitHub integrity level.

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
  github:
    min-integrity: approved  # merged | approved | unapproved | none

💥 [THE END] — Illustrated by Smoke Claude · ● 288.3K ·

Copilot AI linked an issue Apr 25, 2026 that may be closed by this pull request
@github-actions github-actions Bot mentioned this pull request Apr 25, 2026
…ot found in Copilot engine AWF container

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/fa3fcb48-2abb-4086-9e88-8ef4945f37e9

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Debug workflow failure for Daily Issues Report Generator fix: resolve node: command not found in Copilot engine on GPU self-hosted runners Apr 25, 2026
Copilot AI requested a review from pelikhan April 25, 2026 12:47
@pelikhan pelikhan added the smoke label Apr 25, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

🚀 Smoke OpenCode MISSION COMPLETE! OpenCode delivered. 🔥

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

⚠️ Smoke Gemini failed. Gemini encountered unexpected challenges...

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot is now investigating this pull request. Sources say the story is developing...

@github-actions github-actions Bot removed the smoke label Apr 25, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 25, 2026

⚠️ Smoke Crush failed. Crush encountered unexpected challenges...

@github-actions
Copy link
Copy Markdown
Contributor

Agent Container Tool Check

Tool Status Version
bash 5.2.21
sh available
git 2.53.0
jq 1.7
yq 4.52.5
curl 8.5.0
gh 2.89.0
node 22.22.2
python3 3.10.16 (PyPy 7.3.19)
go 1.24.13
java 10.0.201
dotnet 10.0.201

Result: 12/12 tools available ✅

Overall Status: PASS

🔧 Tool validation by Agent Container Smoke Test · ● 159K ·

@github-actions
Copy link
Copy Markdown
Contributor

Smoke Test Codex 24931278171: FAIL
PRs: #28450 fix: increase timeout and tool-timeout for copilot-session-insights; #28442 fix: move community attribution data to /tmp/gh-aw/agent/community-data/
✅ GitHub MCP, Serena, Playwright, file write, bash read-back, build
❌ Web Fetch unavailable; comment-memory files absent

Warning

Firewall blocked 2 domains

The following domains were blocked by the firewall during workflow execution:

  • ab.chatgpt.com
  • chatgpt.com

To allow these domains, add them to the network.allowed list in your workflow frontmatter:

network:
  allowed:
    - defaults
    - "ab.chatgpt.com"
    - "chatgpt.com"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex ·

@github-actions
Copy link
Copy Markdown
Contributor

Commit pushed: 085b45f

Generated by Changeset Generator

@github-actions
Copy link
Copy Markdown
Contributor

🤖 Smoke Test Results · §24931278132

  1. GitHub MCP ✅ | 2. MCP Scripts GH CLI ✅ | 3. Serena CLI ✅
  2. Playwright ✅ | 5. Web Fetch ⚠️ | 6. File Write ✅ | 7. Bash ✅
  3. Discussion ✅ | 9. Build ✅ | 10. Artifact ✅ | 11. Discussion Create ✅
  4. Workflow Dispatch ✅ | 13. PR Review ✅ | 14. Comment Memory ⚠️

Overall: ✅ PASS · @pelikhan @Copilot

📰 BREAKING: Report filed by Smoke Copilot · ● 1.1M ·

@github-actions
Copy link
Copy Markdown
Contributor

Comment Memory

Smoke tests complete
Copilot watches the logs bloom
All green, all is well

Note

This comment is managed by comment memory.

It stores persistent context for this thread in the code block at the top of this comment.
Edit only the text inside the backtick fences; workflow metadata and the footer are regenerated automatically.

Learn more about comment memory

📰 BREAKING: Report filed by Smoke Copilot · ● 1.1M ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR fixes the node: command not found issue on GPU self-hosted runners by prepending discovered bin directories from hostedtoolcache/_tool to PATH before launching the Copilot driver. The approach is pragmatic and handles the common case well. Minor concern: the find scan at container startup adds latency; a targeted path or caching strategy could optimize this for high-frequency workflows.

📰 BREAKING: Report filed by Smoke Copilot · ● 1.1M

# shellcheck disable=SC1003
sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --allow-host-ports 80,443,8080 --image-tag 0.25.28,squid=sha256:844c18280f82cd1b06345eb2f4e91966b34185bfc51c9f237c3e022e848fb474,agent=sha256:a8834e285807654bf680154faa710d43fe4365a0868142f5c20e48c85e137a7a,api-proxy=sha256:93290f2393752252911bd7c39a047f776c0b53063575e7bde4e304962a9a61cb,cli-proxy=sha256:fdf310e4678ce58d248c466b89399e9680a3003038fd19322c388559016aaac7 --skip-pull --enable-api-proxy \
-- /bin/bash -c 'GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log
-- /bin/bash -c 'export PATH="$(find /opt/hostedtoolcache /home/runner/work/_tool -maxdepth 4 -type d -name bin 2>/dev/null | tr '\''\n'\'' '\'':'\'')$PATH"; [ -n "$GOROOT" ] && export PATH="$GOROOT/bin:$PATH" || true && GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PATH manipulation here is clever — scanning hostedtoolcache and _tool for bin directories ensures node is discoverable even on GPU self-hosted runners that don't have it on the default PATH. One minor note: the find command with -maxdepth 4 could be slow if there are many directories; consider caching or using a more targeted path if startup time is a concern.

sudo -E awf --container-workdir "${GITHUB_WORKSPACE}" --mount "${RUNNER_TEMP}/gh-aw:${RUNNER_TEMP}/gh-aw:ro" --mount "${RUNNER_TEMP}/gh-aw:/host${RUNNER_TEMP}/gh-aw:ro" --env-all --exclude-env COPILOT_GITHUB_TOKEN --exclude-env GITHUB_MCP_SERVER_TOKEN --exclude-env MCP_GATEWAY_API_KEY --allow-domains api.business.githubcopilot.com,api.enterprise.githubcopilot.com,api.github.com,api.githubcopilot.com,api.individual.githubcopilot.com,api.snapcraft.io,archive.ubuntu.com,azure.archive.ubuntu.com,crl.geotrust.com,crl.globalsign.com,crl.identrust.com,crl.sectigo.com,crl.thawte.com,crl.usertrust.com,crl.verisign.com,crl3.digicert.com,crl4.digicert.com,crls.ssl.com,github.com,host.docker.internal,json-schema.org,json.schemastore.org,keyserver.ubuntu.com,ocsp.digicert.com,ocsp.geotrust.com,ocsp.globalsign.com,ocsp.identrust.com,ocsp.sectigo.com,ocsp.ssl.com,ocsp.thawte.com,ocsp.usertrust.com,ocsp.verisign.com,packagecloud.io,packages.cloud.google.com,packages.microsoft.com,ppa.launchpad.net,raw.githubusercontent.com,registry.npmjs.org,s.symcb.com,s.symcd.com,security.ubuntu.com,telemetry.enterprise.githubcopilot.com,ts-crl.ws.symantec.com,ts-ocsp.ws.symantec.com,www.googleapis.com --log-level info --proxy-logs-dir /tmp/gh-aw/sandbox/firewall/logs --audit-dir /tmp/gh-aw/sandbox/firewall/audit --enable-host-access --allow-host-ports 80,443,8080 --image-tag 0.25.28,squid=sha256:844c18280f82cd1b06345eb2f4e91966b34185bfc51c9f237c3e022e848fb474,agent=sha256:a8834e285807654bf680154faa710d43fe4365a0868142f5c20e48c85e137a7a,api-proxy=sha256:93290f2393752252911bd7c39a047f776c0b53063575e7bde4e304962a9a61cb,cli-proxy=sha256:fdf310e4678ce58d248c466b89399e9680a3003038fd19322c388559016aaac7 --skip-pull --enable-api-proxy \
-- /bin/bash -c 'GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log
-- /bin/bash -c 'export PATH="$(find /opt/hostedtoolcache /home/runner/work/_tool -maxdepth 4 -type d -name bin 2>/dev/null | tr '\''\n'\'' '\'':'\'')$PATH"; [ -n "$GOROOT" ] && export PATH="$GOROOT/bin:$PATH" || true && GH_AW_NODE_EXEC="${GH_AW_NODE_BIN:-}"; if [ -z "$GH_AW_NODE_EXEC" ] || [ ! -x "$GH_AW_NODE_EXEC" ]; then GH_AW_NODE_EXEC="$(command -v node 2>/dev/null || echo node)"; fi; "$GH_AW_NODE_EXEC" ${RUNNER_TEMP}/gh-aw/actions/copilot_driver.cjs /usr/local/bin/copilot --add-dir /tmp/gh-aw/ --log-level all --log-dir /tmp/gh-aw/sandbox/agent/logs/ --disable-builtin-mcps --no-ask-user --allow-all-tools --allow-all-paths --add-dir "${GITHUB_WORKSPACE}" --prompt-file /tmp/gh-aw/aw-prompts/prompt.txt' 2>&1 | tee -a /tmp/gh-aw/agent-stdio.log
env:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good fallback logic: if GH_AW_NODE_BIN is set and executable, it takes precedence. If not, it falls back to command -v node. This two-tier approach is solid for supporting both configured and auto-discovered Node installations.

@github-actions
Copy link
Copy Markdown
Contributor

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@github-actions
Copy link
Copy Markdown
Contributor

Smoke Test Run 24931278162 — Claude Engine

Test Status
GitHub MCP
mcpscripts-gh
Serena MCP
Make Build
Playwright
Tavily
File Write + Bash
Discussion Comment
Agentic Workflows MCP
Slack + Code Scan
Update PR (#13)
PR Review Comments (#14)
Submit PR Review (#15)
Resolve Thread (#16) ⚠️
Add Reviewer (#17)
Push to Branch (#18)
Close PR (#19) ⚠️

Overall: PARTIAL (1 fail — AW MCP status tool; 2 skipped)

Note

🔒 Integrity filter blocked 1 item

The following item was blocked because it doesn't meet the GitHub integrity level.

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
  github:
    min-integrity: approved  # merged | approved | unapproved | none

💥 [THE END] — Illustrated by Smoke Claude · ● 288.3K ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💥 Automated smoke test review - all systems nominal! The GPU runner node path fix looks correct and well-documented.

Note

🔒 Integrity filter blocked 1 item

The following item was blocked because it doesn't meet the GitHub integrity level.

  • #28451 pull_request_read: has lower integrity than agent requires. The agent cannot read data with integrity below "approved".

To allow these resources, lower min-integrity in your GitHub frontmatter:

tools:
  github:
    min-integrity: approved  # merged | approved | unapproved | none

💥 [THE END] — Illustrated by Smoke Claude · ● 288.3K

// ensuring that the command -v node fallback in nodeRuntimeResolutionCommand
// succeeds regardless of runner type. This mirrors the pattern used by the
// Claude and Codex engines.
npmPathSetup := GetNpmBinPathSetup()
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Good fix — prepending GetNpmBinPathSetup() before the Copilot command mirrors the Claude/Codex pattern and ensures node is found even when sudo's secure_path strips the actions/setup-node PATH additions. The GPU runner path (/home/runner/work/_tool) is now covered.

Comment thread pkg/workflow/nodejs.go
//
// After the find, re-prepend GOROOT/bin if set. The find returns directories
// alphabetically, so go/1.23.12 shadows go/1.25.0. Re-prepending GOROOT/bin
// ensures the Go version set by actions/setup-go takes precedence.
// AWF's entrypoint.sh exports GOROOT before the user command runs.
return `export PATH="$(find /opt/hostedtoolcache -maxdepth 4 -type d -name bin 2>/dev/null | tr '\n' ':')$PATH"; [ -n "$GOROOT" ] && export PATH="$GOROOT/bin:$PATH" || true`
return `export PATH="$(find /opt/hostedtoolcache /home/runner/work/_tool -maxdepth 4 -type d -name bin 2>/dev/null | tr '\n' ':')$PATH"; [ -n "$GOROOT" ] && export PATH="$GOROOT/bin:$PATH" || true`
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The find now includes /home/runner/work/_tool alongside /opt/hostedtoolcache, which handles the GPU self-hosted runner case cleanly. Using 2>/dev/null suppresses errors for paths that don't exist, so this is safe on standard GitHub-hosted runners too. 👍

@pelikhan pelikhan marked this pull request as ready for review April 25, 2026 13:02
Copilot AI review requested due to automatic review settings April 25, 2026 13:02
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

Fixes Copilot-engine workflows failing with node: command not found on GPU self-hosted runners by ensuring Node’s toolcache bin directories are available in PATH inside the AWF container.

Changes:

  • Expand GetNpmBinPathSetup() to search both GitHub-hosted and GPU self-hosted toolcache locations.
  • Prepend GetNpmBinPathSetup() to Copilot engine execution command (aligning behavior with other engines).
  • Regenerate/update golden fixtures and workflow lock files to reflect the new command prefix.
Show a summary per file
File Description
pkg/workflow/nodejs.go Expands toolcache search paths used to build PATH for npm/toolcache binaries.
pkg/workflow/copilot_engine_execution.go Ensures Copilot engine command runs npm PATH setup inside the AWF container before resolving/using node.
pkg/workflow/engine_helpers_test.go Updates tests to assert the expanded toolcache search path is present.
pkg/workflow/testdata/TestWasmGolden_CompileFixtures/with-imports.golden Updates golden output to include the PATH setup prefix in Copilot command.
pkg/workflow/testdata/TestWasmGolden_CompileFixtures/basic-copilot.golden Updates golden output to include the PATH setup prefix in Copilot command.
pkg/workflow/testdata/TestWasmGolden_CompileFixtures/claude-with-network.golden Updates golden output to include the expanded toolcache search paths.
.github/workflows/workflow-health-manager.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/workflow-generator.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/weekly-blog-post-writer.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/video-analyzer.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/test-workflow.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/test-project-url-default.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/test-dispatcher.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/terminal-stylist.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/sub-issue-closer.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/smoke-opencode.lock.yml Recompiled lockfile to include the expanded toolcache search paths.
.github/workflows/smoke-gemini.lock.yml Recompiled lockfile to include the expanded toolcache search paths.
.github/workflows/smoke-crush.lock.yml Recompiled lockfile to include the expanded toolcache search paths.
.github/workflows/smoke-ci.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/security-compliance.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/repo-tree-map.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/release.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/refiner.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/pr-triage-agent.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/plan.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/notion-issue-summary.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/metrics-collector.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/jsweep.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/issue-triage-agent.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/issue-monster.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/hippo-embed.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/gpclean.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/firewall.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/example-permissions-warning.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/dictation-prompt.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/dev.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/dependabot-burner.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/daily-team-status.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/daily-skill-optimizer.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/daily-semgrep-scan.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/daily-secrets-analysis.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/daily-malicious-code-scan.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/craft.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/copilot-token-optimizer.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/contribution-check.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/codex-github-remote-mcp-test.lock.yml Recompiled lockfile to include the expanded toolcache search paths.
.github/workflows/code-simplifier.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/changeset.lock.yml Recompiled lockfile to include the expanded toolcache search paths.
.github/workflows/brave.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/bot-detection.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/archie.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/ai-moderator.lock.yml Recompiled lockfile to include the expanded toolcache search paths.
.github/workflows/agent-performance-analyzer.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.github/workflows/ace-editor.lock.yml Recompiled lockfile to include the updated PATH setup in Copilot engine invocation.
.changeset/patch-fix-copilot-gpu-node-path.md Adds a patch changeset entry documenting the fix.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 135/209 changed files
  • Comments generated: 0

@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 90/100

Excellent test quality

Metric Value
New/modified tests analyzed 2
✅ Design tests (behavioral contracts) 2 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 2 (100%)
Duplicate test clusters 0
Test inflation detected No
🚨 Coding-guideline violations None

Test Classification Details

Test File Classification Issues Detected
TestGetNpmBinPathSetup (modified) pkg/workflow/engine_helpers_test.go:172 ✅ Design None
TestGetNpmBinPathSetup_NoGorootDoesNotBreakChain (modified) pkg/workflow/engine_helpers_test.go:249 ✅ Design None

Analysis Notes

Both modified tests directly verify the observable output of GetNpmBinPathSetup():

  • TestGetNpmBinPathSetup: Added a t.Errorf assertion confirming /home/runner/work/_tool appears in the generated PATH setup string — a direct behavioral contract test for the GPU self-hosted runner fix.
  • TestGetNpmBinPathSetup_NoGorootDoesNotBreakChain: Updated the expected shell command string to include the new GPU runner tool cache path, preserving coverage of the edge case where GOROOT is unset (ensuring || true prevents short-circuiting the && chain).

Inflation ratio: Test file +5 lines vs. production code +15 lines → ratio 0.33 (well under 2:1 threshold). ✅

Build tag: //go:build !integration present on line 1. ✅


Language Support

Tests analyzed:

  • 🐹 Go (*_test.go): 2 test modifications — unit (//go:build !integration)
  • 🟨 JavaScript (*.test.cjs, *.test.js): 0 tests

Verdict

Check passed. 0% of new/modified tests are implementation tests (threshold: 30%). Both changes are tight behavioral assertions that directly encode the design contract introduced by this bug fix.


📖 Understanding Test Classifications

Design Tests (High Value) verify what the system does:

  • Assert on observable outputs, return values, or state changes
  • Cover error paths and boundary conditions
  • Would catch a behavioral regression if deleted
  • Remain valid even after internal refactoring

Implementation Tests (Low Value) verify how the system does it:

  • Assert on internal function calls (mocking internals)
  • Only test the happy path with typical inputs
  • Break during legitimate refactoring even when behavior is correct
  • Give false assurance: they pass even when the system is wrong

Goal: Shift toward tests that describe the system's behavioral contract — the promises it makes to its users and collaborators.

References: §24931510865

🧪 Test quality analysis by Test Quality Sentinel · ● 626.7K ·

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Test Quality Sentinel: 90/100. Test quality is excellent — 0% of new/modified tests are implementation tests (threshold: 30%). Both assertions directly encode the behavioral contract for the GPU runner node path fix.

@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — great work tracking down this node: command not found failure on GPU self-hosted runners! The root-cause analysis is thorough and the fix in pkg/workflow/nodejs.go and pkg/workflow/copilot_engine_execution.go is clean and consistent with how Claude/Codex/Gemini already handle PATH setup.

One thing that would strengthen this PR:

  • Add testsGetNpmBinPathSetup() and the Copilot engine command-building path currently have no unit test coverage. A test asserting that the returned PATH export string includes both /opt/hostedtoolcache and /home/runner/work/_tool, and a test that the Copilot engine prepends the npm PATH setup, would guard against regressions and match the standard expected for Go packages in this repo.

If you'd like a hand addressing this, you can assign the following prompt to your coding agent:

Add unit tests in pkg/workflow/ for the changes introduced in PR #28451:
1. Test GetNpmBinPathSetup() in nodejs.go — assert that the returned shell snippet exports PATH containing both /opt/hostedtoolcache and /home/runner/work/_tool.
2. Test the Copilot engine AWF command builder in copilot_engine_execution.go — assert that the command string is prefixed with the output of GetNpmBinPathSetup(), matching the pattern used by Claude/Codex/Gemini engines.
Follow existing test conventions in the pkg/workflow/ package.

Generated by Contribution Check · ● 1.4M ·

@pelikhan pelikhan merged commit fddc517 into main Apr 25, 2026
59 checks passed
@pelikhan pelikhan deleted the copilot/debug-daily-issues-report-generator branch April 25, 2026 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[aw] Daily Issues Report Generator failed

3 participants