Browse Source

Default next milestone when checking for open issues

Closes gh-10921
Eleftheria Stein 3 years ago
parent
commit
6f35364c5d

+ 26 - 4
buildSrc/src/main/java/org/springframework/gradle/github/milestones/GitHubMilestoneHasNoOpenIssuesTask.java

@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright 2019-2020 the original author or authors.
+ * Copyright 2019-2022 the original author or authors.
  *
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * you may not use this file except in compliance with the License.
@@ -17,26 +17,48 @@ package org.springframework.gradle.github.milestones;
 
 
 import org.gradle.api.Action;
 import org.gradle.api.Action;
 import org.gradle.api.DefaultTask;
 import org.gradle.api.DefaultTask;
+import org.gradle.api.file.RegularFileProperty;
 import org.gradle.api.tasks.Input;
 import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.InputFile;
 import org.gradle.api.tasks.Optional;
 import org.gradle.api.tasks.Optional;
 import org.gradle.api.tasks.TaskAction;
 import org.gradle.api.tasks.TaskAction;
+import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.constructor.Constructor;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 
 
 import org.springframework.gradle.github.RepositoryRef;
 import org.springframework.gradle.github.RepositoryRef;
 
 
-public class GitHubMilestoneHasNoOpenIssuesTask extends DefaultTask {
+public abstract class GitHubMilestoneHasNoOpenIssuesTask extends DefaultTask {
 	@Input
 	@Input
 	private RepositoryRef repository = new RepositoryRef();
 	private RepositoryRef repository = new RepositoryRef();
 
 
-	@Input
+	@Input @Optional
 	private String milestoneTitle;
 	private String milestoneTitle;
 
 
+	@InputFile @Optional
+	public abstract RegularFileProperty getNextVersionFile();
+
 	@Input @Optional
 	@Input @Optional
 	private String gitHubAccessToken;
 	private String gitHubAccessToken;
 
 
 	private GitHubMilestoneApi milestones = new GitHubMilestoneApi();
 	private GitHubMilestoneApi milestones = new GitHubMilestoneApi();
 
 
 	@TaskAction
 	@TaskAction
-	public void checkHasNoOpenIssues() {
+	public void checkHasNoOpenIssues() throws FileNotFoundException {
+		if (this.milestoneTitle == null) {
+			File nextVersionFile = getNextVersionFile().getAsFile().get();
+			Yaml yaml = new Yaml(new Constructor(NextVersionYml.class));
+			NextVersionYml nextVersionYml = yaml.load(new FileInputStream(nextVersionFile));
+			String nextVersion = nextVersionYml.getVersion();
+			if (nextVersion == null) {
+				throw new IllegalArgumentException(
+						"Could not find version property in provided file " + nextVersionFile.getName());
+			}
+			this.milestoneTitle = nextVersion;
+		}
 		long milestoneNumber = this.milestones.findMilestoneNumberByTitle(this.repository, this.milestoneTitle);
 		long milestoneNumber = this.milestones.findMilestoneNumberByTitle(this.repository, this.milestoneTitle);
 		boolean isOpenIssues = this.milestones.isOpenIssuesForMilestoneNumber(this.repository, milestoneNumber);
 		boolean isOpenIssues = this.milestones.isOpenIssuesForMilestoneNumber(this.repository, milestoneNumber);
 		if (isOpenIssues) {
 		if (isOpenIssues) {

+ 15 - 11
buildSrc/src/main/java/org/springframework/gradle/github/milestones/GitHubMilestonePlugin.java

@@ -24,17 +24,6 @@ import org.gradle.api.tasks.TaskProvider;
 public class GitHubMilestonePlugin implements Plugin<Project> {
 public class GitHubMilestonePlugin implements Plugin<Project> {
 	@Override
 	@Override
 	public void apply(Project project) {
 	public void apply(Project project) {
-		project.getTasks().register("gitHubCheckMilestoneHasNoOpenIssues", GitHubMilestoneHasNoOpenIssuesTask.class, new Action<GitHubMilestoneHasNoOpenIssuesTask>() {
-			@Override
-			public void execute(GitHubMilestoneHasNoOpenIssuesTask githubCheckMilestoneHasNoOpenIssues) {
-				githubCheckMilestoneHasNoOpenIssues.setGroup("Release");
-				githubCheckMilestoneHasNoOpenIssues.setDescription("Checks if there are any open issues for the specified repository and milestone");
-				githubCheckMilestoneHasNoOpenIssues.setMilestoneTitle((String) project.findProperty("nextVersion"));
-				if (project.hasProperty("gitHubAccessToken")) {
-					githubCheckMilestoneHasNoOpenIssues.setGitHubAccessToken((String) project.findProperty("gitHubAccessToken"));
-				}
-			}
-		});
 		TaskProvider<GitHubMilestoneNextReleaseTask> nextReleaseMilestoneTask = project.getTasks().register("gitHubNextReleaseMilestone", GitHubMilestoneNextReleaseTask.class, new Action<GitHubMilestoneNextReleaseTask>() {
 		TaskProvider<GitHubMilestoneNextReleaseTask> nextReleaseMilestoneTask = project.getTasks().register("gitHubNextReleaseMilestone", GitHubMilestoneNextReleaseTask.class, new Action<GitHubMilestoneNextReleaseTask>() {
 					@Override
 					@Override
 					public void execute(GitHubMilestoneNextReleaseTask gitHubMilestoneNextReleaseTask) {
 					public void execute(GitHubMilestoneNextReleaseTask gitHubMilestoneNextReleaseTask) {
@@ -49,6 +38,21 @@ public class GitHubMilestonePlugin implements Plugin<Project> {
 						}
 						}
 					}
 					}
 				});
 				});
+		project.getTasks().register("gitHubCheckMilestoneHasNoOpenIssues", GitHubMilestoneHasNoOpenIssuesTask.class, new Action<GitHubMilestoneHasNoOpenIssuesTask>() {
+			@Override
+			public void execute(GitHubMilestoneHasNoOpenIssuesTask githubCheckMilestoneHasNoOpenIssues) {
+				githubCheckMilestoneHasNoOpenIssues.setGroup("Release");
+				githubCheckMilestoneHasNoOpenIssues.setDescription("Checks if there are any open issues for the specified repository and milestone");
+				githubCheckMilestoneHasNoOpenIssues.setMilestoneTitle((String) project.findProperty("nextVersion"));
+				if (!project.hasProperty("nextVersion")) {
+					githubCheckMilestoneHasNoOpenIssues.getNextVersionFile().convention(
+							nextReleaseMilestoneTask.flatMap(GitHubMilestoneNextReleaseTask::getNextReleaseFile));
+				}
+				if (project.hasProperty("gitHubAccessToken")) {
+					githubCheckMilestoneHasNoOpenIssues.setGitHubAccessToken((String) project.findProperty("gitHubAccessToken"));
+				}
+			}
+		});
 		project.getTasks().register("gitHubCheckNextVersionDueToday", GitHubMilestoneNextVersionDueTodayTask.class, new Action<GitHubMilestoneNextVersionDueTodayTask>() {
 		project.getTasks().register("gitHubCheckNextVersionDueToday", GitHubMilestoneNextVersionDueTodayTask.class, new Action<GitHubMilestoneNextVersionDueTodayTask>() {
 					@Override
 					@Override
 					public void execute(GitHubMilestoneNextVersionDueTodayTask gitHubMilestoneNextVersionDueTodayTask) {
 					public void execute(GitHubMilestoneNextVersionDueTodayTask gitHubMilestoneNextVersionDueTodayTask) {