diff options
| author | Dax Raad <[email protected]> | 2026-01-29 21:23:03 -0500 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2026-01-29 21:23:03 -0500 |
| commit | e9e8d97b0dbaf9e13e0127b763c941f1fd45230c (patch) | |
| tree | 87b828e62747371810ebb6b797936bab790cb09f /script/beta.ts | |
| parent | 553316af2a72ea57539dee933b2871db2bf03ef3 (diff) | |
| download | opencode-e9e8d97b0dbaf9e13e0127b763c941f1fd45230c.tar.gz opencode-e9e8d97b0dbaf9e13e0127b763c941f1fd45230c.zip | |
ci
Diffstat (limited to 'script/beta.ts')
| -rwxr-xr-x | script/beta.ts | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/script/beta.ts b/script/beta.ts index 569a906c8..6733e9147 100755 --- a/script/beta.ts +++ b/script/beta.ts @@ -41,10 +41,50 @@ async function main() { for (const pr of prs) { console.log(`\nProcessing PR #${pr.number}: ${pr.title}`) + // Try to update PR branch via GitHub API (rebase onto base branch) + console.log(` Attempting to rebase PR #${pr.number} via GitHub API...`) + const updateBranch = await $`gh pr update-branch ${pr.number} --rebase`.nothrow() + if (updateBranch.exitCode !== 0) { + console.log(` Rebase failed for PR #${pr.number} (has conflicts)`) + console.log(` Error: ${updateBranch.stderr}`) + skipped.push({ number: pr.number, reason: "Rebase failed (conflicts)" }) + continue + } + + console.log(` Rebase initiated for PR #${pr.number}`) + + // Wait for rebase to complete by polling PR state + console.log(` Waiting for rebase to complete...`) + let rebaseComplete = false + let attempts = 0 + const maxAttempts = 30 + + while (!rebaseComplete && attempts < maxAttempts) { + await Bun.sleep(2000) // Wait 2 seconds + attempts++ + + const prCheck = await $`gh pr view ${pr.number} --json mergeStateStatus,headRefOid`.nothrow() + if (prCheck.exitCode === 0) { + const prData = JSON.parse(prCheck.stdout) + // mergeStateStatus will be "clean" when rebase is complete and no conflicts + if (prData.mergeStateStatus === "clean") { + rebaseComplete = true + console.log(` Rebase completed for PR #${pr.number}`) + } + } + } + + if (!rebaseComplete) { + console.log(` Timeout waiting for rebase on PR #${pr.number}`) + skipped.push({ number: pr.number, reason: "Timeout waiting for rebase" }) + continue + } + + // Fetch the rebased PR const fetchPR = await $`git fetch origin pull/${pr.number}/head:pr-${pr.number}`.nothrow() if (fetchPR.exitCode !== 0) { - console.log(` Failed to fetch PR #${pr.number}, skipping`) - skipped.push({ number: pr.number, reason: "Failed to fetch" }) + console.log(` Failed to fetch PR #${pr.number} after rebase, skipping`) + skipped.push({ number: pr.number, reason: "Failed to fetch after rebase" }) continue } |
