Skip to content

feat: add deployment-incident-monitor example workflow and deployment_status state filter#28549

Merged
pelikhan merged 8 commits intomainfrom
copilot/add-deployment-status-workflow-example
Apr 26, 2026
Merged

feat: add deployment-incident-monitor example workflow and deployment_status state filter#28549
pelikhan merged 8 commits intomainfrom
copilot/add-deployment-status-workflow-example

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Apr 26, 2026

deployment_status and workflow_run triggers are underrepresented in examples, causing agents to default to suboptimal triggers for DevOps incident automation. This adds a canonical compilable example demonstrating the full pattern, along with first-class compiler support for filtering deployment states.

Changes

  • pkg/constants/tool_constants.go — Adds github.event.deployment_status.state to AllowedExpressions. It's an enum-like field (not user text), analogous to the already-allowed github.event.issue.state.

  • pkg/parser/schemas/main_workflow_schema.json — Adds state: property to the deployment_status trigger object with an enum of valid state values (error, failure, pending, success, inactive, in_progress, queued, waiting).

  • pkg/workflow/frontmatter_extraction_yaml.go — New extractDeploymentStatusStateCondition() reads on.deployment_status.state (string or array) and generates a guarded GitHub Actions expression merged into the job if: condition. The generated condition is wrapped with github.event_name != 'deployment_status' || (...) so that other combined triggers (e.g. workflow_dispatch) are not blocked. ${{ }} wrappers are stripped from any existing if: value before merging to prevent invalid nested expressions.

  • pkg/workflow/trigger_parser.go — New parseDeploymentTrigger() handles natural-language deployment shorthands with the same event_name guard:

    • "deployment failed"deployment_status trigger with guarded state == 'failure' condition
    • "deployment error" → guarded state == 'error' condition
    • "deployment failed or error" → guarded combined OR condition
  • pkg/workflow/schedule_preprocessing.goTriggerIR.Conditions are now propagated into the frontmatter if: field after NL trigger expansion, enabling all future NL trigger shorthands that produce conditions. ${{ }} wrappers are stripped from any existing if: value before merging.

  • pkg/workflow/schedule_preprocessing_test.go — Adds TestTriggerShorthandConditionPropagation covering the condition-propagation path: single-state triggers, multi-state triggers, merging with a bare if:, and merging with a ${{ }}-wrapped if:.

  • actions/setup/js/aw_context.cjsbuildAwContext() now includes a deployment_state field populated from payload.deployment_status.state when the triggering event is deployment_status (empty string otherwise). This propagates the state to child workflows via aw_context for workflow_call support.

  • actions/setup/js/generate_aw_info.cjs — Adds deployment_state to the awInfo object written to aw_info.json so the agent in the primary workflow has the triggering state available in its context.

  • actions/setup/js/runtime_import.cjs — Adds github.event.deployment_status.state to ALLOWED_EXPRESSIONS (was in Go constants but missing from the JS list).

  • actions/setup/js/send_otlp_span.cjs — Adds gh-aw.deployment.state as an attribute to both the setup and conclusion OTLP spans. The value is resolved in priority order: GH_AW_GITHUB_EVENT_DEPLOYMENT_STATUS_STATE env var (set from ${{ github.event.deployment_status.state }} in the compiled workflow), awInfo.deployment_state (for primary workflows), and awInfo.context.deployment_state (propagated via aw_context for called workflows).

  • .github/workflows/deployment-incident-monitor.md — New canonical DevOps example using the new state: [error, failure] syntax:

    • deployment_status: state: [error, failure] compiled into a guarded job if: condition
    • skip-if-match deduplication — skips if an open incident issue already exists
    • expires: 7d + close-older-issues: true for automatic incident hygiene
    • toolsets: [repos, actions] for root cause analysis (commit history + workflow logs)
    • deployments: read permission (required for the event payload)
  • .github/aw/github-agentic-workflows.md — Adds a "Deployment Incident Monitor (DevOps)" section in Common Workflow Patterns explaining each design decision, including both the state: field and the NL shorthand.

on:
  deployment_status:
    state: [error, failure]   # compiled into: github.event_name != 'deployment_status' || (state == 'error' || state == 'failure')
  workflow_dispatch:           # can safely be combined; the guard ensures it passes through
permissions:
  contents: read
  actions: read
  deployments: read
tools:
  github:
    toolsets: [repos, actions]
safe-outputs:
  create-issue:
    expires: 7d
    title-prefix: "[Incident] "
    labels: [incident, deployment-failure]
    close-older-issues: true
  noop:

The same result can also be achieved with the natural language shorthand:

on: "deployment failed or error"

Copilot AI and others added 2 commits April 26, 2026 05:26
…pression

- Add `github.event.deployment_status.state` to AllowedExpressions in
  pkg/constants/tool_constants.go to support deployment_status workflows
- Create .github/workflows/deployment-incident-monitor.md: canonical
  DevOps example workflow that triggers on deployment_status events,
  uses skip-if-match for deduplication, expires for cleanup, and
  close-older-issues to keep incidents current
