This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-release.git


The following commit(s) were added to refs/heads/master by this push:
     new 8142302  [MRELEASE-1015] Add `signTag` option to release:prepare goal
8142302 is described below

commit 814230235034885d1d785f7e124452f12718d402
Author: Brian Demers <bdem...@apache.org>
AuthorDate: Fri Apr 2 20:48:59 2021 +0200

    [MRELEASE-1015] Add `signTag` option to release:prepare goal
    
    Signed-off-by: rfscholte <rfscho...@apache.org>
---
 .../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()

Reply via email to