From 573ffd5bd005f8faeab5e9809beed3a639c70c86 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Mon, 27 Mar 2023 09:22:31 +0200 Subject: [PATCH] Polishing. Extract staging repository lifecycle code into methods. Closes: #38 --- .../data/release/build/BuildOperations.java | 59 ++++++++++++++++--- .../data/release/build/MavenProperties.java | 10 ++++ .../release/deployment/StagingRepository.java | 2 + .../release/model/JavaVersionUnitTests.java | 10 ++-- 4 files changed, 67 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/springframework/data/release/build/BuildOperations.java b/src/main/java/org/springframework/data/release/build/BuildOperations.java index 141442a..c2ce14b 100644 --- a/src/main/java/org/springframework/data/release/build/BuildOperations.java +++ b/src/main/java/org/springframework/data/release/build/BuildOperations.java @@ -29,6 +29,7 @@ import java.util.stream.Collectors; import org.assertj.core.util.VisibleForTesting; import org.springframework.data.release.deployment.DeploymentInformation; import org.springframework.data.release.deployment.StagingRepository; +import org.springframework.data.release.model.Iteration; import org.springframework.data.release.model.Module; import org.springframework.data.release.model.ModuleIteration; import org.springframework.data.release.model.Phase; @@ -149,6 +150,49 @@ public class BuildOperations { logger.log(iteration, "Build finished"); } + /** + * Open a staging repository. + * + * @param iteration + * @return + */ + public StagingRepository openStagingRepository(Iteration iteration) { + + BuildSystem orchestrator = buildSystems.getRequiredPluginFor(Projects.BUILD); + + return iteration.isPublic() ? orchestrator.open() : StagingRepository.EMPTY; + } + + /** + * Close a staging repository. + * + * @param stagingRepository + * @return + */ + public void closeStagingRepository(StagingRepository stagingRepository) { + + BuildSystem orchestrator = buildSystems.getRequiredPluginFor(Projects.BUILD); + + if (stagingRepository.isPresent()) { + orchestrator.close(stagingRepository); + } + } + + /** + * Promote the staging repository. + * + * @param stagingRepository + * @return + */ + public void releaseStagingRepository(StagingRepository stagingRepository) { + + BuildSystem orchestrator = buildSystems.getRequiredPluginFor(Projects.BUILD); + + if (stagingRepository.isPresent()) { + orchestrator.release(stagingRepository); + } + } + /** * Run smoke tests for a {@link TrainIteration} against a {@link StagingRepository}. * @@ -165,7 +209,7 @@ public class BuildOperations { /** * Releases a repository of staged artifacts for this {@link ModuleIteration}. - * + * * @param iteration * @param stagingRepository */ @@ -200,25 +244,22 @@ public class BuildOperations { */ public List performRelease(TrainIteration iteration) { - ModuleIteration module = iteration.getModule(Projects.BUILD); - BuildSystem orchestrator = buildSystems.getRequiredPluginFor(module.getProject()); - - StagingRepository stagingRepository = iteration.getIteration().isPublic() ? orchestrator.open() - : StagingRepository.EMPTY; + Iteration it = iteration.getIteration(); + StagingRepository stagingRepository = it.isPublic() ? openStagingRepository(it) : StagingRepository.EMPTY; BuildExecutor.Summary summary = executor.doWithBuildSystemOrdered(iteration, (buildSystem, moduleIteration) -> buildSystem.deploy(moduleIteration, stagingRepository)); if (stagingRepository.isPresent()) { - orchestrator.close(stagingRepository); + closeStagingRepository(stagingRepository); } smokeTests(iteration, stagingRepository); logger.log(iteration, "Release: %s", summary); - if (iteration.getIteration().isPublic() && stagingRepository.isPresent()) { - release(module, stagingRepository); + if (stagingRepository.isPresent()) { + releaseStagingRepository(stagingRepository); } return summary.getExecutions().stream().map(BuildExecutor.ExecutionResult::getResult).collect(Collectors.toList()); diff --git a/src/main/java/org/springframework/data/release/build/MavenProperties.java b/src/main/java/org/springframework/data/release/build/MavenProperties.java index 23fbb2c..f1f06c2 100644 --- a/src/main/java/org/springframework/data/release/build/MavenProperties.java +++ b/src/main/java/org/springframework/data/release/build/MavenProperties.java @@ -25,6 +25,7 @@ import org.apache.commons.io.FileUtils; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * Maven configuration properties. @@ -44,6 +45,15 @@ public class MavenProperties { private boolean consoleLogger = true; private boolean parallelize = false; + public MavenProperties() { + + String maven_home = System.getenv("MAVEN_HOME"); + + if (StringUtils.hasText(maven_home)) { + mavenHome = new File(maven_home); + } + } + /** * Configures the local Maven repository location to use. In case the given folder does not already exists it's * created. diff --git a/src/main/java/org/springframework/data/release/deployment/StagingRepository.java b/src/main/java/org/springframework/data/release/deployment/StagingRepository.java index d9007bf..58136e9 100644 --- a/src/main/java/org/springframework/data/release/deployment/StagingRepository.java +++ b/src/main/java/org/springframework/data/release/deployment/StagingRepository.java @@ -20,6 +20,8 @@ import lombok.Value; import org.springframework.util.ObjectUtils; /** + * Value object representing a OSS Sonatype staging repository. + * * @author Mark Paluch */ @Value(staticConstructor = "of") diff --git a/src/test/java/org/springframework/data/release/model/JavaVersionUnitTests.java b/src/test/java/org/springframework/data/release/model/JavaVersionUnitTests.java index e1068c4..5dd5cb9 100644 --- a/src/test/java/org/springframework/data/release/model/JavaVersionUnitTests.java +++ b/src/test/java/org/springframework/data/release/model/JavaVersionUnitTests.java @@ -29,16 +29,16 @@ class JavaVersionUnitTests { @Test void shouldParseDockerTag() { - assertThat(JavaVersion.fromDockerTag("8u312-b07-jdk").getName()).isEqualTo("Java 1.8.0_312"); - assertThat(JavaVersion.fromDockerTag("8u322-b06-jre-focal").getName()).isEqualTo("Java 1.8.0_322"); - assertThat(JavaVersion.fromDockerTag("11.0.13_8-jdk").getName()).isEqualTo("Java 11.0.13 (Temurin)"); - assertThat(JavaVersion.fromDockerTag("17.0.1_12").getName()).isEqualTo("Java 17.0.1 (Temurin)"); + assertThat(JavaVersion.fromDockerTag("8u312-b07-jdk").getName()).isEqualTo("JDK 1.8.0_312"); + assertThat(JavaVersion.fromDockerTag("8u322-b06-jre-focal").getName()).isEqualTo("JDK 1.8.0_322"); + assertThat(JavaVersion.fromDockerTag("11.0.13_8-jdk").getName()).isEqualTo("JDK 11.0.13 (Temurin)"); + assertThat(JavaVersion.fromDockerTag("17.0.1_12").getName()).isEqualTo("JDK 17.0.1 (Temurin)"); } @Test void shouldConsiderImplementor() { assertThat(JavaVersion.fromDockerTag("8u312-b07-jdk").withImplementor("Temurin").getName()) - .isEqualTo("Java 1.8.0_312 (Temurin)"); + .contains("JDK 1.8.0_312 (Temurin)"); } }