Uh oh!
There was an error while loading. Please reload this page.
Fix safe_outputs: skip PR review comments outside PR context, register custom safe job types - #20548
Conversation
Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
…, register custom safe job types Co-authored-by: lpcox <15877973+lpcox@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Fixes safe_outputs strict-mode failures when workflows run outside PR context (e.g., scheduled runs) by ensuring PR-only handlers are treated as graceful no-ops and by registering custom safe-output job types so the handler manager can skip them without error.
Changes:
- Mark
create_pr_review_comment/reply_to_pr_review_commentasskipped: truewhen not in PR context. - Update
buildSafeOutputJobsEnvVarsto include custom safe-output jobs inGH_AW_SAFE_OUTPUT_JOBSwhile excluding system jobs. - Refresh action pin/lock data and workflow lockfiles for
actions/download-artifact@v8, and emitGH_AW_SAFE_OUTPUT_JOBSin relevant compiled workflows.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
actions/setup/js/create_pr_review_comment.cjs | Returns skipped: true for non-PR-context early exit. |
actions/setup/js/create_pr_review_comment.test.cjs | Asserts skipped: true for non-PR-context behavior. |
actions/setup/js/reply_to_pr_review_comment.cjs | Returns skipped: true when triggered outside PR context. |
actions/setup/js/reply_to_pr_review_comment.test.cjs | Asserts skipped: true for non-PR-context behavior. |
pkg/workflow/notify_comment.go | Includes custom safe-output job names in GH_AW_SAFE_OUTPUT_JOBS, excludes system jobs. |
pkg/workflow/notify_comment_test.go | Expands tests to cover custom-only, system-only, and mixed job lists. |
pkg/workflow/data/action_pins.json | Adds pin for actions/download-artifact@v8. |
.github/aw/actions-lock.json | Adds lock entry for actions/download-artifact@v8. |
.github/workflows/super-linter.lock.yml | Updates pinned SHA for actions/download-artifact v8 usage. |
.github/workflows/smoke-copilot.lock.yml | Emits GH_AW_SAFE_OUTPUT_JOBS for custom safe-output job types. |
.github/workflows/smoke-copilot-arm.lock.yml | Emits GH_AW_SAFE_OUTPUT_JOBS for custom safe-output job types. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
pelikhan
commented
Mar 11, 2026
fix tests CI / test (pull_request)Failing after 1m |
pelikhan
commented
Mar 11, 2026
@copilot fix tests CI / test (pull_request)Failing after 1m |
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Fixed in 20ed6c0. The test |
…ts warnings (#111) ## What & Why Regenerates the gh-aw compiled workflow lock files with **gh-aw v0.74.8** (was v0.55.0). Fixes the spurious `safe_outputs` warnings seen in workflow run [26400178389](https://github.com/chrisjainsley/Augustus/actions/runs/26400178389): ```⚠️ No handler loaded for message type 'create_draft_release' (message 1/2). Failed: 1 Skipped (no handler): 1 1 message(s) failed to process ``` ### Root cause In gh-aw **v0.55.0**, `buildSafeOutputJobsEnvVars()` only emitted built-in safe-output types into the handler-manager env var. Custom safe-output jobs declared under `safe-outputs.jobs.<name>` (here, `create_draft_release`) were dropped, so the handler manager logged "no handler loaded" and counted the message as failed — even though the custom GitHub Actions job for it ran successfully via the `needs:` graph. Fix landed in **v0.58.0** ([github/gh-aw#20548](github/gh-aw#20548)): custom job names are now emitted into the new `GH_AW_SAFE_OUTPUT_JOBS` env var so the manager silently skips them. The regenerated `create-release.lock.yml` includes: ``` GH_AW_SAFE_OUTPUT_JOBS: "{\"create_draft_release\":\"\"}" ``` The agentic-workflow `.md` source files were not changed — the YAML `safe-outputs.jobs.create_draft_release` shape was already correct. ## Services & Areas Changed - `.github/workflows/create-release.lock.yml` — regenerated (compiler v0.55.0 → v0.74.8) - `.github/workflows/nuget-update.lock.yml` — regenerated (same upgrade) - `.github/aw/actions-lock.json` — pins for new gh-aw setup action SHAs ## Testing - `gh aw compile` regenerates both lock files without errors (1 unrelated warning about a fixed weekly schedule on the nuget-update workflow). - Verified `GH_AW_SAFE_OUTPUT_JOBS` now registers `create_draft_release` in the regenerated lock file. - Functional verification will happen on the next `workflow_dispatch` of *Create Release* — the underlying `create_draft_release` job already worked in v0.55.0; only the warning/`Failed: 1` noise should disappear. ## Breaking Changes None. Source `.md` workflows are byte-identical; only the generated lock files and pinned action SHAs changed. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two distinct failures caused the
safe_outputsjob to error in strict mode when running on schedule (non-PR context).Root Causes
1.
create_pull_request_review_comment/reply_to_pull_request_review_commentcounted as failures outside PR contextBoth handlers returned
{success: false, error: "..."}withoutskipped: truewhen not in a PR context. The handler manager counts!success && !skippedas a hard failure. Addedskipped: trueso these are treated as graceful no-ops, consistent with other handlers.2.
send_slack_message: No handler loadedCustom safe-output jobs (defined under
safe-outputs.jobs:) were not being registered in theGH_AW_SAFE_OUTPUT_JOBSenv var. The compiler'sbuildSafeOutputJobsEnvVarsonly included built-in jobs with known URL outputs; unknown job names fell through tocontinue. The handler manager usesGH_AW_SAFE_OUTPUT_JOBSto know which message types are handled by dedicated job steps — without it, custom types are flagged as "No handler loaded."Changes
create_pr_review_comment.cjs/reply_to_pr_review_comment.cjs: Addskipped: trueto non-PR-context early returns.notify_comment.go—buildSafeOutputJobsEnvVars: IntroducesystemSafeOutputJobNames(safe_outputs,upload_assets) and include all other job names as custom types with an empty URL key:Compiled workflows now emit
GH_AW_SAFE_OUTPUT_JOBS: "{\"send_slack_message\":\"\"}"for any workflow defining custom safe-output jobs.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/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 GO111MODULE datedAt,event,hestatus git rev-�� --show-toplevel 0XVD7GS/mRL0tEU7JbrieQ94-F8q /usr/bin/gh -json GO111MODULE 64/bin/go gh(http block)/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 go /usr/bin/git node /opt�� prettier --write 64/bin/go !../../../pkg/wonode --ignore-path ../../../.pretti--check go(http block)/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 go /usr/bin/git node /opt�� prettier --write 64/bin/go !../../../pkg/wo/bin/sh --ignore-path ../../../.prettiGOPATH=$(go env GOPATH); \ if command -v golangci-lint >/dev/null 2>&1 || [ -x "$GOPATH/bin/golangci-lint" ]; then \ PATH="$GOPATH/bin:$PATH" golangci-lint run; \ else \ echo "golangci-lint is not installed. Run 'make deps-dev' to install dependencies."(http block)https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1/usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq .object.sha --get remote.origin.url /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel node /usr/bin/git prettier --check 64/bin/go git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v3/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq .object.sha C0s6/mdFWarlUYM2MrA09C0s6 l /opt/hostedtoolcache/go/1.25.0/x64/bin/go GOINSECURE GOMOD GOMODCACHE 92428/b401/importcfg env k/gh-aw/gh-aw/pkg/logger/doc.go l e/git GOINSECURE GOMOD GOMODCACHE e/git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v5/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env plorer.md GO111MODULE ache/go/1.25.0/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel sh /usr/bin/git "prettier" --chegit sh 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE x_amd64/compile git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq .object.sha --show-toplevel go /usr/bin/git md GO111MODULE 64/pkg/tool/linu--show-toplevel git rev-�� --show-toplevel 64/pkg/tool/linux_amd64/compile /usr/bin/git .a GO111MODULE ache/go/1.25.0/x--show-toplevel git(http block)https://api.github.com/repos/actions/checkout/git/ref/tags/v6/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha /tmp/gh-aw-test-runs/20260311-170758-28231/test-2204179148 rev-parse /usr/bin/git ck 'scripts/**/*git GO111MODULE 64/bin/go git conf�� --get remote.origin.url /usr/bin/git -json GO111MODULE 64/bin/go git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha /tmp/go-build90092428/b409/_pkg_.a -trimpath /opt/hostedtoolcache/node/24.14.0/x64/bin/node -p main -lang=go1.25 node /tmp�� /tmp/TestHashConsistency_GoAndJavaScript1264448211/001/test-complex-frontmatter-with-tools.md -dwarf=false /usr/bin/git go1.25.0 -c=4 -nolocalimports git(http block)/usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq .object.sha --show-toplevel go /usr/bin/git -json GO111MODULE 64/bin/go git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE 64/pkg/tool/linu--show-toplevel git(http block)https://api.github.com/repos/actions/github-script/git/ref/tags/v8/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha GOSUMDB GOWORK 64/bin/go GOINSECURE GOMOD GOMODCACHE go m/_n�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha go1.25.0 -c=4 -nolocalimports -importcfg /tmp/go-build90092428/b389/importcfg -pack /tmp/go-build90092428/b389/_testmain.go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq .object.sha -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/actions/setup-go/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq .object.sha --show-toplevel go /usr/bin/git ck 'scripts/**/*git GO111MODULE 64/bin/go git conf�� user.name Test User /usr/lib/git-core/git -json GO111MODULE 64/bin/go /usr/lib/git-core/git(http block)https://api.github.com/repos/actions/setup-node/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq .object.sha --show-toplevel -dwarf=false /usr/bin/git go1.25.0 -c=4 -nolocalimports git conf�� --get remote.origin.url /usr/bin/git -json GO111MODULE 64/bin/go git(http block)https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4/usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq .object.sha SameOutput2880731548/001/stability-test.md GO111MODULE /opt/hostedtoolcache/go/1.25.0/x64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/node/24.14.0/x64/bin/node GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v7/usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha -json GO111MODULE Name,path,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.0/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha .go .go 64/pkg/tool/linux_amd64/compile GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linux_amd64/compile env g_.a GO111MODULE ache/go/1.25.0/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)/usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq .object.sha -json GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE ache/go/1.25.0/x64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b/usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq .object.sha "prettier" --wriGOSUMDB git 64/bin/go rror 64/pkg/tool/linu-### /usr/bin/git go /pre�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/1/artifacts/usr/bin/gh gh run download 1 --dir test-logs/run-1 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/12345/artifacts/usr/bin/gh gh run download 12345 --dir test-logs/run-12345 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/12346/artifacts/usr/bin/gh gh run download 12346 --dir test-logs/run-12346 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/2/artifacts/usr/bin/gh gh run download 2 --dir test-logs/run-2 GO111MODULE x_amd64/vet GOINSECURE GOMOD GOMODCACHE x_amd64/vet env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/3/artifacts/usr/bin/gh gh run download 3 --dir test-logs/run-3 GO111MODULE x_amd64/link GOINSECURE GOMOD GOMODCACHE x_amd64/link env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE wJ/GFtmVa307QDDNremote.origin.url(http block)https://api.github.com/repos/github/gh-aw/actions/runs/4/artifacts/usr/bin/gh gh run download 4 --dir test-logs/run-4 GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/runs/5/artifacts/usr/bin/gh gh run download 5 --dir test-logs/run-5 GO111MODULE x_amd64/compile GOINSECURE GOMOD GOMODCACHE x_amd64/compile env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/actions/workflows/usr/bin/gh gh workflow list --json name,state,path ck '**/*.cjs' '*GOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env e=false GO111MODULE 64/bin/go GOINSECURE %H %ct %D 1bd2f0910a26e63d--tags go(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/a70c5eada06553e3510ac27f2c3bda9d3705bccb --jq .object.sha "prettier" --wriGOSUMDB git 64/bin/go --show-toplevel ache/go/1.25.0/x.github/aw/actions-lock.json /usr/bin/git go /pre�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq .object.sha -json GO111MODULE 64/bin/go GOINSECURE VT/3hr--uLbD2Maurev-parse GOMODCACHE s9ZXZGY/X4XoDkfiiEtxJ64HjgrP env 3362762130/.github/workflows GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.2.3/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.2.3 --jq .object.sha 2279741/b399/_pkGOINSECURE GO111MODULE 64/bin/go GOINSECURE b/gh-aw/pkg/math-### GOMODCACHE go env 4wXJ/4MWVMo_oiDJ- GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 2279741/b399/imprev-parse(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v2.0.0/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha 2279741/b398/_pkGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env JdBI/-CHqAKKnBMF-p GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 2279741/b398/impconfig(http block)/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha 2279741/b405/_pkGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env jADl/gUbYNtJdeWx-errorsas GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 2279741/b405/impconfig(http block)/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v2.0.0 --jq .object.sha 2279741/b413/_pkGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env zon1/l1aQvY6otHHGOSUMDB GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 2279741/b413/importcfg(http block)https://api.github.com/repos/github/gh-aw/git/ref/tags/v3.0.0/usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v3.0.0 --jq .object.sha 2279741/b400/_pkGOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env Ms4I/Zgq-XWsbuVG-errorsas GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE 2279741/b400/imp-tests(http block)https://api.github.com/repos/githubnext/agentics/git/ref/tags//usr/bin/gh gh api /repos/githubnext/agentics/git/ref/tags/# --jq .object.sha h ../../../.prettierignore 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/usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq .object.sha tmatter-with-arrays.md 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/repo/actions/runs/12345/usr/bin/gh gh run view 12345 --repo nonexistent/repo --json status,conclusion GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/owner/repo/actions/workflows/usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go GOINSECURE GOMOD GOMODCACHE ache/go/1.25.0/xGO111MODULE env 2279741/b358/_pkGOINSECURE GO111MODULE 64/bin/go GOINSECURE b/gh-aw/pkg/math-c GOMODCACHE go(http block)/usr/bin/gh gh workflow list --json name,state,path --repo owner/repo 64/bin/go GOINSECURE GOMOD GOMODCACHE ache/go/1.25.0/xGO111MODULE env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/owner/repo/contents/file.md/tmp/go-build90092428/b383/cli.test /tmp/go-build90092428/b383/cli.test -test.testlogfile=/tmp/go-build90092428/b383/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true GOINSECURE GOMOD GOMODCACHE go env ck 'scripts/**/*GOINSECURE GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)https://api.github.com/repos/test-owner/test-repo/actions/secrets/usr/bin/gh gh api /repos/test-owner/test-repo/actions/secrets --jq .secrets[].name -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE erignore env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go(http block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.