summaryrefslogtreecommitdiffhomepage
path: root/github/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'github/README.md')
-rw-r--r--github/README.md133
1 files changed, 133 insertions, 0 deletions
diff --git a/github/README.md b/github/README.md
new file mode 100644
index 000000000..7e9a8906b
--- /dev/null
+++ b/github/README.md
@@ -0,0 +1,133 @@
+# opencode GitHub Action
+
+A GitHub Action that integrates [opencode](https://opencode.ai) directly into your GitHub workflow.
+
+Start your comment with `hey opencode`, and opencode will take action via your GitHub Actions runner.
+
+## Features
+
+#### Triage and explain issues
+
+```
+hey opencode, explain this issue
+```
+
+#### Fix or implement issues - opencode will create a PR with the changes.
+
+```
+hi opencode, fix this
+```
+
+- Review PRs and make changes
+
+```
+Delete the attachment from S3 when the note is removed @opencode-agent
+```
+
+## Installation
+
+Run the following command in the terminal from your GitHub repo:
+
+```
+opencode github install
+```
+
+This will walk you through installing the GitHub app, configuring 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: |
+ startsWith(github.event.comment.body, 'opencode') ||
+ startsWith(github.event.comment.body, 'hi opencode') ||
+ startsWith(github.event.comment.body, 'hey opencode') ||
+ contains(github.event.comment.body, '@opencode-agent')
+ 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`):
+
+```
+cd hello-world
+```
+
+2. Run:
+
+```
+MODEL=anthropic/claude-sonnet-4-20250514 \
+ ANTHROPIC_API_KEY=sk-ant-api03-1234567890 \
+ GITHUB_RUN_ID=dummy \
+ bun /path/to/opencode/packages/opencode/src/index.ts github run \
+ --token 'github_pat_1234567890' \
+ --event '{"eventName":"issue_comment",...}'
+```
+
+- `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.
+- `/path/to/opencode`: Path to your cloned opencode repo. `bun /path/to/opencode/packages/opencode/src/index.ts` runs your local version of `opencode`.
+- `--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).
+- `--event`: Mock GitHub event payload (see templates below).
+
+#### Issue comment event
+
+```
+ --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.
+
+```
+ --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 ![Image](https://github.com/user-attachments/assets/xxxxxxxx)"}}}'
+```
+
+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
+
+```
+ --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"}}}'
+```