192 lines
4.8 KiB
Markdown
192 lines
4.8 KiB
Markdown
# opencode Forgejo Action
|
|
|
|
A Forgejo Action that integrates [opencode](https://opencode.ai) directly into your Forgejo Actions workflow.
|
|
|
|
Mention `/opencode` or `/oc` in your comment, and opencode will execute tasks within your Forgejo Actions runner.
|
|
|
|
## Features
|
|
|
|
### Explain an issue
|
|
|
|
Leave the following comment on a Forgejo issue. `opencode` will read the entire thread, including all comments, and reply with a clear explanation.
|
|
|
|
```
|
|
/opencode explain this issue
|
|
```
|
|
|
|
### Fix an issue
|
|
|
|
Leave the following comment on a Forgejo issue. opencode will create a new branch, implement the changes, and open a merge request with the changes.
|
|
|
|
```
|
|
/opencode fix this
|
|
```
|
|
|
|
### Review MRs and make changes
|
|
|
|
Leave the following comment on a Forgejo MR. opencode will implement the requested change and commit it to the same MR.
|
|
|
|
```
|
|
Delete the attachment from S3 when the note is removed /oc
|
|
```
|
|
|
|
### Review specific code lines
|
|
|
|
Leave a comment directly on code lines in the MR's "Files" tab. opencode will automatically detect the file, line numbers, and diff context to provide precise responses.
|
|
|
|
```
|
|
[Comment on specific lines in Files tab]
|
|
/oc add error handling here
|
|
```
|
|
|
|
When commenting on specific lines, opencode receives:
|
|
|
|
- The exact file being reviewed
|
|
- The specific lines of code
|
|
- The surrounding diff context
|
|
- Line number information
|
|
|
|
## Installation
|
|
|
|
### Quick setup
|
|
|
|
Add the following workflow file to `.forgejo/workflows/opencode.yml` in your repo.
|
|
|
|
### Manual setup
|
|
|
|
1. **Create a PAT**
|
|
|
|
Go to your Forgejo instance → Settings → Applications → Generate Token. Give it `repo` scope (contents, pull-requests, issues).
|
|
|
|
2. **Add the PAT as a secret**
|
|
|
|
Go to your repository → Settings → Actions → Secrets → New Repository Secret. Add:
|
|
|
|
| Secret name | Value |
|
|
|---|---|
|
|
| `FORGEJO_TOKEN` | Your PAT |
|
|
| `NOMYO_API_KEY` | Your Nomyo API key |
|
|
|
|
3. **Add the workflow file**
|
|
|
|
Create `.forgejo/workflows/opencode.yml`:
|
|
|
|
```yaml
|
|
name: opencode
|
|
on:
|
|
issue_comment:
|
|
types: [created]
|
|
pull_request_review_comment:
|
|
types: [created]
|
|
|
|
jobs:
|
|
opencode:
|
|
if: |
|
|
contains(github.event.comment.body, '/oc') ||
|
|
contains(github.event.comment.body, '/opencode')
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
id-token: write
|
|
contents: write
|
|
pull-requests: write
|
|
issues: write
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 1
|
|
persist-credentials: false
|
|
|
|
- name: Run opencode
|
|
uses: bitfreedom.net/code/nomyo-ai/actions@v1
|
|
env:
|
|
NOMYO_API_KEY: ${{ secrets.NOMYO_API_KEY }}
|
|
with:
|
|
model: anthropic/claude-sonnet-4-20250514
|
|
forgejo_api_url: bitfreedom.net/code/
|
|
forgejo_token: ${{ secrets.FORGEJO_TOKEN }}
|
|
```
|
|
|
|
4. **Set the model**
|
|
|
|
Replace `anthropic/claude-sonnet-4-20250514` with your preferred model format: `provider/model`.
|
|
|
|
## Configuration
|
|
|
|
| Input | Required | Description |
|
|
|---|---|---|
|
|
| `model` | Yes | Model to use (format: `provider/model`) |
|
|
| `forgejo_api_url` | No | Forgejo instance API URL (e.g., `https://git.example.com`). Defaults to `https://git.bitfreedom.at` |
|
|
| `forgejo_token` | No | Forgejo PAT with repo scope |
|
|
| `agent` | No | Agent to use (must be a primary agent) |
|
|
| `share` | No | Share the opencode session (defaults to true for public repos) |
|
|
| `prompt` | No | Custom prompt to override default behavior |
|
|
| `mentions` | No | Comma-separated trigger phrases. Defaults to `/opencode,/oc` |
|
|
| `variant` | No | Model variant (e.g., `high`, `max`, `minimal`) |
|
|
|
|
## Supported Events
|
|
|
|
| Event Type | Triggered By | Details |
|
|
|---|---|---|
|
|
| `issue_comment` | Comment on an issue or MR | Mention `/opencode` or `/oc` in your comment |
|
|
| `pull_request_review_comment` | Comment on specific PR/MR code lines | Mention `/opencode` or `/oc` when reviewing code |
|
|
|
|
## Examples
|
|
|
|
### Explain an issue
|
|
|
|
```
|
|
/opencode explain this issue
|
|
```
|
|
|
|
### Fix an issue
|
|
|
|
```
|
|
/opencode fix this
|
|
```
|
|
|
|
### Review MRs
|
|
|
|
```
|
|
/opencode review this merge request
|
|
```
|
|
|
|
## Development
|
|
|
|
To test locally:
|
|
|
|
1. Set up environment:
|
|
|
|
```bash
|
|
export FORGEJO_API_URL="https://git.your-instance.com"
|
|
export FORGEJO_TOKEN="your-pat-here"
|
|
export MODEL="anthropic/claude-sonnet-4-20250514"
|
|
export GITHUB_RUN_ID="test"
|
|
export GITHUB_REPOSITORY="owner/repo"
|
|
export GITHUB_ACTOR="testuser"
|
|
export GITHUB_EVENT_NAME="issue_comment"
|
|
export GITHUB_EVENT_PATH="/tmp/event.json"
|
|
```
|
|
|
|
2. Create a mock event payload in `/tmp/event.json`:
|
|
|
|
```json
|
|
{
|
|
"eventName": "issue_comment",
|
|
"repo": { "owner": "owner", "repo": "repo" },
|
|
"actor": "testuser",
|
|
"payload": {
|
|
"issue": { "number": 1, "index": 1, "title": "Test issue", "body": "Test body" },
|
|
"comment": { "id": 1, "body": "/opencode fix this" }
|
|
}
|
|
}
|
|
```
|
|
|
|
3. Run:
|
|
|
|
```bash
|
|
bun index.ts
|
|
```
|
|
|
|
## License
|
|
|
|
MIT
|