- Compile deployment-incident-monitor.lock.yml
- Update .github/aw/github-agentic-workflows.md with a new
  'Deployment Incident Monitor (DevOps)' section in Common Workflow
  Patterns referencing the new example and explaining key features

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/f96a38d1-ceee-41ed-8285-2a4429518d96

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
…t deployment_status.state enum values

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/f96a38d1-ceee-41ed-8285-2a4429518d96

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
Copilot AI changed the title [WIP] Add deployment status example workflow for DevOps incident automation feat: add deployment-incident-monitor example workflow for DevOps automation Apr 26, 2026
Copilot AI requested a review from gh-aw-bot April 26, 2026 05:34
@github-actions
Copy link
Copy Markdown
Contributor

Hey @Copilot 👋 — great addition! The deployment_status + workflow_run example fills a real gap in the canonical patterns library, and the design decisions (deduplication via skip-if-match, expires: 7d hygiene, scoped toolsets) are well-documented.

One thing would help round this out before merge:

  • Add tests — the 1-line change to pkg/constants/tool_constants.go (adding github.event.deployment_status.state to AllowedExpressions) doesn't appear to have a corresponding test. The existing constants likely have coverage in a nearby _test.go file — a test asserting the new expression is present (and that it passes validation) would keep make test comprehensive.

If you'd like a hand:

Add a unit test for the new `github.event.deployment_status.state` entry in `pkg/constants/tool_constants.go`.
Look at the existing test file(s) that cover `AllowedExpressions` and add a case that:
1. Asserts `github.event.deployment_status.state` is present in `AllowedExpressions`.
2. Verifies it passes whatever validation function is used for allowed expressions.
Follow the patterns of the existing tests in the same file.

Generated by Contribution Check · ● 1.5M ·

---
description: Monitors deployment failures and automatically creates deduplicated incident issues with root cause analysis.
on:
deployment_status:
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

@copilot

  • extend front matter support with "state" field that allows to declare the states, which then compiled into the if expression.
  • also add support in the on: ... short form natural language parser

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in 3f33d38. Two additions were made:

1. state: field in frontmatterdeployment_status now accepts a state: property that is compiled into the activation job's if: condition automatically, with the lines commented out in the lock file:

on:
  deployment_status:
    state: [error, failure]   # → compiled to: github.event.deployment_status.state == 'error' || ...

2. Natural language shorthand — the trigger parser now handles deployment patterns:

on: "deployment failed or error"    # → deployment_status trigger with state condition
on: "deployment error"              # → single-state condition

The example workflow deployment-incident-monitor.md was updated to use state: [error, failure] instead of the explicit if: condition, and the TriggerIR.Conditions are now propagated into the frontmatter if: field for all NL trigger shorthands.

… parser

- Add state: [error, failure] field to deployment_status in on: section;
  compiler compiles it into a job if: condition automatically and
  comments out the state: lines from the lock file
- Add natural language trigger shorthand: "deployment failed or error"
  compiles to deployment_status trigger with state condition
- Propagate TriggerIR.Conditions into frontmatter if: field in
  schedule_preprocessing.go (enables all future NL triggers with conditions)
- Update pkg/parser/schemas/main_workflow_schema.json to allow state:
  on deployment_status with enum values
- Update deployment-incident-monitor.md example to use state: [error, failure]
  instead of explicit if: condition
