#5 - Create release tickets and release versions for Jira-tracked projects.

Creates jira release version for a train iteration if not present. Creates release tickets in Jira and GitHub if not present. Added pre-release verification that the release ticket is present and all other tickets are closed. Allow singular ticket and release version creation. Add integration tests using WireMock. Add command to self-assign release tickets.

Added CLI commands:
* jira releasetickets
* jira create releasetickets
* jira self-assign releasetickets
* jira create releaseversions
* github tickets
* github releasetickets
* github create releaseversions
* github create releasetickets

Original pull request: #14.
This commit is contained in:
Mark Paluch
2016-03-07 15:31:16 +01:00
committed by Oliver Gierke
parent ce01cabdf3
commit 7f1ae27d3e
47 changed files with 3463 additions and 260 deletions

View File

@@ -16,28 +16,223 @@
package org.springframework.data.release.jira;
import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
import static org.junit.Assert.assertThat;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.release.AbstractIntegrationTests;
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;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
import com.github.tomakehurst.wiremock.common.ClasspathFileSource;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
/**
* Integration Tests for {@link GitHubIssueTracker} using a local {@link WireMockRule} server.
*
* @author Mark Paluch
*/
public class GitHubIssueTrackerIntegrationTests extends AbstractIntegrationTests {
@Autowired GitHubConnector gitHubIssueTracker;
public static final String ISSUES_URI = "/repos/spring-projects/spring-data-build/issues";
public static final String MILESTONES_URI = "/repos/spring-projects/spring-data-build/milestones";
public static final ModuleIteration BUILD_HOPPER_RC1 = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1,
"Build");
@Rule public WireMockRule mockService = new WireMockRule(
wireMockConfig().port(8888).fileSource(new ClasspathFileSource("integration/github")));
@Rule public ExpectedException expectedException = ExpectedException.none();
@Autowired IssueTracker github;
@Before
public void before() throws Exception {
github.reset();
}
/**
* @see #5
*/
@Test
public void getTickets() throws Exception {
public void findTicketsByTicketIds() throws Exception {
mockGetIssueWith("issue.json", 233);
Collection<Ticket> tickets = github.findTickets(Projects.BUILD, Arrays.asList("233"));
assertThat(tickets, hasSize(1));
}
/**
* @see #5
*/
@Test
public void ignoresUnknownTicketsByTicketId() throws Exception {
Collection<Ticket> tickets = github.findTickets(Projects.BUILD, Arrays.asList("123"));
assertThat(tickets, hasSize(0));
}
/**
* @see #5
*/
@Test
public void emptyResultWithEmptyTicketIds() throws Exception {
Collection<Ticket> tickets = github.findTickets(Projects.COMMONS, Arrays.asList());
assertThat(tickets, hasSize(0));
}
/**
* @see #5
*/
@Test
public void getReleaseTicketForReturnsTheReleaseTicket() throws Exception {
mockGetMilestonesWith("milestones.json");
mockGetIssuesWith("issues.json");
Ticket releaseTicket = github.getReleaseTicketFor(BUILD_HOPPER_RC1);
assertThat(releaseTicket.getId(), is(Matchers.equalTo("#233")));
}
/**
* @see #5
*/
@Test
public void noReleaseTicketFound() throws Exception {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("No milestone for Spring Data Build found containing 1.8 RC1!");
mockGetMilestonesWith("emptyMilestones.json");
github.getReleaseTicketFor(BUILD_HOPPER_RC1);
fail("Missing IllegalStateException");
}
/**
* @see #5
*/
@Test
public void createReleaseVersionShouldCreateAVersion() throws Exception {
mockGetMilestonesWith("emptyMilestones.json");
mockCreateMilestoneWith("milestone.json");
github.createReleaseVersion(BUILD_HOPPER_RC1);
verify(postRequestedFor(urlPathMatching(MILESTONES_URI))
.withRequestBody(equalToJson("{\"title\":\"1.8 RC1 (Hopper)\", \"description\":\"Hopper RC1\"}")));
}
/**
* @see #5
*/
@Test
public void createReleaseVersionShouldFindExistingReleaseVersion() throws Exception {
mockGetMilestonesWith("milestones.json");
github.createReleaseVersion(BUILD_HOPPER_RC1);
verify(0, postRequestedFor(urlPathMatching(MILESTONES_URI)));
}
/**
* @see #5
*/
@Test
public void createReleaseTicketShouldCreateReleaseTicket() throws Exception {
mockGetMilestonesWith("milestones.json");
mockGetIssuesWith("emptyIssues.json");
mockCreateIssueWith("issue.json");
github.createReleaseTicket(BUILD_HOPPER_RC1);
verify(postRequestedFor(urlPathMatching(ISSUES_URI))
.withRequestBody(equalToJson("{\"title\":\"Release 1.8 RC1 (Hopper)\",\"milestone\":45}")));
}
/**
* @see #5
*/
@Test
public void createReleaseTicketShouldFailWithNoReleaseVersion() throws Exception {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("No milestone for Spring Data Build found containing 1.8 RC1!");
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1, "Build");
mockGetIssuesWith("emptyIssues.json");
mockGetMilestonesWith("emptyMilestones.json");
github.createReleaseTicket(moduleIteration);
fail("Missing IllegalStateException");
}
/**
* @see #5
*/
@Test
public void createReleaseTicketShouldFindExistingTicket() throws Exception {
mockGetMilestonesWith("milestones.json");
mockGetIssuesWith("issues.json");
github.createReleaseTicket(BUILD_HOPPER_RC1);
verify(0, postRequestedFor(urlPathMatching(MILESTONES_URI)));
}
private void mockGetIssueWith(String fromClassPath, int issueId) {
mockService.stubFor(get(urlPathMatching(ISSUES_URI + "/" + issueId)).//
willReturn(json(fromClassPath)));
}
private void mockGetIssuesWith(String fromClassPath) {
mockService.stubFor(get(urlPathMatching(ISSUES_URI)).//
willReturn(json(fromClassPath)));
}
private void mockCreateIssueWith(String fromClassPath) {
mockService.stubFor(post(urlPathMatching(ISSUES_URI)).//
willReturn(json(fromClassPath)));
}
private void mockGetMilestonesWith(String fromClassPath) {
mockService.stubFor(get(urlPathMatching(MILESTONES_URI)).//
willReturn(json(fromClassPath)));
}
private void mockCreateMilestoneWith(String fromClassPath) {
mockService.stubFor(post(urlPathMatching(MILESTONES_URI)).//
willReturn(json(fromClassPath)));
}
private ResponseDefinitionBuilder json(String fromClassPathFile) {
return aResponse().//
withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).//
withBodyFile(fromClassPathFile);
Collection<Ticket> tickets = gitHubIssueTracker.findTickets(Projects.BUILD, Arrays.asList("1", "2", "-1"));
assertThat(tickets, hasSize(2));
}
}

