Polishing.

Extract staging repository lifecycle code into methods.

Closes: #38
This commit is contained in:
Mark Paluch
2023-03-27 09:22:31 +02:00
parent 2311977d8d
commit 573ffd5bd0
4 changed files with 67 additions and 14 deletions

View File

@@ -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<DeploymentInformation> 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<DeploymentInformation> 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());

View File

@@ -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.

View File

@@ -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")

View File

@@ -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)");
}
}