- Add tests for deployment trigger NL patterns in trigger_parser_test.go

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/ab0a0ad4-2252-4610-a09b-d50a74656b2e

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 26, 2026

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw oyment-status-worev-parse ache/uv/0.11.7/x--show-toplevel git rev-�� --show-toplevel git /usr/bin/git on&#39; --ignore-patgit --local 1/x64/bin/bash git (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD GOMODCACHE go m/_n�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw GOMOD erignore go m/_n�� -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv &#34;prettier&#34; --write &#39;../../../**/*.json&#39; &#39;!../../../pkg/workflow/js/**/*.json&#39; --ignore-path ../.git /tmp/go-build2475761632/b001/_testmain.go /usr/bin/git rror (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/git -json GO111MODULE r: $owner, name:--show-toplevel git rev-�� --show-toplevel go /usr/bin/git -json GO111MODULE $name) { hasinstall git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv s &#34;-s -w -X main.version=6cb86fd-dirty&#34; -o gh-aw ./cmd/gh-aw (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv k/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/infocmp -json GO111MODULE 64/bin/go infocmp -1 k/gh-aw/gh-aw/.github/workflows go /usr/bin/infocmp l GO111MODULE 64/bin/go infocmp (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel bash /usr/bin/git --noprofile (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv ithub/workflows config er@0.32.0 remote.origin.urgit GOWORK 64/bin/go git -C ithub/workflows config (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git HBnzKzxCC GO111MODULE repository(owner: $owner, name:--show-toplevel git rev-�� --show-toplevel ortcfg /usr/bin/git d/gh-aw/main.go GO111MODULE repository(owne--show-toplevel git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv npx prettier --write &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pr**/*.json (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv prettier --write /home/REDACTED/work/_temp/uv-python-dir/node **/*.ts **/*.json --ignore-path node /opt�� run format:pkg-json /usr/local/sbin/bash tierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv prettier --write /home/REDACTED/go/bin/node **/*.ts **/*.json --ignore-path node /opt�� run format:pkg-json /usr/bin/bash tierignore (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv prettier --write /bin/sh **/*.ts **/*.json --ignore-path /bin/sh -c cd actions/setup/js &amp;&amp; npm run format:pkg-json --silent &gt;/dev/null 2&gt;&amp;1 (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/git -json GO111MODULE 64/bin/go git -C /home/REDACTED/work/gh-aw/gh-aw show /usr/local/.ghcup/bin/bash -json GO111MODULE 64/bin/go bash (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv prettier --write /bin/sh **/*.ts **/*.json --ignore-path /bin/sh -c echo &#34;��� JavaScript files formatted&#34; (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv xterm-color GOPROXY me: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } GOSUMDB GOWORK 64/bin/go infocmp -1 xterm-color erignore er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel e=false GO111MODULE 64/bin/go docker (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv ithub/workflows GOPROXY er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel GOSUMDB GOWORK 64/bin/go git -C k/gh-aw/gh-aw/.github/workflows show me: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } l GO111MODULE $name) { has--show-toplevel /usr/bin/gh (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv GOSUMDB GOWORK 64/bin/go GOINSECURE GOMOD GOMODCACHE erignore env me) c601de31ef97d73aGOMOD 64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv -json GO111MODULE $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE prettier (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE node (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE 64/pkg/tool/linux_amd64/asm GOINSECURE GOMOD GOMODCACHE 64/pkg/tool/linuconfig (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv npx prettier --write &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pr**/*.json (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/git -json GO111MODULE x_amd64/compile git -C /home/REDACTED/work/gh-aw/gh-aw/.github/workflows rev-parse /usr/bin/gh -json GO111MODULE 64/bin/go gh (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv k/gh-aw/gh-aw/.github/workflows GOPROXY me: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } l GOWORK 64/bin/go infocmp -1 k/gh-aw/gh-aw/.github/workflows go /usr/bin/git ck &#39;scripts/**/*git GO111MODULE ed } } git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pret.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv ithub/workflows GOPROXY /usr/bin/git GOSUMDB GOWORK 64/bin/go git -C /home/REDACTED/work/gh-aw/gh-aw :latest er: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabl--show-toplevel ck &#39;scripts/**/*git GO111MODULE 64/bin/go infocmp (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel go /usr/bin/git -json GO111MODULE ghts.lock.yml git rev-�� --show-toplevel go /usr/bin/git ithub/workflows GO111MODULE ache/go/1.25.8/x/tmp/gh-aw/aw-feature-branch.patch git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv ignore-path ../../../.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.8/x-f GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv ignore-path ../../../.prettierignore (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } GOINSECURE GOMOD GOMODCACHE go (http block)

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

Copilot AI changed the title feat: add deployment-incident-monitor example workflow for DevOps automation feat: add deployment-incident-monitor example workflow and deployment_status state filter Apr 26, 2026
Copilot AI requested a review from pelikhan April 26, 2026 11:24
@pelikhan pelikhan marked this pull request as ready for review April 26, 2026 11:36
Copilot AI review requested due to automatic review settings April 26, 2026 11:36
@github-actions
Copy link
Copy Markdown
Contributor

🧪 Test Quality Sentinel Report

Test Quality Score: 76/100

⚠️ Acceptable — minor suggestions below

Metric Value
New/modified tests analyzed 5 table rows (within TestParseTriggerShorthand)
✅ Design tests (behavioral contracts) 5 (100%)
⚠️ Implementation tests (low value) 0 (0%)
Tests with error/edge cases 1 (20%)
Duplicate test clusters 0
Test inflation detected No (0.4:1 — 31 test lines / 78 production lines)
🚨 Coding-guideline violations None

Test Classification Details

View all 5 test cases
Test case File Classification Notes
deployment failed pkg/workflow/trigger_parser_test.go ✅ Design Asserts event + condition for failure state
deployment error pkg/workflow/trigger_parser_test.go ✅ Design Asserts event + condition for error state
deployment failed or error pkg/workflow/trigger_parser_test.go ✅ Design Asserts compound OR condition
deployment error or failure pkg/workflow/trigger_parser_test.go ✅ Design Asserts compound OR condition (reversed order)
bare deployment_status (left as-is) pkg/workflow/trigger_parser_test.go ✅ Design / edge case Asserts nil return for unmodified simple trigger

Suggestions (non-blocking)

⚠️ Low edge-case density (20%)

Only 1 of the 5 new test rows covers a non-happy path. The new deployment trigger parser handles state values like pending, success, inactive, in_progress, queued, waiting — but none are tested. Consider adding rows for:

  • "deployment success" / "deployment pending" → should these return conditions, return nil, or return an error?
  • An explicitly invalid state, e.g. "deployment bogus" → should it error or fall through as unrecognized?

Adding even one error/invalid-input row would improve the edge-case score significantly and document the parser's contract for unexpected input.

i️ Missing assertion messages

The test uses bare t.Errorf("ParseTriggerShorthand() event = %v, want %v", ...) — the format string provides enough context, so this is not flagged as a violation. However, the project guideline recommends descriptive messages on every assertion. The existing messages are adequate.


Language Support

