Repository: commons-release-plugin Updated Branches: refs/heads/master c315ce0ce -> 462dffabe
COMMONSSITE-123: introduce configuration parameter to perfom distribution checkin using Maven settings server credentials Project: http://git-wip-us.apache.org/repos/asf/commons-release-plugin/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-release-plugin/commit/462dffab Tree: http://git-wip-us.apache.org/repos/asf/commons-release-plugin/tree/462dffab Diff: http://git-wip-us.apache.org/repos/asf/commons-release-plugin/diff/462dffab Branch: refs/heads/master Commit: 462dffabe3c0c01a99fea2dffdc59067059cea02 Parents: c315ce0 Author: Matt Benson <mben...@apache.org> Authored: Thu Aug 30 14:19:44 2018 -0500 Committer: Matt Benson <mben...@apache.org> Committed: Thu Aug 30 14:19:44 2018 -0500 ---------------------------------------------------------------------- .../mojos/CommonsDistributionStagingMojo.java | 43 +++++++++++++++++++- .../stage-distributions/stage-distributions.xml | 1 + 2 files changed, 42 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/462dffab/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java index 6221c34..2846352 100755 --- a/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java +++ b/src/main/java/org/apache/commons/release/plugin/mojos/CommonsDistributionStagingMojo.java @@ -25,6 +25,7 @@ import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugin.logging.Log; +import org.apache.maven.plugins.annotations.Component; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; @@ -37,9 +38,15 @@ import org.apache.maven.scm.command.checkout.CheckOutScmResult; import org.apache.maven.scm.manager.BasicScmManager; import org.apache.maven.scm.manager.ScmManager; import org.apache.maven.scm.provider.ScmProvider; +import org.apache.maven.scm.provider.ScmProviderRepository; import org.apache.maven.scm.provider.svn.repository.SvnScmProviderRepository; import org.apache.maven.scm.provider.svn.svnexe.SvnExeScmProvider; import org.apache.maven.scm.repository.ScmRepository; +import org.apache.maven.settings.Server; +import org.apache.maven.settings.Settings; +import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest; +import org.apache.maven.settings.crypto.SettingsDecrypter; +import org.apache.maven.settings.crypto.SettingsDecryptionResult; import java.io.File; import java.io.FileOutputStream; @@ -49,6 +56,7 @@ import java.io.Writer; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; /** * This class checks out the dev distribution location, copies the distributions into that directory @@ -143,6 +151,13 @@ public class CommonsDistributionStagingMojo extends AbstractMojo { private String commonsRcVersion; /** + * The ID of the server (specified in settings.xml) which should be used for dist authentication. + * This will be used in preference to {@link #username}/{@link #password}. + */ + @Parameter(property = "commons.distServer") + private String distServer; + + /** * The username for the distribution subversion repository. This is typically your Apache id. */ @Parameter(property = "user.name") @@ -155,6 +170,18 @@ public class CommonsDistributionStagingMojo extends AbstractMojo { private String password; /** + * Maven {@link Settings}. + */ + @Parameter(defaultValue = "${settings}", readonly = true, required = true) + private Settings settings; + + /** + * Maven {@link SettingsDecrypter} component. + */ + @Component + private SettingsDecrypter settingsDecrypter; + + /** * A subdirectory of the dist directory into which we are going to stage the release candidate. We * build this up in the {@link CommonsDistributionStagingMojo#execute()} method. And, for example, * the directory should look like <code>https://https://dist.apache.org/repos/dist/dev/commons/text/1.4-RC1</code>. @@ -183,8 +210,7 @@ public class CommonsDistributionStagingMojo extends AbstractMojo { ScmRepository repository = scmManager.makeScmRepository(distSvnStagingUrl); ScmProvider provider = scmManager.getProviderByRepository(repository); SvnScmProviderRepository providerRepository = (SvnScmProviderRepository) repository.getProviderRepository(); - providerRepository.setUser(username); - providerRepository.setPassword(password); + setAuthentication(providerRepository); distVersionRcVersionDirectory = new File(distCheckoutDirectory, commonsReleaseVersion + "-" + commonsRcVersion); if (!distCheckoutDirectory.exists()) { @@ -456,4 +482,17 @@ public class CommonsDistributionStagingMojo extends AbstractMojo { protected void setBaseDir(File baseDir) { this.baseDir = baseDir; } + + /** + * Set authentication information on the specified {@link ScmProviderRepository}. + * @param providerRepository target + */ + private void setAuthentication(ScmProviderRepository providerRepository) { + Optional<Server> server = + Optional.ofNullable(distServer).map(settings::getServer).map(DefaultSettingsDecryptionRequest::new) + .map(settingsDecrypter::decrypt).map(SettingsDecryptionResult::getServer); + + providerRepository.setUser(server.map(Server::getUsername).orElse(username)); + providerRepository.setPassword(server.map(Server::getPassword).orElse(password)); + } } http://git-wip-us.apache.org/repos/asf/commons-release-plugin/blob/462dffab/src/test/resources/mojos/stage-distributions/stage-distributions.xml ---------------------------------------------------------------------- diff --git a/src/test/resources/mojos/stage-distributions/stage-distributions.xml b/src/test/resources/mojos/stage-distributions/stage-distributions.xml index b8ad1ca..852bbf0 100755 --- a/src/test/resources/mojos/stage-distributions/stage-distributions.xml +++ b/src/test/resources/mojos/stage-distributions/stage-distributions.xml @@ -43,6 +43,7 @@ <artifactId>commons-release-plugin</artifactId> <configuration> <project implementation="org.apache.commons.release.plugin.stubs.DistributionDetachmentProjectStub" /> + <settings implementation="org.apache.maven.settings.Settings" /> <workingDirectory>target/testing-commons-release-plugin</workingDirectory> <distCheckoutDirectory>target/testing-commons-release-plugin/scm</distCheckoutDirectory> <siteDirectory>${basedir}/target/test-classes/mojos/detach-distributions/target/site</siteDirectory>