From beba14c5fd56628a50667033d7cbe3675ce3ebcc Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Sun, 11 Aug 2024 13:04:09 +0200 Subject: [PATCH] First stab at maintain-one-comment action --- action.yml | 9 +++++ .../MaintainOneCommentAction.java | 38 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/main/java/io/quarkus/bot/maintainonecomment/MaintainOneCommentAction.java diff --git a/action.yml b/action.yml index 7968883..060cc1d 100644 --- a/action.yml +++ b/action.yml @@ -13,6 +13,15 @@ inputs: build-metadata-file-path: description: 'Path to the build-metadata.json file' required: false + body: + description: 'Body of the comment' + required: false + body-marker: + description: 'Comment marker' + required: false + pr-number: + description: 'The number of the pull request' + required: false runs: using: "composite" steps: diff --git a/src/main/java/io/quarkus/bot/maintainonecomment/MaintainOneCommentAction.java b/src/main/java/io/quarkus/bot/maintainonecomment/MaintainOneCommentAction.java new file mode 100644 index 0000000..7373d54 --- /dev/null +++ b/src/main/java/io/quarkus/bot/maintainonecomment/MaintainOneCommentAction.java @@ -0,0 +1,38 @@ +package io.quarkus.bot.maintainonecomment; + +import java.io.IOException; +import java.util.Optional; + +import org.kohsuke.github.GHIssueComment; +import org.kohsuke.github.GHPullRequest; +import org.kohsuke.github.GHRepository; +import org.kohsuke.github.GitHub; + +import io.quarkiverse.githubaction.Action; +import io.quarkiverse.githubaction.Context; +import io.quarkiverse.githubaction.Inputs; + +public class MaintainOneCommentAction { + + @Action("maintain-one-comment") + void maintainOneComment(Context context, Inputs inputs, GitHub gitHub) throws IOException { + String body = inputs.getRequired("body"); + String bodyMarker = inputs.getRequired("body-marker"); + int prNumber = inputs.getRequiredInt("pr-number"); + + GHRepository repository = gitHub.getRepository(context.getGitHubRepository()); + GHPullRequest pullRequest = repository.getPullRequest(prNumber); + + Optional maintainedComment = pullRequest.listComments().toList().stream() + .filter(c -> c.getBody() != null && c.getBody().contains(bodyMarker)) + .findFirst(); + + String markedBody = body + "\n\n" + bodyMarker; + + if (maintainedComment.isEmpty()) { + pullRequest.comment(markedBody); + } else { + maintainedComment.get().update(markedBody); + } + } +}