#144 - Adapt to new versioning scheme.

Remove Calver type as the version scheme can be already represented using the Version type. Adopt ticket/milestone creation, Sagan versioning and Git tags to new scheme.
This commit is contained in:
Mark Paluch
2020-04-30 13:09:48 +02:00
parent 61b8e499f8
commit a79ca69608
33 changed files with 384 additions and 396 deletions

View File

@@ -75,7 +75,6 @@ class MavenIntegrationTests extends AbstractIntegrationTests {
"/project/profiles/profile[id=\"distribute\"]/dependencies/dependency[artifactId=\"spring-data-build-resources\"]/version");
assertThat(xPathEvaluator.asString()).isEqualToIgnoringCase("1.2.0.RELEASE");
}
@Test
@@ -87,15 +86,11 @@ class MavenIntegrationTests extends AbstractIntegrationTests {
pom.setRepositoryId("spring-libs-snapshot", "spring-libs-release");
pom.setRepositoryUrl("spring-libs-release", "https://repo.spring.io/libs-release");
// System.out.println(projection.asString(pom));
}
@Test
void findsSnapshotDependencies() throws Exception {
Pom pom = projection.io().file(workspace.getFile("bom/pom.xml", Projects.BUILD)).read(Pom.class);
System.out.println(pom.getSnapshotDependencies());
}
}

View File

@@ -84,14 +84,14 @@ class GitHubIssueTrackerIntegrationTests extends AbstractIntegrationTests {
void ignoresUnknownTicketsByTicketId() {
Collection<Ticket> tickets = github.findTickets(Projects.BUILD, Collections.singletonList("123"));
assertThat(tickets).hasSize(0);
assertThat(tickets).isEmpty();
}
@Test // #5
void emptyResultWithEmptyTicketIds() {
Collection<Ticket> tickets = github.findTickets(Projects.COMMONS, Collections.emptyList());
assertThat(tickets).hasSize(0);
assertThat(tickets).isEmpty();
}
@Test // #5
@@ -110,7 +110,7 @@ class GitHubIssueTrackerIntegrationTests extends AbstractIntegrationTests {
mockGetMilestonesWith("emptyMilestones.json");
assertThatIllegalArgumentException().isThrownBy(() -> github.getReleaseTicketFor(BUILD_HOPPER_RC1))
.withMessageContaining("No milestone for Spring Data Build found containing 1.8 RC1!");
.withMessageContaining("No milestone for Spring Data Build found containing 1.8 RC1 (Hopper)!");
}
@Test // #5
@@ -157,7 +157,7 @@ class GitHubIssueTrackerIntegrationTests extends AbstractIntegrationTests {
mockGetMilestonesWith("emptyMilestones.json");
assertThatIllegalArgumentException().isThrownBy(() -> github.createReleaseTicket(moduleIteration))
.withMessageContaining("No milestone for Spring Data Build found containing 1.8 RC1!");
.withMessageContaining("No milestone for Spring Data Build found containing 1.8 RC1 (Hopper)!");
}
@Test // #5

View File

@@ -44,13 +44,25 @@ class GithubMilestoneUnitTests {
assertIterationVersion(Iteration.SR4, "1.8.4 (Dijkstra SR4)");
}
@Test
void rendersGithubCalverCorrectly() {
ModuleIteration m1 = ReleaseTrains.OCKHAM.getModuleIteration(Projects.COMMONS, Iteration.M1);
ModuleIteration rc1 = ReleaseTrains.OCKHAM.getModuleIteration(Projects.COMMONS, Iteration.RC1);
ModuleIteration ga = ReleaseTrains.OCKHAM.getModuleIteration(Projects.COMMONS, Iteration.GA);
assertThat(new GithubMilestone(m1).getDescription()).isEqualTo("2020.0.0-M1");
assertThat(new GithubMilestone(rc1).getDescription()).isEqualTo("2020.0.0-RC1");
assertThat(new GithubMilestone(ga).getDescription()).isEqualTo("2020.0.0");
}
@Test
void usesCustomModuleIterationStartVersion() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.ELASTICSEARCH, Iteration.M1);
GithubMilestone version = new GithubMilestone(module);
assertThat(version.toString()).isEqualTo("1.0 M1 (Dijkstra)");
assertThat(version).hasToString("1.0 M1 (Dijkstra)");
}
@Test
@@ -59,7 +71,7 @@ class GithubMilestoneUnitTests {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.ELASTICSEARCH, Iteration.RC1);
GithubMilestone version = new GithubMilestone(module);
assertThat(version.toString()).isEqualTo("1.0 RC1 (Dijkstra)");
assertThat(version).hasToString("1.0 RC1 (Dijkstra)");
}
@Test
@@ -76,6 +88,6 @@ class GithubMilestoneUnitTests {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.COMMONS, iteration);
GithubMilestone version = new GithubMilestone(module);
assertThat(version.toString()).isEqualTo(expected);
assertThat(version).hasToString(expected);
}
}

