Updates for new sagain api, s-c-build 3.1 and boot 2.6 (#243)

Updates releaser to use spring cloud build 3.1.0

Transitively uses boot 2.6

Updates releaser to use new Sagan API

Fixes gh-196
Fixes gh-194
This commit is contained in:
Spencer Gibb
2022-02-18 14:29:17 -05:00
committed by GitHub
parent 2e7d318f13
commit e83cda4fed
195 changed files with 2914 additions and 4881 deletions

View File

@@ -40,6 +40,11 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>compile</scope>
</dependency>
</dependencies>
<profiles>

View File

@@ -21,8 +21,7 @@ import releaser.internal.ReleaserProperties;
public class MavenBomParserAccessor {
public static BomParser bomParser(ReleaserProperties properties,
CustomBomParser parser) {
public static BomParser bomParser(ReleaserProperties properties, CustomBomParser parser) {
return new MavenBomParser(properties, Collections.singletonList(parser));
}

View File

@@ -31,15 +31,13 @@ public final class TestUtils {
prepareLocalRepo("target/test-classes/projects/", "spring-cloud");
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-wiki");
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-release");
prepareLocalRepo("target/test-classes/projects/",
"spring-cloud-release-with-snapshot");
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-release-with-snapshot");
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-consul");
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-build");
prepareLocalRepo("target/test-classes/projects/", "spring-cloud-static-angel");
}
private static void prepareLocalRepo(String buildDir, String repoPath)
throws IOException {
private static void prepareLocalRepo(String buildDir, String repoPath) throws IOException {
File dotGit = new File(buildDir + repoPath + "/.git");
File git = new File(buildDir + repoPath + "/git");
if (git.exists()) {

View File

@@ -25,8 +25,8 @@ import releaser.internal.template.TemplateGenerator;
*/
public class TestReleaseContentsUpdater extends ReleaseTrainContentsUpdater {
public TestReleaseContentsUpdater(ReleaserProperties properties,
ProjectGitHandler handler, TemplateGenerator templateGenerator) {
public TestReleaseContentsUpdater(ReleaserProperties properties, ProjectGitHandler handler,
TemplateGenerator templateGenerator) {
super(properties, handler, templateGenerator);
}

View File

@@ -57,8 +57,7 @@ public final class GitTestUtils {
return new GitRepo.JGitFactory().init(project);
}
public static File clonedProject(File baseDir, File projectToClone)
throws IOException {
public static File clonedProject(File baseDir, File projectToClone) throws IOException {
GitRepo projectRepo = new GitRepo(baseDir);
return projectRepo.cloneProject(new URIish(projectToClone.toURI().toURL()));
}

View File

@@ -77,15 +77,15 @@ public abstract class AbstractSpringAcceptanceTests {
public static Project newProject() {
Project project = new Project();
project.projectReleases.addAll(Arrays.asList(release("1.0.0.M8"),
release("1.1.0.M8"), release("1.2.0.M8"), release("2.0.0.M8")));
project.setReleases(
Arrays.asList(release("1.0.0.M8"), release("1.1.0.M8"), release("1.2.0.M8"), release("2.0.0.M8")));
return project;
}
public static Release release(String version) {
Release release = new Release();
release.version = version;
release.current = true;
release.setVersion(version);
release.setCurrent(true);
return release;
}
@@ -114,13 +114,11 @@ public abstract class AbstractSpringAcceptanceTests {
}
public void thenRunUpdatedTestsWereCalled(PostReleaseActions postReleaseActions) {
BDDMockito.then(postReleaseActions).should()
.runUpdatedTests(BDDMockito.any(Projects.class));
BDDMockito.then(postReleaseActions).should().runUpdatedTests(BDDMockito.any(Projects.class));
}
public void thenRunUpdatedTestsWereNotCalled(PostReleaseActions postReleaseActions) {
BDDMockito.then(postReleaseActions).should(BDDMockito.never())
.runUpdatedTests(BDDMockito.any(Projects.class));
BDDMockito.then(postReleaseActions).should(BDDMockito.never()).runUpdatedTests(BDDMockito.any(Projects.class));
}
public Iterable<RevCommit> listOfCommits(File project) throws GitAPIException {
@@ -146,10 +144,8 @@ public abstract class AbstractSpringAcceptanceTests {
}
}
public void tagIsPresentInOrigin(File origin, String expectedTag)
throws GitAPIException {
then(GitTestUtils.openGitProject(origin).tagList().call().iterator().next()
.getName()).endsWith(expectedTag);
public void tagIsPresentInOrigin(File origin, String expectedTag) throws GitAPIException {
then(GitTestUtils.openGitProject(origin).tagList().call().iterator().next().getName()).endsWith(expectedTag);
}
public Model pom(File dir) {
@@ -197,8 +193,7 @@ public abstract class AbstractSpringAcceptanceTests {
}
public File file(String relativePath) throws URISyntaxException {
return new File(
AbstractSpringAcceptanceTests.class.getResource(relativePath).toURI());
return new File(AbstractSpringAcceptanceTests.class.getResource(relativePath).toURI());
}
public String text(File file) throws IOException {
@@ -221,13 +216,12 @@ public abstract class AbstractSpringAcceptanceTests {
}
public Git clonedProject(NonAssertingTestProjectGitHandler handler, String name) {
return GitTestUtils.openGitProject(handler.clonedProjects.stream()
.filter(file -> file.getName().equals(name)).findFirst().get());
return GitTestUtils.openGitProject(
handler.clonedProjects.stream().filter(file -> file.getName().equals(name)).findFirst().get());
}
public void thenUpdateReleaseTrainDocsWasCalled(PostReleaseActions actions) {
BDDMockito.then(actions).should()
.generateReleaseTrainDocumentation(BDDMockito.any(Projects.class));
BDDMockito.then(actions).should().generateReleaseTrainDocumentation(BDDMockito.any(Projects.class));
}
public void thenUpdateReleaseTrainDocsWasNotCalled(PostReleaseActions actions) {
@@ -241,8 +235,7 @@ public abstract class AbstractSpringAcceptanceTests {
public void run(SpringApplicationBuilder application, Props properties,
CatchingConsumer<ConfigurableApplicationContext> consumer) {
try (ConfigurableApplicationContext context = application.build()
.run(properties.toCommandLineProps())) {
try (ConfigurableApplicationContext context = application.build().run(properties.toCommandLineProps())) {
consumer.accept(context);
}
catch (Exception e) {
@@ -262,8 +255,7 @@ public abstract class AbstractSpringAcceptanceTests {
public Set<File> clonedProjects = new HashSet<>();
public NonAssertingTestProjectGitHandler(ReleaserProperties properties,
Consumer<File> docsConsumer) {
public NonAssertingTestProjectGitHandler(ReleaserProperties properties, Consumer<File> docsConsumer) {
super(properties);
this.docsConsumer = docsConsumer;
}
@@ -306,8 +298,7 @@ public abstract class AbstractSpringAcceptanceTests {
}
public static class TestExecutionResultHandler
extends SpringBatchExecutionResultHandler {
public static class TestExecutionResultHandler extends SpringBatchExecutionResultHandler {
public boolean exitedSuccessOrUnstable;
@@ -333,16 +324,12 @@ public abstract class AbstractSpringAcceptanceTests {
public static class DefaultTestConfiguration {
@Bean
SpringBatchFlowRunner mySpringBatchFlowRunner(
StepBuilderFactory stepBuilderFactory,
JobBuilderFactory jobBuilderFactory,
ProjectsToRunFactory projectsToRunFactory, JobLauncher jobLauncher,
FlowRunnerTaskExecutorSupplier flowRunnerTaskExecutorSupplier,
ConfigurableApplicationContext context,
SpringBatchFlowRunner mySpringBatchFlowRunner(StepBuilderFactory stepBuilderFactory,
JobBuilderFactory jobBuilderFactory, ProjectsToRunFactory projectsToRunFactory, JobLauncher jobLauncher,
FlowRunnerTaskExecutorSupplier flowRunnerTaskExecutorSupplier, ConfigurableApplicationContext context,
ReleaserProperties releaserProperties, BuildReportHandler reportHandler) {
return new SpringBatchFlowRunner(stepBuilderFactory, jobBuilderFactory,
projectsToRunFactory, jobLauncher, flowRunnerTaskExecutorSupplier,
context, releaserProperties, reportHandler) {
return new SpringBatchFlowRunner(stepBuilderFactory, jobBuilderFactory, projectsToRunFactory, jobLauncher,
flowRunnerTaskExecutorSupplier, context, releaserProperties, reportHandler) {
@Override
Decision decide(Options options, ReleaserTask task) {
return Decision.CONTINUE;
@@ -362,8 +349,7 @@ public abstract class AbstractSpringAcceptanceTests {
}
@Bean
TestExecutionResultHandler testExecutionResultHandler(
BuildReportHandler buildReportHandler,
TestExecutionResultHandler testExecutionResultHandler(BuildReportHandler buildReportHandler,
ConfigurableApplicationContext context) {
return new TestExecutionResultHandler(buildReportHandler, context);
}
@@ -384,8 +370,7 @@ public abstract class AbstractSpringAcceptanceTests {
}
public String[] toCommandLineProps() {
return this.args.stream().map(s -> "--" + s).collect(Collectors.toList())
.toArray(new String[0]);
return this.args.stream().map(s -> "--" + s).collect(Collectors.toList()).toArray(new String[0]);
}
}

View File

@@ -83,14 +83,12 @@ public class ArgsBuilder {
}
private void removeIfPresent(String string) {
this.args.stream().filter(s -> s.startsWith(string)).findAny()
.ifPresent(s -> this.args.remove(s));
this.args.stream().filter(s -> s.startsWith(string)).findAny().ifPresent(s -> this.args.remove(s));
}
public ArgsBuilder projectsToSkip(String... toSkip) throws Exception {
removeIfPresent("releaser.meta-release.projects-to-skip");
this.args.add(
"releaser.meta-release.projects-to-skip=" + String.join(",", toSkip));
this.args.add("releaser.meta-release.projects-to-skip=" + String.join(",", toSkip));
return this;
}
@@ -149,18 +147,15 @@ public class ArgsBuilder {
return this;
}
public ArgsBuilder cloneDestinationDirectory(File cloneDestinationDirectory)
throws Exception {
public ArgsBuilder cloneDestinationDirectory(File cloneDestinationDirectory) throws Exception {
removeIfPresent("releaser.git.clone-destination-dir");
this.args.add("releaser.git.clone-destination-dir="
+ cloneDestinationDirectory.toString());
this.args.add("releaser.git.clone-destination-dir=" + cloneDestinationDirectory.toString());
return this;
}
public ArgsBuilder releaseTrainUrl(String relativePath) throws Exception {
removeIfPresent("releaser.git.release-train-bom-url");
this.args.add("releaser.git.release-train-bom-url="
+ file(relativePath).toURI().toString());
this.args.add("releaser.git.release-train-bom-url=" + file(relativePath).toURI().toString());
return this;
}

View File

@@ -36,45 +36,34 @@ import static org.assertj.core.api.BDDAssertions.then;
/**
* @author Marcin Grzejszczak
*/
public abstract class AbstractSpringMetaReleaseAcceptanceTests
extends AbstractSpringAcceptanceTests {
public abstract class AbstractSpringMetaReleaseAcceptanceTests extends AbstractSpringAcceptanceTests {
public ArgsBuilder metaReleaseArgs(File project) throws Exception {
return new ArgsBuilder(project, this.tmp)
.releaseTrainUrl("/projects/spring-cloud-release/")
.projectsToSkip("spring-boot", "spring-cloud-build",
"spring-cloud-commons", "spring-cloud-stream",
"spring-cloud-task", "spring-cloud-function", "spring-cloud-aws",
"spring-cloud-bus", "spring-cloud-config", "spring-cloud-netflix",
"spring-cloud-cloudfoundry", "spring-cloud-gateway",
"spring-cloud-security", "spring-cloud-zookeeper",
"spring-cloud-sleuth", "spring-cloud-contract",
"spring-cloud-vault")
return new ArgsBuilder(project, this.tmp).releaseTrainUrl("/projects/spring-cloud-release/")
.projectsToSkip("spring-boot", "spring-cloud-build", "spring-cloud-commons", "spring-cloud-stream",
"spring-cloud-task", "spring-cloud-function", "spring-cloud-aws", "spring-cloud-bus",
"spring-cloud-config", "spring-cloud-netflix", "spring-cloud-cloudfoundry",
"spring-cloud-gateway", "spring-cloud-security", "spring-cloud-zookeeper",
"spring-cloud-sleuth", "spring-cloud-contract", "spring-cloud-vault")
.mavenBuildCommand("echo '{{profiles}}' > /tmp/executed_build")
.mavenPublishCommand("echo '{{profiles}}' > /tmp/executed_docs")
.mavenDeployCommand("echo '{{profiles}}' > /tmp/executed_deploy")
.gitOrgUrl("file://" + this.temporaryFolder.getAbsolutePath())
.releaseTrainBomUrl(
file("/projects/spring-cloud-release/").toURI().toString());
.releaseTrainBomUrl(file("/projects/spring-cloud-release/").toURI().toString());
}
public ArgsBuilder metaReleaseArgsForParallel(File project) throws Exception {
return new ArgsBuilder(project, this.tmp)
.releaseTrainUrl("/projects/spring-cloud-release/")
.projectsToSkip("spring-boot", "spring-cloud-commons",
"spring-cloud-stream", "spring-cloud-task",
"spring-cloud-function", "spring-cloud-aws", "spring-cloud-bus",
"spring-cloud-config", "spring-cloud-netflix",
"spring-cloud-cloudfoundry", "spring-cloud-gateway",
"spring-cloud-security", "spring-cloud-zookeeper",
"spring-cloud-sleuth", "spring-cloud-contract",
"spring-cloud-vault")
return new ArgsBuilder(project, this.tmp).releaseTrainUrl("/projects/spring-cloud-release/")
.projectsToSkip("spring-boot", "spring-cloud-commons", "spring-cloud-stream", "spring-cloud-task",
"spring-cloud-function", "spring-cloud-aws", "spring-cloud-bus", "spring-cloud-config",
"spring-cloud-netflix", "spring-cloud-cloudfoundry", "spring-cloud-gateway",
"spring-cloud-security", "spring-cloud-zookeeper", "spring-cloud-sleuth",
"spring-cloud-contract", "spring-cloud-vault")
.mavenBuildCommand("echo '{{profiles}}' > /tmp/executed_build")
.mavenPublishCommand("echo '{{profiles}}' > /tmp/executed_docs")
.mavenDeployCommand("echo '{{profiles}}' > /tmp/executed_deploy")
.gitOrgUrl("file://" + this.temporaryFolder.getAbsolutePath())
.releaseTrainBomUrl(
file("/projects/spring-cloud-release/").toURI().toString());
.releaseTrainBomUrl(file("/projects/spring-cloud-release/").toURI().toString());
}
public Map<String, String> edgwareSr10() {
@@ -104,12 +93,9 @@ public abstract class AbstractSpringMetaReleaseAcceptanceTests
public void thenAllStepsWereExecutedForEachProject(
NonAssertingTestProjectGitHandler nonAssertingTestProjectGitHandler) {
nonAssertingTestProjectGitHandler.clonedProjects.stream()
.filter(f -> !f.getName().contains("angel")
&& !f.getName().equals("spring-cloud"))
.forEach(project -> {
then(Arrays.asList("spring-cloud-starter-build",
"spring-cloud-consul"))
.contains(pom(project).getArtifactId());
.filter(f -> !f.getName().contains("angel") && !f.getName().equals("spring-cloud")).forEach(project -> {
then(Arrays.asList("spring-cloud-starter-build", "spring-cloud-consul"))
.contains(pom(project).getArtifactId());
then(new File("/tmp/executed_build")).exists();
then(new File("/tmp/executed_deploy")).exists();
then(new File("/tmp/executed_docs")).exists();
@@ -117,21 +103,18 @@ public abstract class AbstractSpringMetaReleaseAcceptanceTests
}
public void thenSaganWasCalled(SaganUpdater saganUpdater) {
BDDMockito.then(saganUpdater).should(BDDMockito.atLeastOnce()).updateSagan(
BDDMockito.any(File.class), BDDMockito.anyString(),
BDDMockito.any(ProjectVersion.class),
BDDMockito.any(ProjectVersion.class), BDDMockito.any(Projects.class));
BDDMockito.then(saganUpdater).should(BDDMockito.atLeastOnce()).updateSagan(BDDMockito.any(File.class),
BDDMockito.anyString(), BDDMockito.any(ProjectVersion.class), BDDMockito.any(ProjectVersion.class),
BDDMockito.any(Projects.class));
}
public void thenSaganWasNotCalled(SaganUpdater saganUpdater) {
BDDMockito.then(saganUpdater).should(BDDMockito.never()).updateSagan(
BDDMockito.any(File.class), BDDMockito.anyString(),
BDDMockito.any(ProjectVersion.class),
BDDMockito.any(ProjectVersion.class), BDDMockito.any(Projects.class));
BDDMockito.then(saganUpdater).should(BDDMockito.never()).updateSagan(BDDMockito.any(File.class),
BDDMockito.anyString(), BDDMockito.any(ProjectVersion.class), BDDMockito.any(ProjectVersion.class),
BDDMockito.any(Projects.class));
}
public static class NonAssertingTestProjectGitHubHandler
extends ProjectGitHubHandler {
public static class NonAssertingTestProjectGitHubHandler extends ProjectGitHubHandler {
boolean closedMilestones = false;
@@ -154,8 +137,7 @@ public abstract class AbstractSpringMetaReleaseAcceptanceTests
}
@Override
public void createIssueInStartSpringIo(Projects projects,
ProjectVersion version) {
public void createIssueInStartSpringIo(Projects projects, ProjectVersion version) {
this.issueCreatedInStartSpringIo = true;
}