-
-
Notifications
You must be signed in to change notification settings - Fork 1
233 lines (233 loc) · 7.57 KB
/
Copy pathopencode-bot.yml
File metadata and controls
233 lines (233 loc) · 7.57 KB
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
---
name: OpenCode bot
on:
workflow_call:
inputs:
model:
required: true
type: string
description: Model to use with OpenCode
agent:
required: false
type: string
description: Primary agent to use
default: build
share:
required: false
type: boolean
description: Share the OpenCode session
default: false
prompt:
required: false
type: string
description: Custom prompt to override the event comment
default: ''
use-github-token:
required: false
type: boolean
description: Use GITHUB_TOKEN directly instead of OpenCode App token exchange
default: false
mentions:
required: false
type: string
description: Comma-separated list of trigger phrases
default: /opencode,/oc
variant:
required: false
type: string
description: Provider-specific model variant
default: ''
oidc-base-url:
required: false
type: string
description: Base URL for OIDC token exchange
default: https://api.opencode.ai
opencode-version:
required: false
type: string
description: OpenCode version to install
default: latest
use-bundled-toolkit:
required: false
type: boolean
description: Use the action's bundled OpenCode toolkit
default: true
timeout-minutes:
required: false
type: number
description: Maximum minutes to let OpenCode run
default: 60
runs-on:
required: false
type: string
description: Runner to use
default: ubuntu-latest
secrets:
ANTHROPIC_API_KEY:
required: false
description: Anthropic API key
OPENAI_API_KEY:
required: false
description: OpenAI API key
OPENROUTER_API_KEY:
required: false
description: OpenRouter API key
OPENCODE_API_KEY:
required: false
description: OpenCode API key
SAKURA_AI_ENGINE_API_KEY:
required: false
description: Sakura AI Engine API key
GOOGLE_GENERATIVE_AI_API_KEY:
required: false
description: Google Generative AI API key
DEEPSEEK_API_KEY:
required: false
description: DeepSeek API key
XAI_API_KEY:
required: false
description: xAI API key
GROQ_API_KEY:
required: false
description: Groq API key
CEREBRAS_API_KEY:
required: false
description: Cerebras API key
MOONSHOT_API_KEY:
required: false
description: Moonshot AI API key
GH_TOKEN:
required: false
description: GitHub token for repository access
workflow_dispatch: # checkov:skip=CKV_GHA_7: Parameterized manual dispatch is an intentional trusted-operator interface.
inputs:
model:
required: true
type: string
description: Model to use with OpenCode
agent:
required: false
type: string
description: Primary agent to use
default: build
share:
required: false
type: boolean
description: Share the OpenCode session
default: false
prompt:
required: false
type: string
description: Custom prompt to override the event comment
default: ''
use-github-token:
required: false
type: boolean
description: Use GITHUB_TOKEN directly instead of OpenCode App token exchange
default: false
mentions:
required: false
type: string
description: Comma-separated list of trigger phrases
default: /opencode,/oc
variant:
required: false
type: string
description: Provider-specific model variant
default: ''
oidc-base-url:
required: false
type: string
description: Base URL for OIDC token exchange
default: https://api.opencode.ai
opencode-version:
required: false
type: string
description: OpenCode version to install
default: latest
use-bundled-toolkit:
required: false
type: boolean
description: Use the action's bundled OpenCode toolkit
default: true
timeout-minutes:
required: false
type: number
description: Maximum minutes to let OpenCode run
default: 60
runs-on:
required: false
type: string
description: Runner to use
default: ubuntu-latest
issue_comment:
types:
- created
pull_request_review_comment:
types:
- created
permissions:
contents: read
pull-requests: write
issues: write
id-token: write
actions: read
jobs:
opencode-bot:
if: >
(
(github.event_name == 'issue_comment' || github.event_name == 'pull_request_review_comment')
&& github.event.comment.user.type != 'Bot'
&& contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.comment.author_association)
&& (
inputs.model != ''
|| startsWith(github.event.comment.body, '/oc')
|| contains(github.event.comment.body, ' /oc')
|| startsWith(github.event.comment.body, '/opencode')
|| contains(github.event.comment.body, ' /opencode')
)
) || (
github.event_name != 'issue_comment'
&& github.event_name != 'pull_request_review_comment'
&& inputs.prompt != ''
)
runs-on: ${{ inputs.runs-on || 'ubuntu-latest' }}
steps:
- name: Checkout repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 1
token: ${{ secrets.GH_TOKEN || github.token }} # zizmor: ignore[secrets-outside-env] caller-provided secret
persist-credentials: ${{ inputs.use-github-token }}
- name: Configure Git identity
if: inputs.use-github-token
run: |
git config --local user.name 'opencode-agent[bot]'
git config --local user.email 'opencode-agent[bot]@users.noreply.github.com'
- name: Run OpenCode
uses: $/.
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
SAKURA_AI_ENGINE_API_KEY: ${{ secrets.SAKURA_AI_ENGINE_API_KEY }}
GOOGLE_GENERATIVE_AI_API_KEY: ${{ secrets.GOOGLE_GENERATIVE_AI_API_KEY }}
DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }}
XAI_API_KEY: ${{ secrets.XAI_API_KEY }}
GROQ_API_KEY: ${{ secrets.GROQ_API_KEY }}
CEREBRAS_API_KEY: ${{ secrets.CEREBRAS_API_KEY }}
MOONSHOT_API_KEY: ${{ secrets.MOONSHOT_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GH_TOKEN || github.token }}
with:
model: ${{ inputs.model || 'openrouter/stealth/union-alpha' }}
agent: ${{ inputs.agent || 'build' }}
share: ${{ inputs.share }}
prompt: ${{ inputs.prompt }}
use-github-token: ${{ inputs.use-github-token }}
mentions: ${{ inputs.mentions || '/opencode,/oc' }}
variant: ${{ inputs.variant }}
oidc-base-url: ${{ inputs.oidc-base-url || 'https://api.opencode.ai' }}
opencode-version: ${{ inputs.opencode-version || 'latest' }}
use-bundled-toolkit: ${{ inputs.model == '' || inputs.use-bundled-toolkit }}
timeout-minutes: ${{ inputs.timeout-minutes || 60 }}