pr-agentを入れてみるテスト

## 2024-02-25 追記
名称が変更になったので修正しました
Codium-ai/pr-agent → qodo-ai/pr-agent

---

ai-pr-reviewerが有料になってるので、pr-agentを検証しました。
どっちも触ってみた感想ですが、レビューの仕方はこちらの方が好みです。
自前でsecretsに`OPENAI_API_KEY`を用意しておいてください。

Qodo-ai/pr-agent: PR-Agent (Qodo Merge open-source): An AI-Powered 🤖 Tool for Automated Pull Request Analysis, Feedback, Suggestions and More!  https://github.com/qodo-ai/pr-agent

## Workflow サンプル

```yaml:.github/workflow/pr-agent.yml
name: Code Review

permissions:
  issues: write
  pull-requests: write

on:
  pull_request:
    types: [opened, reopened, ready_for_review, review_requested]
  issue_comment:
    types: [created, edited]
  workflow_dispatch:

concurrency:
  group: ${{ github.repository }}-${{ github.event.number || github.head_ref || github.sha }}-${{ github.workflow }}-${{ github.event_name == 'pull_request_review_comment' && 'pr_comment' || 'pr' }}
  cancel-in-progress: ${{ github.event_name != 'pull_request_review_comment' }}

jobs:
  pr_agent_job:
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
      contents: write
    name: Run pr agent on every pull request

    if: ${{ github.event.sender.type != 'Bot' }}
    env:
      COMMON_INSTRUCTIONS: >-
        - 日本語で回答してください
        - 以下の原則に従ってコメントしてください。
          - URLなどの構造化テキストを文字列結合で作ってはいけない。
          - 置換でいじってはいけない。
          - オブジェクトまたはライブラリを使ってください。
          - 利用技術
            - Next.js@13
            - React@18
            - Typescript@5.3
    steps:
      - name: PR Agent action step
        id: pragent
        uses: qodo-ai/pr-agent@main
        env:
          OPENAI_KEY: ${{ secrets.OPENAI_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GITHUB_ACTION.AUTO_REVIEW: true
          GITHUB_ACTION.AUTO_IMPROVE: true

          # レビュー総評コメントである "PR Feedback" への追加プロンプト
          PR_REVIEWER.EXTRA_INSTRUCTIONS: ${{ env.COMMON_INSTRUCTIONS }}
          # プルリクの要約 "PR Descrition" に関する追加プロンプト
          PR_DESCRIPTION.EXTRA_INSTRUCTIONS: >-
            日本語で回答してください。
            タイトルは feat: 、chore: 、test: 、fix: 、ci: 、docs: などの
            commitlint パターンの接頭辞を含む必要があります。
          # /improve で呼び出す修正コードの "Suggestion" 時の追加プロンプト
          PR_CODE_SUGGESTIONS.EXTRA_INSTRUCTIONS: ${{ env.COMMON_INSTRUCTIONS }}
          # /improve コメントの後に提案されるコードの数。
          PR_CODE_SUGGESTIONS.NUM_CODE_SUGGESTIONS: 2
          # Modelを変更
          CONFIG.MODEL: gpt-3.5-turbo-0613
```

## 設定ファイル サンプル

ENVでパラメータを渡す以外にも、.pr_agent.tomlにまとめることもできます。
サンプルです。

```toml:.pr_agent.toml
[config]
model = "gpt-4o"
enable_custom_labels = true

[ignore]
glob = ['dist/**']

[pr_reviewer]
num_code_suggestions = 4
inline_code_comments = true
remove_previous_review_comment = true
enable_auto_approval = true
extra_instructions = """\
- 日本語で回答してください
- 以下の原則に従ってコメントしてください
  - URLなどの構造化テキストを文字列結合で作ってはいけない
  - 置換でいじってはいけない
  - オブジェクトまたはライブラリを使ってください
  - 利用技術
    - Node v20
    - TypeScript
    - Github Actions
"""


[pr_description]
ask_and_reflect = true
automatic_review = true
persistent_comment = true
enable_review_labels_security = true
enable_review_labels_effort = true
require_all_thresholds_for_incremental_review = false
minimal_commits_for_incremental_review = 2
minimal_minutes_for_incremental_review = 10
enable_help_text = false
enable_auto_approval = true
maximal_review_effort = 5
extra_instructions = """\
- 必ず日本語で回答してください
- タイトルは feat:, chore:, test:, fix:, ci:, docs: などのcommitlint パターンの接頭辞を含む
"""

[pr_code_suggestions]
summarize = true
num_code_suggestions = 4
extra_instructions = """\
- 必ず日本語で回答してください
- 以下の原則に従ってコメントしてください
  - URLなどの構造化テキストを文字列結合で作ってはいけない
  - 置換でいじってはいけない
  - オブジェクトまたはライブラリを使ってください
  - 利用技術
    - Node v20
    - TypeScript
    - Github Actions
"""

[pr_update_changelog]
push_changelog_changes = false
extra_instructions = """\
- 必ず日本語で回答してください
- 以下の原則に従ってコメントしてください
  - URLなどの構造化テキストを文字列結合で作ってはいけない
  - 置換でいじってはいけない
  - オブジェクトまたはライブラリを使ってください
  - 利用技術
    - Node v20
    - TypeScript
    - Github Actions
"""

[pr_add_docs]
extra_instructions = """\
- 必ず日本語で回答してください
- 以下の原則に従ってコメントしてください
  - URLなどの構造化テキストを文字列結合で作ってはいけない
  - 置換でいじってはいけない
  - オブジェクトまたはライブラリを使ってください
  - 利用技術
    - Node v20
    - TypeScript
    - Github Actions
"""

[github_action_config]
auto_review = true
auto_describe = true
auto_improve = true

[custom_labels."Link Update"]
description = "Whenever any link in the code is updated"

[custom_labels."Code Update"]
description = "Whenever any code is updated"
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3442/8c52c4ef-ea8e-4c6c-2ce0-288617604458.png)


# 参考
【ChatGPT + PR Agent + GitHub Actions】 プルリクの AI コードレビューを10分で自動化し、レビューのルールを詳細にカスタマイズする - GMOインターネットグループ グループ研究開発本部 https://recruit.gmo.jp/engineer/jisedai/blog/chatgpt-pr-agent-github-actions/


coderabbitai/ai-pr-reviewer: AI-based Pull Request Summarizer and Reviewer with Chat 
Capabilities. https://github.com/coderabbitai/ai-pr-reviewer