summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/zh-cn/github.mdx
blob: b9b80d0dd6f05f750d492d49fa7864271a3f5edc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
---
title: GitHub
description: 在 GitHub 问题和拉取请求中使用 opencode。
---

opencode 与您的 GitHub 工作流程集成。在评论中提及 `/opencode` 或 `/oc`,opencode 将在您的 GitHub Actions 运行器中执行任务。

---

## 功能

- **Triage issues**: 要求 opencode 调查问题并向您解释。
- **Fix and implement**: 要求 opencode 修复问题或实施功能。将在一个新的分支中工作并提交包含所有更改的 PR。
- **Secure**: opencode 在 GitHub 的运行器中运行。

---

## 安装

在 GitHub 存储库中的项目中运行以下命令:

```bash
opencode github install
```

这将引导您完成安装 GitHub 应用程序、创建工作流程和设置机密。

---

### 手动设置

或者您可以手动设置。

1. **Install the GitHub app**

   前往 [**github.com/apps/opencode-agent**](https://github.com/apps/opencode-agent)。确保它​​已安装在目标存储库上。

2. **Add the workflow**

   将以下工作流程文件添加到存储库中的 `.github/workflows/opencode.yml` 中。确保在 `model` 中设置适当的 `env` 和所需的 API 密钥。

   ```yml title=".github/workflows/opencode.yml" {24,26}
   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
       steps:
          - name: Checkout repository
            uses: actions/checkout@v6
            with:
              fetch-depth: 1
              persist-credentials: false

          - name: Run OpenCode
           uses: anomalyco/opencode/github@latest
           env:
             ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
           with:
             model: anthropic/claude-sonnet-4-20250514
             # share: true
             # github_token: xxxx
   ```

3. **Store the API keys in secrets**

   在您的组织或项目的 **Settings** 中,展开左侧的 **Secrets and variables**,然后选择 **Actions**。并添加所需的 API 密钥。

---

## 配置

- `model`:与 opencode 一起使用的模型。采用 `provider/model` 格式。这是 **必需的**。
- `agent`:要使用的代理。必须是一级代理。如果未找到,则从配置回退到 `default_agent` 或 `"build"`。
- `share`:是否共享 opencode 会话。对于公共存储库,默认为 **true**。
- `prompt`:可选的自定义提示以覆盖默认行为。使用它来自定义 opencode 处理请求的方式。
- `token`:可选的 GitHub 访问 Token,用于执行创建评论、提交更改和打开拉取请求等操作。默认情况下,opencode 使用来自 opencode GitHub 应用程序的安装访问 Token,因此提交、评论和拉取请求显示为来自应用。

  或者,您可以使用 GitHub Action 运行程序的 [内置 `GITHUB_TOKEN`](https://docs.github.com/en/actions/tutorials/authenticate-with-github_token),而无需安装 opencode GitHub 应用程序。只需确保在您的工作流程中所需的权限:

  ```yaml
  permissions:
    id-token: write
    contents: write
    pull-requests: write
    issues: write
  ```

  您可以在 GitHub Actions 文档中了解有关配置工作流程的更多信息。

---

## 支持的事件

opencode 可以由以下 GitHub 事件触发:

| 事件类型                      | 触发方式                     | 详情                                                                                    |
| ----------------------------- | ---------------------------- | --------------------------------------------------------------------------------------- |
| `issue_comment`               | 对问题或 PR 发表评论         | 在评论中提及 `/opencode` 或 `/oc`。 opencode 读取上下文并可以创建分支、打开 PR 或回复。 |
| `pull_request_review_comment` | 对 PR 中的特定代码行进行评论 | 在检查代码时提及 `/opencode` 或 `/oc`。 opencode 接收文件路径、行号和 diff 上下文。     |
| `issues`                      | 问题已打开或已编辑           | 创建或修改问题时自动触发 opencode。需要 `prompt` 输入。                                 |
| `pull_request`                | PR 已开启或已更新            | 当 PR 打开、同步或重新打开时自动触发 opencode。对于自动评论很有帮助。                   |
| `schedule`                    | 基于 Cron 的计划             | 按计划运行 opencode。需要 `prompt` 输入。输出进入日志和 PR(没有可评论的问题)。        |
| `workflow_dispatch`           | 从 GitHub UI 手动触发        | 通过“操作”选项卡触发 opencode。需要 `prompt` 输入。输出进入日志和 PR。                  |

### 计划示例

按计划运行 opencode 以执行自动化任务:

```yaml title=".github/workflows/opencode-scheduled.yml"
name: Scheduled OpenCode Task

on:
  schedule:
    - cron: "0 9 * * 1" # Every Monday at 9am UTC

jobs:
  opencode:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
      pull-requests: write
      issues: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
        with:
          persist-credentials: false

      - name: Run OpenCode
        uses: anomalyco/opencode/github@latest
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        with:
          model: anthropic/claude-sonnet-4-20250514
          prompt: |
            Review the codebase for any TODO comments and create a summary.
            If you find issues worth addressing, open an issue to track them.
```

对于计划事件,`prompt` 输入是 **必需的**,因为没有注释可以从中提取指令。希望计划工作流在没有用户上下文的情况下运行并进行权限检查,因此如果您 opencode 创建分支或 PR,工作流必须支持 `contents: write` 和 `pull-requests: write`。

---

### Pull Request 示例

或更新 PR 时自动审核:

```yaml title=".github/workflows/opencode-review.yml"
name: opencode-review

on:
  pull_request:
    types: [opened, synchronize, reopened, ready_for_review]

jobs:
  review:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
      pull-requests: read
      issues: read
    steps:
      - uses: actions/checkout@v6
        with:
          persist-credentials: false
      - uses: anomalyco/opencode/github@latest
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          model: anthropic/claude-sonnet-4-20250514
          use_github_token: true
          prompt: |
            Review this pull request:
            - Check for code quality issues
            - Look for potential bugs
            - Suggest improvements
```

对于 `pull_request` 事件,如果未提供 `prompt`,opencode 将默认审核拉取请求。

---

### Issue 分类示例

自动分类新问题。此示例过滤超过 30 天的账户以减少垃圾邮件:

```yaml title=".github/workflows/opencode-triage.yml"
name: Issue Triage

on:
  issues:
    types: [opened]

jobs:
  triage:
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: write
      pull-requests: write
      issues: write
    steps:
      - name: Check account age
        id: check
        uses: actions/github-script@v7
        with:
          script: |
            const user = await github.rest.users.getByUsername({
              username: context.payload.issue.user.login
            });
            const created = new Date(user.data.created_at);
            const days = (Date.now() - created) / (1000 * 60 * 60 * 24);
            return days >= 30;
          result-encoding: string

      - uses: actions/checkout@v6
        if: steps.check.outputs.result == 'true'
        with:
          persist-credentials: false

      - uses: anomalyco/opencode/github@latest
        if: steps.check.outputs.result == 'true'
        env:
          ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
        with:
          model: anthropic/claude-sonnet-4-20250514
          prompt: |
            Review this issue. If there's a clear fix or relevant docs:
            - Provide documentation links
            - Add error handling guidance for code examples
            Otherwise, do not comment.
```

对于 `issues` 事件,`prompt` 输入是 **必需的**,因为没有注释可以从中提取指令。

---

## 自定义提示

覆盖默认提示,为您的工作流程自定义 opencode 的行为。

```yaml title=".github/workflows/opencode.yml"
- uses: anomalyco/opencode/github@latest
  with:
    model: anthropic/claude-sonnet-4-5
    prompt: |
      Review this pull request:
      - Check for code quality issues
      - Look for potential bugs
      - Suggest improvements
```

这对于执行与您的项目相关的特定审查标准、编码标准或重点领域非常有用。

---

## 示例

以下是如何在 GitHub 中使用 opencode 的一些示例。

- **Explain an issue**

  在 GitHub 问题中添加此评论。

  ```
  /opencode explain this issue
  ```

  opencode 将阅读整个线程,包括所有评论,并回复并提供清晰的解释。

- **Fix an issue**

  在 GitHub 问题中,说:

  ```
  /opencode fix this
  ```

  opencode 将创建一个新分支,实施更改,并使用更改打开 PR。

- **Review PRs and make changes**

  在 GitHub PR 上留下以下评论。

  ```
  Delete the attachment from S3 when the note is removed /oc
  ```

  opencode 将实施请求的更改并提交到同一个 PR。

- **Review specific code lines**

  直接在 PR 的“文件”选项卡中的代码行上留下评论。opencode 自动检测文件、行号和差异上下文以提供准确的响应。

  ```
  [Comment on specific lines in Files tab]
  /oc add error handling here
  ```

  当评论特定行时,opencode 接收:
  - 正在审查的确切文件
  - 具体代码行
  - 周围的差异上下文
  - 行号信息

  这允许更有针对性的请求,而无需手动指定文件路径或行号。