Skip to content

shared/apm.md: align with canonical microsoft/apm source (v1.5.0)#29002

Merged
pelikhan merged 5 commits intomainfrom
copilot/align-docs-with-canonical-apm
Apr 29, 2026
Merged

shared/apm.md: align with canonical microsoft/apm source (v1.5.0)#29002
pelikhan merged 5 commits intomainfrom
copilot/align-docs-with-canonical-apm

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 28, 2026

The vendored shared/apm.md was pinned to apm-action@v1.4.2 and used the deprecated dependencies: input, silently missing multi-org GitHub App auth and the modern multi-bundle restore path introduced in v1.5.0.

.github/workflows/shared/apm.md (Option A — canonical replacement)

  • Upgrade microsoft/apm-action@v1.4.2v1.5.0
  • New apm-prep job normalises packages:, single-app shorthand, and apps:[] into a credential-group matrix; the apm job fans out one replica per group, each minting its own installation token when app-id is set
  • New import-schema inputs: app-id, private-key, owner, repositories (single-app shorthand) and apps:[] (cross-org); all optional and additive — existing consumers that only pass packages: are unaffected
  • Multi-bundle restore via bundles-file: replaces the single bundle: path; includes a manifest-validation step that defends against same-run artifact-name collision
  • Version header (Source of truth: / apm-action pin:) added for drift detection
  • Restore steps placed under pre-agent-steps: (not steps:) to execute after the base-branch folder restore in PR workflows, preventing clobbering of APM-installed skills
# Before — public packages only, no App auth
imports:
  - uses: shared/apm.md
    with:
      packages:
        - microsoft/apm-sample-package

# After — same call still works; new cross-org form now available
imports:
  - uses: shared/apm.md
    with:
      packages:
        - microsoft/apm-sample-package
      apps:
        - app-id: ${{ vars.ACME_APP_ID }}
          private-key: ${{ secrets.ACME_KEY }}
          owner: acme-org
          packages:
            - acme-org/private-skills

All 204 workflows recompiled cleanly; smoke-claude.lock.yml now pins microsoft/apm-action@454b8a1 (v1.5.0).

