From 3a7a2a838ec6ba625aa27aaa73cf4ea8ee03e79e Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 25 Jul 2025 17:34:47 -0400 Subject: wip: github actions --- github/README.md | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 github/README.md (limited to 'github/README.md') 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"}}}' +``` -- cgit v1.2.3