From 6d36dbf9de5ea75035c7dca41fcfda5e69a6fd05 Mon Sep 17 00:00:00 2001 From: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Date: Wed, 12 Nov 2025 14:16:07 -0800 Subject: [PATCH] fix: github action dirty check (#4262) --- packages/opencode/src/cli/cmd/github.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/opencode/src/cli/cmd/github.ts b/packages/opencode/src/cli/cmd/github.ts index cd3ceb94..34d47ee5 100644 --- a/packages/opencode/src/cli/cmd/github.ts +++ b/packages/opencode/src/cli/cmd/github.ts @@ -439,9 +439,10 @@ export const GithubRunCommand = cmd({ // Local PR if (prData.headRepository.nameWithOwner === prData.baseRepository.nameWithOwner) { await checkoutLocalBranch(prData) + const head = (await $`git rev-parse HEAD`).stdout.toString().trim() const dataPrompt = buildPromptDataForPR(prData) const response = await chat(`${userPrompt}\n\n${dataPrompt}`, promptFiles) - if (await branchIsDirty()) { + if (await branchIsDirty(head)) { const summary = await summarize(response) await pushToLocalBranch(summary) } @@ -451,9 +452,10 @@ export const GithubRunCommand = cmd({ // Fork PR else { await checkoutForkBranch(prData) + const head = (await $`git rev-parse HEAD`).stdout.toString().trim() const dataPrompt = buildPromptDataForPR(prData) const response = await chat(`${userPrompt}\n\n${dataPrompt}`, promptFiles) - if (await branchIsDirty()) { + if (await branchIsDirty(head)) { const summary = await summarize(response) await pushToForkBranch(summary, prData) } @@ -464,10 +466,11 @@ export const GithubRunCommand = cmd({ // Issue else { const branch = await checkoutNewBranch() + const head = (await $`git rev-parse HEAD`).stdout.toString().trim() const issueData = await fetchIssue() const dataPrompt = buildPromptDataForIssue(issueData) const response = await chat(`${userPrompt}\n\n${dataPrompt}`, promptFiles) - if (await branchIsDirty()) { + if (await branchIsDirty(head)) { const summary = await summarize(response) await pushToNewBranch(summary, branch) const pr = await createPR( @@ -832,10 +835,13 @@ Co-authored-by: ${actor} <${actor}@users.noreply.github.com>"` await $`git push fork HEAD:${remoteBranch}` } - async function branchIsDirty() { + async function branchIsDirty(originalHead: string) { console.log("Checking if branch is dirty...") const ret = await $`git status --porcelain` - return ret.stdout.toString().trim().length > 0 + const status = ret.stdout.toString().trim() + if (status.length > 0) return true + const head = await $`git rev-parse HEAD` + return head.stdout.toString().trim() !== originalHead } async function assertPermissions() {