mirror of
https://github.com/aljazceru/opencode.git
synced 2025-12-21 17:54:23 +01:00
commit 7b2ad6a1abf88e0731f15bbf6e281b29a610dd76
Merge: 74c85391 847a63e1
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 15:31:54 2025 +0800
Merge branch 'dev' into github
commit 74c85391b576d01df298f6c30e3399b281b5c997
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 15:30:14 2025 +0800
sync
commit 0d27f8e490f1aa242e1a3fcd1f21eb077f852207
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 14:30:57 2025 +0800
sync
commit 0cf7e6c89f173b053f37cc0d316011b3e9d5fcc4
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 11:54:57 2025 +0800
sync
commit a782cb7a268bf98916c3850083eaf44ebc38de05
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 11:53:25 2025 +0800
sync
commit aa557014584abaf462656ba9b1de7c8bd6e9b9d8
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 11:48:10 2025 +0800
sync
commit 73c8150479bd3c965087c634102df047a36b40ab
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 01:29:29 2025 +0800
sync
commit c5325134e80ce3f9e2cb88e5a51893e4ffd880c2
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 01:07:48 2025 +0800
sync
commit c5b646aa88760731ac9cd221f677bd400c31224b
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 01:02:02 2025 +0800
sync
commit 27f7cc86ab4713a26d316ae71d2aa5978aaa2007
Author: Frank <frank@sst.dev>
Date: Mon Aug 18 00:59:22 2025 +0800
sync
commit 0a6152a0e0c2bb0e5b7cafbcb92b908433dd6c5b
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 18:11:31 2025 +0800
fix /opencode trigger
commit f1089103c607ac11251cac5e032e62c8b4667b30
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 17:55:14 2025 +0800
sync
commit 3ad18240248301380a68880315bfa83c18e9652d
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 17:44:11 2025 +0800
sync
commit 24f0f81773762a38ba0a26e599b718495e2f4b54
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 17:18:22 2025 +0800
sync
commit bc199d32bed9679d2f80ade527fa57a91e0883ca
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 16:59:03 2025 +0800
sync
commit 6cf860be843e94401166a6de83e36d6bdd8ca6d7
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 16:54:48 2025 +0800
sync
commit f5f753ff38498062b2e3de38a1be94158fce1463
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 14:43:12 2025 +0800
sync
commit 26d2e23a3ee99141a5951a153e444a1be25548dc
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 14:33:40 2025 +0800
sync
commit c5b3f54a0ae6064ff51c11ade41e21b594939715
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 14:16:10 2025 +0800
sync
commit 1c74e9a7ad35551eea53d0e51dcd28e6ae30a944
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 08:17:53 2025 +0800
sync
commit 89052dc9aaf7e4f02b7ca869ef6017322ee21c94
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 08:12:43 2025 +0800
sync
commit 42931d4d2a942eedef44f5570a57bf84df26ecfa
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 08:08:37 2025 +0800
sync
commit f22e97dd051ae3f592f4258a8d0270ca7fd60338
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 08:01:57 2025 +0800
sync
commit 2dda422ef85d2308b459cebe7f202b7fb782e75e
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 07:55:38 2025 +0800
sync
commit b8be1d0e9e89732bd60185c724cda72b8de5f145
Author: Frank <frank@sst.dev>
Date: Sun Aug 17 07:48:18 2025 +0800
sync
commit 78c84b96a3c8aa78e0ffa089a2a72ad80348fe72
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 20:49:26 2025 +0800
sync
commit dd9c0c83090ea6c5da963303227a1e09a8434994
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 20:47:25 2025 +0800
sync
commit 5eb917abba182712d1581376e95de45a092bbb24
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 20:35:48 2025 +0800
sync
commit 43cf83e7ccbc99484602b06cbb6aafdbc63bf11c
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 20:32:49 2025 +0800
sync
commit 10673ca3d2e1572e15c944ddd7d7af8175971f74
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 19:55:53 2025 +0800
sync
commit c45ae8a233ed64c49a08b98f3ad01e0348b2df22
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 19:53:52 2025 +0800
sync
commit 3c329dee05ecda95f5d249552aafc885997f07f2
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 19:49:56 2025 +0800
sync
commit 5797048db864142f15d73c854131a77a31a421ee
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 18:00:04 2025 +0800
sync
commit 2741338e8a27e57d9d023cf9c0a6a05276b82f41
Author: Frank <frank@sst.dev>
Date: Sat Aug 16 17:54:42 2025 +0800
sync
commit a51a8ca6d094bd5f98330c730d335285688c6ed8
Author: Frank <frank@sst.dev>
Date: Fri Aug 15 18:59:29 2025 +0800
sync
commit f4eeeb612dfa6f1714a954dd167519ade0c36a2d
Author: Frank <frank@sst.dev>
Date: Fri Aug 15 18:56:35 2025 +0800
sync
commit 1d0509c5630904a5a9e89ce0de09fbebb6f711be
Author: Frank <frank@sst.dev>
Date: Fri Aug 15 18:54:21 2025 +0800
sync
commit 339807d1b88d2439e9543b5da4ca2538a49f4ab8
Author: Frank <frank@sst.dev>
Date: Fri Aug 15 18:49:22 2025 +0800
sync
commit 70b4b78922fe80424d8922bb999ed84d28dff005
Author: Frank <frank@sst.dev>
Date: Fri Aug 15 18:04:57 2025 +0800
sync
138 lines
4.6 KiB
Markdown
138 lines
4.6 KiB
Markdown
# opencode GitHub Action
|
|
|
|
A GitHub Action that integrates [opencode](https://opencode.ai) directly into your GitHub workflow.
|
|
|
|
Mention `/opencode` in your comment, and opencode will execute tasks within your GitHub Actions runner.
|
|
|
|
## Features
|
|
|
|
#### Explain an issues
|
|
|
|
Leave the following comment on a GitHub issue. `opencode` will read the entire thread, including all comments, and reply with a clear explanation.
|
|
|
|
```
|
|
/opencode explain this issue
|
|
```
|
|
|
|
#### Fix an issues
|
|
|
|
Leave the following comment on a GitHub issue. opencode will create a new branch, implement the changes, and open a PR with the changes.
|
|
|
|
```
|
|
/opencode fix this
|
|
```
|
|
|
|
#### Review PRs and make changes
|
|
|
|
Leave the following comment on a GitHub PR. opencode will implement the requested change and commit it to the same PR.
|
|
|
|
```
|
|
Delete the attachment from S3 when the note is removed /oc
|
|
```
|
|
|
|
## Installation
|
|
|
|
Run the following command in the terminal from your GitHub repo:
|
|
|
|
```bash
|
|
opencode github install
|
|
```
|
|
|
|
This will walk you through installing the GitHub app, creating the workflow, and setting up secrets.
|
|
|
|
### Manual Setup
|
|
|
|
1. Install the GitHub app https://github.com/apps/opencode-agent. Make sure it is installed on the target repository.
|
|
2. Add the following workflow file to `.github/workflows/opencode.yml` in your repo. Set the appropriate `model` and required API keys in `env`.
|
|
|
|
```yml
|
|
name: opencode
|
|
|
|
on:
|
|
issue_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
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Run opencode
|
|
uses: sst/opencode/github@latest
|
|
env:
|
|
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
with:
|
|
model: anthropic/claude-sonnet-4-20250514
|
|
```
|
|
|
|
3. Store the API keys in secrets. In your organization or project **settings**, expand **Secrets and variables** on the left and select **Actions**. Add the required API keys.
|
|
|
|
## Support
|
|
|
|
This is an early release. If you encounter issues or have feedback, please create an issue at https://github.com/sst/opencode/issues.
|
|
|
|
## Development
|
|
|
|
To test locally:
|
|
|
|
1. Navigate to a test repo (e.g. `hello-world`):
|
|
|
|
```bash
|
|
cd hello-world
|
|
```
|
|
|
|
2. Run:
|
|
|
|
```bash
|
|
MODEL=anthropic/claude-sonnet-4-20250514 \
|
|
ANTHROPIC_API_KEY=sk-ant-api03-1234567890 \
|
|
GITHUB_RUN_ID=dummy \
|
|
MOCK_TOKEN=github_pat_1234567890 \
|
|
MOCK_EVENT='{"eventName":"issue_comment",...}' \
|
|
bun /path/to/opencode/github/index.ts
|
|
```
|
|
|
|
- `MODEL`: The model used by opencode. Same as the `MODEL` defined in the GitHub workflow.
|
|
- `ANTHROPIC_API_KEY`: Your model provider API key. Same as the keys defined in the GitHub workflow.
|
|
- `GITHUB_RUN_ID`: Dummy value to emulate GitHub action environment.
|
|
- `MOCK_TOKEN`: A GitHub persontal access token. This token is used to verify you have `admin` or `write` access to the test repo. Generate a token [here](https://github.com/settings/personal-access-tokens).
|
|
- `MOCK_EVENT`: Mock GitHub event payload (see templates below).
|
|
- `/path/to/opencode`: Path to your cloned opencode repo. `bun /path/to/opencode/github/index.ts` runs your local version of `opencode`.
|
|
|
|
### Issue comment event
|
|
|
|
```
|
|
MOCK_EVENT='{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4},"comment":{"id":1,"body":"hey opencode, summarize thread"}}}'
|
|
```
|
|
|
|
Replace:
|
|
|
|
- `"owner":"sst"` with repo owner
|
|
- `"repo":"hello-world"` with repo name
|
|
- `"actor":"fwang"` with the GitHub username of commentor
|
|
- `"number":4` with the GitHub issue id
|
|
- `"body":"hey opencode, summarize thread"` with comment body
|
|
|
|
### Issue comment with image attachment.
|
|
|
|
```
|
|
MOCK_EVENT='{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4},"comment":{"id":1,"body":"hey opencode, what is in my image "}}}'
|
|
```
|
|
|
|
Replace the image URL `https://github.com/user-attachments/assets/xxxxxxxx` with a valid GitHub attachment (you can generate one by commenting with an image in any issue).
|
|
|
|
### PR comment event
|
|
|
|
```
|
|
MOCK_EVENT='{"eventName":"issue_comment","repo":{"owner":"sst","repo":"hello-world"},"actor":"fwang","payload":{"issue":{"number":4,"pull_request":{}},"comment":{"id":1,"body":"hey opencode, summarize thread"}}}'
|
|
```
|