From 524dbec9c4546924a2bb054628995042a54c2a19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 11:06:12 +0200 Subject: [PATCH 01/25] adding maven plugin test harness for running the plugin tests --- pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pom.xml b/pom.xml index 819898f..648b95b 100644 --- a/pom.xml +++ b/pom.xml @@ -177,3 +177,17 @@ + + + org.apache.maven.plugin-testing + maven-plugin-testing-harness + 3.3.0 + test + + + + commons-io + commons-io + 2.4 + test + From 1b819a9c9f4226a34d1bf10fd9af0a0303c056ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 11:06:58 +0200 Subject: [PATCH 02/25] adding way to configure Github hostname in Github Enterprise installations the values are of course different from the 'standard' github.com's. The default values are from github.com, though. This means that 'computeRepositoryId()' cannot be made static, as it takes the values of Github (Enterprise)'s hostname to contruct the regexp. refs #16 --- .../github/release/plugin/UploadMojo.java | 58 ++++++++++++------- 1 file changed, 37 insertions(+), 21 deletions(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index 2c2652d..3c0c83b 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -50,44 +50,44 @@ /** * Goal which attaches a file to a GitHub release - * + * * @goal release - * + * * @phase deploy */ public class UploadMojo extends AbstractMojo implements Contextualizable{ /** * Server id for github access. - * + * * @parameter default-value="github" expression="github" */ private String serverId; /** * The tag name this release is based on. - * + * * @parameter expression="${project.version}" */ private String tag; /** * The name of the release - * + * * @parameter expression="${release.name}" */ private String releaseName; /** * The release description - * + * * @parameter expression="${project.description}" */ private String description; /** * The github id of the project. By default initialized from the project scm connection - * + * * @parameter default-value="${project.scm.connection}" expression="${release.repositoryId}" * @required */ @@ -135,6 +135,20 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ */ private Boolean overwriteArtifact; + /** + * Github (Enterprise) hostname. Default is 'github.com' + * + * @parameter default-value="github.com" + */ + private String githubHostname; + + /** + * URL prefix to upload the release to Github. Default is 'https://uploads.github.com/' + * + * @parameter default-value="https://uploads.github.com/" + */ + private String githubApiUploadUrlPrefix; + @Requirement private PlexusContainer container; @@ -142,7 +156,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ * If this is a prerelease. By default it will use true if the tag ends in -SNAPSHOT * * @parameter - * + * */ private Boolean prerelease; @@ -188,7 +202,7 @@ public void execute() throws MojoExecutionException { uploadAssets(release, set); } catch (IOException e) { - + getLog().error(e); throw new MojoExecutionException("Failed to upload assets", e); } @@ -197,14 +211,14 @@ public void execute() throws MojoExecutionException { private void uploadAsset(GHRelease release, File asset) throws IOException { getLog().info("Processing asset "+asset.getPath()); - URL url = new URL(MessageFormat.format("https://uploads.github.com/repos/{0}/releases/{1}/assets?name={2}",repositoryId,Long.toString(release.getId()),asset.getName())); + URL url = new URL(MessageFormat.format(githubApiUploadUrlPrefix + "/repos/{0}/releases/{1}/assets?name={2}",repositoryId,Long.toString(release.getId()),asset.getName())); List existingAssets = release.getAssets(); for ( GHAsset a : existingAssets ){ if (a.getName().equals( asset.getName() )){ if(overwriteArtifact) { getLog().info(" Deleting existing asset"); - a.delete(); + a.delete(); } else { @@ -239,17 +253,19 @@ private GHRelease findRelease(GHRepository repository, String releaseName2) thro return null; } - /** - * @see SCM URL Format - */ - private static final Pattern REPOSITORY_PATTERN = Pattern.compile( + public String computeRepositoryId(String id) { + + String githubHostnameForRegexp = githubHostname.replaceAll(".", "\\."); + + // see SCM URL Format + final Pattern REPOSITORY_PATTERN = Pattern.compile( "^(scm:git[:|])?" + //Maven prefix for git SCM - "(https?://github\\.com/|git@github\\.com:)" + //GitHub prefix for HTTP/HTTPS/SSH/Subversion scheme + "(https?://" + githubHostnameForRegexp + "/|git@" + githubHostnameForRegexp + ":)" + //GitHub prefix for HTTP/HTTPS/SSH/Subversion scheme "([^/]+/[^/]*?)" + //Repository ID "(\\.git)?$" //Optional suffix ".git" - , Pattern.CASE_INSENSITIVE); + , Pattern.CASE_INSENSITIVE); + - public static String computeRepositoryId(String id) { Matcher matcher = REPOSITORY_PATTERN.matcher(id); if (matcher.matches()) { return matcher.group(3); @@ -263,10 +279,10 @@ public GitHub createGithub(String serverId) throws MojoExecutionException, IOExc String passwordProperty = System.getProperty("password"); if(usernameProperty!=null && passwordProperty!=null) { - getLog().debug("Using server credentials from system properties 'username' and 'password'"); + getLog().debug("Using server credentials from system properties 'username' and 'password'"); return GitHub.connectUsingPassword(usernameProperty, passwordProperty); } - + Server server = getServer(settings, serverId); if (server == null) throw new MojoExecutionException(MessageFormat.format("Server ''{0}'' not found in settings", serverId)); @@ -294,7 +310,7 @@ else if (StringUtils.isNotEmpty(serverAccessToken)) /** * Get server with given id - * + * * @param settings * @param serverId * must be non-null and non-empty From afed133cc038c9db6eef724b9dddd1a29a4ba71a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 11:09:31 +0200 Subject: [PATCH 03/25] updating to latest Maven core etc --- pom.xml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 648b95b..b6787a2 100644 --- a/pom.xml +++ b/pom.xml @@ -159,15 +159,21 @@ org.apache.maven maven-plugin-api - 3.1.0 + 3.3.9 provided org.apache.maven maven-core - 3.1.0 + 3.3.9 provided + + org.apache.maven + maven-compat + 3.3.9 + test + junit @@ -175,8 +181,6 @@ 4.11 test - - org.apache.maven.plugin-testing @@ -191,3 +195,5 @@ 2.4 test + + From e42192220781233cbb538409bfa4603e348f0eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 11:09:47 +0200 Subject: [PATCH 04/25] attempting to create a test --- .../github/release/plugin/UploadMojoTest.java | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java index e2c2e5b..35f5403 100644 --- a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java +++ b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java @@ -2,17 +2,39 @@ import org.junit.Before; import org.junit.Test; +import org.junit.Rule; +import static org.junit.Assert.*; import java.util.HashMap; import java.util.Map; +import java.io.File; -import static org.junit.Assert.assertEquals; +import org.apache.maven.plugin.testing.MojoRule; +import org.apache.maven.plugin.testing.WithoutMojo; +import org.apache.maven.plugin.testing.resources.TestResources; public class UploadMojoTest { + @Rule + public MojoRule rule = new MojoRule() + { + @Override + protected void before() throws Throwable + { + } + + @Override + protected void after() + { + } + }; + + @Rule + public TestResources resources = new TestResources(); + private Map computeRepositoryIdData; - @Before + @Before public void setUp() throws Exception { computeRepositoryIdData = new HashMap(); @@ -31,13 +53,25 @@ public void setUp() throws Exception { computeRepositoryIdData.put("scm:git:https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); computeRepositoryIdData.put("scm:git|https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); computeRepositoryIdData.put("https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); + // computeRepositoryIdData.put("http://some-github-enterprise-server.domain/user/repository.git", "user/repository"); } @Test public void testComputeRepositoryId() throws Exception { + + File projectCopy = this.resources.getBasedir( "github.com-project" ); + File pom = new File(projectCopy, "pom.xml"); + assertNotNull( pom ); + assertTrue( pom.exists() ); + + UploadMojo mojo = (UploadMojo) rule.lookupMojo( "", pom); + assertNotNull(mojo); + for (String source : computeRepositoryIdData.keySet()) { String expected = computeRepositoryIdData.get(source); - assertEquals(source, expected, UploadMojo.computeRepositoryId(source)); + assertEquals(source, expected, mojo.computeRepositoryId(source)); } + + mojo.execute(); } } From 15c75deba838651f0fd21a5707d84662aad2ced2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 11:09:59 +0200 Subject: [PATCH 05/25] initial testing directory containing POMs that, using github-release-plugin, will be used in tests --- src/test/projects/github.com-project/pom.xml | 40 ++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/test/projects/github.com-project/pom.xml diff --git a/src/test/projects/github.com-project/pom.xml b/src/test/projects/github.com-project/pom.xml new file mode 100644 index 0000000..af21ddf --- /dev/null +++ b/src/test/projects/github.com-project/pom.xml @@ -0,0 +1,40 @@ + + 4.0.0 + github-release-plugin.unit + github-release-plugin + jar + 1.0-SNAPSHOT + test-project + testing POM for github.com tests + + + https://github.com/jutzig/github-release-plugin + scm:git:https://github.com/jutzig/github-release-plugin.git + scm:git:https://github.com/jutzig/github-release-plugin.git + HEAD + + + + + junit + junit + 4.11 + test + + + + + + + github-release-plugin + + github-ncia + Description of your release + 1.0 Final + ${project.version} + + + + + + From 9641f57b8ab5b730dcf88b05876511d7f56fadc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 12:35:11 +0200 Subject: [PATCH 06/25] adding plexus component for the plugin this defines plugin's prefix etc --- .../resources/META-INF/plexus/components.xml | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/main/resources/META-INF/plexus/components.xml diff --git a/src/main/resources/META-INF/plexus/components.xml b/src/main/resources/META-INF/plexus/components.xml new file mode 100644 index 0000000..8bad9f0 --- /dev/null +++ b/src/main/resources/META-INF/plexus/components.xml @@ -0,0 +1,33 @@ + + + + + org.apache.maven.artifact.handler.ArtifactHandler + github-release + org.apache.maven.artifact.handler.DefaultArtifactHandler + + jar + jar + jar + java + + + + + org.apache.maven.lifecycle.mapping.LifecycleMapping + github-release + org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping + + + de.jutzig:github-release-plugin:initialize + de.jutzig:github-release-plugin:validate-project + org.apache.maven.plugins:maven-resources-plugin:resources + de.jutzig:github-release-plugin:validate-application + de.jutzig:github-release-plugin:package + org.apache.maven.plugins:maven-install-plugin:install + org.apache.maven.plugins:maven-deploy-plugin:deploy + + + + + From 98a70b54ba716ee6aacc509a1a327652a32c679a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 12:35:39 +0200 Subject: [PATCH 07/25] adding Maven Plugin plugin call --- pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pom.xml b/pom.xml index b6787a2..0a6b32f 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,14 @@ + + org.apache.maven.plugins + maven-plugin-plugin + 3.3 + + github-release + + From 362a8fee5c96c82d6a4b9a6a4e82086f8caad237 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 12:37:33 +0200 Subject: [PATCH 08/25] updating repository pattern fixing issue with regexp --- .../de/jutzig/github/release/plugin/UploadMojo.java | 7 +++---- .../jutzig/github/release/plugin/UploadMojoTest.java | 10 ++++------ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index 3c0c83b..8eb6407 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -255,16 +255,15 @@ private GHRelease findRelease(GHRepository repository, String releaseName2) thro public String computeRepositoryId(String id) { - String githubHostnameForRegexp = githubHostname.replaceAll(".", "\\."); + String githubHostnameForRegexp = githubHostname.replace(".", "\\."); - // see SCM URL Format final Pattern REPOSITORY_PATTERN = Pattern.compile( "^(scm:git[:|])?" + //Maven prefix for git SCM - "(https?://" + githubHostnameForRegexp + "/|git@" + githubHostnameForRegexp + ":)" + //GitHub prefix for HTTP/HTTPS/SSH/Subversion scheme + "(https?://" + githubHostnameForRegexp + "/|git@" + githubHostnameForRegexp + ":)" + //GitHub prefix for HTTP/HTTPS/SSH/Subversion scheme "([^/]+/[^/]*?)" + //Repository ID "(\\.git)?$" //Optional suffix ".git" , Pattern.CASE_INSENSITIVE); - + getLog().debug("using following repository pattern: " + REPOSITORY_PATTERN.toString()); Matcher matcher = REPOSITORY_PATTERN.matcher(id); if (matcher.matches()) { diff --git a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java index 35f5403..8b07141 100644 --- a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java +++ b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java @@ -57,21 +57,19 @@ public void setUp() throws Exception { } @Test - public void testComputeRepositoryId() throws Exception { + public void testComputeRepositoryId_github_com() throws Exception { File projectCopy = this.resources.getBasedir( "github.com-project" ); File pom = new File(projectCopy, "pom.xml"); assertNotNull( pom ); assertTrue( pom.exists() ); - UploadMojo mojo = (UploadMojo) rule.lookupMojo( "", pom); + UploadMojo mojo = (UploadMojo) rule.lookupMojo( "release", pom); assertNotNull(mojo); for (String source : computeRepositoryIdData.keySet()) { - String expected = computeRepositoryIdData.get(source); - assertEquals(source, expected, mojo.computeRepositoryId(source)); + String expected = computeRepositoryIdData.get(source); + assertEquals(source, expected, mojo.computeRepositoryId(source)); } - - mojo.execute(); } } From 3c42da219d786606caf266a87febee8d6d658039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:02:10 +0200 Subject: [PATCH 09/25] replacing with new-style annotations --- .../github/release/plugin/UploadMojo.java | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index 8eb6407..c8e9a21 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -29,6 +29,10 @@ import org.apache.maven.model.FileSet; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.project.MavenProject; import org.apache.maven.settings.Server; import org.apache.maven.settings.Settings; import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest; @@ -50,103 +54,112 @@ /** * Goal which attaches a file to a GitHub release - * - * @goal release - * - * @phase deploy */ +@Mojo( name="release", defaultPhase = LifecyclePhase.DEPLOY) public class UploadMojo extends AbstractMojo implements Contextualizable{ /** - * Server id for github access. * - * @parameter default-value="github" expression="github" + * //@parameter default-value="github" expression="github" + * Server id for github access. */ - private String serverId; + @Parameter( defaultValue = "github") + private String serverId; /** * The tag name this release is based on. * - * @parameter expression="${project.version}" + * //@parameter expression="${project.version}" */ + @Parameter( property = "project.version" ) private String tag; /** * The name of the release * - * @parameter expression="${release.name}" + * //@parameter expression="${release.name}" */ - private String releaseName; + @Parameter( property = "release.name" ) + private String releaseName; /** * The release description * - * @parameter expression="${project.description}" + * //@parameter expression="${project.description}" */ + @Parameter( property = "project.description" ) private String description; /** * The github id of the project. By default initialized from the project scm connection * - * @parameter default-value="${project.scm.connection}" expression="${release.repositoryId}" + * //@parameter default-value="${project.scm.connection}" expression="${release.repositoryId}" * @required */ + @Parameter( defaultValue = "${project.scm.connection}", property = "release.repositoryId") private String repositoryId; /** * The Maven settings * - * @parameter expression="${settings} + * //@parameter expression="${settings} */ + @Parameter( defaultValue = "${setting}", readonly = true) private Settings settings; /** * The Maven session * - * @parameter expression="${session}" + * //@parameter expression="${session}" */ + @Parameter( defaultValue = "${session}", readonly = true) private MavenSession session; /** * The file to upload to the release. Default is ${project.build.directory}/${project.artifactId}-${project.version}.${project.packaging} (the main artifact) * - * @parameter default-value="${project.build.directory}/${project.artifactId}-${project.version}.${project.packaging}" expression="${release.artifact}" + * //@parameter default-value="${project.build.directory}/${project.artifactId}-${project.version}.${project.packaging}" expression="${release.artifact}" */ + @Parameter( defaultValue = "${project.build.directory}/${project.artifactId}-${project.version}.${project.packaging}", + property = "release.artifact") private String artifact; /** * A specific fileSet rule to select files and directories for upload to the release. * - * @parameter + * //@parameter */ private FileSet fileSet; /** * A list of fileSet rules to select files and directories for upload to the release. * - * @parameter + * //@parameter */ private List fileSets; /** * Flag to indicate to overwrite the asset in the release if it already exists. Default is false * - * @parameter default-value=false + * //@parameter default-value=false */ + @Parameter( defaultValue = "false") private Boolean overwriteArtifact; /** * Github (Enterprise) hostname. Default is 'github.com' * - * @parameter default-value="github.com" + * ////@parameter default-value="github.com" */ + @Parameter( defaultValue = "github.com") private String githubHostname; /** * URL prefix to upload the release to Github. Default is 'https://uploads.github.com/' * - * @parameter default-value="https://uploads.github.com/" + * ////@parameter default-value="https://uploads.github.com/" */ + @Parameter( defaultValue = "https://uploads.github.com/") private String githubApiUploadUrlPrefix; @Requirement @@ -155,7 +168,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ /** * If this is a prerelease. By default it will use true if the tag ends in -SNAPSHOT * - * @parameter + * //@parameter * */ private Boolean prerelease; From 2fffbec410f73cc1ac464df8c90e8a20ea437d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:02:32 +0200 Subject: [PATCH 10/25] fixing indentation --- src/test/projects/github.com-project/pom.xml | 69 ++++++++++---------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/src/test/projects/github.com-project/pom.xml b/src/test/projects/github.com-project/pom.xml index af21ddf..ba304cf 100644 --- a/src/test/projects/github.com-project/pom.xml +++ b/src/test/projects/github.com-project/pom.xml @@ -1,40 +1,41 @@ - 4.0.0 - github-release-plugin.unit - github-release-plugin - jar - 1.0-SNAPSHOT - test-project - testing POM for github.com tests + 4.0.0 + github-release-plugin.unit + github-release-plugin + jar + 1.0-SNAPSHOT + test-project + testing POM for github.com tests - - https://github.com/jutzig/github-release-plugin - scm:git:https://github.com/jutzig/github-release-plugin.git - scm:git:https://github.com/jutzig/github-release-plugin.git - HEAD - + + https://github.com/jutzig/github-release-plugin + scm:git:https://github.com/jutzig/github-release-plugin.git + scm:git:https://github.com/jutzig/github-release-plugin.git + HEAD + - - - junit - junit - 4.11 - test - - + + + junit + junit + 4.11 + test + + - - - - github-release-plugin - - github-ncia - Description of your release - 1.0 Final - ${project.version} - - - - + + + + github-release-plugin + + github-ncia + Description of your release + 1.0 Final + ${project.version} + + + + + From bc99daace4bbf9a59d593ada7714300720b15682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:02:38 +0200 Subject: [PATCH 11/25] adding annotations dependency --- pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pom.xml b/pom.xml index 0a6b32f..6171a0a 100644 --- a/pom.xml +++ b/pom.xml @@ -176,6 +176,12 @@ 3.3.9 provided + + org.apache.maven.plugin-tools + maven-plugin-annotations + 3.3 + provided + org.apache.maven maven-compat From 30b40a66a48da962ec215250b5b45193fbe0e577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:43:08 +0200 Subject: [PATCH 12/25] renaming dir with test pom for github.com --- src/test/projects/{github.com-project => github.com}/pom.xml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/test/projects/{github.com-project => github.com}/pom.xml (100%) diff --git a/src/test/projects/github.com-project/pom.xml b/src/test/projects/github.com/pom.xml similarity index 100% rename from src/test/projects/github.com-project/pom.xml rename to src/test/projects/github.com/pom.xml From 784589c7f0ad7cb1b725a8c036935120189594f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:43:20 +0200 Subject: [PATCH 13/25] initial adding test POM for (imaginary) GitHub Enterprise server --- src/test/projects/github.enterprise/pom.xml | 41 +++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/test/projects/github.enterprise/pom.xml diff --git a/src/test/projects/github.enterprise/pom.xml b/src/test/projects/github.enterprise/pom.xml new file mode 100644 index 0000000..c488603 --- /dev/null +++ b/src/test/projects/github.enterprise/pom.xml @@ -0,0 +1,41 @@ + + 4.0.0 + github-release-plugin.unit + github-release-plugin + jar + 1.0-SNAPSHOT + test-project + testing POM for github enterprise tests + + + https://github.com/jutzig/github-release-plugin + scm:git:https://github.com/jutzig/github-release-plugin.git + scm:git:https://github.com/jutzig/github-release-plugin.git + HEAD + + + + + junit + junit + 4.11 + test + + + + + + + github-release-plugin + + github-ncia + Description of your release + v${project.version} + ${project.version} + some-github-enterprise-server.domain + + + + + + From d444891a3f08995caf3ee52a80a490be05390a54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:44:30 +0200 Subject: [PATCH 14/25] adding missing @Parameter --- .../java/de/jutzig/github/release/plugin/UploadMojo.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index c8e9a21..05d7314 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -143,7 +143,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ * * //@parameter default-value=false */ - @Parameter( defaultValue = "false") + @Parameter( defaultValue = "false" ) private Boolean overwriteArtifact; /** @@ -151,7 +151,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ * * ////@parameter default-value="github.com" */ - @Parameter( defaultValue = "github.com") + @Parameter( defaultValue = "github.com" ) private String githubHostname; /** @@ -171,6 +171,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ * //@parameter * */ + @Parameter private Boolean prerelease; public void execute() throws MojoExecutionException { From cb9afc745ac581fc41a7de2dba7df2f7364366db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:45:04 +0200 Subject: [PATCH 15/25] extending tests for GitHub Enterprise scenario --- .../github/release/plugin/UploadMojoTest.java | 90 +++++++++++++------ 1 file changed, 62 insertions(+), 28 deletions(-) diff --git a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java index 8b07141..f63d8bb 100644 --- a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java +++ b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java @@ -16,60 +16,94 @@ public class UploadMojoTest { @Rule - public MojoRule rule = new MojoRule() - { + public MojoRule rule = new MojoRule() { @Override - protected void before() throws Throwable - { - } + protected void before() throws Throwable { } @Override - protected void after() - { - } + protected void after() { } }; @Rule public TestResources resources = new TestResources(); - private Map computeRepositoryIdData; + private Map computeRepositoryIdData_github; + private Map computeRepositoryIdData_github_enterprise; + @Before public void setUp() throws Exception { - computeRepositoryIdData = new HashMap(); + computeRepositoryIdData_github = new HashMap(); + + computeRepositoryIdData_github.put("scm:git:https://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("scm:git|https://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("https://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + + computeRepositoryIdData_github.put("scm:git:http://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("scm:git|http://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("http://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + + computeRepositoryIdData_github.put("scm:git:git@github.com:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("scm:git|git@github.com:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("git@github.com:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + + computeRepositoryIdData_github.put("scm:git:https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("scm:git|https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); + computeRepositoryIdData_github.put("https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("scm:git:https://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("scm:git|https://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("https://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise = new HashMap(); - computeRepositoryIdData.put("scm:git:http://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("scm:git|http://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("http://github.com/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("scm:git:https://some-github-enterprise-server.domain/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("scm:git|https://some-github-enterprise-server.domain/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("https://some-github-enterprise-server.domain/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("scm:git:git@github.com:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("scm:git|git@github.com:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("git@github.com:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("scm:git:http://some-github-enterprise-server.domain/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("scm:git|http://some-github-enterprise-server.domain/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("http://some-github-enterprise-server.domain/jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + + computeRepositoryIdData_github_enterprise.put("scm:git:git@some-github-enterprise-server.domain:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("scm:git|git@some-github-enterprise-server.domain:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("git@some-github-enterprise-server.domain:jutzig/github-release-plugin.git", "jutzig/github-release-plugin"); + + computeRepositoryIdData_github_enterprise.put("scm:git:https://some-github-enterprise-server.domain/jutzig/github-release-plugin", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("scm:git|https://some-github-enterprise-server.domain/jutzig/github-release-plugin", "jutzig/github-release-plugin"); + computeRepositoryIdData_github_enterprise.put("https://some-github-enterprise-server.domain/jutzig/github-release-plugin", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("scm:git:https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("scm:git|https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); - computeRepositoryIdData.put("https://github.com/jutzig/github-release-plugin", "jutzig/github-release-plugin"); - // computeRepositoryIdData.put("http://some-github-enterprise-server.domain/user/repository.git", "user/repository"); } @Test public void testComputeRepositoryId_github_com() throws Exception { - File projectCopy = this.resources.getBasedir( "github.com-project" ); - File pom = new File(projectCopy, "pom.xml"); + File testProjectDir = this.resources.getBasedir( "github.com" ); + assertNotNull( testProjectDir ); + assertTrue( testProjectDir.exists() ); + + UploadMojo mojo = (UploadMojo) rule.lookupConfiguredMojo( testProjectDir , "release"); + assertNotNull(mojo); + + for (String source : computeRepositoryIdData_github.keySet()) { + String expected = computeRepositoryIdData_github.get(source); + assertEquals(source, expected, mojo.computeRepositoryId(source)); + } + } + + @Test + public void testComputeRepositoryId_github_enterprise() throws Exception { + + File testProjectDir = this.resources.getBasedir( "github.enterprise" ); + File pom = new File(testProjectDir, "pom.xml"); assertNotNull( pom ); assertTrue( pom.exists() ); - UploadMojo mojo = (UploadMojo) rule.lookupMojo( "release", pom); + UploadMojo mojo = (UploadMojo) rule.lookupMojo("release", pom); assertNotNull(mojo); - for (String source : computeRepositoryIdData.keySet()) { - String expected = computeRepositoryIdData.get(source); + System.out.println("TESTING ENTERPRISE"); + + for (String source : computeRepositoryIdData_github_enterprise.keySet()) { + String expected = computeRepositoryIdData_github_enterprise.get(source); assertEquals(source, expected, mojo.computeRepositoryId(source)); } } + } From 43ee01a6a7fbd9c40b2c38b42461b0d9f09bb66f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 13:45:52 +0200 Subject: [PATCH 16/25] removing as uneeded --- .../java/de/jutzig/github/release/plugin/UploadMojoTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java index f63d8bb..a0df44c 100644 --- a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java +++ b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java @@ -98,8 +98,6 @@ public void testComputeRepositoryId_github_enterprise() throws Exception { UploadMojo mojo = (UploadMojo) rule.lookupMojo("release", pom); assertNotNull(mojo); - System.out.println("TESTING ENTERPRISE"); - for (String source : computeRepositoryIdData_github_enterprise.keySet()) { String expected = computeRepositoryIdData_github_enterprise.get(source); assertEquals(source, expected, mojo.computeRepositoryId(source)); From 8afab3c7d289b814f9a7659567e844a43e051e35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 14:40:49 +0200 Subject: [PATCH 17/25] upgrading to latest version of GitHub API --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6171a0a..ea2597c 100644 --- a/pom.xml +++ b/pom.xml @@ -162,7 +162,7 @@ org.kohsuke github-api - 1.49 + 1.73 org.apache.maven From 04be495510889b4f76e69230cd3bc97951f396af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 14:41:08 +0200 Subject: [PATCH 18/25] fixing typo --- src/main/java/de/jutzig/github/release/plugin/UploadMojo.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index 05d7314..53c6ceb 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -104,7 +104,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ * * //@parameter expression="${settings} */ - @Parameter( defaultValue = "${setting}", readonly = true) + @Parameter( defaultValue = "${settings}", readonly = true) private Settings settings; /** From b2da0fb17002b391f003787b7c1394357266d6d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 14:41:24 +0200 Subject: [PATCH 19/25] github.com name put in the var --- .../de/jutzig/github/release/plugin/UploadMojo.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index 53c6ceb..964ff5e 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -58,6 +58,8 @@ @Mojo( name="release", defaultPhase = LifecyclePhase.DEPLOY) public class UploadMojo extends AbstractMojo implements Contextualizable{ + private final static String DEFAULT_GITHUBHOSTNAME = "github.com"; + /** * * //@parameter default-value="github" expression="github" @@ -151,7 +153,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ * * ////@parameter default-value="github.com" */ - @Parameter( defaultValue = "github.com" ) + @Parameter( defaultValue = DEFAULT_GITHUBHOSTNAME ) private String githubHostname; /** @@ -314,9 +316,11 @@ public GitHub createGithub(String serverId) throws MojoExecutionException, IOExc String serverPassword = server.getPassword(); String serverAccessToken = server.getPrivateKey(); if (StringUtils.isNotEmpty(serverUsername) && StringUtils.isNotEmpty(serverPassword)) - return GitHub.connectUsingPassword(serverUsername, serverPassword); + return DEFAULT_GITHUBHOSTNAME.equals(githubHostname) ? GitHub.connectUsingPassword(serverUsername, serverPassword) + : GitHub.connectToEnterprise(githubApiUploadUrlPrefix, serverUsername, serverPassword); else if (StringUtils.isNotEmpty(serverAccessToken)) - return GitHub.connectUsingOAuth(serverAccessToken); + return DEFAULT_GITHUBHOSTNAME.equals(githubHostname) ? GitHub.connectUsingOAuth(serverAccessToken) + : GitHub.connectToEnterprise(githubApiUploadUrlPrefix, serverAccessToken); else throw new MojoExecutionException("Configuration for server " + serverId + " has no login credentials"); } From e91a1fc77468092caa1ed970d0410b0a221f39d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 14:42:42 +0200 Subject: [PATCH 20/25] api changed, it getId() returns int --- src/main/java/de/jutzig/github/release/plugin/UploadMojo.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index 964ff5e..e38adf3 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -227,8 +227,8 @@ public void execute() throws MojoExecutionException { private void uploadAsset(GHRelease release, File asset) throws IOException { getLog().info("Processing asset "+asset.getPath()); - URL url = new URL(MessageFormat.format(githubApiUploadUrlPrefix + "/repos/{0}/releases/{1}/assets?name={2}",repositoryId,Long.toString(release.getId()),asset.getName())); - + URL url = new URL(MessageFormat.format(githubApiUploadUrlPrefix + "/repos/{0}/releases/{1}/assets?name={2}",repositoryId,Integer.toString(release.getId()),asset.getName())); + getLog().debug("using following API URL : " + url); List existingAssets = release.getAssets(); for ( GHAsset a : existingAssets ){ if (a.getName().equals( asset.getName() )){ From 332a0ab8e1b18994720d2a2a6962c44ad896c7ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Fri, 1 Apr 2016 14:45:57 +0200 Subject: [PATCH 21/25] updating the docs --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index dc7c254..bf5bfb4 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ To use the plugin you need to configure it in your `pom.xml` like so Description of your release 1.0 Final ${project.version} - + @@ -48,4 +48,26 @@ These credentials can be overridden by setting `username` and `password` as syst Thanks to a contribution from rowanseymour you can also use your API token by adding it as `` to your server definition in the `settings.xml`. +## GitHub Enterprise users + +It is also possible to upload to GitHub Enterprise. For that, two additional options are available +in the configuration: `githubHostname` and `githubApiUploadUrlPrefix`. They can be used like this: + +``` + + de.jutzig + github-release-plugin + 1.1.1 + + Description of your release + 1.0 Final + ${project.version} + + github-enterprise.domain + https://github-enterprise.domain/api/v3 + ... + + +``` + The plugin is available on Maven central From 9d96ad3b031989e04ae67cee75413ba62855ee45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Mon, 4 Apr 2016 10:00:33 +0200 Subject: [PATCH 22/25] adapting to github-api 1.75-SNAPSHOT I have opened issue there and presented the pull request to the github-api team; this is using it. refs #16 --- .../jutzig/github/release/plugin/UploadMojo.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index e38adf3..6d7e9c1 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -59,6 +59,7 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ private final static String DEFAULT_GITHUBHOSTNAME = "github.com"; + private final static String DEFAULT_GITAPIURLPREFIX = "https://api.github.com"; /** * @@ -156,6 +157,12 @@ public class UploadMojo extends AbstractMojo implements Contextualizable{ @Parameter( defaultValue = DEFAULT_GITHUBHOSTNAME ) private String githubHostname; + /** + * Github (Enterprise) API URL (prefix). Default is 'https://api.github.com' + */ + @Parameter( defaultValue = DEFAULT_GITAPIURLPREFIX ) + private String githubApiUrlPrefix; + /** * URL prefix to upload the release to Github. Default is 'https://uploads.github.com/' * @@ -227,8 +234,6 @@ public void execute() throws MojoExecutionException { private void uploadAsset(GHRelease release, File asset) throws IOException { getLog().info("Processing asset "+asset.getPath()); - URL url = new URL(MessageFormat.format(githubApiUploadUrlPrefix + "/repos/{0}/releases/{1}/assets?name={2}",repositoryId,Integer.toString(release.getId()),asset.getName())); - getLog().debug("using following API URL : " + url); List existingAssets = release.getAssets(); for ( GHAsset a : existingAssets ){ if (a.getName().equals( asset.getName() )){ @@ -246,7 +251,7 @@ private void uploadAsset(GHRelease release, File asset) throws IOException { getLog().info(" Upload asset"); // for some reason this doesn't work currently - release.uploadAsset(asset, "application/zip"); + release.uploadAsset(asset, "application/zip", ensureNoTrailingSlash(githubApiUploadUrlPrefix)); } private void uploadAssets(GHRelease release, FileSet fileset) throws IOException { @@ -317,10 +322,10 @@ public GitHub createGithub(String serverId) throws MojoExecutionException, IOExc String serverAccessToken = server.getPrivateKey(); if (StringUtils.isNotEmpty(serverUsername) && StringUtils.isNotEmpty(serverPassword)) return DEFAULT_GITHUBHOSTNAME.equals(githubHostname) ? GitHub.connectUsingPassword(serverUsername, serverPassword) - : GitHub.connectToEnterprise(githubApiUploadUrlPrefix, serverUsername, serverPassword); + : GitHub.connectToEnterprise(githubApiUrlPrefix, serverUsername, serverPassword); else if (StringUtils.isNotEmpty(serverAccessToken)) return DEFAULT_GITHUBHOSTNAME.equals(githubHostname) ? GitHub.connectUsingOAuth(serverAccessToken) - : GitHub.connectToEnterprise(githubApiUploadUrlPrefix, serverAccessToken); + : GitHub.connectToEnterprise(githubApiUrlPrefix, serverAccessToken); else throw new MojoExecutionException("Configuration for server " + serverId + " has no login credentials"); } From a410860c543526f286c7d16fe9342a30cf67bc6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Mon, 4 Apr 2016 10:03:23 +0200 Subject: [PATCH 23/25] using pre-release of 1.75-SNAPSHOT refs #16 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ea2597c..cfae67b 100644 --- a/pom.xml +++ b/pom.xml @@ -162,7 +162,7 @@ org.kohsuke github-api - 1.73 + 1.75-SNAPSHOT org.apache.maven From f79db306a4d06a78344ca978d8a4a9f07ee1f1cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Mon, 4 Apr 2016 10:04:01 +0200 Subject: [PATCH 24/25] updating docs refs #16 --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bf5bfb4..ac60640 100644 --- a/README.md +++ b/README.md @@ -51,7 +51,7 @@ Thanks to a contribution from rowanseymour you can also use your API token by ad ## GitHub Enterprise users It is also possible to upload to GitHub Enterprise. For that, two additional options are available -in the configuration: `githubHostname` and `githubApiUploadUrlPrefix`. They can be used like this: +in the configuration: `githubHostname`, `githubApiUrlPrefix` and `githubApiUploadUrlPrefix`. They can be used like this: ``` @@ -64,6 +64,7 @@ in the configuration: `githubHostname` and `githubApiUploadUrlPrefix`. They can ${project.version} github-enterprise.domain + http://github-enterprise.domain/api/v3 https://github-enterprise.domain/api/v3 ... From e80b9f1a7c68969650f0a6fb22db0d0d15e2f4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Wieche=C4=87?= Date: Mon, 4 Apr 2016 10:04:15 +0200 Subject: [PATCH 25/25] making sure upload prefix url does not end with '/' refs #16 --- .../github/release/plugin/UploadMojo.java | 13 +++++++++ .../github/release/plugin/UploadMojoTest.java | 27 ++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java index 6d7e9c1..55f59d1 100644 --- a/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java +++ b/src/main/java/de/jutzig/github/release/plugin/UploadMojo.java @@ -354,4 +354,17 @@ protected Server getServer(final Settings settings, final String serverId) { public void contextualize(Context context) throws ContextException { container = (PlexusContainer) context.get( PlexusConstants.PLEXUS_KEY ); } + + /** + * @param str + * @return trimmed str minus the trailing '/', if any + */ + String ensureNoTrailingSlash(String str) { + if(str == null || str.isEmpty()) { + return str; + } + String strTrimmed = str.trim(); + return strTrimmed.endsWith("/") ? strTrimmed.substring(0, strTrimmed.length() - 1) : strTrimmed; + } + } diff --git a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java index a0df44c..f5da71f 100644 --- a/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java +++ b/src/test/java/de/jutzig/github/release/plugin/UploadMojoTest.java @@ -29,7 +29,7 @@ protected void after() { } private Map computeRepositoryIdData_github; private Map computeRepositoryIdData_github_enterprise; - + private Map ensureNoTrailingSlash; @Before public void setUp() throws Exception { @@ -69,6 +69,14 @@ public void setUp() throws Exception { computeRepositoryIdData_github_enterprise.put("scm:git|https://some-github-enterprise-server.domain/jutzig/github-release-plugin", "jutzig/github-release-plugin"); computeRepositoryIdData_github_enterprise.put("https://some-github-enterprise-server.domain/jutzig/github-release-plugin", "jutzig/github-release-plugin"); + ensureNoTrailingSlash = new HashMap(); + + ensureNoTrailingSlash.put(null, null); + ensureNoTrailingSlash.put("", ""); + ensureNoTrailingSlash.put("no trailing slash", "no trailing slash"); + ensureNoTrailingSlash.put("trailing slash/", "trailing slash"); + ensureNoTrailingSlash.put("no trailing slash trimmed ", "no trailing slash trimmed"); + ensureNoTrailingSlash.put("trimmed trailing slash/ ", "trimmed trailing slash"); } @Test @@ -104,4 +112,21 @@ public void testComputeRepositoryId_github_enterprise() throws Exception { } } + @Test + public void testEnsureNoTrailingSlash() throws Exception { + + File testProjectDir = this.resources.getBasedir( "github.com" ); + assertNotNull( testProjectDir ); + assertTrue( testProjectDir.exists() ); + + UploadMojo mojo = (UploadMojo) rule.lookupConfiguredMojo( testProjectDir , "release"); + assertNotNull(mojo); + + for (String str : ensureNoTrailingSlash.keySet()) { + String expected = ensureNoTrailingSlash.get(str); + assertEquals(str, expected, mojo.ensureNoTrailingSlash(str)); + } + + } + }