Skip to content

Commit 27f7cc8

Browse files
author
Frank
committed
sync
1 parent 0a6152a commit 27f7cc8

File tree

1 file changed

+39
-30
lines changed

1 file changed

+39
-30
lines changed

github/index.ts

Lines changed: 39 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -113,10 +113,6 @@ type IssueQueryResponse = {
113113
}
114114

115115
const { client, server } = createOpencode()
116-
let input = {
117-
mockEvent: process.env["MOCK_EVENT"],
118-
mockToken: process.env["MOCK_TOKEN"],
119-
}
120116
let accessToken: string
121117
let octoRest: Octokit
122118
let octoGraph: typeof graphql
@@ -150,8 +146,8 @@ try {
150146
session = await client.session.create<true>().then((r) => r.data)
151147
await subscribeSessionEvents()
152148
shareId = await (async () => {
153-
if (useShare() === false) return
154-
if (!useShare() && repoData.data.private) return
149+
if (useEnvShare() === false) return
150+
if (!useEnvShare() && repoData.data.private) return
155151
await client.session.share<true>({ path: session })
156152
return session.id.slice(-8)
157153
})()
@@ -274,23 +270,7 @@ function assertContextEvent(...events: string[]) {
274270
return context
275271
}
276272

277-
function isMock() {
278-
const { mockEvent, mockToken } = input
279-
return Boolean(mockEvent || mockToken)
280-
}
281-
282-
function isPullRequest() {
283-
const context = useContext()
284-
const payload = context.payload as IssueCommentEvent
285-
return Boolean(payload.issue.pull_request)
286-
}
287-
288-
function useContext() {
289-
const { mockEvent } = input
290-
return isMock() ? (JSON.parse(mockEvent!) as GitHubContext) : github.context
291-
}
292-
293-
function useModel() {
273+
function useEnvModel() {
294274
const value = process.env["MODEL"]
295275
if (!value) throw new Error(`Environment variable "MODEL" is not set`)
296276

@@ -302,7 +282,7 @@ function useModel() {
302282
return { providerID, modelID }
303283
}
304284

305-
function useRunUrl() {
285+
function useEnvRunUrl() {
306286
const { repo } = useContext()
307287

308288
const runId = process.env["GITHUB_RUN_ID"]
@@ -311,14 +291,41 @@ function useRunUrl() {
311291
return `/${repo.owner}/${repo.repo}/actions/runs/${runId}`
312292
}
313293

314-
function useShare() {
294+
function useEnvShare() {
315295
const value = process.env["SHARE"]
316296
if (!value) return undefined
317297
if (value === "true") return true
318298
if (value === "false") return false
319299
throw new Error(`Invalid share value: ${value}. Share must be a boolean.`)
320300
}
321301

302+
function useEnvMock() {
303+
return {
304+
mockEvent: process.env["MOCK_EVENT"],
305+
mockToken: process.env["MOCK_TOKEN"],
306+
}
307+
}
308+
309+
function useEnvGithubApp() {
310+
if (process.env["USE_GITHUB_APP"]?.toLowerCase() === "false") return false
311+
return true
312+
}
313+
314+
function isMock() {
315+
const { mockEvent, mockToken } = useEnvMock()
316+
return Boolean(mockEvent || mockToken)
317+
}
318+
319+
function isPullRequest() {
320+
const context = useContext()
321+
const payload = context.payload as IssueCommentEvent
322+
return Boolean(payload.issue.pull_request)
323+
}
324+
325+
function useContext() {
326+
return isMock() ? (JSON.parse(useEnvMock().mockEvent!) as GitHubContext) : github.context
327+
}
328+
322329
function useIssueId() {
323330
const payload = useContext().payload as IssueCommentEvent
324331
return payload.issue.number
@@ -331,12 +338,14 @@ function useShareUrl() {
331338
async function getAccessToken() {
332339
const { repo } = useContext()
333340

341+
if (useEnvGithubApp()) return await core.getIDToken("opencode-github-action")
342+
334343
let response
335344
if (isMock()) {
336345
response = await fetch("https://api.opencode.ai/exchange_github_app_token_with_pat", {
337346
method: "POST",
338347
headers: {
339-
Authorization: `Bearer ${input.mockToken}`,
348+
Authorization: `Bearer ${useEnvMock().mockToken}`,
340349
},
341350
body: JSON.stringify({ owner: repo.owner, repo: repo.repo }),
342351
})
@@ -366,7 +375,7 @@ async function createComment() {
366375
owner: repo.owner,
367376
repo: repo.repo,
368377
issue_number: useIssueId(),
369-
body: `[Working...](${useRunUrl()})`,
378+
body: `[Working...](${useEnvRunUrl()})`,
370379
})
371380
}
372381

@@ -525,7 +534,7 @@ async function summarize(response: string) {
525534

526535
async function chat(text: string, files: PromptFiles = []) {
527536
console.log("Sending message to opencode...")
528-
const { providerID, modelID } = useModel()
537+
const { providerID, modelID } = useEnvModel()
529538

530539
const chat = await client.session.chat<true>({
531540
path: session,
@@ -722,7 +731,7 @@ async function createPR(base: string, branch: string, title: string, body: strin
722731
}
723732

724733
function footer(opts?: { image?: boolean }) {
725-
const { providerID, modelID } = useModel()
734+
const { providerID, modelID } = useEnvModel()
726735

727736
const image = (() => {
728737
if (!shareId) return ""
@@ -734,7 +743,7 @@ function footer(opts?: { image?: boolean }) {
734743
return `<a href="${useShareUrl()}/s/${shareId}"><img width="200" alt="${titleAlt}" src="https://social-cards.sst.dev/opencode-share/${title64}.png?model=${providerID}/${modelID}&version=${session.version}&id=${shareId}" /></a>\n`
735744
})()
736745
const shareUrl = shareId ? `[opencode session](${useShareUrl()}/s/${shareId})&nbsp;&nbsp;|&nbsp;&nbsp;` : ""
737-
return `\n\n${image}${shareUrl}[github run](${useRunUrl()})`
746+
return `\n\n${image}${shareUrl}[github run](${useEnvRunUrl()})`
738747
}
739748

740749
async function fetchRepo() {

0 commit comments

Comments
 (0)