Skip to content

Commit db4a431

Browse files
Copilotpelikhan
andauthored
Refine PR review retry coverage
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
1 parent 6417a55 commit db4a431

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

actions/setup/js/pr_review_buffer.cjs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ function createReviewBuffer() {
101101
* @param {{owner: string, repo: string}} repoParts
102102
* @param {number} pullRequestNumber
103103
* @param {"before" | "after"} phase
104-
* @returns {Promise<ReturnType<typeof fetchPullRequestReviewState> extends Promise<infer T> ? T | null : null>}
104+
* @returns {Promise<Object | null>}
105105
*/
106106
async function fetchReviewStateBestEffort(repoParts, pullRequestNumber, phase) {
107107
try {
@@ -533,10 +533,14 @@ function createReviewBuffer() {
533533
return withRetry(() => github.rest.pulls.createReview(params), REVIEW_RATE_LIMIT_RETRY_CONFIG, `pulls.createReview ${repo}#${pullRequestNumber}`);
534534
}
535535

536+
async function fetchAfterStateIfAvailable() {
537+
return beforeState ? fetchReviewStateBestEffort(repoParts, pullRequestNumber, "after") : null;
538+
}
539+
536540
try {
537541
const { data: review } = await createReviewWithRetry(requestParams);
538542
await maybeSupersedeOlderReviews(review.id);
539-
const afterState = beforeState ? await fetchReviewStateBestEffort(repoParts, pullRequestNumber, "after") : null;
543+
const afterState = await fetchAfterStateIfAvailable();
540544

541545
core.info(`Created PR review #${review.id}: ${review.html_url}`);
542546

@@ -573,7 +577,7 @@ function createReviewBuffer() {
573577
requestParams.event = "COMMENT";
574578
const { data: review } = await createReviewWithRetry(requestParams);
575579
await maybeSupersedeOlderReviews(review.id);
576-
const afterState = beforeState ? await fetchReviewStateBestEffort(repoParts, pullRequestNumber, "after") : null;
580+
const afterState = await fetchAfterStateIfAvailable();
577581
core.info(`Created PR review #${review.id}: ${review.html_url}`);
578582
return attachExecutionState(
579583
{
@@ -615,7 +619,7 @@ function createReviewBuffer() {
615619
bodyOnlyParams.body = appendUnanchoredCommentsSection(typeof requestParams.body === "string" ? requestParams.body : "", comments);
616620
const { data: review } = await createReviewWithRetry(bodyOnlyParams);
617621
await maybeSupersedeOlderReviews(review.id);
618-
const afterState = beforeState ? await fetchReviewStateBestEffort(repoParts, pullRequestNumber, "after") : null;
622+
const afterState = await fetchAfterStateIfAvailable();
619623
core.info(`Created PR review #${review.id} (body-only fallback): ${review.html_url}`);
620624
return attachExecutionState(
621625
{

actions/setup/js/pr_review_buffer.test.cjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,9 @@ describe("pr_review_buffer (factory pattern)", () => {
326326

327327
expect(result.success).toBe(true);
328328
expect(mockGithub.rest.pulls.createReview).toHaveBeenCalledTimes(2);
329+
expect(setTimeoutSpy).toHaveBeenCalledTimes(1);
330+
expect(setTimeoutSpy.mock.calls[0][1]).toBeGreaterThanOrEqual(1000);
331+
expect(setTimeoutSpy.mock.calls[0][1]).toBeLessThan(6000);
329332
} finally {
330333
setTimeoutSpy.mockRestore();
331334
}

0 commit comments

Comments
 (0)