View File

@@ -0,0 +1,80 @@
/*
* Copyright 2016 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.jira;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
import org.junit.Test;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.ModuleIteration;
import org.springframework.data.release.model.ReleaseTrains;
/**
* Unit tests for {@link GithubMilestone}.
*
* @author Mark Paluch
*/
public class GithubMilestoneUnitTests {
@Test
public void rendersGithubGaVersionCorrectly() {
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
public void usesCustomModuleIterationStartVersion() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Iteration.M1, "Elasticsearch");
GithubMilestone version = new GithubMilestone(module);
assertThat(version.toString(), is("1.0 M1 (Dijkstra)"));
}
@Test
public void doesNotUseCustomIterationOnNonFirstiterations() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Iteration.RC1, "Elasticsearch");
GithubMilestone version = new GithubMilestone(module);
assertThat(version.toString(), is("1.0 RC1 (Dijkstra)"));
}
@Test
public void rendersDescriptionCorrectly() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Iteration.M1, "Elasticsearch");
GithubMilestone version = new GithubMilestone(module);
assertThat(version.getDescription(), is("Dijkstra M2"));
}
private void assertIterationVersion(Iteration iteration, String expected) {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(iteration, "Commons");
GithubMilestone version = new GithubMilestone(module);
assertThat(version.toString(), is(expected));
}
}