Tests analyzed:

  • 🐹 Go (*_test.go): 5 table-driven sub-cases — unit (//go:build !integration)
  • 🟨 JavaScript (*.test.cjs, *.test.js): 0 tests changed

Verdict

Check passed. 0% of new tests are implementation tests (threshold: 30%). No coding-guideline violations detected. The new deployment trigger cases are clean behavioral contract tests that directly verify the parser's output for the new deployment_status state filter feature.

📖 Understanding Test Classifications

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

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

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

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

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

References: §24955643782

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

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot left a comment

Choose a reason for hiding this comment

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

✅ Test Quality Sentinel: 76/100. Test quality is acceptable — 0% of new tests are implementation tests (threshold: 30%). The 5 new table-driven deployment trigger test cases are clean behavioral contract tests with no guideline violations.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Adds first-class support and canonical examples for filtering deployment_status events by deployment state, improving guidance around deployment_status/workflow_run triggers for incident automation workflows.

Changes:

  • Extend schema + expression allowlist to support on.deployment_status.state filtering and github.event.deployment_status.state expressions.
  • Add compiler logic to compile deployment_status.state into job-level if: conditions and support NL shorthands like "deployment failed or error".
  • Add a canonical “Deployment Incident Monitor” example workflow + documentation describing the pattern.
Show a summary per file
File Description
pkg/constants/tool_constants.go Allow github.event.deployment_status.state in expression allowlist.
pkg/parser/schemas/main_workflow_schema.json Add on.deployment_status.state (string/array) with enum validation.
pkg/workflow/frontmatter_extraction_yaml.go Generate and merge deployment_status.state conditions; comment out state: in compiled on:.
pkg/workflow/trigger_parser.go Add NL trigger shorthand parsing for deployment failures/errors into deployment_status + conditions.
pkg/workflow/schedule_preprocessing.go Propagate TriggerIR.Conditions from NL trigger expansion into frontmatter if:.
pkg/workflow/trigger_parser_test.go Add unit tests for the new deployment NL shorthands.
.github/workflows/deployment-incident-monitor.md Add canonical DevOps incident workflow using deployment_status.state.
.github/workflows/deployment-incident-monitor.lock.yml Compiled workflow output showing state: compiled into job if: conditions.
.github/aw/github-agentic-workflows.md Document the new canonical pattern and the state: values/shorthand.

Copilot's findings

Tip

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

Comments suppressed due to low confidence (1)

pkg/workflow/schedule_preprocessing.go:180

  • When propagating TriggerIR.Conditions into frontmatter["if"], the code concatenates the existing string value directly. If the existing value is in an accepted form like "if: " or "${{ }}" (both appear elsewhere in the codebase/tests), the resulting merged condition can become syntactically invalid (e.g., "(if: always()) && (...)" or "(${{ always() }}) && (...)"), which will later break job rendering. Normalize/unwrap the existing value (and keep the stored value as a plain expression) before combining.
				if existing, ok := frontmatter["if"].(string); ok && existing != "" {
					frontmatter["if"] = "(" + existing + ") && (" + condition + ")"
				} else {
					frontmatter["if"] = condition
				}
  • Files reviewed: 9/9 changed files
  • Comments generated: 2

Comment thread pkg/workflow/schedule_preprocessing.go Outdated
Comment on lines +171 to +175
// Propagate any job-level conditions into the frontmatter if: field
if len(triggerIR.Conditions) > 0 {
condition := strings.Join(triggerIR.Conditions, " && ")
schedulePreprocessingLog.Printf("Setting if condition from trigger shorthand: %s", condition)
// Merge with any existing if condition
Copy link

Copilot AI Apr 26, 2026

Choose a reason for hiding this comment

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

New behavior: preprocessing now derives a job-level condition from trigger shorthand and writes it into frontmatter["if"]. There are extensive tests for schedule preprocessing, but none appear to cover this condition-propagation path (including merging with an existing if). Adding unit tests here would help prevent regressions, especially around valid input forms like "if: ..." and "${{ ... }}".

This issue also appears on line 176 of the same file.

Copilot uses AI. Check for mistakes.
Comment on lines +719 to +723
frontmatterLog.Printf("Merging deployment_status state condition: %s", stateCondition)
if ifExpr != "" {
ifExpr = "(" + ifExpr + ") && (" + stateCondition + ")"
} else {
ifExpr = stateCondition
Copy link

Copilot AI Apr 26, 2026

Choose a reason for hiding this comment

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

extractIfCondition() now merges an on.deployment_status.state-derived condition with the existing frontmatter if expression. If the existing if was provided as a wrapped GitHub Actions expression ("${{ ... }}"), the merge produces an invalid nested expression like "(${{ ... }}) && (...)". Consider unwrapping both sides (strip "${{ }}" and any leading "if: ") before combining, and return a single valid expression string.

Copilot uses AI. Check for mistakes.
…pilation

Draft ADR generated by the Design Decision Gate workflow for PR #28549.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

Commit pushed: 161844b

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions
Copy link
Copy Markdown
Contributor

🏗️ Design Decision Gate — ADR Required

This PR makes significant changes to core business logic (232 new lines in business logic directories, threshold: 100) but does not have a linked Architecture Decision Record (ADR).

AI has analyzed the PR diff and generated a draft ADR to help you get started:

📄 Draft ADR: docs/adr/28549-compile-deployment-status-state-filter-into-if-condition.md

What to do next

  1. Review the draft ADR committed to your branch — it was generated from the PR diff
  2. Complete the missing sections — add context the AI couldn't infer, refine the decision rationale, and list real alternatives you considered
  3. Commit the finalized ADR to docs/adr/ on your branch
  4. Reference the ADR in this PR body by adding a line such as:

    ADR: ADR-28549: Compile deployment_status.state Filter into GitHub Actions if: Condition

Once an ADR is linked in the PR body, this gate will re-run and verify the implementation matches the decision.

Draft ADR Summary

The draft ADR captures the following:

  • Decision: Add a state: field to the deployment_status trigger in the gh-aw DSL. The compiler reads it and synthesises a GitHub Actions if: expression (github.event.deployment_status.state == 'error' || ...), merging it into the activation job. Natural-language shorthands ("deployment failed", "deployment failed or error") expand to the same conditions.
  • Driver: GitHub's deployment_status trigger fires for all states; without compiler support, filtering requires hand-written if: conditions that are inconsistent with the DSL abstraction and invisible to natural-language workflow generation.
  • Alternatives considered: (1) Document the pattern with manual if: conditions only — rejected because it keeps the filtering burden on authors and prevents NL shorthands; (2) Runtime filtering inside the agent prompt — rejected because it wastes tokens on every non-failure event and puts correctness-critical logic in LLM output.
  • Key trade-offs: The hardcoded state enum must stay in sync with the GitHub API; each new semantic trigger sub-field adds compiler maintenance burden.

Why ADRs Matter

"AI made me procrastinate on key design decisions. Because refactoring was cheap, I could always say 'I'll deal with this later.' Deferring decisions corroded my ability to think clearly."

ADRs create a searchable, permanent record of why the codebase looks the way it does. Future contributors (and your future self) will thank you.


📋 Michael Nygard ADR Format Reference

An ADR must contain these four sections to be considered complete:

  • Context — What is the problem? What forces are at play?
  • Decision — What did you decide? Why?
  • Alternatives Considered — What else could have been done?
  • Consequences — What are the trade-offs (positive and negative)?

All ADRs are stored in docs/adr/ as Markdown files numbered by PR number (e.g., 28549-compile-deployment-status-state-filter-into-if-condition.md for PR #28549).

🔒 This PR cannot merge until an ADR is linked in the PR body.

References: §24955643779

🏗️ ADR gate enforced by Design Decision Gate 🏗️ · ● 124.2K ·

@pelikhan
Copy link
Copy Markdown
Collaborator

@copilot review all comments

…n propagation tests

- In extractIfCondition(): strip ${{ }} wrapper from existing frontmatter
  if: value before merging with deployment_status.state condition, preventing
  invalid nested expressions like (${{ expr }}) && (...)
- In schedule_preprocessing.go: strip ${{ }} wrapper from existing if:
  value before merging with TriggerIR.Conditions
- Keep extractExpressionFromIfString() unchanged (used for custom jobs
  where ${{ }} must be preserved as-is for GitHub Actions)
- Add TestTriggerShorthandConditionPropagation tests covering: bare if,
  ${{ }}-wrapped if, and multi-state deployment trigger scenarios

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/f74cc100-16fb-43b2-a216-d436931d533b

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 26, 2026

@copilot review all comments

Both review comments addressed in 71dd7ab:

  1. ${{ }} nesting bug (frontmatter_extraction_yaml.go:719-723): extractIfCondition() now calls stripExpressionWrapper() on the existing if: value before merging, so if: ${{ github.actor != 'bot' }} + state condition produces (github.actor != 'bot') && (state == 'failure') instead of (${{ ... }}) && (...). The fix is kept targeted to extractIfCondition to avoid breaking custom job if: handling which must preserve ${{ }} wrappers.

  2. Missing tests (schedule_preprocessing.go:171-175): Added TestTriggerShorthandConditionPropagation in schedule_preprocessing_test.go covering: bare condition, ${{ }}-wrapped condition, single-state deployment trigger, multi-state trigger, and merging with existing if: in all forms.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw bash /usr/lib/git-cor--show-toplevel git rev-�� --show-toplevel /usr/lib/git-core/git /usr/bin/git run --auto /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --end-of-options blob /usr/bin/git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv bin/bash git /usr/bin/git ch git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git /ref/tags/v9 git sv git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv -bool -buildtags /usr/bin/git -errorsas -ifaceassert -nilfunc git rev-�� --show-toplevel -tests /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv get --global git http.https://gitgit (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel x_amd64/vet /usr/bin/git infocmp _cod�� xterm-color git ache/node/24.14.1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel infocmp /usr/bin/git git _lab�� --show-toplevel git ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet --show-toplevel git /usr/bin/git ache/go/1.25.8/x64/pkg/tool/linux_amd64/vet (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --abbrev-ref HEAD /opt/hostedtoolcache/go/1.25.8/x--show-toplevel git rev-�� --show-toplevel bash /usr/bin/git --noprofile (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel du /usr/bin/git git _cod�� --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel /opt/hostedtoolc/tmp/gh-aw-test-runs/20260426-115902-12698/test-patch-priority-16183�� /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel bash /usr/lib/git-cor--show-toplevel git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel node /usr/bin/cut git rev-�� --show-toplevel cut /usr/bin/git /usr/bin/git git /usr/bin/git git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv HEAD (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv t git /opt/hostedtoolcache/node/24.14.1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv ache/node/24.14.--show-toplevel git /snap/bin/bash --show-toplevel git /usr/bin/git cho &#34;��� Warning: .github/aw/actions-lock.json does not exist yet&#34;; \ fi --no�� --noprofile git /home/REDACTED/.config/composer/vendor/bin/bash --show-toplevel git /usr/bin/git bash (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv GOSUMDB GOWORK 64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c npx prettier --cGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go sh (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv &#34;prettier&#34; --cheGOINSECURE GOPROXY $name) { hasDiscussionsEnabled } } GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGO111MODULE -V=f�� /usr/bin/gh node 64/bin/go --write ../../../**/*.js-C 64/bin/go go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv k/gh-aw/gh-aw/cmGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGOPROXY -o /tmp/go-build822GOSUMDB -trimpath 64/bin/go -p github.com/githuapi -lang=go1.25 go (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv HEAD (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv 1/x64/bin/bash git /opt/hostedtoolcache/node/24.14.1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv ache/node/24.14.--show-toplevel git /usr/bin/gcc --show-toplevel git /usr/bin/git gcc -###�� -x c /usr/bin/git - git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git pload-artifact/ggit git bject.type] | @t--show-toplevel git rev-�� --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git 4354174582e4bc83git git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel bash /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel runc /usr/bin/git /usr/bin/git node /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel bash /usr/bin/git git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --local credential.usernjs/fuzz_mentions_harness.cjs sh git rev-�� --show-toplevel git /usr/bin/infocmp --local gpg.program /home/REDACTED/.local/bin/bash infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel git /opt/hostedtoolcache/node/24.14.--show-toplevel git rev-�� --show-toplevel node /usr/bin/git it git /opt/hostedtoolc--noprofile git (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --local credential.usernjs/fuzz_mentions_harness.cjs nfig/composer/vendor/bin/bash git rev-�� --show-toplevel git /usr/bin/infocmp ATH=&#34;$(find &#34;/tmnode commit.gpgsign /home/REDACTED/.cargo/bin/bash infocmp (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv pkg/actionpins/data/action_pins.json; \ echo &#34;��� Action pins synced successfully&#34;; \ else \ echo &#34;��� Warning: .github/aw/actions-lock.json does not exist yet&#34;; \ fi git /usr/bin/git --show-toplevel git /opt/hostedtoolcache/node/24.14.--show-toplevel git rev-�� --show-toplevel node /usr/bin/git 64/pkg/tool/linubash git /opt/hostedtoolc--noprofile git (http block)

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

@pelikhan
Copy link
Copy Markdown
Collaborator

@copilot

  • make sure it can be combined with other events like workflow_dispatch
  • the state should be stored in the agent context for workflow_call support

…ent context

- Wrap state condition with `github.event_name != 'deployment_status' || (...)`
  so workflows combining deployment_status + workflow_dispatch work correctly:
  workflow_dispatch triggers pass through while deployment_status events are
  still filtered by state
- Add `deployment_state` field to `buildAwContext()` (aw_context.cjs):
  captures `payload.deployment_status.state` when event is deployment_status,
  empty string otherwise — propagated to child workflows via aw_context for
  workflow_call support
- Add `deployment_state` to `generate_aw_info.cjs` awInfo so the primary
  workflow's agent context includes the triggering state
- Add `github.event.deployment_status.state` to JS ALLOWED_EXPRESSIONS in
  runtime_import.cjs (was in Go constants but missing from JS list)
- Update trigger_parser_test.go and schedule_preprocessing_test.go to expect
  the new guarded condition format

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/724d18f3-0d89-46d4-9474-c59fcaf090af

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 26, 2026

@copilot

  • make sure it can be combined with other events like workflow_dispatch...

Done in f81c851:

  1. workflow_dispatch combination: The state condition is now guarded with github.event_name != 'deployment_status' || (state_check). When triggered by workflow_dispatch (or any other event), the guard evaluates to true and the activation job runs normally. Only deployment_status events are filtered by state:

    if: github.event_name != 'deployment_status' || (github.event.deployment_status.state == 'error' || github.event.deployment_status.state == 'failure')
  2. Agent context for workflow_call: deployment_state is now stored in two places:

    • generate_aw_info.cjs: added deployment_state to awInfo from ctx.payload?.deployment_status?.state so the primary workflow's agent sees it in aw_info.json
    • aw_context.cjs's buildAwContext(): added deployment_state field so it propagates to child workflows via the aw_context input when the workflow calls other workflows

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • https://api.github.com/graphql
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw /opt/hostedtoolcrev-parse /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git HEAD git /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh /usr/bin/gh api graphql -f query=query($owner: String!, $name: String!) { repository(owner: $owner, name: $name) { hasDiscussionsEnabled } } -f owner=github -f name=gh-aw git 1/x64/bin/node git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git 1/x64/bin/node git (http block)
  • https://api.github.com/repos/actions/ai-inference/git/ref/tags/v1
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv /home/REDACTED/wor--show-toplevel git /usr/bin/git --show-toplevel bash /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel ache/go/1.25.8/x/opt/hostedtoolcache/node/24.14.1/x64/bin/npm /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/ai-inference/git/ref/tags/v1 --jq [.object.sha, .object.type] | @tsv --check **/*.cjs /usr/bin/git **/*.json --ignore-path ../../../.pretti--show-toplevel git rev-�� --show-toplevel git /usr/bin/git --show-toplevel node /sh git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v3
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --local committer.name cal/bin/bash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git k/gh-aw/node_modules/.bin/sh --show-toplevel git /usr/bin/git node js/f�� te &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pret.prettierignore git /opt/hostedtoolcache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git node (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v5
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv commit} (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v5 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git get --local bash git rev-�� --show-toplevel git /usr/bin/git submodules | heagit --local 86_64/bash git (http block)
  • https://api.github.com/repos/actions/checkout/git/ref/tags/v6
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv rkflow-example --local /usr/local/sbin/git gpg.program (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/checkout/git/ref/tags/v6 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel git /usr/bin/git ache/go/1.25.8/x64/pkg/tool/linux_amd64/asm 1/x6�� --show-toplevel git nfig/composer/vendor/bin/sh --show-toplevel git /usr/bin/git node (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v8
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel ./gh-aw /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v8 --jq [.object.sha, .object.type] | @tsv --show-toplevel gh /usr/bin/git h ../../../.pretbash --jq 1/x64/bin/node git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git 1/x64/bin/node git (http block)
  • https://api.github.com/repos/actions/github-script/git/ref/tags/v9
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/github-script/git/ref/tags/v9 --jq [.object.sha, .object.type] | @tsv bash git /opt/hostedtoolcache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git node js/f�� tnet/tools/bash git /opt/hostedtoolcache/node/24.14.1/x64/bin/node --show-toplevel git ache/go/1.25.8/x--show-toplevel node (http block)
  • https://api.github.com/repos/actions/setup-go/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv ptables git /opt/hostedtoolcache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git node js/f�� ache/go/1.25.8/x--show-toplevel git /usr/bin/gcc --show-toplevel git /usr/bin/git gcc (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-go/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv &#34;prettier&#34; --write &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.prettierignore git /opt/hostedtoolcache/node/24.14.1/x64/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/n--show-toplevel --show-toplevel git /usr/bin/git node /opt�� prettier --check /home/REDACTED/.config/composer/vendor/bin/bash **/*.ts **/*.json --ignore-path bash (http block)
  • https://api.github.com/repos/actions/setup-node/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv rkflow-example st.cjs k/_temp/uv-python-dir/bash gpg.program (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/setup-node/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
  • https://api.github.com/repos/actions/upload-artifact/git/ref/tags/v4
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv get --local /usr/local/.ghcup/bin/git user.email (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/actions/upload-artifact/git/ref/tags/v4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git bin/sh --show-toplevel git /usr/bin/git git _out�� */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pret.prettierignore git ache/go/1.25.8/x64/pkg/tool/linux_amd64/compile --show-toplevel git (http block)
  • https://api.github.com/repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv GOSUMDB GOWORK 64/bin/go GOINSECURE GOMOD GOMODCACHE sh -c npx prettier --cGOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK run-script/lib/n-json node (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv che/go-build/67/GOINSECURE GOPROXY $name) { hasDiscussionsEnabled } } GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGO111MODULE -o /tmp/go-build332GOINSECURE -trimpath 64/bin/go -p main -lang=go1.25 go (http block)
    • Triggering command: /usr/bin/gh gh api /repos/astral-sh/setup-uv/git/ref/tags/eac588ad8def6316056a12d4907a9d4d84ff7a3b --jq [.object.sha, .object.type] | @tsv che/go-build/61/GOINSECURE GOPROXY 64/bin/go GOSUMDB GOWORK 64/bin/go /opt/hostedtoolcGOPROXY -o /tmp/go-build332GOSUMDB -trimpath 64/bin/go -p github.com/githuapi -lang=go1.25 go (http block)
  • https://api.github.com/repos/github/gh-aw
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw --jq .default_branch -json GO111MODULE 64/bin/go GOINSECURE GOMOD GOMODCACHE go env -json GO111MODULE ache/go/1.25.8/x64/bin/go GOINSECURE GOMOD GOMODCACHE go (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v0.1.2
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv 64/pkg/tool/linu--show-toplevel git /opt/hostedtoolcache/node/24.14.1/x64/bin/node --show-toplevel 64/pkg/tool/linurev-parse /usr/bin/git node js/f�� sh git /snap/bin/bash --show-toplevel git bin/node bash (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v0.1.2 --jq [.object.sha, .object.type] | @tsv &#34;prettier&#34; --write &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pret.prettierignore git /usr/local/bin/sh --show-toplevel 410816/b001/workrev-parse /usr/bin/git sh -c npx prettier --check &#39;**/*.cjs&#39; &#39;**/*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.pr--ignore-path git /opt/hostedtoolcache/go/1.25.8/x64/bin/node --show-toplevel node /usr/bin/git node (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv get --local ache/uv/0.11.7/x86_64/bash committer.name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel git /usr/bin/git git _out�� */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.prettierignore git bash --show-toplevel git /usr/bin/git node (http block)
  • https://api.github.com/repos/github/gh-aw-actions/git/ref/tags/v1.2.3
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv get --local /home/REDACTED/.config/composer/vendor/bin/git committer.name (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git 1/x64/bin/node --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw-actions/git/ref/tags/v1.2.3 --jq [.object.sha, .object.type] | @tsv --show-toplevel git ache/node/24.14.1/x64/bin/node --show-toplevel git 86_64/node git _out�� */*.ts&#39; &#39;**/*.json&#39; --ignore-path ../../../.prettierignore git p/bin/bash --show-toplevel /usr/bin/gh /usr/bin/git node (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v0.47.4
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel git /usr/bin/git --show-toplevel grep /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v0.47.4 --jq [.object.sha, .object.type] | @tsv --show-toplevel mkdir /usr/bin/git re --log-level=egit git modules/@npmcli/--show-toplevel git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git ode_modules/.bin/tmp/gh-aw/aw-feature-branch.patch git (http block)
  • https://api.github.com/repos/github/gh-aw/git/ref/tags/v1.0.0
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel bash /usr/bin/git --noprofile (http block)
    • Triggering command: /usr/bin/gh gh api /repos/github/gh-aw/git/ref/tags/v1.0.0 --jq [.object.sha, .object.type] | @tsv --show-toplevel node /usr/bin/git rgo/bin/bash git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • https://api.github.com/repos/nonexistent/action/git/ref/tags/v999.999.999
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv --show-toplevel e/git-remote-https /usr/bin/git om/github/gh-aw (http block)
    • Triggering command: /usr/bin/gh gh api /repos/nonexistent/action/git/ref/tags/v999.999.999 --jq [.object.sha, .object.type] | @tsv --show-toplevel node de .cfg git /usr/bin/git git rev-�� --show-toplevel git /usr/bin/git --show-toplevel git /usr/bin/git git (http block)
  • invalid.example.invalid
    • Triggering command: /usr/lib/git-core/git-remote-https /usr/lib/git-core/git-remote-https origin https://invalid.example.invalid/nonexistent-repo.git git conf�� --local --get bin/git user.name Test User de_modules/.bin/-u git comm�� -m Initial commit odules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/git --bare --initial-branchadd /git git (dns block)

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

@pelikhan
Copy link
Copy Markdown
Collaborator

@copilot store in otlp otel attributes

Add gh-aw.deployment.state attribute to both the setup and conclusion OTLP
spans in send_otlp_span.cjs. The value is resolved from:
1. GH_AW_GITHUB_EVENT_DEPLOYMENT_STATUS_STATE env var (set from
   ${{ github.event.deployment_status.state }} in the compiled workflow)
2. awInfo.deployment_state (populated by generate_aw_info.cjs for primary
   workflows triggered by deployment_status events)
3. awInfo.context.deployment_state (propagated via aw_context for called
   workflows)

Agent-Logs-Url: https://github.com/github/gh-aw/sessions/7f488fa9-ba2c-4c94-808f-db26d895a6b8

Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copy link
Copy Markdown
Contributor Author

Copilot AI commented Apr 26, 2026

@copilot store in otlp otel attributes

Done in f7c3d40. gh-aw.deployment.state is now added as an attribute in both the setup and conclusion OTLP spans in send_otlp_span.cjs. The value is resolved in priority order:

  1. GH_AW_GITHUB_EVENT_DEPLOYMENT_STATUS_STATE env var (set from ${{ github.event.deployment_status.state }} in the compiled lock file)
  2. awInfo.deployment_state (written to aw_info.json by generate_aw_info.cjs for primary workflows)
  3. awInfo.context.deployment_state (propagated via aw_context for called workflows)

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • invalid.example.invalid
    • Triggering command: /usr/lib/git-core/git-remote-https /usr/lib/git-core/git-remote-https origin https://invalid.example.invalid/nonexistent-repo.git git conf�� user.email test@example.com ode_modules/.bin/git ental-9uVEqV merge-test-branccheckout git git init�� --bare iff.tmp option-test bin/git git tions/setup/nodeagent-change.txt git (dns block)

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

@pelikhan pelikhan merged commit af26e46 into main Apr 26, 2026
@pelikhan pelikhan deleted the copilot/add-deployment-status-workflow-example branch April 26, 2026 16:13
github-actions Bot added a commit that referenced this pull request Apr 27, 2026
Add definition for the deployment_status trigger, including the state
filter field introduced in #28549.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
github-actions Bot added a commit that referenced this pull request Apr 27, 2026
- Add deployment_status trigger section to triggers.md (from #28549)
- Add deployment state filter (state:) and NL shorthands
- Add deployment incident monitor example
- Update Playwright visual regression example with dev server setup pattern (from #28550)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[plan] Add deployment_status example workflow for DevOps incident automation

4 participants