Remove Jira integration.

Closes #205
This commit is contained in:
Mark Paluch
2022-04-27 09:55:33 +02:00
parent 6f72b50f83
commit bd6ff63ab8
34 changed files with 1 additions and 3320 deletions

View File

@@ -49,7 +49,6 @@ class BranchUnitTests {
Branch branch = Branch.from("issue/DATACMNS-4711");
assertThat(branch.isIssueBranch(Tracker.JIRA)).isTrue();
assertThat(branch.isIssueBranch(Tracker.GITHUB)).isFalse();
}
}

View File

@@ -1,53 +0,0 @@
/*
* Copyright 2016-2022 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
*
* https://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.issues.jira;
import static org.assertj.core.api.Assertions.*;
import java.util.Collections;
import org.junit.jupiter.api.Test;
/**
* Unit tests for {@link JiraComponents}.
*
* @author Mark Paluch
*/
class JiraComponentsUnitTests {
@Test // #5
void returnsComponentByName() {
JiraComponent fooComponent = new JiraComponent("123", "foo");
JiraComponents jiraComponents = JiraComponents.of(Collections.singleton(fooComponent));
assertThat(jiraComponents.findComponent("foo").isPresent()).isTrue();
}
@Test // #5
void returnsEmptyIfComponentMissing() {
JiraComponent fooComponent = new JiraComponent("123", "foo");
JiraComponents jiraComponents = JiraComponents.of(Collections.singleton(fooComponent));
assertThat(jiraComponents.findComponent("baz").isPresent()).isFalse();
}
@Test // #5
void failsOnNullArgumentConstruction() {
assertThatIllegalArgumentException().isThrownBy(() -> JiraComponents.of(null));
}
}

View File

