Skip to content

Commit 01c7357

Browse files
[Fix] Review labels disappear after base updates (#1584)
* fix: preserve PR labels while mergeability is pending * fix: preserve review state after metadata failures --------- Co-authored-by: Roomote <roomote@roomote.dev>
1 parent ae6c1a8 commit 01c7357

2 files changed

Lines changed: 39 additions & 5 deletions

File tree

‎.github/workflows/label-pr-review-state.yml‎

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -721,8 +721,16 @@ jobs:
721721
continue;
722722
}
723723
if (latestPrDetail.mergeable === null || latestPrDetail.mergeable_state === 'unknown') {
724-
desiredLabel = null;
725-
phase = 'mergeability-pending';
724+
try {
725+
core.info(`PR #${pr.number}: mergeability pending — preserving current state labels`);
726+
await updateReviewGate(pr, 'mergeability-pending', false);
727+
await setCodeRabbitReviewActive(pr, false);
728+
await updateReviewGuide(pr, 'mergeability-pending', existingGuide);
729+
} catch (error) {
730+
error.preserveStateLabels = true;
731+
throw error;
732+
}
733+
continue;
726734
}
727735
}
728736

‎src/services/__tests__/pr-review-state-workflow.test.ts‎

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -957,10 +957,10 @@ describe("PR review-state workflow", () => {
957957
expect(result.addLabels).toHaveBeenCalledWith(expect.objectContaining({ labels: ["has-conflicts"] }))
958958
})
959959

960-
it("does not tag a PR awaiting maintainer while mergeability is unknown", async () => {
960+
it("preserves the current state while mergeability is unknown", async () => {
961961
const result = await runWorkflow({
962962
eventName: "push",
963-
labels: ["awaiting-maintainer"],
963+
labels: ["awaiting-maintainer", "coderabbit-review-active"],
964964
mergeabilitySequence: [
965965
{ mergeable: null, mergeableState: "unknown" },
966966
{ mergeable: null, mergeableState: "unknown" },
@@ -975,9 +975,35 @@ describe("PR review-state workflow", () => {
975975
],
976976
})
977977

978-
expect(result.removeLabel).toHaveBeenCalledWith(expect.objectContaining({ name: "awaiting-maintainer" }))
978+
expect(result.removeLabel).not.toHaveBeenCalledWith(expect.objectContaining({ name: "awaiting-maintainer" }))
979+
expect(result.removeLabel).toHaveBeenCalledWith(expect.objectContaining({ name: "coderabbit-review-active" }))
979980
expect(result.addLabels).not.toHaveBeenCalledWith(expect.objectContaining({ labels: ["awaiting-maintainer"] }))
980981
expect(latestGateStatus(result)?.description).toContain("calculating mergeability")
982+
expect(latestGuide(result)).toContain("calculating mergeability")
983+
})
984+
985+
it("preserves the current state when pending mergeability metadata cannot be updated", async () => {
986+
const result = await runWorkflow({
987+
eventName: "push",
988+
labels: ["awaiting-maintainer", "coderabbit-review-active"],
989+
mergeabilitySequence: [
990+
{ mergeable: null, mergeableState: "unknown" },
991+
{ mergeable: null, mergeableState: "unknown" },
992+
],
993+
removeLabelStatus: 500,
994+
reviews: [
995+
{
996+
login: "coderabbitai[bot]",
997+
type: "Bot",
998+
state: "APPROVED",
999+
submittedAt: REVIEWED_AT,
1000+
},
1001+
],
1002+
})
1003+
1004+
expect(result.removeLabel).toHaveBeenCalledWith(expect.objectContaining({ name: "coderabbit-review-active" }))
1005+
expect(result.removeLabel).not.toHaveBeenCalledWith(expect.objectContaining({ name: "awaiting-maintainer" }))
1006+
expect(result.setFailed).toHaveBeenCalledWith(expect.stringContaining("Remove label failed"))
9811007
})
9821008

9831009
it("routes CodeRabbit change requests back to the author", async () => {

0 commit comments

Comments
 (0)