View File

@@ -0,0 +1,67 @@
/*
* Copyright 2016 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.jira;
import static org.hamcrest.core.Is.*;
import static org.junit.Assert.*;
import java.util.Collections;
import org.junit.Test;
/**
* Unit tests for {@link JiraComponents}.
*
* @author Mark Paluch
*/
public class JiraComponentsUnitTests {
/**
* @see #5
*/
@Test
public void returnsComponentByName() throws Exception {
JiraComponent fooComponent = new JiraComponent("123", "foo");
JiraComponents jiraComponents = JiraComponents.of(Collections.singleton(fooComponent));
assertThat(jiraComponents.findComponent("foo").isPresent(), is(true));
}
/**
* @see #5
*/
@Test
public void returnsEmptyIfComponentMissing() throws Exception {
JiraComponent fooComponent = new JiraComponent("123", "foo");
JiraComponents jiraComponents = JiraComponents.of(Collections.singleton(fooComponent));
assertThat(jiraComponents.findComponent("baz").isPresent(), is(false));
}
/**
* @see #5
*/
@Test(expected = IllegalArgumentException.class)
public void failsOnNullArgumentConstruction() throws Exception {
JiraComponents.of(null);
fail("Missing IllegalArgumentException");
}
}

View File

@@ -16,42 +16,292 @@
package org.springframework.data.release.jira;
import static org.hamcrest.Matchers.hasSize;
import static org.junit.Assert.assertThat;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.*;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.Collection;
import java.util.Optional;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.release.AbstractIntegrationTests;
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 com.github.tomakehurst.wiremock.client.ResponseDefinitionBuilder;
import com.github.tomakehurst.wiremock.common.ClasspathFileSource;
import com.github.tomakehurst.wiremock.junit.WireMockRule;
/**
* Integration Tests for {@link Jira} using a local {@link WireMockRule} server.
*
* @author Mark Paluch
*/
public class JiraIntegrationTests extends AbstractIntegrationTests {
public static final String CREATE_ISSUE_URI = "/rest/api/2/issue";
public static final String CREATE_VERSION_URI = "/rest/api/2/version";
public static final String SEARCH_URI = "/rest/api/2/search";
public static final String PROJECT_VERSION_URI = "/rest/api/2/project/%s/version";
public static final String PROJECT_COMPONENTS_URI = "/rest/api/2/project/%s/components";
public static final ModuleIteration REST_HOPPER_RC1 = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1, "REST");
@Rule public WireMockRule mockService = new WireMockRule(
wireMockConfig().port(8888).fileSource(new ClasspathFileSource("integration/jira")));
@Rule public ExpectedException expectedException = ExpectedException.none();
@Autowired JiraConnector jira;
@Before
public void before() throws Exception {
jira.reset();
}
/**
* @see #5
*/
@Test
public void findResolvedTicketsByTicketIds() throws Exception {
mockSearchWith("DATAREDIS-1andDATAJPA-1.json");
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Arrays.asList("DATAREDIS-1", "DATAJPA-1"));
assertThat(tickets, hasSize(2));
}
/**
* @see #5
*/
@Test
public void ignoresUnknownTicketsByTicketId() throws Exception {
mockSearchWith("emptyTickets.json");
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Arrays.asList("XYZ-1", "UNKOWN-1"));
assertThat(tickets, hasSize(0));
}
/**
* @see #5
*/
@Test
public void emptyResultWithEmptyTicketIds() throws Exception {
Collection<Ticket> tickets = jira.findTickets(Projects.COMMONS, Arrays.asList());
assertThat(tickets, hasSize(0));
}
/**
* @see #5
*/
@Test
public void getReleaseTicketForReturnsTheReleaseTicket() throws Exception {
mockSearchWith("releaseTickets.json");
Ticket releaseTicket = jira.getReleaseTicketFor(REST_HOPPER_RC1);
assertThat(releaseTicket.getId(), is(Matchers.equalTo("DATAREST-782")));
}
/**
* @see #5
*/
@Test
public void noReleaseTicketFound() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Did not find a release ticket for Spring Data REST 2.5 RC1");
mockSearchWith("emptyTickets.json");
jira.getReleaseTicketFor(REST_HOPPER_RC1);
fail("Missing IllegalStateException");
}
/**
* @see #5
*/
@Test
public void getReleaseVersion() throws Exception {
mockGetProjectVersionsWith("releaseVersions.json", REST_HOPPER_RC1.getProjectKey());
Optional<JiraReleaseVersion> optional = jira.findJiraReleaseVersion(REST_HOPPER_RC1);
assertThat(optional.isPresent(), is(true));
assertThat(optional.get().getName(), is(Matchers.equalTo("2.5 RC1 (Hopper)")));
}
/**
* @see #5
*/
@Test
public void createReleaseVersionShouldCreateAVersion() throws Exception {
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\"}")));
}
/**
* @see #5
*/
@Test
public void createReleaseVersionShouldFindExistingReleaseVersion() throws Exception {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1, "REST");
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
jira.createReleaseVersion(moduleIteration);
verify(0, postRequestedFor(urlPathMatching(CREATE_VERSION_URI)));
}
/**
* @see #5
*/
@Test
public void createReleaseTicketShouldCreateReleaseTicket() throws Exception {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1, "REST");
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
mockGetProjectComponentsWith("projectComponents.json", moduleIteration.getProjectKey());
mockSearchWith("emptyTickets.json");
prepareCreateIssueAndReturn("issueCreated.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\"}]}}")));
}
/**
* @see #5
*/
@Test
public void createReleaseTicketShouldCreateReleaseTicketWithoutComponent() throws Exception {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1, "REST");
mockGetProjectVersionsWith("releaseVersions.json", moduleIteration.getProjectKey());
mockGetProjectComponentsWith("emptyProjectComponents.json", moduleIteration.getProjectKey());
mockSearchWith("emptyTickets.json");
prepareCreateIssueAndReturn("issueCreated.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)\"}]}}")));
}
/**
* @see #5
*/
@Test
public void createReleaseTicketShouldFailWithNoReleaseVersion() throws Exception {
expectedException.expect(IllegalStateException.class);
expectedException.expectMessage("Did not find a release version for Spring Data REST 2.5 RC1");
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1, "REST");
mockSearchWith("emptyTickets.json");
mockGetProjectVersionsWith("emptyReleaseVersions.json", moduleIteration.getProjectKey());
jira.createReleaseTicket(moduleIteration);
fail("Missing IllegalStateException");
}
/**
* @see #5
*/
@Test
public void createReleaseTicketShouldFindExistingTicket() throws Exception {
ModuleIteration moduleIteration = ReleaseTrains.HOPPER.getModuleIteration(Iteration.RC1, "REST");
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
*/
@Test
public void assignTicketToMe() throws Exception {
mockService.stubFor(post(urlPathMatching("/rest/api/2/issue/DATAREDIS-99999")).//
willReturn(aResponse().withStatus(204)));
jira.assignTicketToMe(new Ticket("DATAREDIS-99999", "", null));
verify(postRequestedFor(urlPathMatching("/rest/api/2/issue/DATAREDIS-99999"))
.withRequestBody(equalToJson("{\"fields\":{\"assignee\":{\"name\":\"dummy\"}}}")));
}
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

@@ -25,7 +25,7 @@ import org.springframework.data.release.model.ReleaseTrains;
/**
* Unit tests for {@link JiraVersion}.
*
*
* @author Oliver Gierke
*/
public class JiraVersionUnitTests {
@@ -49,7 +49,7 @@ public class JiraVersionUnitTests {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Iteration.M1, "Elasticsearch");
JiraVersion version = new JiraVersion(module);
assertThat(version.toString(), is("1.0 M2 (Dijkstra)"));
assertThat(version.toString(), is("1.0 M1 (Dijkstra)"));
}
@Test
@@ -61,6 +61,15 @@ public class JiraVersionUnitTests {
assertThat(version.toString(), is("1.0 RC1 (Dijkstra)"));
}
@Test
public void rendersDescriptionCorrectly() {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(Iteration.M1, "Elasticsearch");
JiraVersion version = new JiraVersion(module);
assertThat(version.getDescription(), is("Dijkstra M2"));
}
private void assertIterationVersion(Iteration iteration, String expected) {
ModuleIteration module = ReleaseTrains.DIJKSTRA.getModuleIteration(iteration, "Commons");

View File

@@ -0,0 +1,97 @@
/*
* Copyright 2016 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.jira;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import static org.springframework.test.util.AssertionErrors.fail;
import java.util.Collections;
import org.junit.Test;
import org.springframework.data.release.model.Iteration;
import org.springframework.data.release.model.ReleaseTrains;
/**
* Unit tests for {@link Tickets}.
*
* @author Mark Paluch
*/
public class TicketsUnitTests {
@Test
public void hasReleaseTicketShouldReturnTrue() throws Exception {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", new JiraTicketStatus(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
boolean result = tickets.hasReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Iteration.GA, "JPA"));
assertThat(result, is(true));
}
@Test
public void hasReleaseTickeForTicketWithoutTrainNameShouldReturnFalse() throws Exception {
Ticket ticket = new Ticket("1234", "Release 1.10 GA", new JiraTicketStatus(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
boolean result = tickets.hasReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Iteration.GA, "JPA"));
assertThat(result, is(false));
}
@Test
public void getReleaseTicketReturnsReleaseTicket() throws Exception {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", new JiraTicketStatus(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
Ticket releaseTicket = tickets.getReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Iteration.GA, "JPA"));
assertThat(releaseTicket, is(ticket));
}
@Test(expected = IllegalStateException.class)
public void getReleaseTicketThrowsExceptionWithoutAReleaseTicket() throws Exception {
Ticket ticket = new Ticket("1234", "Release 1.10 GA", new JiraTicketStatus(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
tickets.getReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Iteration.GA, "JPA"));
fail("Missing IllegalStateException");
}
@Test
public void getResolvedReleaseTicket() throws Exception {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", new JiraTicketStatus(true, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
Ticket releaseTicket = tickets.getReleaseTicket(ReleaseTrains.HOPPER.getModuleIteration(Iteration.GA, "JPA"));
assertThat(releaseTicket, is(ticket));
}
@Test
public void getReleaseTicketsReturnsReleaseTickets() throws Exception {
Ticket ticket = new Ticket("1234", "Release 1.10 GA (Hopper)", new JiraTicketStatus(false, "", ""));
Tickets tickets = new Tickets(Collections.singletonList(ticket));
Tickets result = tickets
.getReleaseTickets(ReleaseTrains.HOPPER.getModuleIteration(Iteration.GA, "JPA").getTrainIteration());
assertThat(result.getTickets().contains(ticket), is(true));
}
}