@@ -1,333 +0,0 @@
/*
* Copyright 2016-2022 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
*
* https://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.issues.jira;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.*;
import static org.assertj.core.api.Assertions.*;
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;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.release.AbstractIntegrationTests;
import org.springframework.data.release.WireMockExtension;
import org.springframework.data.release.issues.Ticket;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.ModuleIteration;
import org.springframework.data.release.model.ProjectKey;
import org.springframework.data.release.model.Projects;
import org.springframework.data.release.model.ReleaseTrains;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
import com.github.tomakehurst.wiremock.common.ClasspathFileSource;
/**
* Integration Tests for {@link Jira} using a local {@link WireMockExtension} server.
*
* @author Mark Paluch
*/
class JiraConnectorIntegrationTests extends AbstractIntegrationTests {
static final String CREATE_ISSUE_URI = "/rest/api/2/issue";
static final String CREATE_VERSION_URI = "/rest/api/2/version";
static final String UPDATE_VERSION_URI = "/rest/api/2/version/15475";
static final String SEARCH_URI = "/rest/api/2/search";
static final String PROJECT_VERSION_URI = "/rest/api/2/project/%s/version";
static final String PROJECT_COMPONENTS_URI = "/rest/api/2/project/%s/components";
static final ModuleIteration REST_HOPPER_RC1 = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
@RegisterExtension WireMockExtension mockService = new WireMockExtension(
wireMockConfig().port(8888).fileSource(new ClasspathFileSource("integration/jira")));
@Autowired JiraConnector jira;
@Autowired JiraProperties properties;
@BeforeEach
void before() {
UriComponents uriComponents = UriComponentsBuilder.fromUriString(properties.getApiUrl()).build();
assumeThat(uriComponents.getHost()).isEqualTo("localhost");
properties.setUsername("dummy");
jira.reset();
}
@Test // #5
void findResolvedTicketsByTicketIds() {
mockSearchWith("DATAREDIS-1andDATAJPA-1.json");
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Arrays.asList("DATAREDIS-1", "DATAJPA-1"));
assertThat(tickets).hasSize(2);
}
@Test // #5
void ignoresUnknownTicketsByTicketId() {
mockSearchWith("emptyTickets.json");
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Arrays.asList("XYZ-1", "UNKOWN-1"));
assertThat(tickets).isEmpty();
}
@Test // #5
void emptyResultWithEmptyTicketIds() {
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Collections
.emptyList());
assertThat(tickets).isEmpty();
}
@Test // #5
void getReleaseTicketForReturnsTheReleaseTicket() {
mockSearchWith("releaseTickets.json");
Ticket releaseTicket = jira.getReleaseTicketFor(REST_HOPPER_RC1);
assertThat(releaseTicket.getId()).isEqualTo("DATAREST-782");
}
@Test // #5
void noReleaseTicketFound() {
mockSearchWith("emptyTickets.json");
assertThatIllegalArgumentException().isThrownBy(() -> jira.getReleaseTicketFor(REST_HOPPER_RC1))
.withMessageContaining("Did not find a release ticket for Spring Data REST 2.5 RC1");
}
@Test // #5
void getReleaseVersion() {
mockGetProjectVersionsWith("releaseVersions.json", REST_HOPPER_RC1.getProjectKey());
Optional<JiraReleaseVersion> optional = jira.findJiraReleaseVersion(REST_HOPPER_RC1);
assertThat(optional).isPresent();
assertThat(optional.get().getName()).isEqualTo("2.5 RC1 (Hopper)");
}
@Test // #5
void createReleaseVersionShouldCreateAVersion() {
mockGetProjectVersionsWith("emptyReleaseVersions.json", REST_HOPPER_RC1.getProjectKey());
mockCreateVersionWith("versionCreated.json");
jira.createReleaseVersion(REST_HOPPER_RC1);
verify(postRequestedFor(urlPathMatching(CREATE_VERSION_URI)).withRequestBody(equalToJson(
"{\"name\":\"2.5 RC1 (Hopper)\",\"project\":\"DATAREST\",\"description\":\"Hopper RC1\", \"released\":false, \"archived\":false}")));
}
@Test // #5
void createReleaseVersionShouldFindExistingReleaseVersion() {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
jira.createReleaseVersion(moduleIteration);
verify(0, postRequestedFor(urlPathMatching(CREATE_VERSION_URI)));
}
@Test // #56
void archiveReleaseVersionShouldArchiveReleaseVersion() {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
mockService.stubFor(put(urlPathMatching(UPDATE_VERSION_URI)).//
willReturn(json("versionCreated.json")));
jira.archiveReleaseVersion(moduleIteration);
verify(putRequestedFor(urlPathMatching(UPDATE_VERSION_URI))
.withRequestBody(equalToJson("{\"id\":\"15475\",\"name\":\"2.5 RC1 (Hopper)\","
+ "\"description\":\"Hopper RC1\", \"released\":true,\"archived\":true}")));
}
@Test // #5
void createReleaseTicketShouldCreateReleaseTicket() {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
mockGetProjectComponentsWith("projectComponents.json", moduleIteration.getProjectKey());
mockSearchWith("emptyTickets.json");
prepareCreateIssueAndReturn("issueCreated.json");
mockService.stubFor(get(urlPathMatching("/rest/api/2/issue/DATAREDIS-42")).//
willReturn(json("existingTicket.json")));
jira.createReleaseTicket(moduleIteration);
verify(postRequestedFor(urlPathMatching(CREATE_ISSUE_URI))
.withRequestBody(equalToJson("{\"fields\":{\"project\":{\"key\":\"DATAREST\"},"
+ "\"issuetype\":{\"name\":\"Task\"},\"summary\":\"Release 2.5 RC1 (Hopper)\","
+ "\"fixVersions\":[{\"name\":\"2.5 RC1 (Hopper)\"}],"
+ "\"components\":[{\"name\":\"Infrastructure\"}]}}")));
}
@Test // #5
void createReleaseTicketShouldCreateReleaseTicketWithoutComponent() {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
mockGetProjectComponentsWith("emptyProjectComponents.json", moduleIteration.getProjectKey());
mockSearchWith("emptyTickets.json");
prepareCreateIssueAndReturn("issueCreated.json");
mockService.stubFor(get(urlPathMatching("/rest/api/2/issue/DATAREDIS-42")).//
willReturn(json("existingTicket.json")));
jira.createReleaseTicket(moduleIteration);
verify(postRequestedFor(urlPathMatching(CREATE_ISSUE_URI))
.withRequestBody(equalToJson("{\"fields\":{\"project\":{\"key\":\"DATAREST\"},"
+ "\"issuetype\":{\"name\":\"Task\"},\"summary\":\"Release 2.5 RC1 (Hopper)\","
+ "\"fixVersions\":[{\"name\":\"2.5 RC1 (Hopper)\"}]}}")));
}
@Test // #5
void createReleaseTicketShouldFailWithNoReleaseVersion() {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
mockSearchWith("emptyTickets.json");
mockGetProjectVersionsWith("emptyReleaseVersions.json", moduleIteration.getProjectKey());
assertThatIllegalStateException().isThrownBy(() -> jira.createReleaseTicket(moduleIteration))
.withMessageContaining("No release version for Spring Data REST 2.5 RC1 (Hopper) found");
}
@Test // #5
void createReleaseTicketShouldFindExistingTicket() {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
mockGetProjectComponentsWith("projectComponents.json", moduleIteration.getProjectKey());
mockSearchWith("releaseTickets.json");
jira.createReleaseTicket(moduleIteration);
verify(0, postRequestedFor(urlPathMatching(CREATE_ISSUE_URI)));
}
/**
* @see #5, #54
*/
@Test
void assignTicketToMe() {
mockService.stubFor(get(urlPathMatching("/rest/api/2/issue/DATAREDIS-302")).//
willReturn(json("existingTicket.json")));
mockService.stubFor(put(urlPathMatching("/rest/api/2/issue/DATAREDIS-302")).//
willReturn(aResponse().withStatus(204)));
jira.assignTicketToMe(Projects.REDIS, new Ticket("DATAREDIS-302", "", null));
verify(putRequestedFor(urlPathMatching("/rest/api/2/issue/DATAREDIS-302")).withRequestBody(equalToJson(
"{\"update\":{\"assignee\":[ {\"set\":{\"name\":\"dummy\"}} ] }, \"transition\":{}, \"fields\":{}}")));
}
/**
* @see #5, #53
*/
@Test
void skipTicketAssignmentIfAssigned() {
properties.setUsername("mp911de");
mockService.stubFor(get(urlPathMatching("/rest/api/2/issue/DATACASS-302")).//
willReturn(json("existingTicket.json")));
mockService.stubFor(post(urlPathMatching("/rest/api/2/issue/DATACASS-302")).//
willReturn(aResponse().withStatus(204)));
jira.assignTicketToMe(Projects.CASSANDRA, new Ticket("DATACASS-302", "", null));
verify(0, postRequestedFor(urlPathMatching("/rest/api/2/issue/DATACASS-302")));
}
@Test // #94
void closeIterationShouldResolveReleaseTicket() {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Projects.REST, Iteration.RC1);
properties.setUsername("mp911de");
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
mockSearchWith("releaseTickets.json");
mockService.stubFor(get(urlPathMatching("/rest/api/2/issue/DATAREST-782")).//
willReturn(json("releaseTicket.json")));
mockService.stubFor(post(urlPathMatching("/rest/api/2/issue/DATAREST-782/transitions")) //
.willReturn(ResponseDefinitionBuilder.responseDefinition().withStatus(200)));
jira.closeIteration(moduleIteration);
verify(postRequestedFor(urlPathMatching("/rest/api/2/issue/DATAREST-782/transitions")).withRequestBody(
equalToJson("{\"update\":{},\"transition\":{\"id\":5},\"fields\":{\"resolution\":{\"name\":\"Complete\"}}}")));
}
private void mockSearchWith(String fromClassPath) {
mockService.stubFor(get(urlPathMatching(SEARCH_URI)).//
willReturn(json(fromClassPath)));
}
private void mockGetProjectVersionsWith(String fromClassPath, ProjectKey projectKey) {
mockService.stubFor(get(urlPathMatching(String.format(PROJECT_VERSION_URI, projectKey))).//
willReturn(json(fromClassPath)));
}
private void mockGetProjectComponentsWith(String fromClassPath, ProjectKey projectKey) {
mockService.stubFor(get(urlPathMatching(String.format(PROJECT_COMPONENTS_URI, projectKey))).//
willReturn(json(fromClassPath)));
}
private void prepareCreateIssueAndReturn(String fromClassPath) {
mockService.stubFor(post(urlPathMatching(CREATE_ISSUE_URI)).//
willReturn(json(fromClassPath)));
}
private void mockCreateVersionWith(String fromClassPath) {
mockService.stubFor(post(urlPathMatching(CREATE_VERSION_URI)).//
willReturn(json(fromClassPath)));
}
private ResponseDefinitionBuilder json(String fromClassPathFile) {
return aResponse().//
withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).//
withBodyFile(fromClassPathFile);
}
}

