From 2e07f408f21219bd445cfa39a695eca501e2102a Mon Sep 17 00:00:00 2001 From: William Easton Date: Sun, 8 Mar 2026 03:14:14 -0500 Subject: [PATCH 1/4] Add fallback issue resolution for remediation PR handoff. Resolve the created issue number from run outputs first, then fall back to searching issues by current run URL in body so chained create-pr jobs still run when created_issue_number output is unexpectedly empty. --- .github/workflows/trigger-docs-patrol.yml | 30 +++++++++++++++++-- .../trigger-framework-best-practices.yml | 30 +++++++++++++++++-- .github/workflows/trigger-text-auditor.yml | 30 +++++++++++++++++-- scripts/dogfood.sh | 30 +++++++++++++++++-- 4 files changed, 108 insertions(+), 12 deletions(-) diff --git a/.github/workflows/trigger-docs-patrol.yml b/.github/workflows/trigger-docs-patrol.yml index d8a4edc0..577b553c 100644 --- a/.github/workflows/trigger-docs-patrol.yml +++ b/.github/workflows/trigger-docs-patrol.yml @@ -17,12 +17,36 @@ jobs: secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} - create_pr_from_issue: + resolve_created_issue: needs: run - if: ${{ needs.run.outputs.created_issue_number != '' }} + runs-on: ubuntu-slim + outputs: + created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + steps: + - name: Resolve created issue number + id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + run: | + number="$CREATED_ISSUE_NUMBER" + if [ -z "$number" ]; then + number="$(gh issue list \ + --repo "$REPOSITORY" \ + --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ + --json number,createdAt \ + --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" + fi + echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + + create_pr_from_issue: + needs: resolve_created_issue + if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.run.outputs.created_issue_number }} + target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} diff --git a/.github/workflows/trigger-framework-best-practices.yml b/.github/workflows/trigger-framework-best-practices.yml index 40792a4f..0f14296e 100644 --- a/.github/workflows/trigger-framework-best-practices.yml +++ b/.github/workflows/trigger-framework-best-practices.yml @@ -17,12 +17,36 @@ jobs: secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} - create_pr_from_issue: + resolve_created_issue: needs: run - if: ${{ needs.run.outputs.created_issue_number != '' }} + runs-on: ubuntu-slim + outputs: + created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + steps: + - name: Resolve created issue number + id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + run: | + number="$CREATED_ISSUE_NUMBER" + if [ -z "$number" ]; then + number="$(gh issue list \ + --repo "$REPOSITORY" \ + --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ + --json number,createdAt \ + --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" + fi + echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + + create_pr_from_issue: + needs: resolve_created_issue + if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.run.outputs.created_issue_number }} + target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} diff --git a/.github/workflows/trigger-text-auditor.yml b/.github/workflows/trigger-text-auditor.yml index f3cd874d..6b82dbc5 100644 --- a/.github/workflows/trigger-text-auditor.yml +++ b/.github/workflows/trigger-text-auditor.yml @@ -23,12 +23,36 @@ jobs: secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} - create_pr_from_issue: + resolve_created_issue: needs: run - if: ${{ needs.run.outputs.created_issue_number != '' }} + runs-on: ubuntu-slim + outputs: + created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + steps: + - name: Resolve created issue number + id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + run: | + number="$CREATED_ISSUE_NUMBER" + if [ -z "$number" ]; then + number="$(gh issue list \ + --repo "$REPOSITORY" \ + --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ + --json number,createdAt \ + --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" + fi + echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + + create_pr_from_issue: + needs: resolve_created_issue + if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.run.outputs.created_issue_number }} + target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} diff --git a/scripts/dogfood.sh b/scripts/dogfood.sh index 6b3bddf2..dbe775cc 100755 --- a/scripts/dogfood.sh +++ b/scripts/dogfood.sh @@ -115,12 +115,36 @@ for f in gh-agent-workflows/*/example.yml; do cat >> "$target" <<'EOF' - create_pr_from_issue: + resolve_created_issue: needs: run - if: ${{ needs.run.outputs.created_issue_number != '' }} + runs-on: ubuntu-slim + outputs: + created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + steps: + - name: Resolve created issue number + id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + run: | + number="$CREATED_ISSUE_NUMBER" + if [ -z "$number" ]; then + number="$(gh issue list \ + --repo "$REPOSITORY" \ + --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ + --json number,createdAt \ + --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" + fi + echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + + create_pr_from_issue: + needs: resolve_created_issue + if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.run.outputs.created_issue_number }} + target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} From cc0ade5e470a8645773e966567e50576b0449f88 Mon Sep 17 00:00:00 2001 From: William Easton Date: Sun, 8 Mar 2026 03:17:46 -0500 Subject: [PATCH 2/4] Use safe-output artifact as source of truth for remediation handoff. Replace issue-search fallback with direct extraction of create_issue number from same-run safe-output-items artifact, so issue-to-PR chaining relies only on deterministic workflow outputs. --- .github/workflows/trigger-docs-patrol.yml | 20 +++------ .../trigger-framework-best-practices.yml | 20 +++------ .github/workflows/trigger-text-auditor.yml | 20 +++------ scripts/dogfood.sh | 43 ++++++++++++------- 4 files changed, 49 insertions(+), 54 deletions(-) diff --git a/.github/workflows/trigger-docs-patrol.yml b/.github/workflows/trigger-docs-patrol.yml index 577b553c..06dfad1e 100644 --- a/.github/workflows/trigger-docs-patrol.yml +++ b/.github/workflows/trigger-docs-patrol.yml @@ -11,6 +11,7 @@ permissions: issues: write pull-requests: write + actions: read jobs: run: uses: ./.github/workflows/gh-aw-docs-patrol.lock.yml @@ -23,22 +24,15 @@ jobs: outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} steps: + - name: Download safe output items + uses: actions/download-artifact@v4 + with: + name: safe-output-items + path: /tmp/safe-output-items - name: Resolve created issue number id: resolve - env: - CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPOSITORY: ${{ github.repository }} - RUN_ID: ${{ github.run_id }} run: | - number="$CREATED_ISSUE_NUMBER" - if [ -z "$number" ]; then - number="$(gh issue list \ - --repo "$REPOSITORY" \ - --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ - --json number,createdAt \ - --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" - fi + number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" create_pr_from_issue: diff --git a/.github/workflows/trigger-framework-best-practices.yml b/.github/workflows/trigger-framework-best-practices.yml index 0f14296e..3683a431 100644 --- a/.github/workflows/trigger-framework-best-practices.yml +++ b/.github/workflows/trigger-framework-best-practices.yml @@ -11,6 +11,7 @@ permissions: issues: write pull-requests: write + actions: read jobs: run: uses: ./.github/workflows/gh-aw-framework-best-practices.lock.yml @@ -23,22 +24,15 @@ jobs: outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} steps: + - name: Download safe output items + uses: actions/download-artifact@v4 + with: + name: safe-output-items + path: /tmp/safe-output-items - name: Resolve created issue number id: resolve - env: - CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPOSITORY: ${{ github.repository }} - RUN_ID: ${{ github.run_id }} run: | - number="$CREATED_ISSUE_NUMBER" - if [ -z "$number" ]; then - number="$(gh issue list \ - --repo "$REPOSITORY" \ - --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ - --json number,createdAt \ - --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" - fi + number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" create_pr_from_issue: diff --git a/.github/workflows/trigger-text-auditor.yml b/.github/workflows/trigger-text-auditor.yml index 6b82dbc5..bbb51f75 100644 --- a/.github/workflows/trigger-text-auditor.yml +++ b/.github/workflows/trigger-text-auditor.yml @@ -11,6 +11,7 @@ permissions: issues: write pull-requests: write + actions: read jobs: run: uses: ./.github/workflows/gh-aw-text-auditor.lock.yml @@ -29,22 +30,15 @@ jobs: outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} steps: + - name: Download safe output items + uses: actions/download-artifact@v4 + with: + name: safe-output-items + path: /tmp/safe-output-items - name: Resolve created issue number id: resolve - env: - CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPOSITORY: ${{ github.repository }} - RUN_ID: ${{ github.run_id }} run: | - number="$CREATED_ISSUE_NUMBER" - if [ -z "$number" ]; then - number="$(gh issue list \ - --repo "$REPOSITORY" \ - --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ - --json number,createdAt \ - --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" - fi + number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" create_pr_from_issue: diff --git a/scripts/dogfood.sh b/scripts/dogfood.sh index dbe775cc..b17d2dfb 100755 --- a/scripts/dogfood.sh +++ b/scripts/dogfood.sh @@ -110,8 +110,28 @@ for f in gh-agent-workflows/*/example.yml; do [[ "$dir" == "$remediation" ]] && add_remediation=true && break done if [[ "$add_remediation" == "true" ]]; then - # Ensure permissions allow downstream PR creation job. - sed -E 's/^([[:space:]]*contents: )read$/\1write/; s/^([[:space:]]*pull-requests: )read$/\1write/' "$target" > "$target.tmp" && mv "$target.tmp" "$target" + # Ensure permissions allow downstream PR creation job and artifact reads. + awk ' + BEGIN { in_permissions=0; have_actions=0 } + /^permissions:/ { in_permissions=1; print; next } + in_permissions { + if (/^jobs:/) { + if (!have_actions) print " actions: read" + in_permissions=0 + print + next + } + if ($0 ~ /^ contents: /) sub(/read$/, "write") + if ($0 ~ /^ pull-requests: /) sub(/read$/, "write") + if ($0 ~ /^ actions: /) { + if ($0 ~ /none$/) sub(/none$/, "read") + have_actions=1 + } + print + next + } + { print } + ' "$target" > "$target.tmp" && mv "$target.tmp" "$target" cat >> "$target" <<'EOF' @@ -121,22 +141,15 @@ for f in gh-agent-workflows/*/example.yml; do outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} steps: + - name: Download safe output items + uses: actions/download-artifact@v4 + with: + name: safe-output-items + path: /tmp/safe-output-items - name: Resolve created issue number id: resolve - env: - CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - REPOSITORY: ${{ github.repository }} - RUN_ID: ${{ github.run_id }} run: | - number="$CREATED_ISSUE_NUMBER" - if [ -z "$number" ]; then - number="$(gh issue list \ - --repo "$REPOSITORY" \ - --search "in:body \"actions/runs/$RUN_ID\" author:github-actions[bot] is:issue" \ - --json number,createdAt \ - --jq 'sort_by(.createdAt) | reverse | .[0].number // empty')" - fi + number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" create_pr_from_issue: From 861b0ade25144bcca58f883af574b6f2afff722e Mon Sep 17 00:00:00 2001 From: William Easton Date: Sun, 8 Mar 2026 13:36:21 -0500 Subject: [PATCH 3/4] Expose issue number and URL outputs in remediation handoff job. Add created_issue_url alongside created_issue_number in generated resolve_created_issue outputs so downstream jobs can consume stable issue metadata directly from workflow outputs. --- .github/workflows/trigger-docs-patrol.yml | 3 +++ .github/workflows/trigger-framework-best-practices.yml | 3 +++ .github/workflows/trigger-text-auditor.yml | 3 +++ scripts/dogfood.sh | 3 +++ 4 files changed, 12 insertions(+) diff --git a/.github/workflows/trigger-docs-patrol.yml b/.github/workflows/trigger-docs-patrol.yml index 06dfad1e..6db0f086 100644 --- a/.github/workflows/trigger-docs-patrol.yml +++ b/.github/workflows/trigger-docs-patrol.yml @@ -23,6 +23,7 @@ jobs: runs-on: ubuntu-slim outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - name: Download safe output items uses: actions/download-artifact@v4 @@ -33,7 +34,9 @@ jobs: id: resolve run: | number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" + url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: needs: resolve_created_issue diff --git a/.github/workflows/trigger-framework-best-practices.yml b/.github/workflows/trigger-framework-best-practices.yml index 3683a431..636929ba 100644 --- a/.github/workflows/trigger-framework-best-practices.yml +++ b/.github/workflows/trigger-framework-best-practices.yml @@ -23,6 +23,7 @@ jobs: runs-on: ubuntu-slim outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - name: Download safe output items uses: actions/download-artifact@v4 @@ -33,7 +34,9 @@ jobs: id: resolve run: | number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" + url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: needs: resolve_created_issue diff --git a/.github/workflows/trigger-text-auditor.yml b/.github/workflows/trigger-text-auditor.yml index bbb51f75..87278a21 100644 --- a/.github/workflows/trigger-text-auditor.yml +++ b/.github/workflows/trigger-text-auditor.yml @@ -29,6 +29,7 @@ jobs: runs-on: ubuntu-slim outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - name: Download safe output items uses: actions/download-artifact@v4 @@ -39,7 +40,9 @@ jobs: id: resolve run: | number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" + url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: needs: resolve_created_issue diff --git a/scripts/dogfood.sh b/scripts/dogfood.sh index b17d2dfb..4ec7c956 100755 --- a/scripts/dogfood.sh +++ b/scripts/dogfood.sh @@ -140,6 +140,7 @@ for f in gh-agent-workflows/*/example.yml; do runs-on: ubuntu-slim outputs: created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} + created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - name: Download safe output items uses: actions/download-artifact@v4 @@ -150,7 +151,9 @@ for f in gh-agent-workflows/*/example.yml; do id: resolve run: | number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" + url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: needs: resolve_created_issue From ff7fbc92738c75de05c84bf01892f598584ea9d7 Mon Sep 17 00:00:00 2001 From: William Easton Date: Sun, 8 Mar 2026 13:43:55 -0500 Subject: [PATCH 4/4] Use run output as issue-number source for remediation chaining. Keep created_issue_number sourced from the originating workflow output and pass it into resolve_created_issue only for URL enrichment, avoiding duplicate number propagation through the resolver job. --- .github/workflows/trigger-docs-patrol.yml | 24 +++++++++---------- .../trigger-framework-best-practices.yml | 24 +++++++++---------- .github/workflows/trigger-text-auditor.yml | 24 +++++++++---------- scripts/dogfood.sh | 24 +++++++++---------- 4 files changed, 48 insertions(+), 48 deletions(-) diff --git a/.github/workflows/trigger-docs-patrol.yml b/.github/workflows/trigger-docs-patrol.yml index 6db0f086..a8ef1646 100644 --- a/.github/workflows/trigger-docs-patrol.yml +++ b/.github/workflows/trigger-docs-patrol.yml @@ -22,28 +22,28 @@ jobs: needs: run runs-on: ubuntu-slim outputs: - created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - - name: Download safe output items - uses: actions/download-artifact@v4 - with: - name: safe-output-items - path: /tmp/safe-output-items - name: Resolve created issue number id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} run: | - number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" - url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" - echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + number="$CREATED_ISSUE_NUMBER" + url="" + if [ -n "$number" ]; then + url="$(gh issue view "$number" --repo "$REPOSITORY" --json url --jq '.url')" + fi echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: - needs: resolve_created_issue - if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} + needs: [run, resolve_created_issue] + if: ${{ needs.run.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} + target-issue-number: ${{ needs.run.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} diff --git a/.github/workflows/trigger-framework-best-practices.yml b/.github/workflows/trigger-framework-best-practices.yml index 636929ba..8bc1736a 100644 --- a/.github/workflows/trigger-framework-best-practices.yml +++ b/.github/workflows/trigger-framework-best-practices.yml @@ -22,28 +22,28 @@ jobs: needs: run runs-on: ubuntu-slim outputs: - created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - - name: Download safe output items - uses: actions/download-artifact@v4 - with: - name: safe-output-items - path: /tmp/safe-output-items - name: Resolve created issue number id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} run: | - number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" - url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" - echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + number="$CREATED_ISSUE_NUMBER" + url="" + if [ -n "$number" ]; then + url="$(gh issue view "$number" --repo "$REPOSITORY" --json url --jq '.url')" + fi echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: - needs: resolve_created_issue - if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} + needs: [run, resolve_created_issue] + if: ${{ needs.run.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} + target-issue-number: ${{ needs.run.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} diff --git a/.github/workflows/trigger-text-auditor.yml b/.github/workflows/trigger-text-auditor.yml index 87278a21..1b8412c7 100644 --- a/.github/workflows/trigger-text-auditor.yml +++ b/.github/workflows/trigger-text-auditor.yml @@ -28,28 +28,28 @@ jobs: needs: run runs-on: ubuntu-slim outputs: - created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - - name: Download safe output items - uses: actions/download-artifact@v4 - with: - name: safe-output-items - path: /tmp/safe-output-items - name: Resolve created issue number id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} run: | - number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" - url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" - echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + number="$CREATED_ISSUE_NUMBER" + url="" + if [ -n "$number" ]; then + url="$(gh issue view "$number" --repo "$REPOSITORY" --json url --jq '.url')" + fi echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: - needs: resolve_created_issue - if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} + needs: [run, resolve_created_issue] + if: ${{ needs.run.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} + target-issue-number: ${{ needs.run.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }} diff --git a/scripts/dogfood.sh b/scripts/dogfood.sh index 4ec7c956..c3b3d038 100755 --- a/scripts/dogfood.sh +++ b/scripts/dogfood.sh @@ -139,28 +139,28 @@ for f in gh-agent-workflows/*/example.yml; do needs: run runs-on: ubuntu-slim outputs: - created_issue_number: ${{ steps.resolve.outputs.created_issue_number }} created_issue_url: ${{ steps.resolve.outputs.created_issue_url }} steps: - - name: Download safe output items - uses: actions/download-artifact@v4 - with: - name: safe-output-items - path: /tmp/safe-output-items - name: Resolve created issue number id: resolve + env: + CREATED_ISSUE_NUMBER: ${{ needs.run.outputs.created_issue_number }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} run: | - number="$(grep -m1 -oE '"number":[[:space:]]*[0-9]+' /tmp/safe-output-items/safe-output-items.jsonl | tr -cd '0-9' || true)" - url="$(grep -m1 -oE '"url":"[^"]+"' /tmp/safe-output-items/safe-output-items.jsonl | sed -E 's/^"url":"(.*)"$/\1/' || true)" - echo "created_issue_number=$number" >> "$GITHUB_OUTPUT" + number="$CREATED_ISSUE_NUMBER" + url="" + if [ -n "$number" ]; then + url="$(gh issue view "$number" --repo "$REPOSITORY" --json url --jq '.url')" + fi echo "created_issue_url=$url" >> "$GITHUB_OUTPUT" create_pr_from_issue: - needs: resolve_created_issue - if: ${{ needs.resolve_created_issue.outputs.created_issue_number != '' }} + needs: [run, resolve_created_issue] + if: ${{ needs.run.outputs.created_issue_number != '' }} uses: ./.github/workflows/gh-aw-create-pr-from-issue.lock.yml with: - target-issue-number: ${{ needs.resolve_created_issue.outputs.created_issue_number }} + target-issue-number: ${{ needs.run.outputs.created_issue_number }} additional-instructions: "Create a focused pull request that resolves this issue." secrets: COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}