You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2019/04/23 14:54:41 UTC
[sling-org-apache-sling-committer-cli] 32/39: SLING-8337 - Create
sub-command to manage the Jira update when promoting a release
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to branch feature/SLING-8337
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-committer-cli.git
commit 9ea5eddcaf4bd9f1d0806a00470af11fe4757553
Author: Robert Munteanu <ro...@apache.org>
AuthorDate: Mon Apr 22 15:12:20 2019 +0300
SLING-8337 - Create sub-command to manage the Jira update when promoting a release
WIP on creating Jira issues
---
docker-env.sample | 3 ++
.../{VersionFinder.java => VersionClient.java} | 52 +++++++++++++++++++---
.../cli/impl/release/PrepareVoteEmailCommand.java | 4 +-
.../sling/cli/impl/release/UpdateJiraCommand.java | 8 ++--
.../sling/cli/impl/jira/VersionFinderTest.java | 4 +-
5 files changed, 59 insertions(+), 12 deletions(-)
diff --git a/docker-env.sample b/docker-env.sample
index 7a2a892..12e39be 100644
--- a/docker-env.sample
+++ b/docker-env.sample
@@ -12,3 +12,6 @@
# ----------------------------------------------------------------------------------------
ASF_USERNAME=changeme
ASF_PASSWORD=changeme
+
+JIRA_USERNAME=changeme
+JIRA_PASSWORD=changeme
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/cli/impl/jira/VersionFinder.java b/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
similarity index 77%
rename from src/main/java/org/apache/sling/cli/impl/jira/VersionFinder.java
rename to src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
index 2c2be18..6a4a770 100644
--- a/src/main/java/org/apache/sling/cli/impl/jira/VersionFinder.java
+++ b/src/main/java/org/apache/sling/cli/impl/jira/VersionClient.java
@@ -16,9 +16,11 @@
*/
package org.apache.sling.cli.impl.jira;
+import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.io.StringWriter;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Optional;
@@ -27,6 +29,8 @@ import java.util.function.Predicate;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.sling.cli.impl.release.Release;
@@ -34,12 +38,16 @@ import org.osgi.service.component.annotations.Component;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
+import com.google.gson.stream.JsonWriter;
/**
* Access the ASF <em>Jira</em> instance and looks up project version data.
*/
-@Component(service = VersionFinder.class)
-public class VersionFinder {
+@Component(service = VersionClient.class)
+public class VersionClient {
+
+ private static final String JIRA_URL_PREFIX = "https://issues.apache.org/jira/rest/api/2/";
+ private static final String CONTENT_TYPE_JSON = "application/json";
/**
* Finds a Jira version which matches the specified release
@@ -102,6 +110,40 @@ public class VersionFinder {
return version;
}
+
+ public void create(String versionName) throws IOException {
+ StringWriter w = new StringWriter();
+ try ( JsonWriter jw = new Gson().newJsonWriter(w) ) {
+ jw.beginObject();
+ jw.name("name").value(versionName);
+ jw.name("project").value("SLING");
+ jw.endObject();
+ }
+
+ HttpPost post = new HttpPost(JIRA_URL_PREFIX + "version");
+ post.addHeader("Content-Type", CONTENT_TYPE_JSON);
+ post.addHeader("Accept", CONTENT_TYPE_JSON);
+ post.setEntity(new StringEntity(w.toString()));
+
+ try (CloseableHttpClient client = HttpClients.createDefault() ) {
+ try (CloseableHttpResponse response = client.execute(post)) {
+ try (InputStream content = response.getEntity().getContent();
+ InputStreamReader reader = new InputStreamReader(content)) {
+
+ if (response.getStatusLine().getStatusCode() != 201) {
+ // TODO - try and parse JSON error message, fall back to status code
+ try ( BufferedReader bufferedReader = new BufferedReader(reader)) {
+ String line;
+ while ( (line = bufferedReader.readLine()) != null )
+ System.out.println(line);
+ }
+
+ throw new IOException("Status line : " + response.getStatusLine());
+ }
+ }
+ }
+ }
+ }
private Optional<Version> findVersion(Predicate<Version> matcher, CloseableHttpClient client) throws IOException {
@@ -112,7 +154,7 @@ public class VersionFinder {
return versions.stream()
.filter( v -> v.getName().length() > 1) // avoid old '3' release
.filter(matcher)
- .sorted(VersionFinder::compare)
+ .sorted(VersionClient::compare)
.findFirst();
});
}
@@ -144,8 +186,8 @@ public class VersionFinder {
}
private HttpGet newGet(String suffix) {
- HttpGet get = new HttpGet("https://issues.apache.org/jira/rest/api/2/" + suffix);
- get.addHeader("Accept", "application/json");
+ HttpGet get = new HttpGet(JIRA_URL_PREFIX + suffix);
+ get.addHeader("Accept", CONTENT_TYPE_JSON);
return get;
}
diff --git a/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java b/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
index 8656362..dc20db0 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/PrepareVoteEmailCommand.java
@@ -22,7 +22,7 @@ import java.util.stream.Collectors;
import org.apache.sling.cli.impl.Command;
import org.apache.sling.cli.impl.jira.Version;
-import org.apache.sling.cli.impl.jira.VersionFinder;
+import org.apache.sling.cli.impl.jira.VersionClient;
import org.apache.sling.cli.impl.nexus.StagingRepository;
import org.apache.sling.cli.impl.nexus.StagingRepositoryFinder;
import org.apache.sling.cli.impl.people.MembersFinder;
@@ -80,7 +80,7 @@ public class PrepareVoteEmailCommand implements Command {
private StagingRepositoryFinder repoFinder;
@Reference
- private VersionFinder versionFinder;
+ private VersionClient versionFinder;
@Override
public void execute(String target) {
diff --git a/src/main/java/org/apache/sling/cli/impl/release/UpdateJiraCommand.java b/src/main/java/org/apache/sling/cli/impl/release/UpdateJiraCommand.java
index 20d2acc..a636ee8 100644
--- a/src/main/java/org/apache/sling/cli/impl/release/UpdateJiraCommand.java
+++ b/src/main/java/org/apache/sling/cli/impl/release/UpdateJiraCommand.java
@@ -20,7 +20,7 @@ import java.io.IOException;
import org.apache.sling.cli.impl.Command;
import org.apache.sling.cli.impl.jira.Version;
-import org.apache.sling.cli.impl.jira.VersionFinder;
+import org.apache.sling.cli.impl.jira.VersionClient;
import org.apache.sling.cli.impl.nexus.StagingRepository;
import org.apache.sling.cli.impl.nexus.StagingRepositoryFinder;
import org.osgi.service.component.annotations.Component;
@@ -39,7 +39,7 @@ public class UpdateJiraCommand implements Command {
private StagingRepositoryFinder repoFinder;
@Reference
- private VersionFinder versionFinder;
+ private VersionClient versionFinder;
private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -54,7 +54,9 @@ public class UpdateJiraCommand implements Command {
logger.info("Found successor version {}", successorVersion);
if ( successorVersion == null ) {
Release next = release.next();
- logger.info("Would create version {}", next);
+ logger.info("Would create version {}", next.getName());
+ versionFinder.create(next.getName());
+ logger.info("Created version {}", next.getName());
}
}
diff --git a/src/test/java/org/apache/sling/cli/impl/jira/VersionFinderTest.java b/src/test/java/org/apache/sling/cli/impl/jira/VersionFinderTest.java
index 04a97bd..6f11f6c 100644
--- a/src/test/java/org/apache/sling/cli/impl/jira/VersionFinderTest.java
+++ b/src/test/java/org/apache/sling/cli/impl/jira/VersionFinderTest.java
@@ -32,7 +32,7 @@ import org.junit.Test;
public class VersionFinderTest {
- private VersionFinder finder = new StubVersionFinder();
+ private VersionClient finder = new StubVersionFinder();
@Test
public void findMatchingVersion() {
@@ -67,7 +67,7 @@ public class VersionFinderTest {
assertThat("successor", successor, nullValue());
}
- private static final class StubVersionFinder extends VersionFinder {
+ private static final class StubVersionFinder extends VersionClient {
@Override
protected <T> T doWithJiraVersions(CloseableHttpClient client, Function<InputStreamReader, T> parserCallback)
throws IOException {