From e9e8d97b0dbaf9e13e0127b763c941f1fd45230c Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Thu, 29 Jan 2026 21:23:03 -0500 Subject: [PATCH] ci --- script/beta.ts | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/script/beta.ts b/script/beta.ts index 569a906c8f..6733e9147c 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 }