View File

@@ -5,3 +5,8 @@ logging.level.org.springframework.web.client=TRACE
# Deployment
deployment.repository-prefix=test-
jira.username=dummy
jira.password=dummy
jira.url=http://localhost:8888
github.api.url=http://localhost:8888

View File

@@ -0,0 +1,75 @@
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233",
"repository_url": "https://api.github.com/repos/spring-projects/spring-data-build",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233/labels{/name}",
"comments_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233/comments",
"events_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233/events",
"html_url": "https://github.com/spring-projects/spring-data-build/issues/233",
"id": 141655399,
"number": 233,
"title": "Release 1.8 RC1 (Hopper)",
"user": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"labels": [
],
"state": "open",
"locked": false,
"assignee": null,
"milestone": {
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
},
"comments": 0,
"created_at": "2016-03-17T17:43:09Z",
"updated_at": "2016-03-17T17:43:09Z",
"closed_at": null,
"body": ""
}

View File

@@ -0,0 +1,436 @@
[
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233",
"repository_url": "https://api.github.com/repos/spring-projects/spring-data-build",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233/labels{/name}",
"comments_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233/comments",
"events_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/233/events",
"html_url": "https://github.com/spring-projects/spring-data-build/issues/233",
"id": 141655399,
"number": 233,
"title": "Release 1.8 RC1 (Hopper)",
"user": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"labels": [
],
"state": "open",
"locked": false,
"assignee": null,
"milestone": {
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
},
"comments": 0,
"created_at": "2016-03-17T17:43:09Z",
"updated_at": "2016-03-17T17:43:09Z",
"closed_at": null,
"body": ""
},
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/232",
"repository_url": "https://api.github.com/repos/spring-projects/spring-data-build",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/232/labels{/name}",
"comments_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/232/comments",
"events_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/232/events",
"html_url": "https://github.com/spring-projects/spring-data-build/issues/232",
"id": 139529287,
"number": 232,
"title": "Remove spring41-next build profile.",
"user": {
"login": "christophstrobl",
"id": 2317257,
"avatar_url": "https://avatars.githubusercontent.com/u/2317257?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/christophstrobl",
"html_url": "https://github.com/christophstrobl",
"followers_url": "https://api.github.com/users/christophstrobl/followers",
"following_url": "https://api.github.com/users/christophstrobl/following{/other_user}",
"gists_url": "https://api.github.com/users/christophstrobl/gists{/gist_id}",
"starred_url": "https://api.github.com/users/christophstrobl/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/christophstrobl/subscriptions",
"organizations_url": "https://api.github.com/users/christophstrobl/orgs",
"repos_url": "https://api.github.com/users/christophstrobl/repos",
"events_url": "https://api.github.com/users/christophstrobl/events{/privacy}",
"received_events_url": "https://api.github.com/users/christophstrobl/received_events",
"type": "User",
"site_admin": false
},
"labels": [
],
"state": "closed",
"locked": false,
"assignee": null,
"milestone": {
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
},
"comments": 0,
"created_at": "2016-03-09T09:56:42Z",
"updated_at": "2016-03-17T17:46:03Z",
"closed_at": "2016-03-17T17:46:03Z",
"body": "With the baseline upgrade to Spring 4.2 the `spring41-next` profile has become obsolete."
},
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/231",
"repository_url": "https://api.github.com/repos/spring-projects/spring-data-build",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/231/labels{/name}",
"comments_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/231/comments",
"events_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/231/events",
"html_url": "https://github.com/spring-projects/spring-data-build/issues/231",
"id": 137830920,
"number": 231,
"title": "Upgrade to latest Querydsl",
"user": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"labels": [
],
"state": "closed",
"locked": false,
"assignee": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"milestone": {
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
},
"comments": 0,
"created_at": "2016-03-02T10:11:20Z",
"updated_at": "2016-03-02T10:14:24Z",
"closed_at": "2016-03-02T10:14:24Z",
"body": ""
},
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/230",
"repository_url": "https://api.github.com/repos/spring-projects/spring-data-build",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/230/labels{/name}",
"comments_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/230/comments",
"events_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/230/events",
"html_url": "https://github.com/spring-projects/spring-data-build/issues/230",
"id": 137829896,
"number": 230,
"title": "Upgrade to Spring 4.2",
"user": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"labels": [
],
"state": "closed",
"locked": false,
"assignee": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"milestone": {
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
},
"comments": 0,
"created_at": "2016-03-02T10:05:48Z",
"updated_at": "2016-03-02T10:14:29Z",
"closed_at": "2016-03-02T10:14:29Z",
"body": ""
},
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/227",
"repository_url": "https://api.github.com/repos/spring-projects/spring-data-build",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/227/labels{/name}",
"comments_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/227/comments",
"events_url": "https://api.github.com/repos/spring-projects/spring-data-build/issues/227/events",
"html_url": "https://github.com/spring-projects/spring-data-build/issues/227",
"id": 134905897,
"number": 227,
"title": "Downgrade Jackson baseline to 2.6",
"user": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"labels": [
],
"state": "closed",
"locked": false,
"assignee": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"milestone": {
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
},
"comments": 0,
"created_at": "2016-02-19T16:21:22Z",
"updated_at": "2016-02-19T16:37:54Z",
"closed_at": "2016-02-19T16:37:54Z",
"body": "The Jackson 2.7 release causes significant regressions in a variety of places and it seems proper fixes in Spring Framework will only be available in the 4.2 line. That's good reason to stay on Jackson 2.6 for Hopper. Users requiring Jackson 2.7 features would have to use at least Spring 4.2, 4.3 even preferred.\r\n\r\nhttps://jira.spring.io/browse/SPR-13853"
}
]

