Skip to content

Include and pin safe-outputs gh-aw-node image in default container predownload and manifest#39644

Merged
pelikhan merged 11 commits into
mainfrom
copilot/add-gh-aw-node-to-default-containers
Jun 17, 2026
Merged

Include and pin safe-outputs gh-aw-node image in default container predownload and manifest#39644
pelikhan merged 11 commits into
mainfrom
copilot/add-gh-aw-node-to-default-containers

Conversation

Copilot AI commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Safe-outputs runs in ghcr.io/github/gh-aw-node, but that image was not part of the default container set used for predownload or recorded in the compiled gh-aw-manifest. This change makes the safe-outputs runtime image first-class in both places so generated workflows prefetch it and lock headers describe it accurately, and it resolves through embedded container pin data for predownload/manifest paths.

  • Container collection

    • Add ghcr.io/github/gh-aw-node to the default collected container set whenever safe-outputs is enabled.
    • Preserve existing de-duplication and pinning behavior by flowing the image through the normal container collection path.
  • Manifest/header coverage

    • Ensure the same image is emitted into workflowData.DockerImagePins, so compiled lock files include it under gh-aw-manifest.containers.
  • Pinned runtime config + MCP gateway compatibility

    • Add an embedded container pin for ghcr.io/github/gh-aw-node.
    • Resolve the safe-outputs MCP container reference through pin lookup, then normalize digest refs to MCP Gateway-compatible image[:tag] format for mcpServers.safeoutputs.container (instead of image@sha256:...).
  • Regression coverage

    • Update tests to assert:
      • the generated Download container images step includes the pinned gh-aw-node image
      • the compiled gh-aw-manifest header includes gh-aw-node
      • generated safe-outputs MCP config uses the gateway-compatible gh-aw-node container reference
      • safe-outputs still does not fall back to node:lts-alpine
func resolveContainerImage(image string, data *WorkflowData) string {
	var cache *ActionCache
	if data != nil {
		cache = data.ActionCache
	}
	if pin, ok := lookupContainerPin(image, cache); ok && pin.PinnedImage != "" {
		return pin.PinnedImage
	}
	return image
}


✨ PR Review Safe Output Test - Run 27655260785

Warning

Firewall blocked 6 domains

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

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

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

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude ·

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title Add safeoutputs gh-aw-node to default container set Include safe-outputs gh-aw-node image in default container predownload and manifest Jun 16, 2026
Copilot AI requested a review from pelikhan June 16, 2026 18:24
@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot run pr-finisher skill

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>

Copilot AI commented Jun 16, 2026

Copy link
Copy Markdown
Contributor Author

@copilot run pr-finisher skill

Ran a finisher pass. No unresolved review threads are open, and local make agent-report-progress, make test, and make recompile all passed. The prior CGO failure (TestHashConsistencyAcrossLockFiles) was not reproducible locally. The remaining blockers are that the PR is still draft and CI on the current head is stale/unverified until a maintainer marks it ready and re-triggers workflows.

# - ghcr.io/github/gh-aw-firewall/cli-proxy:0.27.4@sha256:72c378c029d2fad4684847ab44c329e526ac6b1a78cdf97656870ea11d201545
# - ghcr.io/github/gh-aw-firewall/squid:0.27.4@sha256:87979038897e40caed22245b64d1daa796390d2dca289b99d3d1174c85740af8
# - ghcr.io/github/gh-aw-mcpg:v0.3.26@sha256:d3b03f54eee3a8176818c9a52087623e45b7f644a28814337fcc0838e2534490
# - ghcr.io/github/gh-aw-node

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@copilot make sure the container is versioned or pinned to a hash

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Addressed in 1d493a4. The safe-outputs gh-aw-node image now resolves through an embedded digest pin, and the generated MCP config, predownload step, manifest header, and regenerated lock files all use the pinned reference.

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title Include safe-outputs gh-aw-node image in default container predownload and manifest Include and pin safe-outputs gh-aw-node image in default container predownload and manifest Jun 16, 2026
Copilot AI requested a review from pelikhan June 16, 2026 20:33
@pelikhan pelikhan added the smoke label Jun 16, 2026
@pelikhan pelikhan marked this pull request as ready for review June 16, 2026 20:41
Copilot AI review requested due to automatic review settings June 16, 2026 20:41

Copilot AI left a comment

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.

Pull request overview

