@@ -41,10 +41,50 @@ async function main() {
4141 for ( const pr of prs ) {
4242 console . log ( `\nProcessing PR #${ pr . number } : ${ pr . title } ` )
4343
44+ // Try to update PR branch via GitHub API (rebase onto base branch)
45+ console . log ( ` Attempting to rebase PR #${ pr . number } via GitHub API...` )
46+ const updateBranch = await $ `gh pr update-branch ${ pr . number } --rebase` . nothrow ( )
47+ if ( updateBranch . exitCode !== 0 ) {
48+ console . log ( ` Rebase failed for PR #${ pr . number } (has conflicts)` )
49+ console . log ( ` Error: ${ updateBranch . stderr } ` )
50+ skipped . push ( { number : pr . number , reason : "Rebase failed (conflicts)" } )
51+ continue
52+ }
53+
54+ console . log ( ` Rebase initiated for PR #${ pr . number } ` )
55+
56+ // Wait for rebase to complete by polling PR state
57+ console . log ( ` Waiting for rebase to complete...` )
58+ let rebaseComplete = false
59+ let attempts = 0
60+ const maxAttempts = 30
61+
62+ while ( ! rebaseComplete && attempts < maxAttempts ) {
63+ await Bun . sleep ( 2000 ) // Wait 2 seconds
64+ attempts ++
65+
66+ const prCheck = await $ `gh pr view ${ pr . number } --json mergeStateStatus,headRefOid` . nothrow ( )
67+ if ( prCheck . exitCode === 0 ) {
68+ const prData = JSON . parse ( prCheck . stdout )
69+ // mergeStateStatus will be "clean" when rebase is complete and no conflicts
70+ if ( prData . mergeStateStatus === "clean" ) {
71+ rebaseComplete = true
72+ console . log ( ` Rebase completed for PR #${ pr . number } ` )
73+ }
74+ }
75+ }
76+
77+ if ( ! rebaseComplete ) {
78+ console . log ( ` Timeout waiting for rebase on PR #${ pr . number } ` )
79+ skipped . push ( { number : pr . number , reason : "Timeout waiting for rebase" } )
80+ continue
81+ }
82+
83+ // Fetch the rebased PR
4484 const fetchPR = await $ `git fetch origin pull/${ pr . number } /head:pr-${ pr . number } ` . nothrow ( )
4585 if ( fetchPR . exitCode !== 0 ) {
46- console . log ( ` Failed to fetch PR #${ pr . number } , skipping` )
47- skipped . push ( { number : pr . number , reason : "Failed to fetch" } )
86+ console . log ( ` Failed to fetch PR #${ pr . number } after rebase , skipping` )
87+ skipped . push ( { number : pr . number , reason : "Failed to fetch after rebase " } )
4888 continue
4989 }
5090
0 commit comments