Revise repository declarations handling.

We now rewrite the <repositories> section of each parent pom to leave the milestone repo for milestone releases, remove all repositories if the release is a GA or service release and put both repositories back after a release.

Closes #39
This commit is contained in:
Mark Paluch
2023-06-07 09:09:20 +02:00
parent 58576d4eb7
commit 81d8b0ad20
11 changed files with 214 additions and 134 deletions

View File

@@ -21,9 +21,8 @@ import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.junit.jupiter.api.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.release.build.Pom.RepositoryElementFactory;
import org.xmlbeam.XBProjector;
/**
@@ -49,4 +48,34 @@ class MavenBuildSystemUnitTests {
.endsWith(IOUtils.LINE_SEPARATOR);
}
}
@Test
void shouldRemoveRepositories() throws Exception {
ClassPathResource resource = new ClassPathResource("sample-pom.xml");
try (InputStream is = resource.getInputStream()) {
byte[] bytes = MavenBuildSystem.doWithProjection(projector, is, Pom.class, Pom::deleteRepositories);
assertThat(new String(bytes)).contains("<repositories>").doesNotContain("<repository>");
}
}
@Test
void shouldAddRepositories() throws Exception {
ClassPathResource resource = new ClassPathResource("sample-pom.xml");
try (InputStream is = resource.getInputStream()) {
byte[] bytes = MavenBuildSystem.doWithProjection(projector, is, Pom.class, pom -> {
pom.deleteRepositories();
pom.setRepositories(RepositoryElementFactory.of(Repository.SNAPSHOT, Repository.MILESTONE));
});
assertThat(new String(bytes)).containsSubsequence("repositories", "<id>spring-snapshot</id>", "<snapshots>",
"<enabled>true</enabled>", "<releases>", "<enabled>false</enabled>", "spring-milestone");
}
}
}

View File

@@ -17,11 +17,8 @@ package org.springframework.data.release.build;
import static org.assertj.core.api.Assertions.*;
import java.util.Arrays;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.Phase;
import org.springframework.data.release.model.Projects;
@@ -48,22 +45,6 @@ class UpdateInformationUnitTests {
Assertions.assertThatIllegalArgumentException().isThrownBy(() -> UpdateInformation.of(hopperM1, null));
}
@Test
void exposesMilestoneRepositoryForMilestone() {
assertThat(UpdateInformation.of(hopperM1, Phase.PREPARE).getRepository().getId())
.isEqualTo("spring-libs-milestone");
}
@Test
void exposesReleaseRepositoryForGA() {
Arrays.asList(Iteration.GA, Iteration.SR1).forEach(iteration -> {
TrainIteration trainIteration = new TrainIteration(ReleaseTrains.HOPPER, iteration);
assertThat(UpdateInformation.of(trainIteration, Phase.PREPARE).getRepository().getId())
.isEqualTo("spring-libs-release");
});
}
@Test
void calculatesProjectVersionToSetCorrectly() {
@@ -74,6 +55,32 @@ class UpdateInformationUnitTests {
assertThat(updateInformation.getProjectVersionToSet(Projects.JPA).toString()).isEqualTo("1.10.0.BUILD-SNAPSHOT");
}
@Test
void milestoneReposContainedForMilestoneRelease() {
UpdateInformation updateInformation = UpdateInformation.of(hopperM1, Phase.PREPARE);
assertThat(updateInformation.getRepositories()).containsOnly(Repository.MILESTONE);
}
@Test
void noReposContainedForGaRelease() {
UpdateInformation updateInformation = UpdateInformation.of(new TrainIteration(ReleaseTrains.HOPPER, Iteration.GA),
Phase.PREPARE);
assertThat(updateInformation.getRepositories()).isEmpty();
}
@Test
void cleanupSetsMilestoneAndSnapshotRepos() {
UpdateInformation updateInformation = UpdateInformation.of(new TrainIteration(ReleaseTrains.HOPPER, Iteration.GA),
Phase.CLEANUP);
assertThat(updateInformation.getRepositories()).contains(Repository.MILESTONE, Repository.SNAPSHOT);
}
@Test // #155
void calculatesProjectCalverVersionToSetCorrectly() {