View File

@@ -1,93 +0,0 @@
/*
* Copyright 2014-2022 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
*
* https://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.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;
import org.springframework.data.release.model.ReleaseTrains;
/**
* Unit tests for {@link JiraVersion}.
*
* @author Oliver Gierke
* @author Mark Paluch
*/
class JiraVersionUnitTests {
@Test
void rendersJiraGaVersionCorrectly() {
assertIterationVersion(Iteration.M1, "1.8 M1 (Dijkstra)");
assertIterationVersion(Iteration.RC1, "1.8 RC1 (Dijkstra)");
assertIterationVersion(Iteration.GA, "1.8 GA (Dijkstra)");
assertIterationVersion(Iteration.SR1, "1.8.1 (Dijkstra SR1)");
assertIterationVersion(Iteration.SR2, "1.8.2 (Dijkstra SR2)");
assertIterationVersion(Iteration.SR3, "1.8.3 (Dijkstra SR3)");
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).hasToString("1.0 M1 (Dijkstra)");
}
@Test
void doesNotUseCustomIterationOnNonFirstiterations() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.ELASTICSEARCH, Iteration.RC1);
JiraVersion version = new JiraVersion(module);
assertThat(version).hasToString("1.0 RC1 (Dijkstra)");
}
@Test
void rendersDescriptionCorrectly() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.ELASTICSEARCH, Iteration.M1);
JiraVersion version = new JiraVersion(module);
assertThat(version.getDescription()).isEqualTo("Dijkstra M2");
}
private void assertIterationVersion(Iteration iteration, String expected) {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Projects.COMMONS, iteration);
JiraVersion version = new JiraVersion(module);
assertThat(version).hasToString(expected);
}
}

