Files
openrabbit/docs/workflows.md

390 lines
9.7 KiB
Markdown

# 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://git.hiddenden.cafe/Hiddenden/openrabbit/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://git.hiddenden.cafe/Hiddenden/openrabbit/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://git.hiddenden.cafe/Hiddenden/openrabbit/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://git.hiddenden.cafe/Hiddenden/openrabbit/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://git.hiddenden.cafe/Hiddenden/openrabbit/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?
```