View File

@@ -22,6 +22,7 @@ import static org.assertj.core.api.Assumptions.*;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Optional;
import org.junit.jupiter.api.BeforeEach;
@@ -91,14 +92,15 @@ class JiraConnectorIntegrationTests extends AbstractIntegrationTests {
mockSearchWith("emptyTickets.json");
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Arrays.asList("XYZ-1", "UNKOWN-1"));
assertThat(tickets).hasSize(0);
assertThat(tickets).isEmpty();
}
@Test // #5
void emptyResultWithEmptyTicketIds() {
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Arrays.asList());
assertThat(tickets).hasSize(0);
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Collections
.emptyList());
assertThat(tickets).isEmpty();
}
@Test // #5
@@ -126,7 +128,7 @@ class JiraConnectorIntegrationTests extends AbstractIntegrationTests {
Optional<JiraReleaseVersion> optional = jira.findJiraReleaseVersion(REST_HOPPER_RC1);
assertThat(optional.isPresent()).isTrue();
assertThat(optional).isPresent();
assertThat(optional.get().getName()).isEqualTo("2.5 RC1 (Hopper)");
}
@@ -216,7 +218,7 @@ class JiraConnectorIntegrationTests extends AbstractIntegrationTests {
mockGetProjectVersionsWith("emptyReleaseVersions.json", moduleIteration.getProjectKey());
assertThatIllegalStateException().isThrownBy(() -> jira.createReleaseTicket(moduleIteration))
.withMessageContaining("Did not find a release version for Spring Data REST 2.5 RC1");
.withMessageContaining("No release version for Spring Data REST found containing 2.5 RC1 (Hopper)!");
}
@Test // #5

View File

@@ -18,7 +18,6 @@ package org.springframework.data.release.issues.jira;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.ModuleIteration;
import org.springframework.data.release.model.Projects;
@@ -28,6 +27,7 @@ import org.springframework.data.release.model.ReleaseTrains;
* Unit tests for {@link JiraVersion}.
*
* @author Oliver Gierke
* @author Mark Paluch
*/
class JiraVersionUnitTests {
@@ -44,13 +44,25 @@ class JiraVersionUnitTests {
assertIterationVersion(Iteration.SR4, "1.8.4 (Dijkstra SR4)");
}
@Test
void rendersGithubCalverCorrectly() {
ModuleIteration m1 = ReleaseTrains.OCKHAM.getModuleIteration(Projects.COMMONS, Iteration.M1);
ModuleIteration rc1 = ReleaseTrains.OCKHAM.getModuleIteration(Projects.COMMONS, Iteration.RC1);
ModuleIteration ga = ReleaseTrains.OCKHAM.getModuleIteration(Projects.COMMONS, Iteration.GA);
assertThat(new JiraVersion(m1).getDescription()).isEqualTo("2020.0.0-M1");
assertThat(new JiraVersion(rc1).getDescription()).isEqualTo("2020.0.0-RC1");
assertThat(new JiraVersion(ga).getDescription()).isEqualTo("2020.0.0");
}
@Test
void usesCustomModuleIterationStartVersion() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.ELASTICSEARCH, Iteration.M1);
JiraVersion version = new JiraVersion(module);
assertThat(version.toString()).isEqualTo("1.0 M1 (Dijkstra)");
assertThat(version).hasToString("1.0 M1 (Dijkstra)");
}
@Test
@@ -59,7 +71,7 @@ class JiraVersionUnitTests {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.ELASTICSEARCH, Iteration.RC1);
JiraVersion version = new JiraVersion(module);
assertThat(version.toString()).isEqualTo("1.0 RC1 (Dijkstra)");
assertThat(version).hasToString("1.0 RC1 (Dijkstra)");
}
@Test
@@ -76,6 +88,6 @@ class JiraVersionUnitTests {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.COMMONS, iteration);
JiraVersion version = new JiraVersion(module);
assertThat(version.toString()).isEqualTo(expected);
assertThat(version).hasToString(expected);
}
}