View File

@@ -1,125 +0,0 @@
/*
* Copyright 2016-2022 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
*
* https://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.issues.jira;
import static org.assertj.core.api.Assertions.*;
import java.util.Collections;
import org.junit.jupiter.api.Test;
import org.springframework.data.release.issues.Ticket;
import org.springframework.data.release.issues.Tickets;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.Projects;
import org.springframework.data.release.model.ReleaseTrains;
/**
* Unit tests for {@link Tickets}.
*
* @author Mark Paluch
*/
class TicketsUnitTests {
@Test
void hasReleaseTicketShouldReturnTrue() {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", JiraTicketStatus.of(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
boolean result = tickets.hasReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Projects.JPA, Iteration.GA));
assertThat(result).isTrue();
}
@Test
void hasReleaseTickeForTicketWithoutTrainNameShouldReturnFalse() {
Ticket ticket = new Ticket("1234", "Release 1.10 GA", JiraTicketStatus.of(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
boolean result = tickets.hasReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Projects.JPA, Iteration.GA));
assertThat(result).isFalse();
}
@Test
void getReleaseTicketReturnsReleaseTicket() {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", JiraTicketStatus.of(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
Ticket releaseTicket = tickets
.getReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Projects.JPA, Iteration.GA));
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() {
Ticket ticket = new Ticket("1234", "Release 1.10 GA", JiraTicketStatus.of(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
assertThatIllegalArgumentException().isThrownBy(
() -> tickets.getReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Projects.JPA, Iteration.GA)));
}
@Test
void getResolvedReleaseTicket() {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", JiraTicketStatus.of(true, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
Ticket releaseTicket = tickets
.getReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Projects.JPA, Iteration.GA));
assertThat(releaseTicket).isEqualTo(ticket);
}
@Test
void getReleaseTicketsReturnsReleaseTickets() {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", JiraTicketStatus.of(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
Tickets result = tickets
.getReleaseTickets(ReleaseTrains.HOPPER.getModuleIteration(Projects.JPA, Iteration.GA).getTrainIteration());
assertThat(result.getTickets().contains(ticket)).isTrue();
}
}

View File