This pull request makes the Safe Outputs runtime container (ghcr.io/github/gh-aw-node) a first-class, digest-pinned dependency in gh-aw by (1) collecting it into the default predownload image set when safe-outputs is enabled, (2) emitting it into gh-aw-manifest container pin data, and (3) ensuring generated MCP config references the pinned image.

Changes:

  • Add ghcr.io/github/gh-aw-node to Docker image collection when safe-outputs is enabled, and ensure manifest pin data is recorded via the existing pinning pipeline.
  • Add an embedded container pin for ghcr.io/github/gh-aw-node and a resolveContainerImage helper; use it when rendering the Safe Outputs MCP container reference.
  • Update tests and regenerate workflow .lock.yml files so predownload steps, manifest headers, and MCP config reflect the pinned gh-aw-node image.
Show a summary per file
File Description
pkg/workflow/action_pins.go Add resolveContainerImage helper to prefer cached/embedded container pins.
pkg/workflow/docker.go Collect gh-aw-node into the default Docker predownload set when safe-outputs is enabled.
pkg/workflow/docker_pin_test.go Add coverage for embedded gh-aw-node pin usage and safe-outputs image collection/manifest pin assertions.
pkg/workflow/docker_predownload_test.go Assert predownload step includes pinned gh-aw-node and manifest header includes the base image.
pkg/workflow/mcp_renderer_builtin.go Render Safe Outputs MCP container via pinned image resolution (JSON + TOML paths).
pkg/workflow/mcp_renderer_test.go Update renderer tests to expect the pinned gh-aw-node container reference.
pkg/workflow/mcp_setup_generator_test.go Update MCP setup generation expectations to match pinned gh-aw-node container usage.
pkg/workflow/mcp_config_refactor_test.go Update shared config helper tests to expect pinned gh-aw-node container references.
pkg/workflow/mcp_api_key_masking_test.go Update safe-outputs MCP config assertions to match pinned container reference.
pkg/workflow/safe_outputs_mcp_integration_test.go Update integration assertions to validate pinned gh-aw-node in generated lock output.
pkg/workflow/data/action_pins.json Add embedded container pin entry for ghcr.io/github/gh-aw-node.
pkg/actionpins/data/action_pins.json Add embedded container pin entry for ghcr.io/github/gh-aw-node.
.github/aw/actions-lock.json Record gh-aw-node pin in the repo-local pins cache file.
.github/workflows/video-analyzer.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/test-workflow.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/test-dispatcher.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/smoke-pi.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload.
.github/workflows/smoke-copilot-sdk.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/smoke-ci.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/research.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/repo-tree-map.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/issue-triage-agent.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/gpclean.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/github-remote-mcp-auth-test.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/firewall.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/example-permissions-warning.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/daily-team-status.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/daily-syntax-error-quality.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/daily-max-ai-credits-test.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/daily-credit-limit-test.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/daily-byok-ollama-test.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/copilot-pr-merged-report.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/copilot-centralization-optimizer.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/copilot-centralization-drilldown.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/bot-detection.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.
.github/workflows/ace-editor.lock.yml Regenerated lock file to include pinned gh-aw-node in manifest + predownload + MCP config.

Copilot's findings

Tip

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

  • Files reviewed: 102/262 changed files
  • Comments generated: 0

@pelikhan

Copy link
Copy Markdown
Collaborator

@copilot merge main and recompile

@pelikhan pelikhan added smoke and removed smoke labels Jun 16, 2026
@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

✅ All tools validated successfully! Agent Container Smoke Test confirms agent container is ready.

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

💫 TO BE CONTINUED... Smoke Claude failed to deliver outputs! Our hero faces unexpected challenges...

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

🚀 Smoke Antigravity MISSION COMPLETE! Antigravity has spoken. ✨

@github-actions

Copy link
Copy Markdown
Contributor

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

@github-actions

Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot - AOAI (apikey) is now investigating this pull request. Sources say the story is developing...

@github-actions

Copy link
Copy Markdown
Contributor

📰 BREAKING: Smoke Copilot - AOAI (Entra) is now investigating this pull request. Sources say the story is developing...

@github-actions

Copy link
Copy Markdown
Contributor

Smoke test results: 1-4 ✅, 5 ❌. Overall: FAIL.

Warning

Firewall blocked 1 domain

The following domain was blocked by the firewall during workflow execution:

  • localhost

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

network:
  allowed:
    - defaults
    - "localhost"

See Network Configuration for more information.