View File

@@ -0,0 +1,35 @@
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
}

View File

@@ -0,0 +1,72 @@
[
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/44",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.7.4%20(Gosling%20SR4)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/44/labels",
"id": 1488963,
"number": 44,
"title": "1.7.4 (Gosling SR4)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 2,
"state": "open",
"created_at": "2016-01-07T07:19:58Z",
"updated_at": "2016-02-11T13:51:38Z",
"due_on": null,
"closed_at": null
},
{
"url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45",
"html_url": "https://github.com/spring-projects/spring-data-build/milestones/1.8%20RC1%20(Hopper)",
"labels_url": "https://api.github.com/repos/spring-projects/spring-data-build/milestones/45/labels",
"id": 1579988,
"number": 45,
"title": "1.8 RC1 (Hopper)",
"description": "",
"creator": {
"login": "olivergierke",
"id": 128577,
"avatar_url": "https://avatars.githubusercontent.com/u/128577?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/olivergierke",
"html_url": "https://github.com/olivergierke",
"followers_url": "https://api.github.com/users/olivergierke/followers",
"following_url": "https://api.github.com/users/olivergierke/following{/other_user}",
"gists_url": "https://api.github.com/users/olivergierke/gists{/gist_id}",
"starred_url": "https://api.github.com/users/olivergierke/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/olivergierke/subscriptions",
"organizations_url": "https://api.github.com/users/olivergierke/orgs",
"repos_url": "https://api.github.com/users/olivergierke/repos",
"events_url": "https://api.github.com/users/olivergierke/events{/privacy}",
"received_events_url": "https://api.github.com/users/olivergierke/received_events",
"type": "User",
"site_admin": false
},
"open_issues": 1,
"closed_issues": 4,
"state": "open",
"created_at": "2016-02-12T16:05:35Z",
"updated_at": "2016-03-17T17:46:03Z",
"due_on": null,
"closed_at": null
}
]

View File

@@ -0,0 +1,66 @@
{
"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

@@ -0,0 +1,8 @@
{
"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

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

View File

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

View File

@@ -0,0 +1,146 @@
[
{
"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

@@ -0,0 +1,37 @@
{
"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

@@ -0,0 +1,446 @@
{
"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

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