View File

@@ -65,6 +65,29 @@ class TicketsUnitTests {
assertThat(releaseTicket).isEqualTo(ticket);
}
@Test
void getReleaseTicketReturnsCalverReleaseTicket() {
Tickets tickets = new Tickets(
Collections.singletonList(new Ticket("1234", "Release 2.4 GA (2020.0.0)", JiraTicketStatus.of(false, "", ""))));
Ticket releaseTicket = tickets
.getReleaseTicket(ReleaseTrains.OCKHAM.getModuleIteration(Projects.JPA, Iteration.GA));
assertThat(releaseTicket).isNotNull();
tickets = new Tickets(
Collections.singletonList(new Ticket("1234", "Release 2.4 M1 (2020.0.0)", JiraTicketStatus.of(false, "", ""))));
releaseTicket = tickets.getReleaseTicket(ReleaseTrains.OCKHAM.getModuleIteration(Projects.JPA, Iteration.M1));
assertThat(releaseTicket).isNotNull();
tickets = new Tickets(
Collections.singletonList(new Ticket("1234", "Release 2.4.1 (2020.0.1)", JiraTicketStatus.of(false, "", ""))));
releaseTicket = tickets.getReleaseTicket(ReleaseTrains.OCKHAM.getModuleIteration(Projects.JPA, Iteration.SR1));
assertThat(releaseTicket).isNotNull();
}
@Test
void getReleaseTicketThrowsExceptionWithoutAReleaseTicket() {

View File

@@ -21,6 +21,8 @@ import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
/**
* Unit tests for {@link ArtifactVersion}.
*
* @author Oliver Gierke
*/
class ArtifactVersionUnitTests {
@@ -33,19 +35,21 @@ class ArtifactVersionUnitTests {
@Test
void parsesReleaseVersionCorrectly() {
ArtifactVersion version = ArtifactVersion.of("1.4.5.RELEASE");
assertThat(ArtifactVersion.of("1.4.5.RELEASE").isReleaseVersion()).isTrue();
assertThat(ArtifactVersion.of("1.4.5.RELEASE").getNextDevelopmentVersion()).isEqualTo(ArtifactVersion.of("1.4.6.BUILD-SNAPSHOT"));
assertThat(version.isReleaseVersion()).isTrue();
assertThat(version.getNextDevelopmentVersion()).isEqualTo(ArtifactVersion.of("1.4.6.BUILD-SNAPSHOT"));
assertThat(ArtifactVersion.of("1.4.5").isReleaseVersion()).isTrue();
assertThat(ArtifactVersion.of("1.4.5").getNextDevelopmentVersion()).isEqualTo(ArtifactVersion.of("1.4.6-SNAPSHOT"));
}
@Test
void createsMilestoneVersionCorrectly() {
ArtifactVersion version = ArtifactVersion.of("1.4.5.M1");
assertThat(ArtifactVersion.of("1.4.5.M1").isReleaseVersion()).isFalse();
assertThat(ArtifactVersion.of("1.4.5.M1").isMilestoneVersion()).isTrue();
assertThat(version.isReleaseVersion()).isFalse();
assertThat(version.isMilestoneVersion()).isTrue();
assertThat(ArtifactVersion.of("1.4.5-M1").isReleaseVersion()).isFalse();
assertThat(ArtifactVersion.of("1.4.5-M1").isMilestoneVersion()).isTrue();
}
@Test
@@ -54,7 +58,7 @@ class ArtifactVersionUnitTests {
ArtifactVersion version = ArtifactVersion.of(Version.of(1, 4, 5));
assertThat(version.isReleaseVersion()).isTrue();
assertThat(version.toString()).isEqualTo("1.4.5.RELEASE");
assertThat(version).hasToString("1.4.5.RELEASE");
}
@Test
@@ -64,7 +68,7 @@ class ArtifactVersionUnitTests {
ArtifactVersion version = ArtifactVersion.of(oneFourMilestoneOne);
assertThat(version.isMilestoneVersion()).isTrue();
assertThat(version.toString()).isEqualTo("1.4.0.M1");
assertThat(version).hasToString("1.4.0.M1");
}
@Test
@@ -74,7 +78,7 @@ class ArtifactVersionUnitTests {
ArtifactVersion version = ArtifactVersion.of(oneFourGA);
assertThat(version.isReleaseVersion()).isTrue();
assertThat(version.toString()).isEqualTo("1.4.0.RELEASE");
assertThat(version).hasToString("1.4.0.RELEASE");
}
@Test
@@ -84,7 +88,7 @@ class ArtifactVersionUnitTests {
ArtifactVersion version = ArtifactVersion.of(oneFourServiceReleaseTwo);
assertThat(version.isReleaseVersion()).isTrue();
assertThat(version.toString()).isEqualTo("1.4.2.RELEASE");
assertThat(version).hasToString("1.4.2.RELEASE");
}
@Test

View File

@@ -1,78 +0,0 @@
/*
* Copyright 2020 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.release.model;
import static org.assertj.core.api.Assertions.*;
import org.junit.jupiter.api.Test;
/**
* Unit tests for {@link Calver}.
*
* @author Mark Paluch
*/
class CalverVersionUnitTests {
@Test
void shouldParseRelease() {
Calver version = Calver.parse("2020.0.1");
assertThat(version.getYear()).isEqualTo(2020);
assertThat(version.getMinor()).isEqualTo(0);
assertThat(version.getMicro()).isEqualTo(1);
}
@Test
void shouldParseM1Release() {
Calver version = Calver.parse("2020.0.1-M1");
assertThat(version.getYear()).isEqualTo(2020);
assertThat(version.getMinor()).isEqualTo(0);
assertThat(version.getMicro()).isEqualTo(1);
assertThat(version.getModifier()).isEqualTo(Iteration.M1);
}
@Test
void shouldCompareReleasesCorrectly() {
Calver version = Calver.parse("2020.0.1-RC2");
assertThat(version).isGreaterThan(Calver.parse("2020.0.0-RC2"));
assertThat(version).isLessThan(Calver.parse("2020.0.2-RC2"));
assertThat(version).isLessThan(Calver.parse("2020.1.0-RC2"));
assertThat(version).isLessThan(Calver.parse("2021.0.0-RC2"));
assertThat(version).isGreaterThan(Calver.parse("2020.0.1-RC1"));
assertThat(version).isLessThan(Calver.parse("2020.0.1"));
assertThat(Calver.parse("2020.0.1")).isEqualTo(Calver.parse("2020.0.1"));
assertThat(Calver.parse("2020.0.1")).isLessThan(Calver.parse("2020.0.1-SR1"));
assertThat(Calver.parse("2020.0.1")).isGreaterThan(Calver.parse("2020.0.1-M1"));
}
@Test
void shouldParseSnapshot() {
Calver version = Calver.parse("2020.0.1-SNAPSHOT");
assertThat(version.getYear()).isEqualTo(2020);
assertThat(version.getMinor()).isEqualTo(0);
assertThat(version.getMicro()).isEqualTo(1);
assertThat(version.getModifier()).isEqualTo(new Iteration("SNAPSHOT", null));
}
}

View File

@@ -31,4 +31,13 @@ public class SimpleIterationVersion implements IterationVersion {
public boolean isBranchVersion() {
return iteration.isServiceIteration();
}
/*
* (non-Javadoc)
* @see org.springframework.data.release.model.IterationVersion#usesModifierVersionFormat()
*/
@Override
public boolean usesModifierVersionFormat() {
return false;
}
}

View File

@@ -37,7 +37,7 @@ class SaganOperationsIntegrationTests extends AbstractIntegrationTests {
@Test
void detectVersionsToUpdate() {
sagan.findVersions(ReleaseTrains.LOVELACE, ReleaseTrains.KAY, ReleaseTrains.INGALLS, ReleaseTrains.HOPPER)
sagan.findVersions(ReleaseTrains.OCKHAM, ReleaseTrains.NEUMANN, ReleaseTrains.MOORE, ReleaseTrains.LOVELACE)
.forEach((project, versions) -> {
System.out.println(project.getName());