Files
2026-07-13 12:28:55 +08:00

77 lines
3.0 KiB
YAML

name: PR Reviewer
on:
pull_request_target:
branches: [dev]
types: [opened, reopened, synchronize, ready_for_review]
permissions:
contents: read
pull-requests: write
concurrency:
group: pr-reviewer-${{ github.event.pull_request.number }}
cancel-in-progress: true
jobs:
review:
if: |
github.repository == 'anomalyco/models.dev' &&
!github.event.pull_request.draft &&
!startsWith(github.event.pull_request.head.ref, 'automation/sync-models-')
runs-on: ubuntu-latest
steps:
- name: Checkout trusted base revision
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
ref: ${{ github.event.pull_request.base.sha }}
persist-credentials: false
- name: Install opencode
run: curl -fsSL https://opencode.ai/install | bash
- name: Prepare pull request context
env:
GH_TOKEN: ${{ github.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
set -euo pipefail
mkdir .pr-review
jq '{
number: .pull_request.number,
title: .pull_request.title,
body: .pull_request.body,
author: .pull_request.user.login,
base: .pull_request.base.ref,
head: .pull_request.head.ref
}' "$GITHUB_EVENT_PATH" > .pr-review/pull-request.json
gh pr diff "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --patch --color never > .pr-review/diff.patch
- name: Run pull request reviewer
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
OPENCODE_PERMISSION: '{"*":"deny","read":"allow","glob":"allow","grep":"allow","external_directory":"deny"}'
run: |
set -euo pipefail
EVENTS_FILE="$RUNNER_TEMP/pr-reviewer-events.jsonl"
RESPONSE_FILE="$RUNNER_TEMP/pr-reviewer-response.md"
echo "RESPONSE_FILE=$RESPONSE_FILE" >> "$GITHUB_ENV"
opencode run --agent pr-reviewer -m opencode/glm-5.2 --format json <<'EOF' | tee "$EVENTS_FILE"
Review this pull request using the trusted reviewer instructions. Start with `.pr-review/pull-request.json`, `.pr-review/diff.patch`, `AGENTS.md`, and the contributing guidance in `README.md`. Read `sync.md`, the reasoning-options audit guide, schema code, and nearby base-revision files when relevant to the changed files. Use only the read, glob, and grep tools. Return only the final review comment in the agent's required output format. Never include progress narration or passed-check summaries.
EOF
if ! jq -ers 'map(select(.type == "text") | .part.text) | last | select(length > 0)' "$EVENTS_FILE" > "$RESPONSE_FILE"; then
echo "Pull request reviewer did not produce a final response." >&2
exit 1
fi
- name: Post review comment
env:
GH_TOKEN: ${{ github.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: gh pr comment "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --body-file "$RESPONSE_FILE"