|
1 | 1 | package io.quarkus.bot;
|
2 | 2 |
|
3 |
| -import java.io.IOException; |
4 |
| -import java.util.ArrayList; |
5 |
| -import java.util.Arrays; |
6 |
| -import java.util.Collections; |
7 |
| -import java.util.List; |
8 |
| -import java.util.Locale; |
9 |
| -import java.util.regex.Pattern; |
10 |
| - |
11 |
| -import jakarta.inject.Inject; |
12 |
| - |
13 |
| -import org.jboss.logging.Logger; |
14 |
| -import org.kohsuke.github.GHEventPayload; |
15 |
| -import org.kohsuke.github.GHPullRequest; |
16 |
| - |
17 | 3 | import io.quarkiverse.githubapp.ConfigFile;
|
18 | 4 | import io.quarkiverse.githubapp.event.PullRequest;
|
19 | 5 | import io.quarkus.bot.config.Feature;
|
|
22 | 8 | import io.quarkus.bot.util.GHPullRequests;
|
23 | 9 | import io.quarkus.bot.util.PullRequestFilesMatcher;
|
24 | 10 | import io.quarkus.bot.util.Strings;
|
| 11 | +import jakarta.inject.Inject; |
| 12 | +import org.jboss.logging.Logger; |
| 13 | +import org.kohsuke.github.GHEventPayload; |
| 14 | +import org.kohsuke.github.GHIssueComment; |
| 15 | +import org.kohsuke.github.GHPullRequest; |
| 16 | + |
| 17 | +import java.io.IOException; |
| 18 | +import java.util.ArrayList; |
| 19 | +import java.util.Arrays; |
| 20 | +import java.util.Collections; |
| 21 | +import java.util.List; |
| 22 | +import java.util.Locale; |
| 23 | +import java.util.Optional; |
| 24 | +import java.util.regex.Pattern; |
| 25 | + |
| 26 | +import static io.quarkus.bot.util.Strings.EDITORIAL_RULES_COMMENT_MARKER; |
25 | 27 |
|
26 | 28 | class CheckPullRequestEditorialRules {
|
27 | 29 |
|
@@ -80,12 +82,30 @@ void checkPullRequestEditorialRules(@PullRequest.Opened GHEventPayload.PullReque
|
80 | 82 | }
|
81 | 83 |
|
82 | 84 | if (!quarkusBotConfig.isDryRun()) {
|
83 |
| - pullRequest.comment(Strings.commentByBot(comment.toString())); |
| 85 | + pullRequest.comment(Strings.editorialCommentByBot(comment.toString())); |
84 | 86 | } else {
|
85 | 87 | LOG.info("Pull request #" + pullRequest.getNumber() + " - Add comment " + comment.toString());
|
86 | 88 | }
|
87 | 89 | }
|
88 | 90 |
|
| 91 | + void checkPullRequestEditorialRulesOnEdit(@PullRequest.Edited GHEventPayload.PullRequest pullRequestPayload, |
| 92 | + @ConfigFile("quarkus-github-bot.yml") QuarkusGitHubBotConfigFile quarkusBotConfigFile) throws IOException { |
| 93 | + if (!Feature.CHECK_EDITORIAL_RULES.isEnabled(quarkusBotConfigFile)) { |
| 94 | + return; |
| 95 | + } |
| 96 | + var pullRequest = pullRequestPayload.getPullRequest(); |
| 97 | + |
| 98 | + var titleErrorMessages = getTitleErrorMessages(pullRequest.getTitle()); |
| 99 | + var bodyErrorMessages = getBodyErrorMessages(pullRequest.getBody(), pullRequest); |
| 100 | + |
| 101 | + if (titleErrorMessages.isEmpty() && bodyErrorMessages.isEmpty()) { |
| 102 | + removeBotComment(pullRequest); |
| 103 | + } else { |
| 104 | + LOG.debug("Pull request #" + pullRequest.getNumber() + " - Violations still exist. No action taken"); |
| 105 | + } |
| 106 | + // Note: We could potentially update the comment if some rules are fixed but others remain.. |
| 107 | + } |
| 108 | + |
89 | 109 | private static List<String> getTitleErrorMessages(String title) {
|
90 | 110 | List<String> errorMessages = new ArrayList<>();
|
91 | 111 |
|
@@ -166,4 +186,34 @@ private static boolean isMeaningfulPullRequest(GHPullRequest pullRequest) throws
|
166 | 186 |
|
167 | 187 | return true;
|
168 | 188 | }
|
| 189 | + |
| 190 | + private Optional<GHIssueComment> findBotComment(GHPullRequest pullRequest) throws IOException { |
| 191 | + List<GHIssueComment> comments = pullRequest.getComments(); |
| 192 | + if (comments == null || comments.isEmpty()) { |
| 193 | + return Optional.empty(); |
| 194 | + } |
| 195 | + |
| 196 | + return comments.stream() |
| 197 | + .filter(comment -> comment.getBody() != null) |
| 198 | + .filter(comment -> comment.getBody().contains(EDITORIAL_RULES_COMMENT_MARKER)) |
| 199 | + .findFirst(); |
| 200 | + } |
| 201 | + |
| 202 | + private void removeBotComment(GHPullRequest pullRequest) throws IOException { |
| 203 | + Optional<GHIssueComment> commentToDeleteOpt = findBotComment(pullRequest); |
| 204 | + if (commentToDeleteOpt.isPresent()) { |
| 205 | + GHIssueComment commentToDelete = commentToDeleteOpt.get(); |
| 206 | + if (!quarkusBotConfig.isDryRun()) { |
| 207 | + try { |
| 208 | + commentToDelete.delete(); |
| 209 | + } catch (IOException e) { |
| 210 | + LOG.error(String.format("Pull Request # %s - Failed to delete comment %d", pullRequest.getNumber(), |
| 211 | + commentToDelete.getId()), e); |
| 212 | + } |
| 213 | + } else { |
| 214 | + LOG.info(String.format("Pull Request # %s - Delete comment %d", pullRequest.getNumber(), |
| 215 | + commentToDelete.getId())); |
| 216 | + } |
| 217 | + } |
| 218 | + } |
169 | 219 | }
|
0 commit comments