Smoke Gemini — Powered by Gemini ·

@github-actions

Copy link
Copy Markdown
Contributor

Agent Container Tool Check

Tool Status Version
bash 5.2.21
sh available
git 2.54.0
jq 1.7
yq v4.53.3
curl 8.5.0
gh 2.93.0
node v22.22.3
python3 3.11.15 (PyPy 7.3.23)
go 1.24.13
java openjdk 21.0.11
dotnet 10.0.300

Result: 12/12 tools available ✅

Overall Status: PASS

🔧 Tool validation by Agent Container Smoke Test ·

@github-actions

Copy link
Copy Markdown
Contributor

Smoke test 27655260778\nPRs: #39689 "fix: restore MCP CLI concept explanation and fix safeoutputs framing"; #39687 "Record compiler ref in lock metadata for compiles"\nResults: #1-#9 ✅\n#10 skipped (no editable issue fields available)\nOverall: PASS

Warning

Firewall blocked 6 domains

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

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

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

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

🔮 The oracle has spoken through Smoke Codex ·

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

Comment Memory

Stone bot hums low
Tests thump drums in dark night now
Green sparks chase the dawn

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

Warning

Firewall blocked 6 domains

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

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

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

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot ·

@github-actions

Copy link
Copy Markdown
Contributor

🧪 Smoke Test: Claude — Run 27655260785

Core tests #1-12: ✅ all passed

PR review tests:

Overall: PARTIAL (core PASS; #18 env-blocked, #19 skipped)

Warning

Firewall blocked 6 domains

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

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

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

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude ·

@github-actions github-actions Bot left a comment

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.

💥 Automated smoke test review - all systems nominal!

Warning

Firewall blocked 6 domains

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

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

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

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

💥 [THE END] — Illustrated by Smoke Claude

"digest": "sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388",
"pinned_image": "ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"
},
"ghcr.io/github/gh-aw-node": {

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 — pinning the gh-aw-node image by digest here ensures reproducible, tamper-evident container resolution. ✅

},
"ghcr.io/github/gh-aw-node": {
"image": "ghcr.io/github/gh-aw-node",
"digest": "sha256:529d02eb970b1161aa25c593a9c3df57fdfad5a8add328cb3b6eccef66f3183b",

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.

Consider adding a brief comment near this digest entry documenting when/how it should be refreshed, to ease future maintenance. 🔧

@github-actions

Copy link
Copy Markdown
Contributor

PR: Include and pin safe-outputs gh-aw-node image in default container predownload and manifest
1❌ 2✅ 3✅ 4✅ 5❌
6✅ 7❌ 8✅ 9✅ 10✅
11✅ 12✅ 13✅ 14✅ 15✅
FAIL. Author Copilot. Assignees pelikhan, Copilot.

Warning

Firewall blocked 6 domains

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

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

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

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot ·

@github-actions github-actions Bot left a comment

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.

Smoke review done.

Warning

Firewall blocked 6 domains

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

  • accounts.google.com
  • android.clients.google.com
  • clients2.google.com
  • contentautofill.googleapis.com
  • safebrowsingohttpgateway.googleapis.com
  • www.google.com

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

network:
  allowed:
    - defaults
    - "accounts.google.com"
    - "android.clients.google.com"
    - "clients2.google.com"
    - "contentautofill.googleapis.com"
    - "safebrowsingohttpgateway.googleapis.com"
    - "www.google.com"

See Network Configuration for more information.

📰 BREAKING: Report filed by Smoke Copilot

@github-actions

Copy link
Copy Markdown
Contributor

@copilot review all comments and address the note about documenting when the pinned gh-aw-node digest should be refreshed. Then refresh this branch and rerun checks.

Generated by 👨‍🍳 PR Sous Chef ·

@github-actions

Copy link
Copy Markdown
Contributor

Smoke Test Results:

  • Test1: ✅
  • Test2: ✅
  • Test3: ❌
  • Test4: ❌
  • Test5: ✅
  • Test6: ✅
  • Test7: ✅
  • Test8: ✅
    Overall: FAIL
    @Copilot

📰 BREAKING: Report filed by Smoke Copilot - AOAI (apikey) ·

@pelikhan pelikhan merged commit 1663f6b into main Jun 17, 2026
20 checks passed
@pelikhan pelikhan deleted the copilot/add-gh-aw-node-to-default-containers branch June 17, 2026 02:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants