micro--go-micro
cf790048ad
Backstop for the gate: previously loop-triage only fired on Harness (E2E) failures, so a red lint or test on master (e.g. the misspell that slipped past because golangci-lint isn't a required check) produced no fix issue. Now triage watches all the gate workflows. - micro loop: `--ci-workflow` accepts a comma-separated list of workflow names, rendered into the triage workflow_run trigger as a YAML array; the issue names the actual failed workflow via github.event.workflow_run.name. (generic CLI) - go-micro: regenerate loop-triage.yml to watch "Harness (E2E)", "Lint", "Run Tests"; generalize the triage prompt beyond the harness (a lint/test failure on master is a real regression to fix, not a flake to ignore). - Docs: update CONTINUOUS_IMPROVEMENT.md triage description. Note: this is defense-in-depth. The primary fix is making golangci-lint a required status check so red lint can't merge in the first place — that stays with the human (branch protection). Claude-Session: https://claude.ai/code/session_01CmdEY7pYmV5zzwCjNJ4ykL Co-authored-by: Claude <noreply@anthropic.com>
58 行
2.3 KiB
YAML
58 行
2.3 KiB
YAML
name: "Loop: Triage"
|
|
|
|
# Generated by `micro loop init`. The feedback path of the evaluator: when a CI
|
|
# workflow (Harness (E2E), Lint, Run Tests) fails on a non-PR run, dispatch the agent
|
|
# (@codex) with the instruction in .github/loop/prompts/triage.md
|
|
# to root-cause the failure and file scoped fix issues back into the queue — so
|
|
# failures become fixes with no human in the middle. Gated on CODEX_TRIGGER_TOKEN.
|
|
|
|
on:
|
|
workflow_run:
|
|
workflows: ["Harness (E2E)", "Lint", "Run Tests"]
|
|
types: [completed]
|
|
|
|
permissions:
|
|
issues: write
|
|
|
|
concurrency:
|
|
group: loop-triage
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
triage:
|
|
# Only real failures on branch pushes/schedules — not PR-run failures, which
|
|
# the PR author already sees.
|
|
if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.event != 'pull_request' }}
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4 # needed to read the prompt file
|
|
- name: Dispatch triage
|
|
env:
|
|
GH_TOKEN: ${{ secrets.CODEX_TRIGGER_TOKEN || github.token }}
|
|
HAS_TOKEN: ${{ secrets.CODEX_TRIGGER_TOKEN != '' }}
|
|
REPO: ${{ github.repository }}
|
|
RUN_ID: ${{ github.event.workflow_run.id }}
|
|
RUN_URL: ${{ github.event.workflow_run.html_url }}
|
|
WORKFLOW_NAME: ${{ github.event.workflow_run.name }}
|
|
run: |
|
|
if [ "$HAS_TOKEN" != "true" ]; then
|
|
echo "CODEX_TRIGGER_TOKEN is not set — skipping."
|
|
exit 0
|
|
fi
|
|
PROMPT=".github/loop/prompts/triage.md"
|
|
if [ ! -f "$PROMPT" ]; then
|
|
echo "missing $PROMPT — run 'micro loop init'." >&2
|
|
exit 1
|
|
fi
|
|
ISSUE_URL=$(gh issue create --repo "$REPO" \
|
|
--title "Loop: triage failed run $RUN_ID ($WORKFLOW_NAME)" \
|
|
--body "The '$WORKFLOW_NAME' workflow failed on a non-PR run: $RUN_URL")
|
|
ISSUE_NUM="${ISSUE_URL##*/}"
|
|
echo "Opened issue #$ISSUE_NUM — dispatching triage."
|
|
{
|
|
echo "@codex"
|
|
echo
|
|
sed -e '/<!--/,/-->/d' -e "s/__ISSUE__/$ISSUE_NUM/g" -e "s#__RUNURL__#$RUN_URL#g" "$PROMPT"
|
|
} > "$RUNNER_TEMP/loop-body.md"
|
|
gh issue comment "$ISSUE_NUM" --repo "$REPO" --body-file "$RUNNER_TEMP/loop-body.md"
|