This is an automated email from the ASF dual-hosted git repository. rfscholte pushed a commit to branch MRELEASE-1015 in repository https://gitbox.apache.org/repos/asf/maven-release.git
commit d1c7dd790c66a35ca33f62719c0ed0e05d51dcfd Author: Brian Demers <bdem...@apache.org> AuthorDate: Fri Sep 28 13:28:21 2018 -0400 Add `signTag` option to release:prepare goal --- .../maven/shared/release/config/ReleaseDescriptor.java | 7 +++++++ .../shared/release/config/ReleaseDescriptorBuilder.java | 6 ++++++ .../apache/maven/shared/release/phase/ScmTagPhase.java | 1 + .../src/main/mdo/release-descriptor.mdo | 9 +++++++++ .../shared/release/phase/IsScmTagParametersEquals.java | 3 ++- .../maven/shared/release/phase/ScmTagPhaseTest.java | 8 ++++++-- .../apache/maven/plugins/release/PrepareReleaseMojo.java | 9 +++++++++ .../maven/plugins/release/PrepareReleaseMojoTest.java | 16 +++++++++++++++- 8 files changed, 55 insertions(+), 4 deletions(-) diff --git a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java index a482727..e8896cf 100644 --- a/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java +++ b/maven-release-api/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptor.java @@ -116,6 +116,13 @@ public interface ReleaseDescriptor */ boolean isRemoteTagging(); + + /** + * Get if the scm provider should sign the tag. NOTE: currently only implemented with git-exe. + * @return boolean true if SCM tag should be signed + */ + boolean isScmSignTags(); + /** * Get if the scm provider should use local checkouts via file://${basedir} instead of doing a clean checkout over * the network. This is very helpful for releasing large projects! diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java index 7ff677a..eb3c3f3 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/config/ReleaseDescriptorBuilder.java @@ -332,6 +332,12 @@ public class ReleaseDescriptorBuilder return this; } + public ReleaseDescriptorBuilder setScmSignTags( boolean signTags ) + { + releaseDescriptor.setScmSignTags( signTags ); + return this; + } + public ReleaseDescriptorBuilder setScmUseEditMode( boolean scmUseEditMode ) { releaseDescriptor.setScmUseEditMode( scmUseEditMode ); diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java index b851852..7f96140 100644 --- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java +++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/ScmTagPhase.java @@ -119,6 +119,7 @@ public class ScmTagPhase ScmTagParameters scmTagParameters = new ScmTagParameters( releaseDescriptor.getScmCommentPrefix() + "copy for tag " + tagName ); scmTagParameters.setRemoteTagging( releaseDescriptor.isRemoteTagging() ); + scmTagParameters.setSign( releaseDescriptor.isScmSignTags() ); scmTagParameters.setScmRevision( releaseDescriptor.getScmReleasedPomRevision() ); scmTagParameters.setPinExternals( releaseDescriptor.isPinExternals() ); if ( getLogger().isDebugEnabled() ) diff --git a/maven-release-manager/src/main/mdo/release-descriptor.mdo b/maven-release-manager/src/main/mdo/release-descriptor.mdo index ed0ea58..7a86868 100644 --- a/maven-release-manager/src/main/mdo/release-descriptor.mdo +++ b/maven-release-manager/src/main/mdo/release-descriptor.mdo @@ -595,6 +595,15 @@ </description> </field> + <field> + <name>scmSignTags</name> + <version>3.0.0+</version> + <type>boolean</type> + <description> + If the scm provider should use sign tags, for example for git-exe the '--sign' argument would be used. + </description> + </field> + <!-- Announcement Information Announcement related info, this can be a second part of the process. diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java index f0d012d..12a2f52 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/IsScmTagParametersEquals.java @@ -40,6 +40,7 @@ public class IsScmTagParametersEquals implements ArgumentMatcher<ScmTagParameter ScmTagParameters stp = (ScmTagParameters) argument; return stp.getMessage().equals( this.scmTagParameters.getMessage() ) && stp.isRemoteTagging() == this.scmTagParameters.isRemoteTagging() - && stp.isPinExternals() == this.scmTagParameters.isPinExternals(); + && stp.isPinExternals() == this.scmTagParameters.isPinExternals() + && stp.isSign() == this.scmTagParameters.isSign(); } } diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java index 10b8979..362c894 100644 --- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java +++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/ScmTagPhaseTest.java @@ -106,13 +106,17 @@ public class ScmTagPhaseTest builder.setPomFileName( rootProject.getFile().getName() ); builder.setScmReleaseLabel( "release-label" ); builder.setScmCommentPrefix( "[my prefix] " ); + builder.setScmSignTags(true); + + ScmTagParameters expectedTagParameters = new ScmTagParameters( "[my prefix] copy for tag release-label" ); + expectedTagParameters.setSign(true); ScmFileSet fileSet = new ScmFileSet( rootProject.getFile().getParentFile() ); ScmProvider scmProviderMock = mock( ScmProvider.class ); when( scmProviderMock.tag( isA( ScmRepository.class ), argThat( new IsScmFileSetEquals( fileSet ) ), eq( "release-label" ), - argThat( new IsScmTagParametersEquals( new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ) ).thenReturn( new TagScmResult( "...", + argThat( new IsScmTagParametersEquals( expectedTagParameters ) ) ) ).thenReturn( new TagScmResult( "...", Collections.singletonList( new ScmFile( getPath( rootProject.getFile() ), ScmFileStatus.TAGGED ) ) ) ); ScmManagerStub stub = (ScmManagerStub) lookup( ScmManager.class ); @@ -124,7 +128,7 @@ public class ScmTagPhaseTest // verify verify( scmProviderMock ).tag( isA( ScmRepository.class ), argThat( new IsScmFileSetEquals( fileSet ) ), eq( "release-label" ), - argThat( new IsScmTagParametersEquals( new ScmTagParameters( "[my prefix] copy for tag release-label" ) ) ) ); + argThat( new IsScmTagParametersEquals( expectedTagParameters ) ) ); verifyNoMoreInteractions( scmProviderMock ); } diff --git a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java index 7422354..204e27f 100644 --- a/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java +++ b/maven-release-plugin/src/main/java/org/apache/maven/plugins/release/PrepareReleaseMojo.java @@ -190,6 +190,14 @@ public class PrepareReleaseMojo private boolean remoteTagging; /** + * Signs SCM tag when possible, for example when using the git-exe the '--sign' argument is used. + * + * @since 3.0.0 + */ + @Parameter( property = "signTag" ) + private boolean signTag = false; + + /** * Whether to bump the working copy versions to <code>developmentVersion</code>. * * @since 2.1 @@ -344,6 +352,7 @@ public class PrepareReleaseMojo config.setDefaultReleaseVersion( releaseVersion ); config.setDefaultDevelopmentVersion( developmentVersion ); config.setRemoteTagging( remoteTagging ); + config.setScmSignTags( signTag ); config.setUpdateWorkingCopyVersions( updateWorkingCopyVersions ); config.setSuppressCommitBeforeTagOrBranch( suppressCommitBeforeTag ); config.setWaitBeforeTagging( waitBeforeTagging ); diff --git a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java index 61cd42f..a498a39 100644 --- a/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java +++ b/maven-release-plugin/src/test/java/org/apache/maven/plugins/release/PrepareReleaseMojoTest.java @@ -27,8 +27,10 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.ArgumentMatchers.isA; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; import java.io.File; import java.util.Collections; @@ -47,6 +49,8 @@ import org.apache.maven.shared.release.ReleasePrepareRequest; import org.apache.maven.shared.release.config.ReleaseDescriptorBuilder; import org.apache.maven.shared.release.env.ReleaseEnvironment; import org.mockito.ArgumentCaptor; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; /** * Test release:prepare. @@ -66,7 +70,7 @@ public class PrepareReleaseMojoTest throws Exception { File testFile = getTestFile( "target/test-classes/mojos/prepare/prepare.xml" ); - final PrepareReleaseMojo mojo = (PrepareReleaseMojo) lookupMojo( "prepare", testFile ); + final PrepareReleaseMojo mojo = spy((PrepareReleaseMojo) lookupMojo( "prepare", testFile )); setDefaults( mojo ); mojo.setBasedir( testFile.getParentFile() ); mojo.setPomFileName( "pom.xml" ); @@ -91,6 +95,14 @@ public class PrepareReleaseMojoTest ReleaseManager mock = mock( ReleaseManager.class ); mojo.setReleaseManager( mock ); + when(mojo.createReleaseDescriptor()).thenAnswer(new Answer<ReleaseDescriptorBuilder>() { + @Override + public ReleaseDescriptorBuilder answer(InvocationOnMock invocationOnMock) throws Throwable { + ReleaseDescriptorBuilder original = (ReleaseDescriptorBuilder) invocationOnMock.callRealMethod(); + return spy(original); + } + }); + // execute mojo.execute(); @@ -105,6 +117,8 @@ public class PrepareReleaseMojoTest assertThat( prepareRequest.getValue().getReactorProjects(), is( notNullValue() ) ); assertThat( prepareRequest.getValue().getResume(), is( true ) ); assertThat( prepareRequest.getValue().getDryRun(), is( false ) ); + + verify(prepareRequest.getValue().getReleaseDescriptorBuilder()).setScmSignTags(false); } public void testPrepareWithExecutionException()