docs/src/content/docs/reference/dependencies.md

  • New "Where shared/apm.md comes from" section clarifies that it is a local vendor file, not a remote import, and provides a curl one-liner to fetch the canonical copy
  • Deprecation note split into two: the gh-aw frontmatter dependencies: field and the apm-action-level dependencies: input (deprecated in favour of packages:/apps:)
  • Reference table gains a canonical-source row pointing at microsoft/apm

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 gh repo view --json owner,name --jq .owner.login + "/" + .name 64/pkg/tool/linux_amd64/compile ./../.prettieriggit b/gh-aw/actions/rev-parse nfig/composer/ve--show-toplevel 64/pkg/tool/linux_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh repo view owner/repo --no�� _.a git cfg l-apm (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 on' --ignore-path ../../../.prettierignore remote.origin.url k.yml (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 --get remote.origin.url /usr/bin/git tdrain.test 510110/b021/vet.rev-parse x_amd64/vet git rev-�� --show-toplevel x_amd64/vet /usr/bin/git "prettier" --wrinode bash 64/pkg/tool/linuinstall 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 1048-16996/test-3472171347 -buildtags /usr/bin/git -errorsas -ifaceassert -nilfunc git rev-�� --show-toplevel -tests /usr/bin/git .js' --ignore-pagit show x_amd64/vet git (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 "prettier" --wri--workflow tmain.go ache/go/1.25.8/x--limit rror (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel rtcfg /usr/bin/git 1048-16996/test-tr 510110/b241/vet.\n ache/go/1.25.8/x: git rev-�� --show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git agent-persona-exgit 510110/b070/_tesrev-parse 1/x64/bin/node 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 /usr/bin/git /tmp/gh-aw-test-git remote 510110/b449/vet.--show-toplevel git rev-�� --show-toplevel git /usr/bin/git /tmp/gh-aw-test-git config /opt/hostedtoolc--show-toplevel git (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --verify main repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --verify main repository(owner: $owner, name:-f (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/compile /usr/bin/git 510110/b427/_pkggit /tmp/go-build287log 510110/b427=> git rev-�� --show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /usr/bin/git 618n/6K3JL8ddMPogit -buildtags /opt/hostedtoolc--show-toplevel 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 k/gh-aw/gh-aw/.github/workflows (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv ithub/workflows origin repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv ithub/workflows --log-level ./gh-aw --log-target journal-or-kmsg (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 REDACTED.os 64/pkg/tool/linurev-parse 510110/b471/vet.cfg te 'scripts/**/*git cfg 64/pkg/tool/linu--show-toplevel /usr/bin/git conf�� --get-regexp ^remote\..*\.gh-resolved$ /tmp/go-build287510110/b469/workflow.test edOutput27633422git on ache/go/1.25.8/x--show-toplevel /tmp/go-build287510110/b469/workflow.test (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 BHBh/Mm0ui0x2Iv4Z-LYbBHBh remote.origin.url clusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle ../pkg/workflow/git 90 x_amd64/compile git 5101�� --show-toplevel 510110/b459/_testmain.go /tmp/go-build287510110/b456/timeutil.test k/gh-aw/gh-aw (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv RaC4/5CI_wxKiMnB8mJ2ARaC4 64/pkg/tool/linux_amd64/vet /usr/bin/infocmp te 'scripts/**/*git cfg 64/pkg/tool/linu--show-toplevel infocmp 5101�� xterm-color 510110/b469/_testmain.go /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link /home/REDACTED/worgit on ache/go/1.25.8/x--show-toplevel /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/link (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --verify ithub/workflows/smoke-claude.lock.yml 1/x64/bin/bash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv mplied -buildtags /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linux_amd64/vet -errorsas set -nilfunc /opt/hostedtoolcache/go/1.25.8/x64/pkg/tool/linuremote.origin.url -ato�� licyBlockedUsersExpressionCompiledOutput2763342210/001 -buildtags /usr/bin/git -errorsas -ifaceassert -nilfunc 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 /tmp/TestGuardPolicyMinIntegrityOnlymin-integrity_with_repos=pub@{u} rev-parse test graphql -f /usr/bin/git test Enve�� /tmp/TestHashConsistency_GoAndJavaScript53306925base (original) git /usr/bin/git k/gh-aw/gh-aw/.ggit config x_amd64/vet git (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v7
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v7 --jq [.object.sha, .object.type] | @tsv --local user.email r: $owner, name: $name) { hasDiscussionsEnabled } } (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --show-toplevel git $name) { hasDiscussionsEnabled } } --show-toplevel 64/pkg/tool/linu--norc /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --git-dir 64/pkg/tool/linu-C /usr/bin/sh git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --show-toplevel /opt/hostedtoolcache/node/24.14.1/x64/bin/node /usr/bin/git github.repositorbash x_amd64/vet /usr/bin/git git runs�� --show-toplevel git /usr/bin/git bash 64/pkg/tool/linuapi /usr/lib/git-corgraphql git (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch z|lzo))?$ (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch --show-toplevel git r: $owner, name: $name) { hasDiscussionsEnabled } } --show-toplevel git /usr/bin/git git show�� 5f8c66299d6a6fee8c8d46b81a0624ceff260d2a:.github/workflows/smokeremote.origin.url :latest r: $owner, name: $name) { hasDiscussionsEnabled } } --show-toplevel ache/node/24.14.-C /usr/bin/git head (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 xf9qL--/YcBrNqCW-tests /usr/bin/git te 'scripts/**/*git config 64/pkg/tool/linu--show-toplevel /usr/bin/git remo�� -v 64/pkg/tool/linuremote.origin.url /usr/bin/git ithout_min-integgit go cfg git (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 /tmp/TestGuardPolicyBlockedUsersApprovalLabelsCompiledOutput3355478700/001 remote /usr/bin/git ted/golang/pkg/fgit show x_amd64/vet git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/git ithub/workflows config x_amd64/vet 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 /tmp/TestGuardPolicyBlockedUsersApprovalLabelsCotest-logs/run-4 rev-parse /usr/bin/git ./../pkg/workflogit rev-parse x_amd64/vet git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse ache/node/24.14.1/x64/bin/node ithub/workflows (http block)
  • https://api.github.com/repos/github/gh-aw/actions/runs
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-04-22 --local DiscussionsEnabluser.name 22/xQe5f0wJO56wlTest User imag�� ed-imports-enabled-with-body-content.md mcp/arxiv-mcp-server 64/pkg/tool/linux_amd64/vet get --local r: $owner, name:user.name 64/pkg/tool/linuTest User (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-03-30 --local tnet/tools/bash x_amd64/link -1 te '**/*.cjs' '**/*.ts' '**/*.json' --ignore-path ../../../.pret.prettierignore cfg 64/pkg/tool/linux_amd64/vet get --local 64/bin/bash 7z/4P7r8Nx30lqcg-1 (http block)
    • Triggering command: /usr/bin/gh gh run list --json databaseId,number,url,status,conclusion,workflowName,createdAt,startedAt,updatedAt,event,headBranch,headSha,displayTitle --limit 100 --created >=2026-01-29 --local (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 rev-parse cfg --local core.hooksPath $name) { has--show-toplevel ache/go/1.25.8/x64/pkg/tool/linu/home/REDACTED/work/gh-aw/gh-aw/pkg/parser/import_cycle_test.go (http block)
    • Triggering command: /usr/bin/gh gh run download 1 --dir test-logs/run-1 on 64/pkg/tool/linux_amd64/compile /../../.prettiergit erignore cal/bin/bash 64/pkg/tool/linux_amd64/compile (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 om/davecgh/go-spew@v1.1.1/spew/common.go 64/pkg/tool/linux_amd64/link --local commit.gpgsign ode-gyp-bin/nodeuser.name 64/pkg/tool/linuTest User --no�� tants.test git rtcfg.link FETCH_HEAD^{commgit rd/go-difflib/direv-parse repository(owne--show-toplevel D1vb8bV6YvrCyz0kYU/UimiJ_lt2omPM-trimpath (http block)
    • Triggering command: /usr/bin/gh gh run download 12345 --dir test-logs/run-12345 config test remote.origin.urgit core.hooksPath $name) { has--show-toplevel test stlo�� se 510110/b175/vet.cfg cfg l-apm (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 -f 64/pkg/tool/linu-importcfg -f owner=github -f 64/pkg/tool/linutest@example.com -30 510110/b081/_pkg_.a git cfg FETCH_HEAD^{commgit /testdeps /usr/bin/head ache/go/1.25.8/x64/pkg/tool/linu-dwarf=false (http block)
    • Triggering command: /usr/bin/gh gh run download 12346 --dir test-logs/run-12346 cfg 64/pkg/tool/linux_amd64/vet --local commit.gpgsign rgo/bin/bash 64/pkg/tool/linux_amd64/vet (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 rev-parse ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet --local core.hooksPath /home/REDACTED/.do--show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet --no�� --noprofile git cfg l-apm (http block)
    • Triggering command: /usr/bin/gh gh run download 2 --dir test-logs/run-2 on ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet /../../.prettiergit erignore /home/REDACTED/wor--show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (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 config cfg remote.origin.urgit core.hooksPath repository(owner: $owner, name:xterm-color ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run download 3 --dir test-logs/run-3 on ache/go/1.25.8/x64/pkg/tool/linu-nolocalimports /../../.prettiergit erignore r: $owner, name:--show-toplevel ache/go/1.25.8/x64/pkg/tool/linu/tmp/go-build287510110/b431/_testmain.go (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 config cfg remote.origin.urgit core.hooksPath /usr/local/sbin/--show-toplevel ache/go/1.25.8/x64/pkg/tool/linu--jq --no�� --noprofile git k l-apm k/gh-aw/gh-aw/pk/tmp/test-expr-2121545787.js repository(owneinputs.version ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
    • Triggering command: /usr/bin/gh gh run download 4 --dir test-logs/run-4 on 64/pkg/tool/linux_amd64/link /../../.prettiergit erignore n-dir/git 64/pkg/tool/linux_amd64/link (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 cfg cfg --local core.hooksPath k/_temp/uv-pytho--show-toplevel ylQP4Z8/vCNYLdc7D8RXanEmFBss --no�� --noprofile git ache/go/1.25.8/x64/pkg/tool/linu-nilfunc l-apm (http block)
    • Triggering command: /usr/bin/gh gh run download 5 --dir test-logs/run-5 on cfg /../../.prettiergit erignore $name) { has--show-toplevel ache/go/1.25.8/x64/pkg/tool/linu-importcfg (http block)
  • https://api.github.com/repos/github/gh-aw/actions/workflows
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --show-toplevel (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 (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 gpg.program erignore 64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/github/gh-aw/contents/.github/workflows/shared/reporting.md
    • Triggering command: /tmp/go-build287510110/b404/cli.test /tmp/go-build287510110/b404/cli.test -test.testlogfile=/tmp/go-build287510110/b404/testlog.txt -test.paniconexit0 -test.v=true -test.parallel=4 -test.timeout=10m0s -test.run=^Test -test.short=true (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 ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url /usr/bin/git ace-editor.md 99eb428b eutil.test git rev-�� --show-toplevel eutil.test /usr/bin/git k/gh-aw/gh-aw /tmp/go-build287-k e/git 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 se 510110/b118/vet.cfg not-exist-xyzzy.txt **/*.ts **/*.json --ignore-path ache/go/1.25.8/x64/pkg/tool/linuremote.origin.url (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 es-file\|v1.5.0\-test.timeout=10m0s ithub/workflows/-test.run=^Test x_amd64/vet -f owner=github -f x_amd64/vet 1639�� k/gh-aw/gh-aw/.github/workflows -f x_amd64/vet l owner=github DiscussionsEnabl/repos/actions/github-script/git/ref/tags/v9 x_amd64/vet (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 k/gh-aw/gh-aw/.g-c=4 show x_amd64/vet (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 k/gh-aw/gh-aw config x_amd64/vet remote.origin.urgit ler_yaml_main_jo-C $name) { has/tmp/gh-aw-test-runs/20260429-001048-16996/test-179725314/.github/workflows x_amd64/vet 1639�� k/gh-aw/gh-aw/.github/workflows (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 graphql _job_builder.go x_amd64/vet _jobs_test.go _simple_test.go test.go x_amd64/vet 1/x6�� esteps_test.go .go x_amd64/vet validation_test.git ions_test.go s_test.go x_amd64/vet (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 inspect ghcr.io/github/sgithub.com/github/gh-aw/pkg/semverutil x_amd64/vet (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 se 510110/b122/vet.cfg k **/*.ts **/*.json --ignore-path ache/go/1.25.8/x64/pkg/tool/linuconfig sRem�� se 510110/b250/vet.cfg ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet tierignore (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 --verify main /usr/bin/bash ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (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-build287510110/b430/importcfg -embedcfg /tmp/go-build287510110/b430/embedcfg -pack -C ../pkg/workflow/-errorsas show x_amd64/compile (http block)
    • Triggering command: /usr/bin/gh gh workflow list --json name,state,path --repo owner/repo sh --stats (http block)
    • Triggering command: /usr/bin/gh gh workflow list --repo owner/repo --json name,path,state rtcfg.link FETCH_HEAD^{commgit rd/go-difflib/direv-parse repository(owne--show-toplevel D1vb8bV6YvrCyz0kYU/UimiJ_lt2omPM-trimpath (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 on' --ignore-path ../../../.prettierignore (http block)
  • https://api.github.com/repos/test/repo
    • Triggering command: /usr/bin/gh gh api /repos/test/repo --jq .default_branch _.a 510110/b047/vet.cfg k --noprofile er_test r: $owner, name:--show-toplevel ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet sRem�� uypkflb2T bash ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet tierignore (http block)

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


Changeset

  • Type: patch
  • Description: Updated the shared APM workflow to use microsoft/apm-action v1.5.0 with multi-bundle restore and optional GitHub App credential groups.

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 #29002 ·



✨ PR Review Safe Output Test - Run 25087942760

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 · ● 293.9K ·

Copilot AI changed the title [WIP] Align shared/apm.md with canonical microsoft/apm source shared/apm.md: align with canonical microsoft/apm source (v1.5.0) Apr 29, 2026
Copilot AI requested a review from pelikhan April 29, 2026 00:15
@pelikhan
Copy link
Copy Markdown
Collaborator

@daneilmeppiel

@pelikhan pelikhan added the smoke label Apr 29, 2026
@github-actions
Copy link
Copy Markdown
Contributor

💥 WHOOSH! Smoke Claude springs into action on this pull request! [Panel 1 begins...]

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

🚀 Smoke OpenCode MISSION COMPLETE! OpenCode delivered. 🔥

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

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

@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 29, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 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 29, 2026

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

@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

@pelikhan
Copy link
Copy Markdown
Collaborator

@github-actions
Copy link
Copy Markdown
Contributor

🤖 *Beep boopecho BEGIN___COMMAND_OUTPUT_MARKER ; PS1= ; PS2= ; unset HISTFILE ; EC=0 ; echo ___BEGIN___COMMAND_DONE_MARKER___0 ; } The smoke test agent was here, running tests and checking vibes. All systems nominal! The lockfile stats look impressively thorough — 204 workflows analyzed with 100% concurrency adoption? That's some serious engineering discipline. 🎉

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

@github-actions
Copy link
Copy Markdown
Contributor

Smoke Test Results for run §25084493569

1 GitHub MCP ✅ | 2 MCP Scripts GH ✅ | 3 Serena ✅ | 4 Playwright ✅ | 5 Web Fetch ✅ | 6 File Write ✅ | 7 Bash ✅ | 8 Discussion ✅ | 9 Build ✅ | 10 Artifact ✅ | 11 Discussion Create ✅ | 12 Haiku ✅ | 13 PR Review ✅ | 14 Comment Memory ✅

Overall: ✅ PASS@pelikhan, @Copilot

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

Comment Memory

Smoke tests bloom green
Copilot checks every line
All systems go now

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

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

📰 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.

Smoke test review: The APM shared workflow update looks clean. The updated comments improve documentation clarity. No blocking issues found.

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

@github-actions
Copy link
Copy Markdown
Contributor

Commit pushed: 00c309a

Generated by Changeset Generator

@github-actions
Copy link
Copy Markdown
Contributor

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

@pelikhan
Copy link
Copy Markdown
Collaborator

@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — great work upgrading the vendored shared/apm.md to apm-action@v1.5.0! The PR description is thorough, the changeset entry is present, and all four changed files are clearly scoped to the APM upgrade. One thing worth noting before merge:

  • No test coverage — the diff doesn't include any test files for the new apm-prep job logic, the credential-group matrix fan-out, or the bundles-file: multi-bundle restore path. Even a basic smoke/integration test that exercises the new inputs would give reviewers more confidence.

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

Add integration or smoke tests for the updated shared/apm.md workflow introduced in PR #29002.
Specifically, cover the following scenarios:
1. Existing consumer that only passes `packages:` — should behave identically to the v1.4.2 path.
2. Single-app shorthand (`app-id` + `private-key` + `owner`) — should mint an installation token and restore bundles.
3. `apps:[]` cross-org form — should fan out one replica per credential group.
4. `bundles-file:` manifest-validation step — should fail fast on artifact-name collision.
Place tests under the appropriate test directory for this repo.

Generated by Contribution Check · ● 2.1M ·

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 29, 2026

@copilot fix https://github.com/github/gh-aw/actions/runs/25085303002/job/73499949496#step:27:1

Fixed in 7d59310. download-artifact@v8 with pattern: downloads artifacts flat (no artifact-named subdirectory), so ls /tmp/gh-aw/apm-bundles returned inline-workflow-1.0.0.tar.gz instead of apm-default, causing the comm validation to report it missing.

Two changes:

  1. Added a "Rename bundle to group-scoped filename" step in the apm job that renames the packed tar.gz to apm-{group-id}.tar.gz (env-var safe, no template injection risk).
  2. Rewrote the validation to use find … -name "${name}.tar.gz" -maxdepth 2 instead of ls, which works correctly for both flat and subdirectory download layouts.

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 WavS1tlHDEfu (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 ase,codename,all-1 (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv get --global n-dir/bash http.https://gitgit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv get cs-with-canonical-apm repository(owner: $owner, name:-f credential.helpedocker (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv /home/REDACTED/work/_temp/copilot--f (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv get cs-with-canonical-apm repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } credential.helpeinfocmp (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 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --local credential.usernowner=github $name) { hasDiscussionsEnabled } } (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv --local credential.helper .yml (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch get --local ache/go/1.25.8/x-f http.https://gitdocker (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch xterm-color (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch ithub/workflows show r: $owner, name: $name) { hasDiscussionsEnabled } } get --local DiscussionsEnabl/home/REDACTED/work/gh-aw/gh-aw git -C ithub/workflows show r: $owner, name: $name) { hasDiscussionsEnabled } } l credential.usern-C repository(owne/home/REDACTED/work/gh-aw/gh-aw git (http block)

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

🚀 Smoke OpenCode MISSION COMPLETE! OpenCode delivered. 🔥

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

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

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 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 29, 2026

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

@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 29, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 29, 2026

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

@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 21.0.10 (Temurin)
dotnet 10.0.201

Result: 12/12 tools available ✅

Overall Status: PASS

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

@github-actions
Copy link
Copy Markdown
Contributor

Smoke Codex 25087942768: FAIL
PRs: #29023 [FAQ] Add: billing model, spend controls, and loop cost FAQ entries; #29005 fix(security): RGS-008 — replace direct secret interpolation in run blocks with env var references
✅ GitHub MCP ✅ Serena ✅ Playwright ❌ Web fetch ✅ File write ✅ Bash ✅ Build ❌ Comment memory
Run: https://github.com/github/gh-aw/actions/runs/25087942768

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

Smoke Test Results for PR #29002 (@Copilot)

Test Status
GitHub MCP
MCP Scripts GH CLI
Serena CLI
Playwright CLI
Web Fetch
File Writing + Bash
Discussion Interaction
Build gh-aw
Upload artifact
Discussion Creation
Workflow Dispatch
PR Review
Comment Memory ⚠️

Overall: PASS ✅ | cc @pelikhan

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

@github-actions
Copy link
Copy Markdown
Contributor

🤖 BEEP BOOP — The smoke test agent swooped in, ran 13 tests, built some Go binaries, dispatched haikus into the void, and left no test unturned! If you are reading this, it means everything went swimmingly. 🏊♂️✨ The robots are (mostly) in charge now.

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

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.

Smoke test review: PR looks good. Upgrades APM action to v1.5.0 with multi-bundle restore support. Two minor suggestions left inline.

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

"gh-aw": patch
---

Updated the shared APM workflow to use `microsoft/apm-action` v1.5.0 with multi-bundle restore and optional GitHub App credential groups.
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 changeset entry — clearly describes the APM action upgrade and the new features it enables.

@@ -2,162 +2,342 @@
# APM (Agent Package Manager) - Shared Workflow
# Install Microsoft APM packages in your agentic workflow.
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 an inline comment explaining the v1.4.2 to v1.5.0 upgrade rationale for future maintainers.

@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 25087942760 — Results

Core Tests (#1–12): ✅✅✅✅✅✅✅✅✅❌✅✅
PR Review Tests (#13–19): ✅✅✅⚠️✅✅⚠️

Overall: PARTIAL (test #10 Agentic Workflows MCP failed; #16 and #19 skipped — no threads/safe PR)

Pass Fail Skip
17 1 2

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 · ● 293.9K ·

@pelikhan pelikhan marked this pull request as ready for review April 29, 2026 04:03
Copilot AI review requested due to automatic review settings April 29, 2026 04:03
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.

Aligns the vendored shared/apm.md workflow with the canonical microsoft/apm version (v1.5.0), adding multi-bundle restore and support for GitHub App credential groups, and updates docs/locks accordingly.

Changes:

  • Updates the shared APM workflow to microsoft/apm-action@v1.5.0, introducing an apm-prep matrix fan-out and multi-bundle restore (bundles-file).
  • Updates the smoke-claude.lock.yml manifest to reflect the new action pin and additional action usage.
  • Expands dependency documentation to clarify vendoring, canonical source, and deprecations.
Show a summary per file
File Description
docs/src/content/docs/reference/dependencies.md Documents shared/apm.md provenance and clarifies deprecations/canonical source.
.github/workflows/smoke-claude.lock.yml Updates pinned action SHAs/versions and reflects new APM prep + multi-bundle restore flow.
.github/workflows/shared/apm.md Replaces the shared APM workflow with the v1.5.0 canonical structure (prep + matrix pack + bundles-file restore).
.changeset/patch-align-shared-apm.md Adds a patch changeset describing the APM workflow alignment.

Copilot's findings

Tip

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

Comments suppressed due to low confidence (1)

.github/workflows/shared/apm.md:1

  • The apm-prep job is emitting matrix={\"group\":$groups} as a job output, and groups includes private-key values (either from top-level private-key or apps[].private-key). Job outputs/matrix data are not a safe channel for secrets and can be inadvertently exposed (e.g., later echoed, included in debug output, or surfaced via workflow metadata). Fix by ensuring the computed matrix output contains only non-secret fields (e.g., id, owner, repositories, packages) and retrieve the private key in the apm job directly from the original import inputs at runtime (or restructure to avoid passing secret material through outputs/matrix).
---
  • Files reviewed: 4/4 changed files
  • Comments generated: 3

Comment on lines +200 to +203
# SAFE: emit only id + package-count to logs. Never $groups in full.
{
echo "matrix={\"group\":$groups}"
} >> "$GITHUB_OUTPUT"
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

The apm-prep job is emitting matrix={\"group\":$groups} as a job output, and groups includes private-key values (either from top-level private-key or apps[].private-key). Job outputs/matrix data are not a safe channel for secrets and can be inadvertently exposed (e.g., later echoed, included in debug output, or surfaced via workflow metadata). Fix by ensuring the computed matrix output contains only non-secret fields (e.g., id, owner, repositories, packages) and retrieve the private key in the apm job directly from the original import inputs at runtime (or restructure to avoid passing secret material through outputs/matrix).

Copilot uses AI. Check for mistakes.
Comment on lines 235 to 246
- name: Pack APM packages
id: apm_pack
if: steps.apm_cache.outputs.cache-hit != 'true'
uses: microsoft/apm-action@v1.4.2
id: pack
uses: microsoft/apm-action@v1.5.0
env:
GITHUB_TOKEN: ${{ secrets.GH_AW_PLUGINS_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ steps.token.outputs.token || secrets.GH_AW_PLUGINS_TOKEN || secrets.GH_AW_GITHUB_TOKEN || secrets.GITHUB_TOKEN }}
with:
dependencies: ${{ steps.apm_prep.outputs.deps }}
dependencies: ${{ steps.list.outputs.deps }}
isolated: 'true'
pack: 'true'
archive: 'true'
target: all
working-directory: /tmp/gh-aw/apm-workspace
Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

This workflow still passes the deprecated dependencies: input into microsoft/apm-action@v1.5.0, which conflicts with the PR description and the updated docs stating the action-level dependencies: input is deprecated in favor of packages:/apps:. To align behavior and reduce future breakage if dependencies: is removed, update the pack invocation to use the supported inputs (ideally passing matrix.group.packages via the action’s packages: input) and drop the YAML-list rendering step if it’s no longer needed.

Copilot uses AI. Check for mistakes.
echo "::error::shared/apm.md import provided no packages. Add packages: <list>, single-app inputs (app-id + private-key), or apps: <list> in the with: block."
exit 1
fi

Copy link

Copilot AI Apr 29, 2026

Choose a reason for hiding this comment

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

The validation only checks that there is at least one credential group, but it does not verify that each group has a non-empty packages list. This allows configurations like app-id set with no packages, or apps: [...] entries with empty packages, which will later produce an empty dependency list and can lead to no-op/failed pack runs and confusing downstream restore errors. Add a validation step after groups is computed to fail fast if any group has packages missing/empty (and ideally report the offending group id).

Suggested change
invalid_package_groups=$(echo "$groups" | jq -r '[.[] | select((.packages | type) != "array" or (.packages | length) == 0) | (.id // "<unknown>")] | join(", ")')
if [ -n "$invalid_package_groups" ]; then
echo "::error::apm credential group(s) missing packages or with an empty packages list: $invalid_package_groups. Ensure each group defines at least one package."
exit 1
fi

Copilot uses AI. Check for mistakes.
@pelikhan pelikhan merged commit 0fca386 into main Apr 29, 2026
203 of 206 checks passed
@pelikhan pelikhan deleted the copilot/align-docs-with-canonical-apm branch April 29, 2026 04:07
danielmeppiel added a commit to microsoft/apm that referenced this pull request Apr 29, 2026
Picks up the AW_APM_PACKAGES JSON-array fix from gh-aw v0.71.2
(shared/apm.md realignment in github/gh-aw#29002), which caused
the PR Review Panel run on PR #1042 to fail at the
'Validate downloaded bundles match matrix manifest' step.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
danielmeppiel added a commit to microsoft/apm that referenced this pull request Apr 29, 2026
…loses #722) (#1042)

* fix(marketplace): address PR #1038 review comments + docs refresh

Twelve findings from the copilot-pull-request-reviewer pass on PR #1038.

Code fixes (in src/):
- Remove unused DEPRECATION_MESSAGE import in commands/marketplace.py
- Remove unused LOCAL_SOURCE_RE import in marketplace/yml_editor.py
- _has_marketplace_block() now raises MarketplaceYmlError on YAML parse
  errors and OS read errors instead of swallowing them as 'no config'
  -- fixes a misleading message on malformed apm.yml.
- migrate_marketplace_yml() validates that apm.yml round-trips to a
  mapping; empty apm.yml now treated as an empty mapping (CommentedMap)
  so the marketplace block can still be inserted.
- _is_apm_yml_with_marketplace() now requires the marketplace value
  itself to be a mapping; previously a non-dict value would crash
  _get_marketplace_container() callers on .get() access.
- 'apm marketplace init' applies the same empty-vs-non-mapping guard
  on apm.yml round-trip; non-mapping top level is a hard error,
  empty file is treated as an empty mapping.
- 'apm init --marketplace' no longer derives marketplace owner from
  the project name (which produced misleading github.com/<project>
  URLs); the template's acme-org placeholder is used instead.
- _check_gitignore_for_marketplace_json warning text refreshed: 'Both
  apm.yml and the generated marketplace.json must be tracked'.
- Renamed test_source_dot_traversal to test_local_source_accepted
  (the behavior changed at fold time).
- init_template.py module docstring now describes both renderers.
- test_apm_yml_marketplace_loader.py docstring corrected: strict-key
  enforcement is inside the marketplace block only.

Regression tests (tests/unit/marketplace/test_review_fixes.py, +12):
- malformed apm.yml surfaces a clear MarketplaceYmlError
- migrate rejects list/scalar top level, accepts empty file
- _is_apm_yml_with_marketplace rejects non-mapping marketplace values
- 'apm marketplace init' rejects non-mapping apm.yml, accepts empty

Docs (delivered by doc-writer agent):
- Full rewrite of docs/src/content/docs/guides/marketplace-authoring.md
  around the apm.yml block; cites microsoft/azure-skills as the
  byte-for-byte build proof. Adds local-path packages section and a
  migration section.
- One-line fix in guides/marketplaces.md (marketplace.yml -> apm.yml).
- reference/cli-commands.md: rewrote init/build/outdated/check/doctor
  blurbs, added 'apm marketplace migrate' reference, added
  '--marketplace' flag to 'apm init' options/examples.
- reference/manifest-schema.md: added optional 'marketplace:' to the
  top-level shape with a pointer to the authoring guide.
- packages/apm-guide/.apm/skills/apm-usage/commands.md and
  package-authoring.md: refreshed authoring tables and shape; called
  out experimental gate and deprecation.
- CHANGELOG.md: Added/Changed/Deprecated entries under [Unreleased]
  citing #1038.

Validation:
- 6757 unit tests pass (6745 prior + 12 new regression).
- Real-world build proof: cloned microsoft/azure-skills, appended a
  marketplace: block to its apm.yml derived from the hand-authored
  marketplace.json, ran 'apm marketplace build', and diffed -- byte-
  for-byte identical (sha256 02f76bfc...).

Closes review of #1038.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* ci: recompile gh-aw workflows to v0.71.2

Picks up the AW_APM_PACKAGES JSON-array fix from gh-aw v0.71.2
(shared/apm.md realignment in github/gh-aw#29002), which caused
the PR Review Panel run on PR #1042 to fail at the
'Validate downloaded bundles match matrix manifest' step.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(marketplace): address remaining 4 review-bot comments on PR #1038

- migration.py: wrap ruamel apm.yml load; raise typed
  MarketplaceYmlError("apm.yml is malformed: ...") instead of
  leaking ruamel.yaml.YAMLError to the caller. Mirrors the existing
  legacy marketplace.yml error path.
- init.py: when 'apm init --marketplace' is invoked but the
  marketplace_authoring experimental flag is disabled, append the
  block (option b -- lower friction, harmless if unused) and emit a
  CommandLogger.warning() pointing at the flag name and enablement
  command.
- yml_editor.py: add 'data: object' type hint to
  _is_apm_yml_with_marketplace() to satisfy the project-wide type-hint
  requirement.
- CHANGELOG.md: condense Unreleased marketplace entries to one line
  per entry per Keep a Changelog convention; strip nested bullets
  and prose.

Tests:
- test_migrate_with_malformed_apm_yml_raises_typed_error
- TestInitMarketplaceFlagWarnsWhenExperimentalDisabled
  ::test_warns_with_experimental_flag_name

Full unit suite: 6759 passed.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(marketplace): teach unified 'apm pack' workflow

- Rewrite marketplace authoring guide to use 'apm pack' and the
  apm.yml marketplace: block as the single source of truth.
- Update CLI command reference: remove 'apm marketplace build' entry,
  refresh 'apm pack' flag table, refresh 'apm marketplace init'.
- Update apm-usage skill (commands.md) to match.
- Remove all references to the marketplace_authoring experimental flag.

Closes part of #722.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(pack): unify apm pack to produce bundle and marketplace.json

Reads apm.yml and detects which artifacts to produce based on the
presence of 'dependencies:' (bundle) and 'marketplace:' (marketplace.json)
blocks. A single 'apm pack' invocation now replaces the legacy
'apm marketplace build' subcommand.

Changes:
- New BuildOrchestrator (src/apm_cli/core/build_orchestrator.py) with
  pluggable ArtifactProducer protocol and BundleProducer +
  MarketplaceProducer implementations.
- pack command gains --offline, --include-prerelease, and
  --marketplace-output flags. Help text documents exit codes.
- 'apm marketplace build' is hard-removed: invoking it exits 2 with a
  one-line migration message.
- 'marketplace_authoring' experimental flag deleted (GA).
- 'apm marketplace init' and 'apm init --marketplace' next-step hints
  now point at 'apm pack'.
- 'apm marketplace publish' error wording updated.
- New tests: 14 orchestrator unit tests, 9 pack integration tests, and
  one byte-for-byte snapshot test against microsoft/azure-skills@bef1f05
  (sha256 02f76bfc0e5bbf7fdf1de1dda1f84c4da6e986913b6647973c0ffe39c1d5003b).
- Stale tests removed: test_marketplace_build.py, test_marketplace_gating.py,
  and the marketplace_authoring experimental-flag class.
- CHANGELOG updated under Added / Changed / Removed.

Validation:
- 6706 unit + console tests pass (uv run pytest tests/unit tests/test_console.py)
- 10 new integration tests pass
- azure-skills snapshot proof matches byte-for-byte

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs(changelog): condense apm pack entry to one line

Per copilot-pull-request-reviewer comment on PR #1042: Keep a Changelog
entries should be one concise line per PR. The previous entry (418 chars,
multi-clause) is condensed to 165 chars matching the convention.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.

shared/apm.md: align docs with canonical microsoft/apm source; deprecate vendored copy

3 participants