From 04f098f0ca702e73c77ba1f0d1da93772d0d069b Mon Sep 17 00:00:00 2001
From: Evangelink <11340282+Evangelink@users.noreply.github.com>
Date: Thu, 21 May 2026 13:31:47 +0200
Subject: [PATCH 1/2] Centralize slash-command routing
Set `on.slash_command.strategy: centralized` on the 6 workflows that
respond to slash commands:
- add-tests.md (/add-tests)
- autofix.agent.md (/autofix)
- build-failure-analysis-command.md (/analyze-build-failure)
- daily-perf-improver.md (/perf-assist)
- daily-test-improver.md (/test-assist)
- review.agent.md (/review)
With centralized routing, the compiler generates a single
`.github/workflows/agentic_commands.yml` router that listens to merged
slash-command events and dispatches matching target workflows with
`aw_context`. Each target workflow compiles as `workflow_dispatch`-centric
instead of embedding its own slash matching logic, eliminating duplicate
issue/PR/comment event triggers and addressing the only remaining
`gh aw compile --strict` warning from #8458.
Also includes minor regenerations of `build-failure-analysis.lock.yml`
and `issue-arborist.lock.yml`: the compiler now preserves the explicit
env var names from the source `.md` files (e.g. `BINLOG_PATH`,
`GH_AW_GITHUB_REPOSITORY`) instead of substituting auto-generated
`GH_AW_EXPR_*` hashed names. No behavior change.
Verified with `gh aw compile --strict`: 21 workflow(s) compiled,
0 error(s), 0 warning(s).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---
.github/workflows/add-tests.lock.yml | 48 +++++-----
.github/workflows/add-tests.md | 1 +
.github/workflows/agentic_commands.yml | 81 ++++++++++++++++
.github/workflows/autofix.agent.lock.yml | 48 +++++-----
.github/workflows/autofix.agent.md | 1 +
.../build-failure-analysis-command.lock.yml | 95 ++++++-------------
.../build-failure-analysis-command.md | 1 +
.../workflows/build-failure-analysis.lock.yml | 81 +++++-----------
.../workflows/daily-perf-improver.lock.yml | 43 ++++-----
.github/workflows/daily-perf-improver.md | 1 +
.../workflows/daily-test-improver.lock.yml | 65 ++++---------
.github/workflows/daily-test-improver.md | 1 +
.github/workflows/issue-arborist.lock.yml | 64 +++----------
.github/workflows/review.agent.lock.yml | 44 +++++----
.github/workflows/review.agent.md | 1 +
15 files changed, 268 insertions(+), 307 deletions(-)
create mode 100644 .github/workflows/agentic_commands.yml
diff --git a/.github/workflows/add-tests.lock.yml b/.github/workflows/add-tests.lock.yml
index 1589703986..2acd7c6450 100644
--- a/.github/workflows/add-tests.lock.yml
+++ b/.github/workflows/add-tests.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"5f8f2e33ea84b9c6a994e3da0ccbb59691f3b79e86d4ecfd690a0f2356e7c386","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"a750a393faeee9ec044e8734b50a209a0d4f6a56f7690952a552e719f47c5b18","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -53,10 +53,13 @@
name: "Add Tests for PR Changes"
on:
- issue_comment:
- types:
- - created
- - edited
+ workflow_dispatch:
+ inputs:
+ aw_context:
+ default: ""
+ description: "Agent caller context (used internally by Agentic Workflows)."
+ required: false
+ type: string
permissions: {}
@@ -68,7 +71,7 @@ run-name: "Add Tests for PR Changes"
jobs:
activation:
needs: pre_activation
- if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/add-tests ') || startsWith(github.event.comment.body, '/add-tests\n') || github.event.comment.body == '/add-tests') && github.event.issue.pull_request != null)"
+ if: needs.pre_activation.outputs.activated == 'true'
runs-on: ubuntu-slim
permissions:
actions: read
@@ -136,7 +139,7 @@ jobs:
await main(core, context);
- name: Add eyes reaction for immediate feedback
id: react
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_REACTION: "eyes"
@@ -208,7 +211,7 @@ jobs:
await main();
- name: Add comment with workflow run link
id: add-comment
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_WORKFLOW_NAME: "Add Tests for PR Changes"
@@ -237,23 +240,23 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_f53be347eff01c81_EOF'
+ cat << 'GH_AW_PROMPT_9c877516a2095270_EOF'
- GH_AW_PROMPT_f53be347eff01c81_EOF
+ GH_AW_PROMPT_9c877516a2095270_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_f53be347eff01c81_EOF'
+ cat << 'GH_AW_PROMPT_9c877516a2095270_EOF'
Tools: add_comment(max:3), create_pull_request, missing_tool, missing_data, noop
- GH_AW_PROMPT_f53be347eff01c81_EOF
+ GH_AW_PROMPT_9c877516a2095270_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_create_pull_request.md"
- cat << 'GH_AW_PROMPT_f53be347eff01c81_EOF'
+ cat << 'GH_AW_PROMPT_9c877516a2095270_EOF'
- GH_AW_PROMPT_f53be347eff01c81_EOF
+ GH_AW_PROMPT_9c877516a2095270_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_f53be347eff01c81_EOF'
+ cat << 'GH_AW_PROMPT_9c877516a2095270_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -282,16 +285,16 @@ jobs:
{{/if}}
- GH_AW_PROMPT_f53be347eff01c81_EOF
+ GH_AW_PROMPT_9c877516a2095270_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
fi
- cat << 'GH_AW_PROMPT_f53be347eff01c81_EOF'
+ cat << 'GH_AW_PROMPT_9c877516a2095270_EOF'
{{#runtime-import .github/workflows/shared/repo-build-setup.md}}
{{#runtime-import .github/workflows/add-tests.md}}
- GH_AW_PROMPT_f53be347eff01c81_EOF
+ GH_AW_PROMPT_9c877516a2095270_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -506,9 +509,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_d46391cf00801004_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_6bfa4e8f5c6e8b47_EOF'
{"add_comment":{"max":3},"create_pull_request":{"draft":true,"labels":["test","automated"],"max":1,"max_patch_files":100,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"fallback-to-issue","title_prefix":"[tests] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_d46391cf00801004_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_6bfa4e8f5c6e8b47_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -742,7 +745,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_d3b80a76769b00d8_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_8d2d3ab0b76147b7_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -787,7 +790,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_d3b80a76769b00d8_EOF
+ GH_AW_MCP_CONFIG_8d2d3ab0b76147b7_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
@@ -1420,7 +1423,6 @@ jobs:
}
pre_activation:
- if: "(github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' || contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/add-tests ') || startsWith(github.event.comment.body, '/add-tests\n') || github.event.comment.body == '/add-tests') && github.event.issue.pull_request != null)"
runs-on: ubuntu-slim
outputs:
activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }}
diff --git a/.github/workflows/add-tests.md b/.github/workflows/add-tests.md
index f9501794c1..6bed4251cc 100644
--- a/.github/workflows/add-tests.md
+++ b/.github/workflows/add-tests.md
@@ -5,6 +5,7 @@ on:
slash_command:
name: add-tests
events: [pull_request_comment]
+ strategy: centralized
permissions:
contents: read
diff --git a/.github/workflows/agentic_commands.yml b/.github/workflows/agentic_commands.yml
new file mode 100644
index 0000000000..9a0fa2b91e
--- /dev/null
+++ b/.github/workflows/agentic_commands.yml
@@ -0,0 +1,81 @@
+# gh-aw-commands: {"payload_version":"v1","schema_version":"v1","compiler_version":"v0.74.8","commands":["add-tests","analyze-build-failure","autofix","perf-assist","review","test-assist"],"workflows":["add-tests","autofix.agent","build-failure-analysis-command","daily-perf-improver","daily-test-improver","review.agent"]}
+# Routing summary (sorted):
+# slash commands:
+# /add-tests -> add-tests [pull_request_comment] reaction=eyes
+# /analyze-build-failure -> build-failure-analysis-command [pull_request_comment] reaction=eyes
+# /autofix -> autofix.agent [pull_request_comment] reaction=eyes
+# /perf-assist -> daily-perf-improver [pull_request_comment] reaction=eyes
+# /review -> review.agent [pull_request_comment] reaction=eyes
+# /test-assist -> daily-test-improver [discussion,discussion_comment,issue_comment,issues,pull_request,pull_request_comment,pull_request_review_comment] reaction=eyes
+# labels:
+# (none)
+# ___ _ _
+# / _ \ | | (_)
+# | |_| | __ _ ___ _ __ | |_ _ ___
+# | _ |/ _` |/ _ \ '_ \| __| |/ __|
+# | | | | (_| | __/ | | | |_| | (__
+# \_| |_/\__, |\___|_| |_|\__|_|\___|
+# __/ |
+# _ _ |___/
+# | | | | / _| |
+# | | | | ___ _ __ _ __| |_| | _____ ____
+# | |/\| |/ _ \ '__| |/ /| _| |/ _ \ \ /\ / / ___|
+# \ /\ / (_) | | | | ( | | | | (_) \ V V /\__ \
+# \/ \/ \___/|_| |_|\_\|_| |_|\___/ \_/\_/ |___/
+#
+# This file was automatically generated by gh-aw (v0.74.8). DO NOT EDIT.
+#
+# To regenerate this workflow, run:
+# gh aw compile
+# Not all edits will cause changes to this file.
+#
+# For more information: https://github.github.com/gh-aw/introduction/overview/
+#
+name: "Agentic Commands"
+
+on:
+ issues:
+ types: [edited, opened, reopened]
+ issue_comment:
+ types: [created, edited]
+ pull_request:
+ types: [edited, opened, reopened]
+ pull_request_review_comment:
+ types: [created, edited]
+ discussion:
+ types: [created, edited]
+ discussion_comment:
+ types: [created, edited]
+
+permissions: {}
+
+jobs:
+ route:
+ runs-on: ubuntu-slim
+ permissions:
+ actions: write
+ contents: read
+ issues: write
+ pull-requests: write
+ discussions: write
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
+
+ - name: Setup Scripts
+ uses: github/gh-aw-actions/setup@v0.74.8
+ with:
+ destination: ${{ runner.temp }}/gh-aw/actions
+
+ - name: Route slash command
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
+ env:
+ GH_AW_SLASH_ROUTING: '{"add-tests":[{"workflow":"add-tests","events":["pull_request_comment"],"ai_reaction":"eyes"}],"analyze-build-failure":[{"workflow":"build-failure-analysis-command","events":["pull_request_comment"],"ai_reaction":"eyes"}],"autofix":[{"workflow":"autofix.agent","events":["pull_request_comment"],"ai_reaction":"eyes"}],"perf-assist":[{"workflow":"daily-perf-improver","events":["pull_request_comment"],"ai_reaction":"eyes"}],"review":[{"workflow":"review.agent","events":["pull_request_comment"],"ai_reaction":"eyes"}],"test-assist":[{"workflow":"daily-test-improver","events":["discussion","discussion_comment","issue_comment","issues","pull_request","pull_request_comment","pull_request_review_comment"],"ai_reaction":"eyes"}]}'
+ GH_AW_LABEL_ROUTING: '{}'
+ with:
+ script: |
+ const { setupGlobals } = require('${{ runner.temp }}/gh-aw/actions/setup_globals.cjs');
+ setupGlobals(core, github, context, exec, io, getOctokit);
+ const { main } = require('${{ runner.temp }}/gh-aw/actions/route_slash_command.cjs');
+ await main();
diff --git a/.github/workflows/autofix.agent.lock.yml b/.github/workflows/autofix.agent.lock.yml
index cf84d31f52..864210316c 100644
--- a/.github/workflows/autofix.agent.lock.yml
+++ b/.github/workflows/autofix.agent.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"7f0c5ba4869b14f95a8b7dbd25819fc263bb1c30ec205c69acebfba23e6c868f","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"3e3b9a7a9c517b5293fad01009fe33e37330f6cd1e5507dd65fc38bea0694bf3","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -54,14 +54,17 @@
name: "Address Review Comments (command)"
on:
- issue_comment:
- types:
- - created
- - edited
# roles: # Roles processed as role check in pre-activation job
# - admin # Roles processed as role check in pre-activation job
# - maintainer # Roles processed as role check in pre-activation job
# - write # Roles processed as role check in pre-activation job
+ workflow_dispatch:
+ inputs:
+ aw_context:
+ default: ""
+ description: "Agent caller context (used internally by Agentic Workflows)."
+ required: false
+ type: string
permissions: {}
@@ -73,7 +76,7 @@ run-name: "Address Review Comments (command)"
jobs:
activation:
needs: pre_activation
- if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/autofix ') || startsWith(github.event.comment.body, '/autofix\n') || github.event.comment.body == '/autofix') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
+ if: needs.pre_activation.outputs.activated == 'true'
runs-on: ubuntu-slim
permissions:
actions: read
@@ -141,7 +144,7 @@ jobs:
await main(core, context);
- name: Add eyes reaction for immediate feedback
id: react
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_REACTION: "eyes"
@@ -213,7 +216,7 @@ jobs:
await main();
- name: Add comment with workflow run link
id: add-comment
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_WORKFLOW_NAME: "Address Review Comments (command)"
@@ -240,23 +243,23 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_52253c1c9cca42de_EOF'
+ cat << 'GH_AW_PROMPT_7c3007a21ed783cc_EOF'
- GH_AW_PROMPT_52253c1c9cca42de_EOF
+ GH_AW_PROMPT_7c3007a21ed783cc_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_52253c1c9cca42de_EOF'
+ cat << 'GH_AW_PROMPT_7c3007a21ed783cc_EOF'
Tools: add_comment(max:3), push_to_pull_request_branch(max:3), missing_tool, missing_data, noop
- GH_AW_PROMPT_52253c1c9cca42de_EOF
+ GH_AW_PROMPT_7c3007a21ed783cc_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_push_to_pr_branch.md"
- cat << 'GH_AW_PROMPT_52253c1c9cca42de_EOF'
+ cat << 'GH_AW_PROMPT_7c3007a21ed783cc_EOF'
- GH_AW_PROMPT_52253c1c9cca42de_EOF
+ GH_AW_PROMPT_7c3007a21ed783cc_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_52253c1c9cca42de_EOF'
+ cat << 'GH_AW_PROMPT_7c3007a21ed783cc_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -285,7 +288,7 @@ jobs:
{{/if}}
- GH_AW_PROMPT_52253c1c9cca42de_EOF
+ GH_AW_PROMPT_7c3007a21ed783cc_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
@@ -293,12 +296,12 @@ jobs:
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_push_to_pr_branch_guidance.md"
fi
- cat << 'GH_AW_PROMPT_52253c1c9cca42de_EOF'
+ cat << 'GH_AW_PROMPT_7c3007a21ed783cc_EOF'
{{#runtime-import .github/workflows/shared/address-review-shared.md}}
{{#runtime-import .github/workflows/shared/repo-build-setup.md}}
{{#runtime-import .github/workflows/autofix.agent.md}}
- GH_AW_PROMPT_52253c1c9cca42de_EOF
+ GH_AW_PROMPT_7c3007a21ed783cc_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -508,9 +511,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_23a1f1d8165df77a_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_4849fd03eb416751_EOF'
{"add_comment":{"hide_older_comments":true,"max":3},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"push_to_pull_request_branch":{"if_no_changes":"warn","max":3,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"]},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_23a1f1d8165df77a_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_4849fd03eb416751_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -723,7 +726,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_ec402071a3e91e6d_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_e50d476b4e686cdd_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -768,7 +771,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_ec402071a3e91e6d_EOF
+ GH_AW_MCP_CONFIG_e50d476b4e686cdd_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
@@ -1402,7 +1405,6 @@ jobs:
}
pre_activation:
- if: "(github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' || contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/autofix ') || startsWith(github.event.comment.body, '/autofix\n') || github.event.comment.body == '/autofix') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
runs-on: ubuntu-slim
outputs:
activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }}
diff --git a/.github/workflows/autofix.agent.md b/.github/workflows/autofix.agent.md
index 8d2305e73b..436613f135 100644
--- a/.github/workflows/autofix.agent.md
+++ b/.github/workflows/autofix.agent.md
@@ -8,6 +8,7 @@ on:
slash_command:
name: autofix
events: [pull_request_comment]
+ strategy: centralized
roles: [admin, maintainer, write]
reaction: "eyes"
diff --git a/.github/workflows/build-failure-analysis-command.lock.yml b/.github/workflows/build-failure-analysis-command.lock.yml
index 3b00331fa2..a1672f81a8 100644
--- a/.github/workflows/build-failure-analysis-command.lock.yml
+++ b/.github/workflows/build-failure-analysis-command.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"b77217b3dfc9fbbcfabb2318103d8158bfdf62d99705199058e671f846cc0765","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"71a129fb08cbf2f7b07909e76be91ceab6f6139e57326a611688dd2562230457","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -56,14 +56,17 @@
name: "Build Failure Analysis (command)"
on:
- issue_comment:
- types:
- - created
- - edited
# roles: # Roles processed as role check in pre-activation job
# - admin # Roles processed as role check in pre-activation job
# - maintainer # Roles processed as role check in pre-activation job
# - write # Roles processed as role check in pre-activation job
+ workflow_dispatch:
+ inputs:
+ aw_context:
+ default: ""
+ description: "Agent caller context (used internally by Agentic Workflows)."
+ required: false
+ type: string
permissions: {}
@@ -79,7 +82,7 @@ env:
jobs:
activation:
needs: pre_activation
- if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/analyze-build-failure ') || startsWith(github.event.comment.body, '/analyze-build-failure\n') || github.event.comment.body == '/analyze-build-failure') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
+ if: needs.pre_activation.outputs.activated == 'true'
runs-on: ubuntu-slim
permissions:
actions: read
@@ -144,7 +147,7 @@ jobs:
await main(core, context);
- name: Add eyes reaction for immediate feedback
id: react
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_REACTION: "eyes"
@@ -216,7 +219,7 @@ jobs:
await main();
- name: Add comment with workflow run link
id: add-comment
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_WORKFLOW_NAME: "Build Failure Analysis (command)"
@@ -243,20 +246,20 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_87fde6b82f411576_EOF'
+ cat << 'GH_AW_PROMPT_8f39c225750c17af_EOF'
- GH_AW_PROMPT_87fde6b82f411576_EOF
+ GH_AW_PROMPT_8f39c225750c17af_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_87fde6b82f411576_EOF'
+ cat << 'GH_AW_PROMPT_8f39c225750c17af_EOF'
Tools: add_comment, create_pull_request_review_comment(max:10), missing_tool, missing_data, noop
- GH_AW_PROMPT_87fde6b82f411576_EOF
+ GH_AW_PROMPT_8f39c225750c17af_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_87fde6b82f411576_EOF'
+ cat << 'GH_AW_PROMPT_8f39c225750c17af_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -285,16 +288,16 @@ jobs:
{{/if}}
- GH_AW_PROMPT_87fde6b82f411576_EOF
+ GH_AW_PROMPT_8f39c225750c17af_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
fi
- cat << 'GH_AW_PROMPT_87fde6b82f411576_EOF'
+ cat << 'GH_AW_PROMPT_8f39c225750c17af_EOF'
{{#runtime-import .github/workflows/shared/build-failure-analysis-shared.md}}
{{#runtime-import .github/workflows/build-failure-analysis-command.md}}
- GH_AW_PROMPT_87fde6b82f411576_EOF
+ GH_AW_PROMPT_8f39c225750c17af_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -451,47 +454,19 @@ jobs:
run: echo "$PWD/.dotnet" >> $GITHUB_PATH
- id: find-binlog
name: Locate binlog
- run: |
- BINLOG=$(find artifacts/log -name '*.binlog' -type f -printf '%T@ %p\n' 2>/dev/null \
- | sort -rn | head -1 | cut -d' ' -f2-)
- if [ -n "$BINLOG" ] && [ -f "$BINLOG" ]; then
- echo "found=true" >> "$GITHUB_OUTPUT"
- echo "path=$BINLOG" >> "$GITHUB_OUTPUT"
- else
- echo "found=false" >> "$GITHUB_OUTPUT"
- fi
+ run: "BINLOG=$(find artifacts/log -name '*.binlog' -type f -printf '%T@ %p\\n' 2>/dev/null \\\n | sort -rn | head -1 | cut -d' ' -f2-)\nif [ -n \"$BINLOG\" ] && [ -f \"$BINLOG\" ]; then\n echo \"found=true\" >> \"$GITHUB_OUTPUT\"\n echo \"path=$BINLOG\" >> \"$GITHUB_OUTPUT\"\nelse\n echo \"found=false\" >> \"$GITHUB_OUTPUT\"\nfi\n"
- if: steps.build.outcome == 'failure' && steps.find-binlog.outputs.found == 'true'
name: Install binlog-mcp
- run: |
- mkdir -p /tmp/binlog-tool
- cat > /tmp/binlog-tool/nuget.config <<'EOF'
-
-
-
-
-
-
-
- EOF
- dotnet tool install --global AITools.BinlogMcp \
- --configfile /tmp/binlog-tool/nuget.config \
- --version "$BINLOG_MCP_VERSION"
- echo "$HOME/.dotnet/tools" >> "$GITHUB_PATH"
+ run: "mkdir -p /tmp/binlog-tool\ncat > /tmp/binlog-tool/nuget.config <<'EOF'\n\n\n \n \n \n \n\nEOF\ndotnet tool install --global AITools.BinlogMcp \\\n --configfile /tmp/binlog-tool/nuget.config \\\n --version \"$BINLOG_MCP_VERSION\"\necho \"$HOME/.dotnet/tools\" >> \"$GITHUB_PATH\"\n"
- if: steps.build.outcome == 'failure' && steps.find-binlog.outputs.found == 'true'
name: Install MCP SDK for dump-binlog.js
run: cd .github/workflows/scripts && npm ci --ignore-scripts
- continue-on-error: true
env:
- GH_AW_EXPR_DA06E2FF: ${{ steps.find-binlog.outputs.path }}
+ BINLOG_PATH: ${{ steps.find-binlog.outputs.path }}
if: steps.build.outcome == 'failure' && steps.find-binlog.outputs.found == 'true'
name: Dump binlog as JSON
- run: |
- mkdir -p /tmp/binlog-data
- cd .github/workflows/scripts
- timeout 120 node dump-binlog.js \
- "$GITHUB_WORKSPACE/$GH_AW_EXPR_DA06E2FF" \
- /tmp/binlog-data
+ run: "mkdir -p /tmp/binlog-data\ncd .github/workflows/scripts\ntimeout 120 node dump-binlog.js \\\n \"$GITHUB_WORKSPACE/$BINLOG_PATH\" \\\n /tmp/binlog-data\n"
- env:
GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
@@ -499,23 +474,16 @@ jobs:
id: resolve-pr-sha
name: Resolve PR head SHA
run: |
- SHA=$(gh api "repos/$GH_AW_GITHUB_REPOSITORY/pulls/$GH_AW_GITHUB_EVENT_ISSUE_NUMBER" --jq .head.sha)
+ SHA=$(gh api "repos/${GH_AW_GITHUB_REPOSITORY}/pulls/${GH_AW_GITHUB_EVENT_ISSUE_NUMBER}" --jq .head.sha)
echo "sha=$SHA" >> "$GITHUB_OUTPUT"
- env:
- GH_AW_EXPR_45A0D591: ${{ steps.resolve-pr-sha.outputs.sha || github.sha }}
- GH_AW_EXPR_DA06E2FF: ${{ steps.find-binlog.outputs.path }}
+ GH_AW_BINLOG_PATH_VALUE: ${{ steps.find-binlog.outputs.path }}
GH_AW_GITHUB_EVENT_ISSUE_NUMBER: ${{ github.event.issue.number }}
GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
+ GH_AW_PR_HEAD_SHA_VALUE: ${{ steps.resolve-pr-sha.outputs.sha || github.sha }}
GH_AW_STEPS_BUILD_OUTCOME: ${{ steps.build.outcome }}
name: Export agent context
- run: |
- {
- echo "GH_AW_BUILD_OUTCOME=$GH_AW_STEPS_BUILD_OUTCOME"
- echo "GH_AW_BINLOG_PATH=$GH_AW_EXPR_DA06E2FF"
- echo "GH_AW_PR_NUMBER=$GH_AW_GITHUB_EVENT_ISSUE_NUMBER"
- echo "GH_AW_PR_HEAD_SHA=$GH_AW_EXPR_45A0D591"
- echo "GH_AW_WORKSPACE=$GH_AW_GITHUB_WORKSPACE"
- } >> "$GITHUB_ENV"
+ run: "{\n echo \"GH_AW_BUILD_OUTCOME=${GH_AW_STEPS_BUILD_OUTCOME}\"\n echo \"GH_AW_BINLOG_PATH=${GH_AW_BINLOG_PATH_VALUE}\"\n echo \"GH_AW_PR_NUMBER=${GH_AW_GITHUB_EVENT_ISSUE_NUMBER}\"\n echo \"GH_AW_PR_HEAD_SHA=${GH_AW_PR_HEAD_SHA_VALUE}\"\n echo \"GH_AW_WORKSPACE=${GH_AW_GITHUB_WORKSPACE}\"\n} >> \"$GITHUB_ENV\"\n"
- name: Configure Git credentials
env:
@@ -583,9 +551,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_2576601664271d07_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_a1ee77a5ea201f25_EOF'
{"add_comment":{"hide_older_comments":true,"max":1},"create_pull_request_review_comment":{"max":10,"side":"RIGHT"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_2576601664271d07_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_a1ee77a5ea201f25_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -817,7 +785,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_39da1dc33f0bcb1b_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_238f9ca3b815b852_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -858,7 +826,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_39da1dc33f0bcb1b_EOF
+ GH_AW_MCP_CONFIG_238f9ca3b815b852_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
@@ -1476,7 +1444,6 @@ jobs:
}
pre_activation:
- if: "(github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' || contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/analyze-build-failure ') || startsWith(github.event.comment.body, '/analyze-build-failure\n') || github.event.comment.body == '/analyze-build-failure') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
runs-on: ubuntu-slim
outputs:
activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }}
diff --git a/.github/workflows/build-failure-analysis-command.md b/.github/workflows/build-failure-analysis-command.md
index cc31212590..a6b24c1647 100644
--- a/.github/workflows/build-failure-analysis-command.md
+++ b/.github/workflows/build-failure-analysis-command.md
@@ -12,6 +12,7 @@ on:
slash_command:
name: analyze-build-failure
events: [pull_request_comment]
+ strategy: centralized
roles: [admin, maintainer, write]
reaction: "eyes"
diff --git a/.github/workflows/build-failure-analysis.lock.yml b/.github/workflows/build-failure-analysis.lock.yml
index 3c8cc52ecb..a00b6d8ae0 100644
--- a/.github/workflows/build-failure-analysis.lock.yml
+++ b/.github/workflows/build-failure-analysis.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"799ed300107f6fc9670ebffaa4c0d4c197e34e1fd916240db38a468b10cb0aaf","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"37ee8c62d25b7c1ae4c41f2154ec9d790a677bc5c61fa81a778b6bec2c51d009","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -245,20 +245,20 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_98dc6db86aada721_EOF'
+ cat << 'GH_AW_PROMPT_519ddc0e11ef3141_EOF'
- GH_AW_PROMPT_98dc6db86aada721_EOF
+ GH_AW_PROMPT_519ddc0e11ef3141_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_98dc6db86aada721_EOF'
+ cat << 'GH_AW_PROMPT_519ddc0e11ef3141_EOF'
Tools: add_comment, create_pull_request_review_comment(max:10), missing_tool, missing_data, noop
- GH_AW_PROMPT_98dc6db86aada721_EOF
+ GH_AW_PROMPT_519ddc0e11ef3141_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_98dc6db86aada721_EOF'
+ cat << 'GH_AW_PROMPT_519ddc0e11ef3141_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -287,13 +287,13 @@ jobs:
{{/if}}
- GH_AW_PROMPT_98dc6db86aada721_EOF
+ GH_AW_PROMPT_519ddc0e11ef3141_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
- cat << 'GH_AW_PROMPT_98dc6db86aada721_EOF'
+ cat << 'GH_AW_PROMPT_519ddc0e11ef3141_EOF'
{{#runtime-import .github/workflows/shared/build-failure-analysis-shared.md}}
{{#runtime-import .github/workflows/build-failure-analysis.md}}
- GH_AW_PROMPT_98dc6db86aada721_EOF
+ GH_AW_PROMPT_519ddc0e11ef3141_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -446,72 +446,37 @@ jobs:
run: echo "$PWD/.dotnet" >> $GITHUB_PATH
- id: find-binlog
name: Locate binlog
- run: |
- BINLOG=$(find artifacts/log -name '*.binlog' -type f -printf '%T@ %p\n' 2>/dev/null \
- | sort -rn | head -1 | cut -d' ' -f2-)
- if [ -n "$BINLOG" ] && [ -f "$BINLOG" ]; then
- echo "found=true" >> "$GITHUB_OUTPUT"
- echo "path=$BINLOG" >> "$GITHUB_OUTPUT"
- else
- echo "found=false" >> "$GITHUB_OUTPUT"
- fi
+ run: "BINLOG=$(find artifacts/log -name '*.binlog' -type f -printf '%T@ %p\\n' 2>/dev/null \\\n | sort -rn | head -1 | cut -d' ' -f2-)\nif [ -n \"$BINLOG\" ] && [ -f \"$BINLOG\" ]; then\n echo \"found=true\" >> \"$GITHUB_OUTPUT\"\n echo \"path=$BINLOG\" >> \"$GITHUB_OUTPUT\"\nelse\n echo \"found=false\" >> \"$GITHUB_OUTPUT\"\nfi\n"
- if: steps.build.outcome == 'failure' && steps.find-binlog.outputs.found == 'true'
name: Install binlog-mcp
- run: |
- mkdir -p /tmp/binlog-tool
- cat > /tmp/binlog-tool/nuget.config <<'EOF'
-
-
-
-
-
-
-
- EOF
- dotnet tool install --global AITools.BinlogMcp \
- --configfile /tmp/binlog-tool/nuget.config \
- --version "$BINLOG_MCP_VERSION"
- echo "$HOME/.dotnet/tools" >> "$GITHUB_PATH"
+ run: "mkdir -p /tmp/binlog-tool\ncat > /tmp/binlog-tool/nuget.config <<'EOF'\n\n\n \n \n \n \n\nEOF\ndotnet tool install --global AITools.BinlogMcp \\\n --configfile /tmp/binlog-tool/nuget.config \\\n --version \"$BINLOG_MCP_VERSION\"\necho \"$HOME/.dotnet/tools\" >> \"$GITHUB_PATH\"\n"
- if: steps.build.outcome == 'failure' && steps.find-binlog.outputs.found == 'true'
name: Install MCP SDK for dump-binlog.js
run: cd .github/workflows/scripts && npm ci --ignore-scripts
- continue-on-error: true
env:
- GH_AW_EXPR_DA06E2FF: ${{ steps.find-binlog.outputs.path }}
+ BINLOG_PATH: ${{ steps.find-binlog.outputs.path }}
if: steps.build.outcome == 'failure' && steps.find-binlog.outputs.found == 'true'
name: Dump binlog as JSON
- run: |
- mkdir -p /tmp/binlog-data
- cd .github/workflows/scripts
- timeout 120 node dump-binlog.js \
- "$GITHUB_WORKSPACE/$GH_AW_EXPR_DA06E2FF" \
- /tmp/binlog-data
+ run: "mkdir -p /tmp/binlog-data\ncd .github/workflows/scripts\ntimeout 120 node dump-binlog.js \\\n \"$GITHUB_WORKSPACE/$BINLOG_PATH\" \\\n /tmp/binlog-data\n"
- env:
- GH_AW_EXPR_8DF6F8A9: ${{ inputs.pr-number }}
GH_AW_GITHUB_REPOSITORY: ${{ github.repository }}
+ GH_AW_INPUTS_PR_NUMBER: ${{ inputs.pr-number }}
GH_TOKEN: ${{ github.token }}
id: resolve-pr-sha
if: github.event_name == 'workflow_dispatch' && inputs.pr-number != ''
name: Resolve PR head SHA (workflow_dispatch only)
run: |
- SHA=$(gh api "repos/$GH_AW_GITHUB_REPOSITORY/pulls/$GH_AW_EXPR_8DF6F8A9" --jq .head.sha)
+ SHA=$(gh api "repos/${GH_AW_GITHUB_REPOSITORY}/pulls/${GH_AW_INPUTS_PR_NUMBER}" --jq .head.sha)
echo "sha=$SHA" >> "$GITHUB_OUTPUT"
- env:
- GH_AW_EXPR_DA06E2FF: ${{ steps.find-binlog.outputs.path }}
- GH_AW_EXPR_E6C30885: ${{ steps.resolve-pr-sha.outputs.sha || github.event.pull_request.head.sha || github.sha }}
- GH_AW_EXPR_E7899BB1: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr-number }}
+ GH_AW_BINLOG_PATH_VALUE: ${{ steps.find-binlog.outputs.path }}
GH_AW_GITHUB_WORKSPACE: ${{ github.workspace }}
+ GH_AW_PR_HEAD_SHA_VALUE: ${{ steps.resolve-pr-sha.outputs.sha || github.event.pull_request.head.sha || github.sha }}
+ GH_AW_PR_NUMBER_VALUE: ${{ github.event.pull_request.number || github.event.issue.number || inputs.pr-number }}
GH_AW_STEPS_BUILD_OUTCOME: ${{ steps.build.outcome }}
name: Export agent context
- run: |
- {
- echo "GH_AW_BUILD_OUTCOME=$GH_AW_STEPS_BUILD_OUTCOME"
- echo "GH_AW_BINLOG_PATH=$GH_AW_EXPR_DA06E2FF"
- echo "GH_AW_PR_NUMBER=$GH_AW_EXPR_E7899BB1"
- echo "GH_AW_PR_HEAD_SHA=$GH_AW_EXPR_E6C30885"
- echo "GH_AW_WORKSPACE=$GH_AW_GITHUB_WORKSPACE"
- } >> "$GITHUB_ENV"
+ run: "{\n echo \"GH_AW_BUILD_OUTCOME=${GH_AW_STEPS_BUILD_OUTCOME}\"\n echo \"GH_AW_BINLOG_PATH=${GH_AW_BINLOG_PATH_VALUE}\"\n echo \"GH_AW_PR_NUMBER=${GH_AW_PR_NUMBER_VALUE}\"\n echo \"GH_AW_PR_HEAD_SHA=${GH_AW_PR_HEAD_SHA_VALUE}\"\n echo \"GH_AW_WORKSPACE=${GH_AW_GITHUB_WORKSPACE}\"\n} >> \"$GITHUB_ENV\"\n"
- name: Configure Git credentials
env:
@@ -579,9 +544,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_0f1e9354d5dfab31_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_3d14ab2d6899467a_EOF'
{"add_comment":{"hide_older_comments":true,"max":1},"create_pull_request_review_comment":{"max":10,"side":"RIGHT"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_0f1e9354d5dfab31_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_3d14ab2d6899467a_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -813,7 +778,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_89cac75e4a436ab9_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_62fb194425d39b86_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -854,7 +819,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_89cac75e4a436ab9_EOF
+ GH_AW_MCP_CONFIG_62fb194425d39b86_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
diff --git a/.github/workflows/daily-perf-improver.lock.yml b/.github/workflows/daily-perf-improver.lock.yml
index 414b5688fd..16db971f7a 100644
--- a/.github/workflows/daily-perf-improver.lock.yml
+++ b/.github/workflows/daily-perf-improver.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"4ae2b04463fb7872ce8ebe14cad724bef391877c6cdafbaa6ba5e3f9ae40d09d","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"ae9ca89fd8ecc99d0853d5f064d5aab15747b563158e19c677577e9b27b8baa9","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -61,10 +61,6 @@
name: "Daily Perf Improver"
on:
- issue_comment:
- types:
- - created
- - edited
schedule:
- cron: "25 15 * * *"
workflow_dispatch:
@@ -85,7 +81,7 @@ run-name: "Daily Perf Improver"
jobs:
activation:
needs: pre_activation
- if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/perf-assist ') || startsWith(github.event.comment.body, '/perf-assist\n') || github.event.comment.body == '/perf-assist') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
+ if: needs.pre_activation.outputs.activated == 'true'
runs-on: ubuntu-slim
permissions:
actions: read
@@ -153,7 +149,7 @@ jobs:
await main(core, context);
- name: Add eyes reaction for immediate feedback
id: react
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_REACTION: "eyes"
@@ -225,7 +221,7 @@ jobs:
await main();
- name: Add comment with workflow run link
id: add-comment
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_WORKFLOW_NAME: "Daily Perf Improver"
@@ -255,25 +251,25 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_a489f6bef6740bde_EOF'
+ cat << 'GH_AW_PROMPT_0334cf5ac49eb948_EOF'
- GH_AW_PROMPT_a489f6bef6740bde_EOF
+ GH_AW_PROMPT_0334cf5ac49eb948_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/repo_memory_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_a489f6bef6740bde_EOF'
+ cat << 'GH_AW_PROMPT_0334cf5ac49eb948_EOF'
Tools: add_comment(max:3), create_issue(max:4), update_issue, create_pull_request(max:4), push_to_pull_request_branch(max:4), missing_tool, missing_data, noop
- GH_AW_PROMPT_a489f6bef6740bde_EOF
+ GH_AW_PROMPT_0334cf5ac49eb948_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_create_pull_request.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_push_to_pr_branch.md"
- cat << 'GH_AW_PROMPT_a489f6bef6740bde_EOF'
+ cat << 'GH_AW_PROMPT_0334cf5ac49eb948_EOF'
- GH_AW_PROMPT_a489f6bef6740bde_EOF
+ GH_AW_PROMPT_0334cf5ac49eb948_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_a489f6bef6740bde_EOF'
+ cat << 'GH_AW_PROMPT_0334cf5ac49eb948_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -302,7 +298,7 @@ jobs:
{{/if}}
- GH_AW_PROMPT_a489f6bef6740bde_EOF
+ GH_AW_PROMPT_0334cf5ac49eb948_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
@@ -310,11 +306,11 @@ jobs:
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_push_to_pr_branch_guidance.md"
fi
- cat << 'GH_AW_PROMPT_a489f6bef6740bde_EOF'
+ cat << 'GH_AW_PROMPT_0334cf5ac49eb948_EOF'
{{#runtime-import .github/workflows/shared/repo-build-setup.md}}
{{#runtime-import .github/workflows/daily-perf-improver.md}}
- GH_AW_PROMPT_a489f6bef6740bde_EOF
+ GH_AW_PROMPT_0334cf5ac49eb948_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -425,6 +421,8 @@ jobs:
issues: read
pull-requests: read
security-events: read
+ concurrency:
+ group: "gh-aw-copilot-${{ github.workflow }}"
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
GH_AW_ASSETS_ALLOWED_EXTS: ""
@@ -557,9 +555,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_2814673ebbdba5c9_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_76d2e53e37ff8f1e_EOF'
{"add_comment":{"hide_older_comments":true,"max":3,"target":"*"},"create_issue":{"labels":["automation","performance"],"max":4,"title_prefix":"[Perf Improver] "},"create_pull_request":{"draft":true,"labels":["automation","performance"],"max":4,"max_patch_files":100,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"fallback-to-issue","title_prefix":"[Perf Improver] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"push_repo_memory":{"memories":[{"dir":"/tmp/gh-aw/repo-memory/default","id":"default","max_file_count":100,"max_file_size":102400,"max_patch_size":10240}]},"push_to_pull_request_branch":{"if_no_changes":"warn","max":4,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"target":"*","title_prefix":"[Perf Improver] "},"report_incomplete":{},"update_issue":{"allow_body":true,"max":1,"target":"*","title_prefix":"[Perf Improver] "}}
- GH_AW_SAFE_OUTPUTS_CONFIG_2814673ebbdba5c9_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_76d2e53e37ff8f1e_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -906,7 +904,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_3dc4f4f2fa279d74_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_28db2681d5258737_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -951,7 +949,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_3dc4f4f2fa279d74_EOF
+ GH_AW_MCP_CONFIG_28db2681d5258737_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
@@ -1575,7 +1573,6 @@ jobs:
}
pre_activation:
- if: "(github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' || contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/perf-assist ') || startsWith(github.event.comment.body, '/perf-assist\n') || github.event.comment.body == '/perf-assist') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
runs-on: ubuntu-slim
outputs:
activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }}
diff --git a/.github/workflows/daily-perf-improver.md b/.github/workflows/daily-perf-improver.md
index b0aa5b1348..f1613a01eb 100644
--- a/.github/workflows/daily-perf-improver.md
+++ b/.github/workflows/daily-perf-improver.md
@@ -16,6 +16,7 @@ on:
slash_command:
name: perf-assist
events: [pull_request_comment]
+ strategy: centralized
reaction: "eyes"
permissions:
diff --git a/.github/workflows/daily-test-improver.lock.yml b/.github/workflows/daily-test-improver.lock.yml
index d8bf144fff..b84b3bcb05 100644
--- a/.github/workflows/daily-test-improver.lock.yml
+++ b/.github/workflows/daily-test-improver.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"aea2f1797257f7511afb1077c19e5977cc4bc8346ee956662fb66c04253fd1a0","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"8d1e42175639b642a49f00cedc6b4dbf8389d75a351f15b0e29958e73be3f5ac","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_CI_TRIGGER_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -61,32 +61,6 @@
name: "Daily Test Improver"
on:
- discussion:
- types:
- - created
- - edited
- discussion_comment:
- types:
- - created
- - edited
- issue_comment:
- types:
- - created
- - edited
- issues:
- types:
- - opened
- - edited
- - reopened
- pull_request:
- types:
- - opened
- - edited
- - reopened
- pull_request_review_comment:
- types:
- - created
- - edited
schedule:
- cron: "50 5 * * *"
workflow_dispatch:
@@ -107,7 +81,7 @@ run-name: "Daily Test Improver"
jobs:
activation:
needs: pre_activation
- if: "needs.pre_activation.outputs.activated == 'true' && ((github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment') && (github.event_name == 'issues' && (startsWith(github.event.issue.body, '/test-assist ') || startsWith(github.event.issue.body, '/test-assist\n') || github.event.issue.body == '/test-assist') || github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist') && github.event.issue.pull_request == null || github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist') && github.event.issue.pull_request != null || github.event_name == 'pull_request_review_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist') || github.event_name == 'pull_request' && (startsWith(github.event.pull_request.body, '/test-assist ') || startsWith(github.event.pull_request.body, '/test-assist\n') || github.event.pull_request.body == '/test-assist') || github.event_name == 'discussion' && (startsWith(github.event.discussion.body, '/test-assist ') || startsWith(github.event.discussion.body, '/test-assist\n') || github.event.discussion.body == '/test-assist') || github.event_name == 'discussion_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist')) || (!(github.event_name == 'issues')) && (!(github.event_name == 'issue_comment')) && (!(github.event_name == 'pull_request')) && (!(github.event_name == 'pull_request_review_comment')) && (!(github.event_name == 'discussion')) && (!(github.event_name == 'discussion_comment')))"
+ if: needs.pre_activation.outputs.activated == 'true'
runs-on: ubuntu-slim
permissions:
actions: read
@@ -176,7 +150,7 @@ jobs:
await main(core, context);
- name: Add eyes reaction for immediate feedback
id: react
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_REACTION: "eyes"
@@ -248,7 +222,7 @@ jobs:
await main();
- name: Add comment with workflow run link
id: add-comment
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_WORKFLOW_NAME: "Daily Test Improver"
@@ -278,25 +252,25 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_6b906d02e98a388e_EOF'
+ cat << 'GH_AW_PROMPT_47512c9bd0a7c002_EOF'
- GH_AW_PROMPT_6b906d02e98a388e_EOF
+ GH_AW_PROMPT_47512c9bd0a7c002_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/repo_memory_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_6b906d02e98a388e_EOF'
+ cat << 'GH_AW_PROMPT_47512c9bd0a7c002_EOF'
Tools: add_comment(max:10), create_issue(max:4), update_issue, create_pull_request(max:4), push_to_pull_request_branch(max:4), missing_tool, missing_data, noop
- GH_AW_PROMPT_6b906d02e98a388e_EOF
+ GH_AW_PROMPT_47512c9bd0a7c002_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_create_pull_request.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_push_to_pr_branch.md"
- cat << 'GH_AW_PROMPT_6b906d02e98a388e_EOF'
+ cat << 'GH_AW_PROMPT_47512c9bd0a7c002_EOF'
- GH_AW_PROMPT_6b906d02e98a388e_EOF
+ GH_AW_PROMPT_47512c9bd0a7c002_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_6b906d02e98a388e_EOF'
+ cat << 'GH_AW_PROMPT_47512c9bd0a7c002_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -325,7 +299,7 @@ jobs:
{{/if}}
- GH_AW_PROMPT_6b906d02e98a388e_EOF
+ GH_AW_PROMPT_47512c9bd0a7c002_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
@@ -333,11 +307,11 @@ jobs:
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_push_to_pr_branch_guidance.md"
fi
- cat << 'GH_AW_PROMPT_6b906d02e98a388e_EOF'
+ cat << 'GH_AW_PROMPT_47512c9bd0a7c002_EOF'
{{#runtime-import .github/workflows/shared/repo-build-setup.md}}
{{#runtime-import .github/workflows/daily-test-improver.md}}
- GH_AW_PROMPT_6b906d02e98a388e_EOF
+ GH_AW_PROMPT_47512c9bd0a7c002_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -442,6 +416,8 @@ jobs:
needs: activation
runs-on: ubuntu-latest
permissions: read-all
+ concurrency:
+ group: "gh-aw-copilot-${{ github.workflow }}"
env:
DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
GH_AW_ASSETS_ALLOWED_EXTS: ""
@@ -574,9 +550,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_7198034c40fda82a_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_45a67e17c5eabe82_EOF'
{"add_comment":{"hide_older_comments":true,"max":10,"target":"*"},"create_issue":{"labels":["automation","testing"],"max":4,"title_prefix":"[Test Improver] "},"create_pull_request":{"draft":true,"labels":["automation","testing"],"max":4,"max_patch_files":100,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"protected_files_policy":"fallback-to-issue","title_prefix":"[Test Improver] "},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"push_repo_memory":{"memories":[{"dir":"/tmp/gh-aw/repo-memory/default","id":"default","max_file_count":100,"max_file_size":102400,"max_patch_size":10240}]},"push_to_pull_request_branch":{"if_no_changes":"warn","max":4,"max_patch_size":1024,"protect_top_level_dot_folders":true,"protected_files":["package.json","bun.lockb","bunfig.toml","deno.json","deno.jsonc","deno.lock","global.json","NuGet.Config","Directory.Packages.props","mix.exs","mix.lock","go.mod","go.sum","stack.yaml","stack.yaml.lock","pom.xml","build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts","gradle.properties","package-lock.json","yarn.lock","pnpm-lock.yaml","npm-shrinkwrap.json","requirements.txt","Pipfile","Pipfile.lock","pyproject.toml","setup.py","setup.cfg","Gemfile","Gemfile.lock","uv.lock","CODEOWNERS","DESIGN.md","README.md","CONTRIBUTING.md","CHANGELOG.md","SECURITY.md","CODE_OF_CONDUCT.md","AGENTS.md","CLAUDE.md","GEMINI.md"],"target":"*","title_prefix":"[Test Improver] "},"report_incomplete":{},"update_issue":{"allow_body":true,"max":1,"target":"*","title_prefix":"[Test Improver] "}}
- GH_AW_SAFE_OUTPUTS_CONFIG_7198034c40fda82a_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_45a67e17c5eabe82_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -923,7 +899,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_3063cdace8fce2d6_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_a70f44eda46a28d5_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -968,7 +944,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_3063cdace8fce2d6_EOF
+ GH_AW_MCP_CONFIG_a70f44eda46a28d5_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
@@ -1592,7 +1568,6 @@ jobs:
}
pre_activation:
- if: "(github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' || contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) && ((github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment') && (github.event_name == 'issues' && (startsWith(github.event.issue.body, '/test-assist ') || startsWith(github.event.issue.body, '/test-assist\n') || github.event.issue.body == '/test-assist') || github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist') && github.event.issue.pull_request == null || github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist') && github.event.issue.pull_request != null || github.event_name == 'pull_request_review_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist') || github.event_name == 'pull_request' && (startsWith(github.event.pull_request.body, '/test-assist ') || startsWith(github.event.pull_request.body, '/test-assist\n') || github.event.pull_request.body == '/test-assist') || github.event_name == 'discussion' && (startsWith(github.event.discussion.body, '/test-assist ') || startsWith(github.event.discussion.body, '/test-assist\n') || github.event.discussion.body == '/test-assist') || github.event_name == 'discussion_comment' && (startsWith(github.event.comment.body, '/test-assist ') || startsWith(github.event.comment.body, '/test-assist\n') || github.event.comment.body == '/test-assist')) || (!(github.event_name == 'issues')) && (!(github.event_name == 'issue_comment')) && (!(github.event_name == 'pull_request')) && (!(github.event_name == 'pull_request_review_comment')) && (!(github.event_name == 'discussion')) && (!(github.event_name == 'discussion_comment')))"
runs-on: ubuntu-slim
outputs:
activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }}
diff --git a/.github/workflows/daily-test-improver.md b/.github/workflows/daily-test-improver.md
index f7abc44996..1318fad7ee 100644
--- a/.github/workflows/daily-test-improver.md
+++ b/.github/workflows/daily-test-improver.md
@@ -15,6 +15,7 @@ on:
workflow_dispatch:
slash_command:
name: test-assist
+ strategy: centralized
reaction: "eyes"
timeout-minutes: 30
diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml
index 7dbc3faa5e..63cba67603 100644
--- a/.github/workflows/issue-arborist.lock.yml
+++ b/.github/workflows/issue-arborist.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"e1c4b48ef71e1319fb7b460bef4bf6bf35973b6aeab77300b6e9b8cb34a0eba5","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"71c875375de934875faf447b3b90aa0c35416522168f53ec0c1d32079c46d7e2","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -188,20 +188,20 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_8a38e705af7cdc4d_EOF'
+ cat << 'GH_AW_PROMPT_c6bae8987700cab6_EOF'
- GH_AW_PROMPT_8a38e705af7cdc4d_EOF
+ GH_AW_PROMPT_c6bae8987700cab6_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_8a38e705af7cdc4d_EOF'
+ cat << 'GH_AW_PROMPT_c6bae8987700cab6_EOF'
Tools: create_issue(max:5), link_sub_issue(max:50), missing_tool, missing_data, noop
- GH_AW_PROMPT_8a38e705af7cdc4d_EOF
+ GH_AW_PROMPT_c6bae8987700cab6_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_8a38e705af7cdc4d_EOF'
+ cat << 'GH_AW_PROMPT_c6bae8987700cab6_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -230,12 +230,12 @@ jobs:
{{/if}}
- GH_AW_PROMPT_8a38e705af7cdc4d_EOF
+ GH_AW_PROMPT_c6bae8987700cab6_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
- cat << 'GH_AW_PROMPT_8a38e705af7cdc4d_EOF'
+ cat << 'GH_AW_PROMPT_c6bae8987700cab6_EOF'
{{#runtime-import .github/workflows/issue-arborist.md}}
- GH_AW_PROMPT_8a38e705af7cdc4d_EOF
+ GH_AW_PROMPT_c6bae8987700cab6_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -378,43 +378,7 @@ jobs:
GH_AW_ORIGINAL_GITHUB_API_URL: ${{ github.api_url }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
name: Fetch issues data
- run: |
- # Create output directory
- mkdir -p /tmp/gh-aw/issues-data
-
- echo "⬇ Downloading the last 100 open issues (excluding sub-issues)..."
-
- # Use REST API directly to avoid gh CLI /meta check blocked by DIFC proxy.
- # Fetches the most recently created 100 issues (intentional limit matching previous behavior).
- # State is normalized to uppercase (OPEN/CLOSED) to match gh CLI GraphQL output format.
- curl -s \
- -H "Authorization: Bearer ${GITHUB_TOKEN}" \
- -H "Accept: application/vnd.github+json" \
- --get \
- --data-urlencode "q=repo:$GH_AW_GITHUB_REPOSITORY is:issue is:open -is:sub-issue" \
- --data-urlencode "sort=created" \
- --data-urlencode "order=desc" \
- --data-urlencode "per_page=100" \
- "${GH_AW_ORIGINAL_GITHUB_API_URL}/search/issues" \
- | jq '.items // [] | map({
- number: .number,
- title: .title,
- author: {login: .user.login},
- createdAt: .created_at,
- state: (.state | ascii_upcase),
- url: .html_url,
- body: .body,
- labels: [.labels[] | {name: .name}],
- updatedAt: .updated_at,
- closedAt: .closed_at,
- milestone: (if .milestone != null then {title: .milestone.title} else null end),
- assignees: [.assignees[] | {login: .login}]
- })' \
- > /tmp/gh-aw/issues-data/issues.json \
- || echo '[]' > /tmp/gh-aw/issues-data/issues.json
-
- echo "✓ Issues data saved to /tmp/gh-aw/issues-data/issues.json"
- echo "Total issues fetched: $(jq 'length' /tmp/gh-aw/issues-data/issues.json)"
+ run: "# Create output directory\nmkdir -p /tmp/gh-aw/issues-data\n\necho \"⬇ Downloading the last 100 open issues (excluding sub-issues)...\"\n\n# Use REST API directly to avoid gh CLI /meta check blocked by DIFC proxy.\n# Fetches the most recently created 100 issues (intentional limit matching previous behavior).\n# State is normalized to uppercase (OPEN/CLOSED) to match gh CLI GraphQL output format.\ncurl -s \\\n -H \"Authorization: Bearer ${GITHUB_TOKEN}\" \\\n -H \"Accept: application/vnd.github+json\" \\\n --get \\\n --data-urlencode \"q=repo:${GH_AW_GITHUB_REPOSITORY} is:issue is:open -is:sub-issue\" \\\n --data-urlencode \"sort=created\" \\\n --data-urlencode \"order=desc\" \\\n --data-urlencode \"per_page=100\" \\\n \"${GH_AW_ORIGINAL_GITHUB_API_URL}/search/issues\" \\\n | jq '.items // [] | map({\n number: .number,\n title: .title,\n author: {login: .user.login},\n createdAt: .created_at,\n state: (.state | ascii_upcase),\n url: .html_url,\n body: .body,\n labels: [.labels[] | {name: .name}],\n updatedAt: .updated_at,\n closedAt: .closed_at,\n milestone: (if .milestone != null then {title: .milestone.title} else null end),\n assignees: [.assignees[] | {login: .login}]\n })' \\\n > /tmp/gh-aw/issues-data/issues.json \\\n || echo '[]' > /tmp/gh-aw/issues-data/issues.json\n\necho \"✓ Issues data saved to /tmp/gh-aw/issues-data/issues.json\"\necho \"Total issues fetched: $(jq 'length' /tmp/gh-aw/issues-data/issues.json)\"\n"
- name: Configure Git credentials
env:
@@ -479,9 +443,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_4637bab9c74706a0_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_bd56447445838c5e_EOF'
{"create_issue":{"expires":48,"group":true,"max":5,"title_prefix":"[Parent] "},"create_report_incomplete_issue":{},"link_sub_issue":{"max":50},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{}}
- GH_AW_SAFE_OUTPUTS_CONFIG_4637bab9c74706a0_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_bd56447445838c5e_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -706,7 +670,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_ef5c918e31a06241_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_deda227c650bace8_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -751,7 +715,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_ef5c918e31a06241_EOF
+ GH_AW_MCP_CONFIG_deda227c650bace8_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
diff --git a/.github/workflows/review.agent.lock.yml b/.github/workflows/review.agent.lock.yml
index 4795581e74..3e5279396b 100644
--- a/.github/workflows/review.agent.lock.yml
+++ b/.github/workflows/review.agent.lock.yml
@@ -1,4 +1,4 @@
-# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"543ffefe932a1956a7530941998768daeb5fad9ce2dbff0ca21c39ed6288f7fb","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
+# gh-aw-metadata: {"schema_version":"v3","frontmatter_hash":"4292c7183d5fad3804d968b9e86afaf49a2c3f1a3af532bfe36d908f57bd0e13","compiler_version":"v0.74.8","strict":true,"agent_id":"copilot"}
# gh-aw-manifest: {"version":1,"secrets":["COPILOT_GITHUB_TOKEN","GH_AW_GITHUB_MCP_SERVER_TOKEN","GH_AW_GITHUB_TOKEN","GITHUB_TOKEN"],"actions":[{"repo":"actions/cache/restore","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/cache/save","sha":"27d5ce7f107fe9357f9df03efb73ab90386fccae","version":"v5.0.5"},{"repo":"actions/checkout","sha":"de0fac2e4500dabe0009e67214ff5f5447ce83dd","version":"v6.0.2"},{"repo":"actions/download-artifact","sha":"3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c","version":"v8.0.1"},{"repo":"actions/github-script","sha":"3a2844b7e9c422d3c10d287c895573f7108da1b3","version":"v9.0.0"},{"repo":"actions/setup-node","sha":"48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e","version":"v6.4.0"},{"repo":"actions/upload-artifact","sha":"043fb46d1a93c77aae656e7c1c64a875d1fc6a0a","version":"v7.0.1"},{"repo":"github/gh-aw-actions/setup","sha":"efa55847f72aadb03490d955263ff911bf758700","version":"v0.74.8"}],"containers":[{"image":"ghcr.io/github/gh-aw-firewall/agent:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/api-proxy:0.25.49"},{"image":"ghcr.io/github/gh-aw-firewall/squid:0.25.49"},{"image":"ghcr.io/github/gh-aw-mcpg:v0.3.9","digest":"sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388","pinned_image":"ghcr.io/github/gh-aw-mcpg:v0.3.9@sha256:64828b42a4482f58fab16509d7f8f495a6d97c972a98a68aff20543531ac0388"},{"image":"ghcr.io/github/github-mcp-server:v1.0.4","digest":"sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4","pinned_image":"ghcr.io/github/github-mcp-server:v1.0.4@sha256:e3816a476a977cfb836e7d221510011436c654d11861db66ecfd826601aba6a4"},{"image":"node:lts-alpine","digest":"sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f","pinned_image":"node:lts-alpine@sha256:d1b3b4da11eefd5941e7f0b9cf17783fc99d9c6fc34884a665f40a06dbdfc94f"}]}
# ___ _ _
# / _ \ | | (_)
@@ -55,14 +55,17 @@
name: "Expert Code Review (command)"
on:
- issue_comment:
- types:
- - created
- - edited
# roles: # Roles processed as role check in pre-activation job
# - admin # Roles processed as role check in pre-activation job
# - maintainer # Roles processed as role check in pre-activation job
# - write # Roles processed as role check in pre-activation job
+ workflow_dispatch:
+ inputs:
+ aw_context:
+ default: ""
+ description: "Agent caller context (used internally by Agentic Workflows)."
+ required: false
+ type: string
permissions: {}
@@ -74,7 +77,7 @@ run-name: "Expert Code Review (command)"
jobs:
activation:
needs: pre_activation
- if: "needs.pre_activation.outputs.activated == 'true' && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/review ') || startsWith(github.event.comment.body, '/review\n') || github.event.comment.body == '/review') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
+ if: needs.pre_activation.outputs.activated == 'true'
runs-on: ubuntu-slim
permissions:
actions: read
@@ -139,7 +142,7 @@ jobs:
await main(core, context);
- name: Add eyes reaction for immediate feedback
id: react
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_REACTION: "eyes"
@@ -211,7 +214,7 @@ jobs:
await main();
- name: Add comment with workflow run link
id: add-comment
- if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id
+ if: github.event_name == 'issues' || github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment' || github.event_name == 'discussion' || github.event_name == 'discussion_comment' || github.event_name == 'pull_request' && github.event.pull_request.head.repo.id == github.repository_id || github.event_name == 'workflow_dispatch' && (fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issues' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'issue_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request_review_comment' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'pull_request' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion' || fromJSON(github.event.inputs.aw_context || '{}').event_type == 'discussion_comment')
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
GH_AW_WORKFLOW_NAME: "Expert Code Review (command)"
@@ -238,21 +241,21 @@ jobs:
run: |
bash "${RUNNER_TEMP}/gh-aw/actions/create_prompt_first.sh"
{
- cat << 'GH_AW_PROMPT_e2e1c7e957a44bdd_EOF'
+ cat << 'GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF'
- GH_AW_PROMPT_e2e1c7e957a44bdd_EOF
+ GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/xpia.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/temp_folder_prompt.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/markdown.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/cache_memory_prompt_multi.md"
cat "${RUNNER_TEMP}/gh-aw/prompts/safe_outputs_prompt.md"
- cat << 'GH_AW_PROMPT_e2e1c7e957a44bdd_EOF'
+ cat << 'GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF'
Tools: add_comment(max:5), create_pull_request_review_comment(max:30), submit_pull_request_review, missing_tool, missing_data, noop
- GH_AW_PROMPT_e2e1c7e957a44bdd_EOF
+ GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/mcp_cli_tools_prompt.md"
- cat << 'GH_AW_PROMPT_e2e1c7e957a44bdd_EOF'
+ cat << 'GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF'
The following GitHub context information is available for this workflow:
{{#if github.actor}}
@@ -281,16 +284,16 @@ jobs:
{{/if}}
- GH_AW_PROMPT_e2e1c7e957a44bdd_EOF
+ GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF
cat "${RUNNER_TEMP}/gh-aw/prompts/github_mcp_tools_with_safeoutputs_prompt.md"
if [ "$GITHUB_EVENT_NAME" = "issue_comment" ] && [ -n "$GH_AW_IS_PR_COMMENT" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review_comment" ] || [ "$GITHUB_EVENT_NAME" = "pull_request_review" ]; then
cat "${RUNNER_TEMP}/gh-aw/prompts/pr_context_prompt.md"
fi
- cat << 'GH_AW_PROMPT_e2e1c7e957a44bdd_EOF'
+ cat << 'GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF'
{{#runtime-import .github/workflows/shared/review-shared.md}}
{{#runtime-import .github/workflows/review.agent.md}}
- GH_AW_PROMPT_e2e1c7e957a44bdd_EOF
+ GH_AW_PROMPT_e5dbdaa0bfa385bd_EOF
} > "$GH_AW_PROMPT"
- name: Interpolate variables and render templates
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
@@ -519,9 +522,9 @@ jobs:
mkdir -p "${RUNNER_TEMP}/gh-aw/safeoutputs"
mkdir -p /tmp/gh-aw/safeoutputs
mkdir -p /tmp/gh-aw/mcp-logs/safeoutputs
- cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_b4e7269737f7cf98_EOF'
+ cat > "${RUNNER_TEMP}/gh-aw/safeoutputs/config.json" << 'GH_AW_SAFE_OUTPUTS_CONFIG_5aa1c2a8037e56b4_EOF'
{"add_comment":{"max":5},"create_pull_request_review_comment":{"max":30,"side":"RIGHT"},"create_report_incomplete_issue":{},"missing_data":{},"missing_tool":{},"noop":{"max":1,"report-as-issue":"false"},"report_incomplete":{},"submit_pull_request_review":{"allowed_events":["COMMENT","REQUEST_CHANGES"],"max":1}}
- GH_AW_SAFE_OUTPUTS_CONFIG_b4e7269737f7cf98_EOF
+ GH_AW_SAFE_OUTPUTS_CONFIG_5aa1c2a8037e56b4_EOF
- name: Generate Safe Outputs Tools
env:
GH_AW_TOOLS_META_JSON: |
@@ -772,7 +775,7 @@ jobs:
mkdir -p /home/runner/.copilot
GH_AW_NODE=$(which node 2>/dev/null || command -v node 2>/dev/null || echo node)
- cat << GH_AW_MCP_CONFIG_977e62d81a4d6aef_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
+ cat << GH_AW_MCP_CONFIG_a9fb975478cebb0f_EOF | "$GH_AW_NODE" "${RUNNER_TEMP}/gh-aw/actions/start_mcp_gateway.cjs"
{
"mcpServers": {
"github": {
@@ -813,7 +816,7 @@ jobs:
"payloadDir": "${MCP_GATEWAY_PAYLOAD_DIR}"
}
}
- GH_AW_MCP_CONFIG_977e62d81a4d6aef_EOF
+ GH_AW_MCP_CONFIG_a9fb975478cebb0f_EOF
- name: Mount MCP servers as CLIs
id: mount-mcp-clis
continue-on-error: true
@@ -1427,7 +1430,6 @@ jobs:
}
pre_activation:
- if: "(github.event_name != 'issue_comment' && github.event_name != 'pull_request_review_comment' || contains(fromJSON('[\"OWNER\",\"MEMBER\",\"COLLABORATOR\"]'), github.event.comment.author_association)) && (github.event_name == 'issue_comment' && (startsWith(github.event.comment.body, '/review ') || startsWith(github.event.comment.body, '/review\n') || github.event.comment.body == '/review') && github.event.issue.pull_request != null || !(github.event_name == 'issue_comment'))"
runs-on: ubuntu-slim
outputs:
activated: ${{ steps.check_membership.outputs.is_team_member == 'true' && steps.check_command_position.outputs.command_position_ok == 'true' }}
diff --git a/.github/workflows/review.agent.md b/.github/workflows/review.agent.md
index 04ec420a75..a49f7eec93 100644
--- a/.github/workflows/review.agent.md
+++ b/.github/workflows/review.agent.md
@@ -6,6 +6,7 @@ on:
slash_command:
name: review
events: [pull_request_comment]
+ strategy: centralized
roles: [admin, maintainer, write]
permissions:
From ea6c8b0b415ad7fd1ee643dc35af0310a88bce2e Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 21 May 2026 15:00:56 +0000
Subject: [PATCH 2/2] Pin gh-aw-actions/setup to SHA in agentic_commands.yml
Co-authored-by: Evangelink <11340282+Evangelink@users.noreply.github.com>
---
.github/workflows/agentic_commands.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/agentic_commands.yml b/.github/workflows/agentic_commands.yml
index 9a0fa2b91e..c97cebe31c 100644
--- a/.github/workflows/agentic_commands.yml
+++ b/.github/workflows/agentic_commands.yml
@@ -64,7 +64,7 @@ jobs:
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup Scripts
- uses: github/gh-aw-actions/setup@v0.74.8
+ uses: github/gh-aw-actions/setup@efa55847f72aadb03490d955263ff911bf758700 # v0.74.8
with:
destination: ${{ runner.temp }}/gh-aw/actions