77 lines
3.0 KiB
YAML
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"
|