[MRELEASE-1029] update project.build.outputTimestamp property
to get an up-to-date timestamp value for Reproducible Builds during
releases
diff --git a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
index 6b1dfc2..4da8199 100644
--- a/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
+++ b/maven-release-manager/src/main/java/org/apache/maven/shared/release/phase/AbstractRewritePomsPhase.java
@@ -20,11 +20,15 @@
*/
import java.io.File;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.util.TimeZone;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.ArtifactUtils;
@@ -105,6 +109,13 @@
this.modelETL = modelETL;
}
+ private long startTime = -1 * 1000;
+
+ public void setStartTime( long startTime )
+ {
+ this.startTime = startTime;
+ }
+
protected abstract String getPomSuffix();
@Override
@@ -166,6 +177,8 @@
List<MavenProject> reactorProjects, boolean simulate, ReleaseResult result )
throws ReleaseExecutionException, ReleaseFailureException
{
+ result.setStartTime( ( startTime >= 0 ) ? startTime : System.currentTimeMillis() );
+
for ( MavenProject project : reactorProjects )
{
logInfo( result, "Transforming '" + project.getName() + "'..." );
@@ -325,6 +338,40 @@
}
transformScm( project, modelTarget, releaseDescriptor, projectId, scmRepository, result );
+
+ if ( properties != null )
+ {
+ rewriteBuildOutputTimestampProperty( properties, result );
+ }
+ }
+
+ private void rewriteBuildOutputTimestampProperty( Properties properties, ReleaseResult result )
+ {
+ String buildOutputTimestamp = properties.getProperty( "project.build.outputTimestamp" );
+ if ( buildOutputTimestamp == null )
+ {
+ // no Reproducible Builds output timestamp defined
+ return;
+ }
+ if ( buildOutputTimestamp.length() <= 1 )
+ {
+ // value length == 1 means disable Reproducible Builds
+ return;
+ }
+
+ if ( StringUtils.isNumeric( buildOutputTimestamp ) )
+ {
+ // int representing seconds since the epoch, like SOURCE_DATE_EPOCH
+ buildOutputTimestamp = String.valueOf( result.getStartTime() / 1000 );
+ }
+ else
+ {
+ // ISO-8601
+ DateFormat df = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss'Z'" );
+ df.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
+ buildOutputTimestamp = df.format( new Date( result.getStartTime() ) );
+ }
+ properties.setProperty( "project.build.outputTimestamp", buildOutputTimestamp );
}
private void rewriteVersion( Model modelTarget, ReleaseDescriptor releaseDescriptor, String projectId,
diff --git a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java
index 0f72873..0cba62b 100644
--- a/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java
+++ b/maven-release-manager/src/test/java/org/apache/maven/shared/release/phase/AbstractRewritingReleasePhaseTestCase.java
@@ -87,6 +87,7 @@
if( phase instanceof AbstractRewritePomsPhase)
{
((AbstractRewritePomsPhase) phase).setModelETL( modelETL );
+ ((AbstractRewritePomsPhase) phase).setStartTime( 0 );
}
}
diff --git a/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom-with-schema.xml b/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom-with-schema.xml
index f565d93..495a718 100644
--- a/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom-with-schema.xml
+++ b/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom-with-schema.xml
@@ -32,6 +32,15 @@
<url>file://localhost/tmp/scm-repo/trunk</url>
</scm>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <project.build.outputTimestamp>1970-01-01T00:00:00Z</project.build.outputTimestamp>
+ <javaVersion>7</javaVersion>
+ <maven.compiler.source>1.${javaVersion}</maven.compiler.source>
+ <maven.compiler.target>1.${javaVersion}</maven.compiler.target>
+ </properties>
+
<!--
a multi-line
comment
diff --git a/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom.xml b/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom.xml
index 557e405..80b0386 100644
--- a/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom.xml
+++ b/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/expected-pom.xml
@@ -32,6 +32,15 @@
<url>file://localhost/tmp/scm-repo/trunk</url>
</scm>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <project.build.outputTimestamp>1970-01-01T00:00:00Z</project.build.outputTimestamp>
+ <javaVersion>7</javaVersion>
+ <maven.compiler.source>1.${javaVersion}</maven.compiler.source>
+ <maven.compiler.target>1.${javaVersion}</maven.compiler.target>
+ </properties>
+
<!--
a multi-line
comment
diff --git a/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/pom.xml b/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/pom.xml
index 8a89516..a267436 100644
--- a/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/pom.xml
+++ b/maven-release-manager/src/test/resources/projects/rewrite-for-development/basic-pom/pom.xml
@@ -32,6 +32,15 @@
<url>file://localhost/tmp/scm-repo/tags/release-label</url>
</scm>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <project.build.outputTimestamp>1970-01-01T00:00:00Z</project.build.outputTimestamp>
+ <javaVersion>7</javaVersion>
+ <maven.compiler.source>1.${javaVersion}</maven.compiler.source>
+ <maven.compiler.target>1.${javaVersion}</maven.compiler.target>
+ </properties>
+
<!--
a multi-line
comment
diff --git a/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom-with-schema.xml b/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom-with-schema.xml
index b89e5f4..774b129 100644
--- a/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom-with-schema.xml
+++ b/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom-with-schema.xml
@@ -32,6 +32,15 @@
<url>file://localhost/tmp/scm-repo/tags/release-label</url>
</scm>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <project.build.outputTimestamp>1970-01-01T00:00:00Z</project.build.outputTimestamp>
+ <javaVersion>7</javaVersion>
+ <maven.compiler.source>1.${javaVersion}</maven.compiler.source>
+ <maven.compiler.target>1.${javaVersion}</maven.compiler.target>
+ </properties>
+
<!--
a multi-line
comment
diff --git a/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom.xml b/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom.xml
index 8a89516..a267436 100644
--- a/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom.xml
+++ b/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/expected-pom.xml
@@ -32,6 +32,15 @@
<url>file://localhost/tmp/scm-repo/tags/release-label</url>
</scm>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <project.build.outputTimestamp>1970-01-01T00:00:00Z</project.build.outputTimestamp>
+ <javaVersion>7</javaVersion>
+ <maven.compiler.source>1.${javaVersion}</maven.compiler.source>
+ <maven.compiler.target>1.${javaVersion}</maven.compiler.target>
+ </properties>
+
<!--
a multi-line
comment
diff --git a/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/pom.xml b/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/pom.xml
index db3aeab..90bbf9e 100644
--- a/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/pom.xml
+++ b/maven-release-manager/src/test/resources/projects/rewrite-for-release/basic-pom/pom.xml
@@ -32,6 +32,15 @@
<url>file://localhost/tmp/scm-repo/trunk</url>
</scm>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+ <project.build.outputTimestamp>initial</project.build.outputTimestamp>
+ <javaVersion>7</javaVersion>
+ <maven.compiler.source>1.${javaVersion}</maven.compiler.source>
+ <maven.compiler.target>1.${javaVersion}</maven.compiler.target>
+ </properties>
+
<!--
a multi-line
comment
diff --git a/pom.xml b/pom.xml
index b11c1e6..37d7dfd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -88,6 +88,7 @@
<javaVersion>7</javaVersion>
<mavenVersion>3.0</mavenVersion>
<maven.site.path>maven-release-archives/maven-release-LATEST</maven.site.path>
+ <project.build.outputTimestamp>2019-11-23T17:28:05Z</project.build.outputTimestamp>
</properties>
<build>