Skip to content

Commit

Permalink
Add forceReview flag, fixes hmarr#206
Browse files Browse the repository at this point in the history
When forceReview is true, re-approves the pull request even if current
review state is already approved
  • Loading branch information
vincejv committed Oct 19, 2022
1 parent a740555 commit 72a28aa
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 6 deletions.
28 changes: 28 additions & 0 deletions src/approve.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,34 @@ test("when a review has already been approved by another user", async () => {
);
});

test("when a review has already been approved by another user and forceReview is set to true", async () => {
nock("https://api.github.com").get("/user").reply(200, { login: "hmarr" });

nock("https://api.github.com")
.get("/repos/hmarr/test/pulls/101")
.reply(200, { head: { sha: "24c5451bbf1fb09caa3ac8024df4788aff4d4974" } });

nock("https://api.github.com")
.get("/repos/hmarr/test/pulls/101/reviews")
.reply(200, [
{
user: { login: "some" },
commit_id: "24c5451bbf1fb09caa3ac8024df4788aff4d4974",
state: "APPROVED",
},
]);

nock("https://api.github.com")
.post("/repos/hmarr/test/pulls/101/reviews")
.reply(200, { id: 1 });

await approve("gh-tok", new Context(), 101, undefined, true);

expect(core.info).toHaveBeenCalledWith(
expect.stringContaining("Approved pull request #101")
);
});

test("when a review has already been approved by unknown user", async () => {
nock("https://api.github.com").get("/user").reply(200, { login: "hmarr" });

Expand Down
22 changes: 16 additions & 6 deletions src/approve.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,15 @@ export async function approve(
token: string,
context: Context,
prNumber?: number,
reviewMessage?: string
reviewMessage?: string,
forceReview?: boolean,
) {
if (!prNumber) {
prNumber = context.payload.pull_request?.number;
}
if (forceReview == null) {
forceReview = false;
}

if (!prNumber) {
core.setFailed(
Expand Down Expand Up @@ -54,15 +58,21 @@ export async function approve(
review.commit_id == commit &&
review.state == "APPROVED"
) {
core.info(
`Current user already approved pull request #${prNumber}, nothing to do`
);
return;
if (forceReview) {
core.info(
`Current user already approved pull request #${prNumber}, but forceReview is set to true, so re-approving anyway`
)
} else {
core.info(
`Current user already approved pull request #${prNumber}, nothing to do`
);
return;
}
}
}

core.info(
`Pull request #${prNumber} has not been approved yet, creating approving review`
`Creating approving review for pull request #${prNumber}`
);
await client.rest.pulls.createReview({
owner: context.repo.owner,
Expand Down

0 comments on commit 72a28aa

Please sign in to comment.