@@ -28,26 +28,6 @@ import org.junit.jupiter.api.Test;
*/
class TrackerTest {
@Test
void testMatchesTicketNumber() throws Exception {
Pattern pattern = Pattern.compile(Tracker.JIRA.getTicketPattern());
Matcher matcher = pattern.matcher("DATAREDIS-1");
matcher.find();
assertThat(matcher.group(1)).isEqualTo("DATAREDIS-1");
}
@Test
void testMatchesBranchNamedLikeTicket() throws Exception {
Pattern pattern = Pattern.compile(Tracker.JIRA.getTicketPattern());
Matcher matcher = pattern.matcher("issues/DATAREDIS-1-dummy");
matcher.find();
assertThat(matcher.group(1)).isEqualTo("DATAREDIS-1");
}
@Test
void testVersionBranch() throws Exception {

View File

@@ -1,66 +0,0 @@
{
"expand": "schema,names",
"startAt": 0,
"maxResults": 50,
"total": 2,
"issues": [
{
"expand": "operations,editmeta,changelog,transitions,renderedFields",
"id": "35482",
"self": "https://jira.spring.io/rest/api/2/issue/35482",
"key": "DATAREDIS-1",
"fields": {
"summary": "Connections obtained from pool are never returned",
"resolution": {
"self": "https://jira.spring.io/rest/api/2/resolution/8",
"id": "8",
"description": "",
"name": "Complete"
},
"status": {
"self": "https://jira.spring.io/rest/api/2/status/5",
"description": "A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.",
"iconUrl": "https://jira.spring.io/images/icons/statuses/resolved.png",
"name": "Resolved",
"id": "5",
"statusCategory": {
"self": "https://jira.spring.io/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
}
}
},
{
"expand": "operations,editmeta,changelog,transitions,renderedFields",
"id": "35060",
"self": "https://jira.spring.io/rest/api/2/issue/35060",
"key": "DATAJPA-1",
"fields": {
"summary": "Move JPA parts of Hades library into Spring JPA",
"resolution": {
"self": "https://jira.spring.io/rest/api/2/resolution/1",
"id": "1",
"description": "A fix for this issue is checked into the tree and tested.",
"name": "Fixed"
},
"status": {
"self": "https://jira.spring.io/rest/api/2/status/6",
"description": "The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.",
"iconUrl": "https://jira.spring.io/images/icons/statuses/closed.png",
"name": "Closed",
"id": "6",
"statusCategory": {
"self": "https://jira.spring.io/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
}
}
}
]
}

View File

@@ -1,8 +0,0 @@
{
"self": "https://jira.spring.io/rest/api/2/project/DATAREST/version?maxResults=50&startAt=0",
"maxResults": 50,
"startAt": 0,
"total": 0,
"isLast": true,
"values": []
}

View File

@@ -1,6 +0,0 @@
{
"startAt": 0,
"maxResults": 50,
"total": 0,
"issues": []
}

View File

@@ -1,173 +0,0 @@
{
"expand": "renderedFields,names,schema,transitions,operations,editmeta,changelog",
"id": "68967",
"self": "https://jira.spring.io/rest/api/2/issue/68967",
"key": "DATACASS-302",
"fields": {
"issuetype": {
"self": "https://jira.spring.io/rest/api/2/issuetype/3",
"id": "3",
"description": "A task that needs to be done.",
"iconUrl": "https://jira.spring.io/images/icons/issuetypes/task.png",
"name": "Task",
"subtask": false
},
"timespent": null,
"customfield_10150": null,
"project": {
"self": "https://jira.spring.io/rest/api/2/project/11403",
"id": "11403",
"key": "DATACASS",
"name": "Spring Data for Apache Cassandra",
"avatarUrls": {
"48x48": "https://jira.spring.io/secure/projectavatar?pid=11403&avatarId=12504",
"24x24": "https://jira.spring.io/secure/projectavatar?size=small&pid=11403&avatarId=12504",
"16x16": "https://jira.spring.io/secure/projectavatar?size=xsmall&pid=11403&avatarId=12504",
"32x32": "https://jira.spring.io/secure/projectavatar?size=medium&pid=11403&avatarId=12504"
},
"projectCategory": {
"self": "https://jira.spring.io/rest/api/2/projectCategory/10000",
"id": "10000",
"description": "Top-level Spring projects",
"name": "Spring Projects"
}
},
"fixVersions": [],
"aggregatetimespent": null,
"resolution": null,
"resolutiondate": null,
"workratio": -1,
"lastViewed": null,
"watches": {
"self": "https://jira.spring.io/rest/api/2/issue/DATACASS-302/watchers",
"watchCount": 1,
"isWatching": true
},
"customfield_10180": "27907200",
"customfield_10181": "true",
"customfield_10380": "9223372036854775807",
"customfield_10182": "mp911de(mp911de)",
"created": "2016-06-20T11:54:21.542+0000",
"customfield_10381": "9223372036854775807",
"customfield_10140": null,
"customfield_10580": null,
"customfield_10142": null,
"priority": {
"self": "https://jira.spring.io/rest/api/2/priority/4",
"iconUrl": "https://jira.spring.io/images/icons/priorities/minor.png",
"name": "Minor",
"id": "4"
},
"customfield_10981": null,
"labels": [],
"timeestimate": null,
"aggregatetimeoriginalestimate": null,
"versions": [],
"issuelinks": [],
"assignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=mp911de",
"name": "mp911de",
"key": "mp911de",
"emailAddress": "mpaluch at pivotal dot io",
"avatarUrls": {
"48x48": "https://jira.spring.io/secure/useravatar?ownerId=mp911de&avatarId=14015",
"24x24": "https://jira.spring.io/secure/useravatar?size=small&ownerId=mp911de&avatarId=14015",
"16x16": "https://jira.spring.io/secure/useravatar?size=xsmall&ownerId=mp911de&avatarId=14015",
"32x32": "https://jira.spring.io/secure/useravatar?size=medium&ownerId=mp911de&avatarId=14015"
},
"displayName": "Mark Paluch",
"active": true,
"timeZone": "Europe/Berlin"
},
"updated": "2016-06-20T11:54:42.720+0000",
"status": {
"self": "https://jira.spring.io/rest/api/2/status/1",
"description": "The issue is open and ready for the assignee to start work on it.",
"iconUrl": "https://jira.spring.io/images/icons/statuses/open.png",
"name": "Open",
"id": "1",
"statusCategory": {
"self": "https://jira.spring.io/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
"components": [],
"customfield_10170": null,
"customfield_10171": null,
"timeoriginalestimate": null,
"description": "Add support for Cassandra {{time}} data type.\r\n\r\n{{time}} represents a Time string, such as 13:30:54.234 but it's mapped to the {{long}} Java type. The {{long}} value denotes millis since midnight. Updates require quoting of the value:\r\n\r\n{code}\r\nUPDATE mytable SET mytimefield ='123456';\r\n{code}\r\n\r\nPlease see also https://issues.apache.org/jira/browse/CASSANDRA-11798",
"timetracking": {},
"attachment": [],
"aggregatetimeestimate": null,
"summary": "Support Cassandra time columns",
"creator": {
"self": "https://jira.spring.io/rest/api/2/user?username=mp911de",
"name": "mp911de",
"key": "mp911de",
"emailAddress": "mpaluch at pivotal dot io",
"avatarUrls": {
"48x48": "https://jira.spring.io/secure/useravatar?ownerId=mp911de&avatarId=14015",
"24x24": "https://jira.spring.io/secure/useravatar?size=small&ownerId=mp911de&avatarId=14015",
"16x16": "https://jira.spring.io/secure/useravatar?size=xsmall&ownerId=mp911de&avatarId=14015",
"32x32": "https://jira.spring.io/secure/useravatar?size=medium&ownerId=mp911de&avatarId=14015"
},
"displayName": "Mark Paluch",
"active": true,
"timeZone": "Europe/Berlin"
},
"customfield_10280": "9223372036854775807",
"subtasks": [],
"customfield_10480": null,
"customfield_10680": null,
"customfield_10120": null,
"reporter": {
"self": "https://jira.spring.io/rest/api/2/user?username=mp911de",
"name": "mp911de",
"key": "mp911de",
"emailAddress": "mpaluch at pivotal dot io",
"avatarUrls": {
"48x48": "https://jira.spring.io/secure/useravatar?ownerId=mp911de&avatarId=14015",
"24x24": "https://jira.spring.io/secure/useravatar?size=small&ownerId=mp911de&avatarId=14015",
"16x16": "https://jira.spring.io/secure/useravatar?size=xsmall&ownerId=mp911de&avatarId=14015",
"32x32": "https://jira.spring.io/secure/useravatar?size=medium&ownerId=mp911de&avatarId=14015"
},
"displayName": "Mark Paluch",
"active": true,
"timeZone": "Europe/Berlin"
},
"customfield_10000": null,
"customfield_10880": "0|i09a87:",
"aggregateprogress": {
"progress": 0,
"total": 0
},
"customfield_10002": null,
"customfield_10684": null,
"environment": null,
"duedate": null,
"progress": {
"progress": 0,
"total": 0
},
"comment": {
"startAt": 0,
"maxResults": 0,
"total": 0,
"comments": []
},
"votes": {
"self": "https://jira.spring.io/rest/api/2/issue/DATACASS-302/votes",
"votes": 0,
"hasVoted": false
},
"worklog": {
"startAt": 0,
"maxResults": 20,
"total": 0,
"worklogs": []
}
}
}

View File

@@ -1,5 +0,0 @@
{
"id": "10000",
"key": "DATAREDIS-42",
"self": "https://www.example.com/jira/rest/api/2/issue/10000"
}

View File

@@ -1,146 +0,0 @@
[
{
"self": "https://jira.spring.io/rest/api/2/component/12775",
"id": "12775",
"name": "Infrastructure",
"assigneeType": "PROJECT_DEFAULT",
"assignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"realAssigneeType": "PROJECT_DEFAULT",
"realAssignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"isAssigneeTypeValid": true,
"project": "DATAREST",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/component/12748",
"id": "12748",
"name": "Content negotiation",
"assigneeType": "PROJECT_DEFAULT",
"assignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"realAssigneeType": "PROJECT_DEFAULT",
"realAssignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"isAssigneeTypeValid": true,
"project": "DATAREST",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/component/12747",
"id": "12747",
"name": "Documentation",
"assigneeType": "PROJECT_DEFAULT",
"assignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"realAssigneeType": "PROJECT_DEFAULT",
"realAssignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"isAssigneeTypeValid": true,
"project": "DATAREST",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/component/12746",
"id": "12746",
"name": "Repositories",
"assigneeType": "PROJECT_DEFAULT",
"assignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"realAssigneeType": "PROJECT_DEFAULT",
"realAssignee": {
"self": "https://jira.spring.io/rest/api/2/user?username=olivergierke",
"key": "olivergierke",
"name": "olivergierke",
"avatarUrls": {
"16x16": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=16",
"24x24": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=24",
"32x32": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=32",
"48x48": "https://secure.gravatar.com/avatar/27320c872264d5db7a38f65137d423db?d=mm&s=48"
},
"displayName": "Oliver Gierke",
"active": true
},
"isAssigneeTypeValid": true,
"project": "DATAREST",
"projectId": 10901
}
]

View File

@@ -1,22 +0,0 @@
{
"expand": "operations,editmeta,changelog,transitions,renderedFields",
"id": "67908",
"self": "https://jira.spring.io/rest/api/2/issue/67908",
"key": "DATAREST-782",
"fields": {
"summary": "Release 2.5 RC1 (Hopper)",
"resolution": {
"self": "https://jira.spring.io/rest/api/2/resolution/1",
"id": "1",
"description": "A fix for this issue is checked into the tree and tested.",
"name": "Fixed"
},
"status": {
"name": "In Progress",
"id": "6",
"statusCategory": {
"key": "indeterminate"
}
}
}
}

View File

@@ -1,37 +0,0 @@
{
"expand": "names,schema",
"startAt": 0,
"maxResults": 50,
"total": 1,
"issues": [
{
"expand": "operations,editmeta,changelog,transitions,renderedFields",
"id": "67908",
"self": "https://jira.spring.io/rest/api/2/issue/67908",
"key": "DATAREST-782",
"fields": {
"summary": "Release 2.5 RC1 (Hopper)",
"resolution": {
"self": "https://jira.spring.io/rest/api/2/resolution/1",
"id": "1",
"description": "A fix for this issue is checked into the tree and tested.",
"name": "Fixed"
},
"status": {
"self": "https://jira.spring.io/rest/api/2/status/6",
"description": "The issue is considered finished, the resolution is correct. Issues which are not closed can be reopened.",
"iconUrl": "https://jira.spring.io/images/icons/statuses/closed.png",
"name": "Closed",
"id": "6",
"statusCategory": {
"self": "https://jira.spring.io/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
}
}
}
]
}

View File

@@ -1,446 +0,0 @@
{
"self": "https://jira.spring.io/rest/api/2/project/DATAREST/version?maxResults=50&startAt=0",
"maxResults": 50,
"startAt": 0,
"total": 44,
"isLast": true,
"values": [
{
"self": "https://jira.spring.io/rest/api/2/version/12843",
"id": "12843",
"name": "1.0 - M1",
"archived": true,
"released": true,
"releaseDate": "2012-04-24",
"userReleaseDate": "24/Apr/12",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/12844",
"id": "12844",
"name": "1.0 - M2",
"archived": true,
"released": true,
"releaseDate": "2012-05-16",
"userReleaseDate": "16/May/12",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/12845",
"id": "12845",
"name": "1.0.0.RC1",
"archived": true,
"released": true,
"releaseDate": "2012-06-26",
"userReleaseDate": "26/Jun/12",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/13203",
"id": "13203",
"name": "1.0.0.RC2",
"archived": true,
"released": true,
"releaseDate": "2012-07-31",
"userReleaseDate": "31/Jul/12",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/13598",
"id": "13598",
"name": "1.0.0.RC3",
"archived": true,
"released": true,
"releaseDate": "2012-09-14",
"userReleaseDate": "14/Sep/12",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/12846",
"id": "12846",
"name": "1.0.0 GA",
"archived": true,
"released": true,
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14009",
"id": "14009",
"name": "1.1.0.M1",
"archived": true,
"released": true,
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/13003",
"id": "13003",
"name": "2.0 M1 (Codd)",
"archived": true,
"released": true,
"releaseDate": "2013-11-21",
"userReleaseDate": "21/Nov/13",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14259",
"id": "14259",
"name": "2.0 RC1 (Codd)",
"archived": true,
"released": true,
"releaseDate": "2014-01-29",
"userReleaseDate": "29/Jan/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14260",
"id": "14260",
"name": "2.0 GA (Codd)",
"archived": true,
"released": true,
"releaseDate": "2014-02-24",
"userReleaseDate": "24/Feb/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14384",
"id": "14384",
"name": "2.0.1 (Codd SR1)",
"archived": true,
"released": true,
"releaseDate": "2014-03-13",
"userReleaseDate": "13/Mar/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14385",
"id": "14385",
"name": "2.1 M1 (Dijkstra)",
"archived": true,
"released": true,
"releaseDate": "2014-04-01",
"userReleaseDate": "01/Apr/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14412",
"id": "14412",
"name": "2.0.2 (Codd SR2)",
"archived": true,
"released": true,
"releaseDate": "2014-04-15",
"userReleaseDate": "15/Apr/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14386",
"id": "14386",
"name": "2.1 RC1 (Dijkstra)",
"archived": true,
"released": true,
"releaseDate": "2014-05-02",
"userReleaseDate": "02/May/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14520",
"id": "14520",
"name": "2.0.3 (Codd SR3)",
"archived": true,
"released": true,
"releaseDate": "2014-06-18",
"userReleaseDate": "18/Jun/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14387",
"id": "14387",
"name": "2.1 GA (Dijkstra)",
"archived": true,
"released": true,
"releaseDate": "2014-05-20",
"userReleaseDate": "20/May/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14607",
"id": "14607",
"name": "2.1.1 (Dijkstra SR1)",
"archived": true,
"released": true,
"releaseDate": "2014-06-30",
"userReleaseDate": "30/Jun/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14614",
"id": "14614",
"name": "2.2 M1 (Evans)",
"archived": true,
"released": true,
"releaseDate": "2014-07-10",
"userReleaseDate": "10/Jul/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14656",
"id": "14656",
"name": "2.1.2 (Dijkstra SR2)",
"archived": true,
"released": true,
"releaseDate": "2014-07-28",
"userReleaseDate": "28/Jul/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14675",
"id": "14675",
"name": "2.2 RC1 (Evans)",
"archived": true,
"released": true,
"releaseDate": "2014-08-13",
"userReleaseDate": "13/Aug/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14695",
"id": "14695",
"name": "2.1.4 (Dijkstra SR4)",
"archived": true,
"released": true,
"releaseDate": "2014-08-27",
"userReleaseDate": "27/Aug/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14710",
"id": "14710",
"name": "2.2 GA (Evans)",
"archived": true,
"released": true,
"releaseDate": "2014-09-05",
"userReleaseDate": "05/Sep/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14731",
"id": "14731",
"name": "2.2.1 (Evans SR1)",
"archived": true,
"released": true,
"releaseDate": "2014-10-31",
"userReleaseDate": "31/Oct/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14732",
"id": "14732",
"name": "2.3 M1 (Fowler)",
"archived": true,
"released": true,
"releaseDate": "2014-12-01",
"userReleaseDate": "01/Dec/14",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14721",
"id": "14721",
"name": "2.1.5 (Dijkstra SR5)",
"archived": true,
"released": true,
"releaseDate": "2015-01-27",
"userReleaseDate": "27/Jan/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14819",
"id": "14819",
"name": "2.2.2 (Evans SR2)",
"archived": true,
"released": true,
"releaseDate": "2015-01-28",
"userReleaseDate": "28/Jan/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14852",
"id": "14852",
"name": "2.3 RC1 (Fowler)",
"archived": true,
"released": true,
"releaseDate": "2015-03-05",
"userReleaseDate": "05/Mar/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14949",
"id": "14949",
"name": "2.3 GA (Fowler)",
"archived": true,
"released": true,
"releaseDate": "2015-03-23",
"userReleaseDate": "23/Mar/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14981",
"id": "14981",
"name": "2.4 M1 (Gosling)",
"archived": true,
"released": true,
"releaseDate": "2015-06-02",
"userReleaseDate": "02/Jun/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14970",
"id": "14970",
"name": "2.3.1 (Fowler SR1)",
"archived": true,
"released": true,
"releaseDate": "2015-07-01",
"userReleaseDate": "01/Jul/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14925",
"id": "14925",
"name": "2.2.3 (Evans SR3)",
"archived": true,
"released": true,
"releaseDate": "2015-07-01",
"userReleaseDate": "01/Jul/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/14912",
"id": "14912",
"name": "2.1.6 (Dijkstra SR6)",
"archived": true,
"released": true,
"releaseDate": "2015-07-01",
"userReleaseDate": "01/Jul/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15240",
"id": "15240",
"name": "2.3.2 (Fowler SR2)",
"archived": false,
"released": true,
"releaseDate": "2015-07-28",
"userReleaseDate": "28/Jul/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15205",
"id": "15205",
"name": "2.4 RC1 (Gosling)",
"archived": true,
"released": true,
"releaseDate": "2015-08-04",
"userReleaseDate": "04/Aug/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15279",
"id": "15279",
"name": "2.4 GA (Gosling)",
"archived": true,
"released": true,
"releaseDate": "2015-09-01",
"userReleaseDate": "01/Sep/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15348",
"id": "15348",
"description": "Evans SR4",
"name": "2.2.4 (Evans SR4)",
"archived": false,
"released": true,
"releaseDate": "2015-10-14",
"userReleaseDate": "14/Oct/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15310",
"id": "15310",
"description": "Gosling SR1",
"name": "2.4.1 (Gosling SR1)",
"archived": true,
"released": true,
"releaseDate": "2015-11-15",
"userReleaseDate": "15/Nov/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15416",
"id": "15416",
"description": "Gosling SR2",
"name": "2.4.2 (Gosling SR2)",
"archived": false,
"released": true,
"releaseDate": "2015-12-18",
"userReleaseDate": "18/Dec/15",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15311",
"id": "15311",
"description": "Hopper M1",
"name": "2.5 M1 (Hopper)",
"archived": false,
"released": true,
"releaseDate": "2016-02-12",
"userReleaseDate": "12/Feb/16",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15455",
"id": "15455",
"description": "Gosling SR4",
"name": "2.4.4 (Gosling SR4)",
"archived": false,
"released": true,
"releaseDate": "2016-02-23",
"userReleaseDate": "23/Feb/16",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15475",
"id": "15475",
"description": "Hopper RC1",
"name": "2.5 RC1 (Hopper)",
"archived": false,
"released": true,
"releaseDate": "2016-03-18",
"userReleaseDate": "18/Mar/16",
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15260",
"id": "15260",
"description": "Fowler SR3",
"name": "2.3.3 (Fowler SR3)",
"archived": false,
"released": false,
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15512",
"id": "15512",
"name": "2.4.5 (Gosling SR5)",
"archived": false,
"released": false,
"projectId": 10901
},
{
"self": "https://jira.spring.io/rest/api/2/version/15513",
"id": "15513",
"name": "2.5 GA (Hopper)",
"archived": false,
"released": false,
"projectId": 10901
}
]
}

View File

@@ -1,8 +0,0 @@
{
"description": "An excellent version",
"name": "2.5 RC1 (Hopper)",
"archived": false,
"released": false,
"project": "DATAREST",
"projectId": 10000
}