diff --git a/.github/workflows/ai-pr-review.yml b/.github/workflows/ai-pr-review.yml index 40fdf8e..5ee668e 100644 --- a/.github/workflows/ai-pr-review.yml +++ b/.github/workflows/ai-pr-review.yml @@ -5,18 +5,42 @@ on: branches: - main types: [opened, synchronize, reopened] + issue_comment: + types: [created] + workflow_dispatch: + inputs: + pr_number: + description: 'PR number to review' + required: true + type: number permissions: contents: read + issues: write pull-requests: write concurrency: - group: ai-pr-review-${{ github.event.pull_request.number }} + group: ai-pr-review-${{ github.event_name == 'issue_comment' && github.event.issue.number || github.event_name == 'workflow_dispatch' && inputs.pr_number || github.event.pull_request.number }} cancel-in-progress: true jobs: ai-review: name: AI PR Review + if: > + ( + github.event_name == 'pull_request' && + github.event.pull_request.head.repo.full_name == github.repository + ) || + github.event_name == 'workflow_dispatch' || + ( + github.event_name == 'issue_comment' && + github.event.issue.pull_request != null && + ( + contains(github.event.comment.body, '/ai-review') || + contains(github.event.comment.body, '@ai-reviewer review') + ) && + contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.comment.author_association) + ) runs-on: ubuntu-latest env: OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} @@ -50,8 +74,8 @@ jobs: OPENAI_RETRIES: ${{ vars.OPENAI_RETRIES || '2' }} GITHUB_TOKEN: ${{ github.token }} GITHUB_REPOSITORY: ${{ github.repository }} - PR_NUMBER: ${{ github.event.pull_request.number }} - PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }} + PR_NUMBER: ${{ github.event_name == 'issue_comment' && github.event.issue.number || github.event_name == 'workflow_dispatch' && inputs.pr_number || github.event.pull_request.number }} + PR_HEAD_SHA: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || '' }} REVIEW_RULES: .github/ai-review.md,AGENTS.md REVIEW_IGNORE: .ai-reviewignore REVIEW_SEVERITY_THRESHOLD: P3