# Workflows This document provides ready-to-use workflow files for integrating AI code review into your repositories. Workflows are provided for both **GitHub Actions** and **Gitea Actions**. --- ## Platform Comparison | Feature | GitHub | Gitea | |---------|--------|-------| | Context variable | `github.*` | `gitea.*` | | Default token | `GITHUB_TOKEN` | `AI_REVIEW_TOKEN` (custom) | | API URL | `https://api.github.com` | Your Gitea instance URL | | Tools location | Same repo (`tools/ai-review`) | Checkout from central repo | --- ## GitHub Workflows ### PR Review Workflow ```yaml # .github/workflows/ai-review.yml name: AI Code Review on: pull_request: types: [opened, synchronize] jobs: ai-review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run AI Review env: AI_REVIEW_TOKEN: ${{ secrets.GITHUB_TOKEN }} AI_REVIEW_REPO: ${{ github.repository }} AI_REVIEW_API_URL: https://api.github.com OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | cd tools/ai-review python main.py pr ${{ github.repository }} ${{ github.event.pull_request.number }} ``` ### Issue Triage Workflow ```yaml # .github/workflows/ai-issue-triage.yml name: AI Issue Triage on: issues: types: [opened, labeled] jobs: ai-triage: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run AI Issue Triage env: AI_REVIEW_TOKEN: ${{ secrets.GITHUB_TOKEN }} AI_REVIEW_REPO: ${{ github.repository }} AI_REVIEW_API_URL: https://api.github.com OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | cd tools/ai-review python main.py issue ${{ github.repository }} ${{ github.event.issue.number }} \ --title "${{ github.event.issue.title }}" ``` ### Comment Reply Workflow (includes Bartender Chat) ```yaml # .github/workflows/ai-comment-reply.yml name: AI Comment Reply on: issue_comment: types: [created] jobs: ai-reply: runs-on: ubuntu-latest if: contains(github.event.comment.body, '@ai-bot') steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run AI Comment Response env: AI_REVIEW_TOKEN: ${{ secrets.GITHUB_TOKEN }} AI_REVIEW_REPO: ${{ github.repository }} AI_REVIEW_API_URL: https://api.github.com OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} SEARXNG_URL: ${{ secrets.SEARXNG_URL }} run: | cd tools/ai-review python main.py comment ${{ github.repository }} ${{ github.event.issue.number }} \ "${{ github.event.comment.body }}" ``` ### Codebase Analysis Workflow ```yaml # .github/workflows/ai-codebase-review.yml name: AI Codebase Analysis on: schedule: - cron: "0 0 * * 0" # Weekly on Sunday workflow_dispatch: # Manual trigger jobs: ai-codebase: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run Codebase Analysis env: AI_REVIEW_TOKEN: ${{ secrets.GITHUB_TOKEN }} AI_REVIEW_REPO: ${{ github.repository }} AI_REVIEW_API_URL: https://api.github.com OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | cd tools/ai-review python main.py codebase ${{ github.repository }} ``` --- ## Gitea Workflows ### PR Review Workflow ```yaml # .gitea/workflows/enterprise-ai-review.yml name: AI Code Review on: pull_request: types: [opened, synchronize] jobs: ai-review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/checkout@v4 with: repository: YourOrg/OpenRabbit path: .ai-review token: ${{ secrets.AI_REVIEW_TOKEN }} - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run AI Review env: AI_REVIEW_TOKEN: ${{ secrets.AI_REVIEW_TOKEN }} AI_REVIEW_REPO: ${{ gitea.repository }} AI_REVIEW_API_URL: https://your-gitea.example.com/api/v1 OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | cd .ai-review/tools/ai-review python main.py pr ${{ gitea.repository }} ${{ gitea.event.pull_request.number }} ``` ### Issue Triage Workflow ```yaml # .gitea/workflows/ai-issue-triage.yml name: AI Issue Triage on: issues: types: [opened, labeled] jobs: ai-triage: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/checkout@v4 with: repository: YourOrg/OpenRabbit path: .ai-review token: ${{ secrets.AI_REVIEW_TOKEN }} - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run AI Issue Triage env: AI_REVIEW_TOKEN: ${{ secrets.AI_REVIEW_TOKEN }} AI_REVIEW_REPO: ${{ gitea.repository }} AI_REVIEW_API_URL: https://your-gitea.example.com/api/v1 OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | cd .ai-review/tools/ai-review python main.py issue ${{ gitea.repository }} ${{ gitea.event.issue.number }} \ --title "${{ gitea.event.issue.title }}" ``` ### Comment Reply Workflow (includes Bartender Chat) ```yaml # .gitea/workflows/ai-comment-reply.yml name: AI Comment Reply on: issue_comment: types: [created] jobs: ai-reply: runs-on: ubuntu-latest if: contains(github.event.comment.body, '@ai-bot') steps: - uses: actions/checkout@v4 - uses: actions/checkout@v4 with: repository: YourOrg/OpenRabbit path: .ai-review token: ${{ secrets.AI_REVIEW_TOKEN }} - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run AI Comment Response env: AI_REVIEW_TOKEN: ${{ secrets.AI_REVIEW_TOKEN }} AI_REVIEW_REPO: ${{ gitea.repository }} AI_REVIEW_API_URL: https://your-gitea.example.com/api/v1 OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} SEARXNG_URL: ${{ secrets.SEARXNG_URL }} run: | cd .ai-review/tools/ai-review python main.py comment ${{ gitea.repository }} ${{ gitea.event.issue.number }} \ "${{ gitea.event.comment.body }}" ``` ### Codebase Analysis Workflow ```yaml # .gitea/workflows/ai-codebase-review.yml name: AI Codebase Analysis on: schedule: - cron: "0 0 * * 0" # Weekly on Sunday workflow_dispatch: # Manual trigger jobs: ai-codebase: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/checkout@v4 with: repository: YourOrg/OpenRabbit path: .ai-review token: ${{ secrets.AI_REVIEW_TOKEN }} - uses: actions/setup-python@v5 with: python-version: "3.11" - run: pip install requests pyyaml - name: Run Codebase Analysis env: AI_REVIEW_TOKEN: ${{ secrets.AI_REVIEW_TOKEN }} AI_REVIEW_REPO: ${{ gitea.repository }} AI_REVIEW_API_URL: https://your-gitea.example.com/api/v1 OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} run: | cd .ai-review/tools/ai-review python main.py codebase ${{ gitea.repository }} ``` --- ## Required Secrets ### GitHub | Secret | Required | Description | |--------|----------|-------------| | `GITHUB_TOKEN` | Auto | Built-in token (automatic) | | `OPENAI_API_KEY` | Choose one | OpenAI API key | | `OPENROUTER_API_KEY` | Choose one | OpenRouter API key | | `OLLAMA_HOST` | Choose one | Ollama server URL | | `SEARXNG_URL` | Optional | SearXNG instance for web search | ### Gitea | Secret | Required | Description | |--------|----------|-------------| | `AI_REVIEW_TOKEN` | Yes | Gitea bot access token | | `OPENAI_API_KEY` | Choose one | OpenAI API key | | `OPENROUTER_API_KEY` | Choose one | OpenRouter API key | | `OLLAMA_HOST` | Choose one | Ollama server URL | | `SEARXNG_URL` | Optional | SearXNG instance for web search | --- ## Customization ### For GitHub The tools are included in the same repository under `tools/ai-review`, so no additional checkout is needed. ### For Gitea Replace the repository reference with your OpenRabbit fork: ```yaml repository: YourOrg/OpenRabbit ``` Replace the API URL with your Gitea instance: ```yaml AI_REVIEW_API_URL: https://your-gitea.example.com/api/v1 ``` --- ## Chat/Bartender Workflow Both platforms support the Bartender chat agent through the comment reply workflow. When `@ai-bot` is mentioned with a question (not a specific command like `summarize`), the Chat Agent handles it with tool calling capabilities. To enable web search, set the `SEARXNG_URL` secret to your SearXNG instance URL. **Example usage:** ``` @ai-bot How do I configure rate limiting? @ai-bot Find all authentication-related files @ai-bot What does the dispatcher module do? ```