also looking at this
fix(review): persist review state where it is read back
#1405
6 files
+176
-14
| @@ -1614,6 +1614,8 @@ cli | ||
| 1614 | 1614 | let headSha = '' |
| 1615 | 1615 | let seenFingerprints: string[] = [] |
| 1616 | 1616 | let gitProvider: GitProvider | null = null |
| 1617 | let prBody: string | null = null | |
| 1618 | let wasPaused = false | |
| 1617 | 1619 | |
| 1618 | 1620 | if (prNumber) { |
| 1619 | 1621 | gitProvider = await providerFor(config, 'reviewing a pull request', log) |
| @@ -1627,7 +1629,13 @@ cli | ||
| 1627 | 1629 | const pr = prs.find(candidate => candidate.number === number) |
| 1628 | 1630 | const state = parseReviewState(pr?.body) |
| 1629 | 1631 | seenFingerprints = state?.fingerprints ?? [] |
| 1630 | headSha = state?.reviewedSha ?? '' | |
| 1632 | prBody = pr?.body ?? null | |
| 1633 | wasPaused = Boolean(state?.paused) | |
| 1634 | ||
| 1635 | // The commit being reviewed now, not the one reviewed last time. | |
| 1636 | // Reading it from the stored state recorded a stale sha, so the next | |
| 1637 | // run could not tell whether this commit had been seen. | |
| 1638 | headSha = await gitProvider.getPullRequestHeadSha(number) | |
| 1631 | 1639 | } |
| 1632 | 1640 | else { |
| 1633 | 1641 | const base = options.base || config.repository?.baseBranch || 'main' |
| @@ -1734,7 +1742,21 @@ cli | ||
| 1734 | 1742 | } |
| 1735 | 1743 | |
| 1736 | 1744 | assertSupports(gitProvider!, 'inlineReviewComments', 'createReview', 'posting a review') |
| 1737 | await gitProvider.createReview(Number.parseInt(prNumber, 10), prepared) | |
| 1745 | const reviewedNumber = Number.parseInt(prNumber, 10) | |
| 1746 | await gitProvider.createReview(reviewedNumber, prepared) | |
| 1747 | ||
| 1748 | // The review has landed; recording where it got to is bookkeeping, so a | |
| 1749 | // failure here must not present as a failed review. | |
| 1750 | try { | |
| 1751 | const { upsertReviewState } = await import('../src/review/marker') | |
| 1752 | await gitProvider.updatePullRequest(reviewedNumber, { | |
| 1753 | body: upsertReviewState(prBody, { ...prepared.state, ...(wasPaused ? { paused: true } : {}) }), | |
| 1754 | }) | |
| 1755 | } | |
| 1756 | catch (error) { | |
| 1757 | logger.warn(`Could not record review state on PR #${prNumber}: ${error instanceof Error ? error.message : String(error)}`) | |
| 1758 | } | |
| 1759 | ||
| 1738 | 1760 | logger.success(`✅ Reviewed PR #${prNumber}: ${result.findings.length} finding(s)`) |
| 1739 | 1761 | } |
| 1740 | 1762 | catch (error) { |