You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2021/04/02 16:39:43 UTC

[maven-release] branch MRELEASE-1015 created (now d1c7dd7)

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

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


      at d1c7dd7  Add `signTag` option to release:prepare goal

This branch includes the following new commits:

     new d1c7dd7  Add `signTag` option to release:prepare goal

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[maven-release] 01/01: Add `signTag` option to release:prepare goal

Posted by rf...@apache.org.
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 <bd...@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()