diff --git a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifier.java b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifier.java index a56c431d9..40c9eedf2 100644 --- a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifier.java +++ b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifier.java @@ -66,6 +66,9 @@ class IssueNotifier implements Notifier, PullRequestListener, RepositoryListener // repository but still generate links to the original. Only works for notifications // on repository, not pull requests. private final HostedRepository originalRepository; + // Controls whether the notifier should try to resolve issues. Only valid when + // pronly is true. + private final boolean resolve; private final Logger log = Logger.getLogger("org.openjdk.skara.bots.notify"); @@ -75,7 +78,7 @@ class IssueNotifier implements Notifier, PullRequestListener, RepositoryListener boolean setFixVersion, Map<String, String> fixVersions, Map<String, List<String>> altFixVersions, JbsBackport jbsBackport, boolean prOnly, boolean repoOnly, String buildName, HostedRepository censusRepository, String censusRef, String namespace, boolean useHeadVersion, - HostedRepository originalRepository) { + HostedRepository originalRepository, boolean resolve) { this.issueProject = issueProject; this.reviewLink = reviewLink; this.reviewIcon = reviewIcon; @@ -93,6 +96,7 @@ class IssueNotifier implements Notifier, PullRequestListener, RepositoryListener this.namespace = namespace; this.useHeadVersion = useHeadVersion; this.originalRepository = originalRepository; + this.resolve = resolve; } static IssueNotifierBuilder newBuilder() { @@ -176,7 +180,7 @@ public void onIntegratedPullRequest(PullRequest pr, Path scratchPath, Hash hash) } // If prOnly is false, this is instead done when processing commits - if (prOnly) { + if (prOnly && resolve) { if (issue.state() == Issue.State.OPEN) { issue.setState(Issue.State.RESOLVED); if (issue.assignees().isEmpty()) { diff --git a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierBuilder.java b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierBuilder.java index 62ec6ce17..dfb0c300e 100644 --- a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierBuilder.java +++ b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierBuilder.java @@ -46,6 +46,7 @@ class IssueNotifierBuilder { private String namespace = "openjdk.org"; private boolean useHeadVersion = false; private HostedRepository originalRepository; + private boolean resolve = true; IssueNotifierBuilder issueProject(IssueProject issueProject) { this.issueProject = issueProject; @@ -133,10 +134,24 @@ public IssueNotifierBuilder originalRepository(HostedRepository originalReposito return this; } + public IssueNotifierBuilder resolve(boolean resolve) { + this.resolve = resolve; + return this; + } + + public boolean prOnly() { + return prOnly; + } + + public boolean resolve() { + return resolve; + } + IssueNotifier build() { var jbsBackport = new JbsBackport(issueProject.issueTracker().uri(), vault); return new IssueNotifier(issueProject, reviewLink, reviewIcon, commitLink, commitIcon, setFixVersion, fixVersions, altFixVersions, jbsBackport, prOnly, - repoOnly, buildName, censusRepository, censusRef, namespace, useHeadVersion, originalRepository); + repoOnly, buildName, censusRepository, censusRef, namespace, useHeadVersion, originalRepository, + resolve); } } diff --git a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierFactory.java b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierFactory.java index 9f5abced3..a242f149c 100644 --- a/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierFactory.java +++ b/bots/notify/src/main/java/org/openjdk/skara/bots/notify/issue/IssueNotifierFactory.java @@ -96,6 +96,13 @@ public Notifier create(BotConfiguration botConfiguration, JSONObject notifierCon builder.prOnly(notifierConfiguration.get("pronly").asBoolean()); } + if (notifierConfiguration.contains("resolve")) { + builder.resolve(notifierConfiguration.get("resolve").asBoolean()); + if (!builder.resolve() && !builder.prOnly()) { + throw new RuntimeException("Cannot disable resolve when pronly is false"); + } + } + if (notifierConfiguration.contains("repoonly")) { builder.repoOnly(notifierConfiguration.get("repoonly").asBoolean()); }