JCRVLT-699 don't use fix date for SNAPSHOT versions (#91)
diff --git a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java
index d9296f2..5cb909d 100644
--- a/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java
+++ b/src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojo.java
@@ -88,6 +88,7 @@
import org.apache.maven.archiver.MavenArchiveConfiguration;
import org.apache.maven.archiver.MavenArchiver;
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.ArtifactUtils;
import org.apache.maven.artifact.DependencyResolutionRequiredException;
import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter;
@@ -933,7 +934,7 @@
return archive;
}
- private Properties computeProperties(String dependenciesString, String dependenciesLocations) {
+ Properties computeProperties(String dependenciesString, String dependenciesLocations) {
final Properties props = new Properties();
// find the description of the content package (bug #30546)
@@ -979,7 +980,12 @@
}
MavenArchiver archiver = new MavenArchiver();
- Date createdDate = archiver.parseOutputTimestamp(outputTimestamp);
+ Date createdDate = null;
+ if (!ArtifactUtils.isSnapshot(version)) {
+ createdDate = archiver.parseOutputTimestamp(outputTimestamp);
+ } else {
+ getLog().debug("Disabling reproducible builds as the version is a SNAPSHOT, therefore a dynamic created date is used");
+ }
if (createdDate == null) {
createdDate = new Date();
}
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java
index 9db4db2..6f7c314 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/it/DefaultProjectIT.java
@@ -52,6 +52,7 @@
// the created date is fixed in the pom, as this is a reproducible build
projectBuilder
.setTestProjectDir(TEST_PROJECT_NAME + "generic")
+ .setTestPackageFile("target/package-plugin-test-pkg-1.0.0.zip")
.build()
.verifyExpectedFiles()
.verifyExpectedFilesOrder()
@@ -71,6 +72,7 @@
public void generic_project_is_reproducible(ProjectBuilder projectBuilder) throws Exception {
projectBuilder
.setTestProjectDir(TEST_PROJECT_NAME + "generic")
+ .setTestPackageFile("target/package-plugin-test-pkg-1.0.0.zip")
.build();
// MD5
MessageDigest md = MessageDigest.getInstance("MD5");
@@ -81,6 +83,7 @@
byte[] digest1 = md.digest();
projectBuilder
.setTestProjectDir(TEST_PROJECT_NAME + "generic")
+ .setTestPackageFile("target/package-plugin-test-pkg-1.0.0.zip")
.build();
// MD5
md = MessageDigest.getInstance("MD5");
diff --git a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojoTest.java b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojoTest.java
index 3542264..9da556b 100644
--- a/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojoTest.java
+++ b/src/test/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/GenerateMetadataMojoTest.java
@@ -17,6 +17,7 @@
package org.apache.jackrabbit.filevault.maven.packaging.mojo;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;
import java.io.ByteArrayInputStream;
@@ -27,6 +28,7 @@
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -38,6 +40,7 @@
import org.apache.jackrabbit.filevault.maven.packaging.Filters;
import org.apache.jackrabbit.filevault.maven.packaging.MavenBasedPackageDependency;
import org.apache.jackrabbit.filevault.maven.packaging.SubPackage;
+import org.apache.jackrabbit.util.ISO8601;
import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
import org.apache.jackrabbit.vault.fs.filter.DefaultPathFilter;
@@ -48,6 +51,7 @@
import org.hamcrest.MatcherAssert;
import org.hamcrest.Matchers;
import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
class GenerateMetadataMojoTest {
@@ -226,4 +230,55 @@
private static String unescapeContinuations(String value) {
return value.replaceAll("\r ", "");
}
+
+ @Test
+ void testComputeProperties() {
+ // first test with SNAPSHOT version
+ MavenProject project = Mockito.mock(MavenProject.class);
+ Mockito.when(project.getArtifactId()).thenReturn("myartifactid");
+ Mockito.when(project.getGroupId()).thenReturn("mygroupid");
+ Mockito.when(project.getVersion()).thenReturn("1.0.0-SNAPSHOT");
+ Mockito.when(project.getDescription()).thenReturn("my description");
+ GenerateMetadataMojo mojo = new GenerateMetadataMojo();
+ mojo.project = project;
+ mojo.group = "mygroup";
+ mojo.name = "myname";
+ mojo.version = "1.0.0-SNAPSHOT";
+ mojo.allowIndexDefinitions = true;
+ mojo.packageType = PackageType.MIXED;
+ mojo.outputTimestamp = "1";
+ Properties properties = mojo.computeProperties(null, null);
+ Properties expectedProperties = new Properties();
+ expectedProperties.put("allowIndexDefinitions", "true");
+ expectedProperties.put("name", "myname");
+ expectedProperties.put("group", "mygroup");
+ expectedProperties.put("description", "my description");
+ expectedProperties.put("groupId", "mygroupid");
+ expectedProperties.put("artifactId", "myartifactid");
+ expectedProperties.put("version", "1.0.0-SNAPSHOT");
+ expectedProperties.put("packageType", "mixed");
+ expectedProperties.put("requiresRoot", "false");
+ String expectedDate = ISO8601.format(new Date());
+ expectedDate = expectedDate.substring(0, expectedDate.lastIndexOf("."));
+ expectedProperties.put("created", expectedDate);
+ for (Object key : properties.keySet()) {
+ if (key.equals("created")) {
+ // only compare on seconds level
+ assertTrue(properties.get(key).toString().startsWith(expectedProperties.get(key).toString()), "Key " + key + "=" + properties.get(key) + " does not start with " + expectedProperties.get(key));
+ } else {
+ assertEquals(expectedProperties.get(key), properties.get(key), "Key " + key + " is not as expected");
+ }
+ }
+ // test with release version
+ mojo.version = "1.0.0";
+ expectedDate = ISO8601.format(new Date(1l));
+ for (Object key : properties.keySet()) {
+ if (key.equals("created")) {
+ // only compare on seconds level
+ assertTrue(properties.get(key).toString().startsWith(expectedProperties.get(key).toString()), "Key " + key + "=" + properties.get(key) + " does not start with " + expectedProperties.get(key));
+ } else {
+ assertEquals(expectedProperties.get(key), properties.get(key), "Key " + key + " is not as expected");
+ }
+ }
+ }
}
diff --git a/src/test/resources/test-projects/default-test-projects/generic/expected-manifest.txt b/src/test/resources/test-projects/default-test-projects/generic/expected-manifest.txt
index c681ffb..4316311 100644
--- a/src/test/resources/test-projects/default-test-projects/generic/expected-manifest.txt
+++ b/src/test/resources/test-projects/default-test-projects/generic/expected-manifest.txt
@@ -1,7 +1,7 @@
Content-Package-Description:Packaging test
-Content-Package-Id:org.apache.jackrabbit.filevault:package-plugin-test-pkg:1.0.0-SNAPSHOT
+Content-Package-Id:org.apache.jackrabbit.filevault:package-plugin-test-pkg:1.0.0
Content-Package-Roots:/apps/install/org.apache.jackrabbit.vault-3.1.40.jar,/apps/some-thirdparty-libs,/apps/wcm/core/content,/etc/cloudservices,/etc/designs/some-thirdparty-libs,/etc/packages/apache/consulting,/libs/install/jcr-2.0.jar,/rep:policy
Content-Package-Type:mixed
Implementation-Title:Packaging test
-Implementation-Version:1.0.0-SNAPSHOT
+Implementation-Version:1.0.0
Manifest-Version:1.0
\ No newline at end of file
diff --git a/src/test/resources/test-projects/default-test-projects/generic/pom.xml b/src/test/resources/test-projects/default-test-projects/generic/pom.xml
index e013075..cbcb2b3 100755
--- a/src/test/resources/test-projects/default-test-projects/generic/pom.xml
+++ b/src/test/resources/test-projects/default-test-projects/generic/pom.xml
@@ -22,7 +22,7 @@
<!-- ====================================================================== -->
<groupId>org.apache.jackrabbit.filevault</groupId>
<artifactId>package-plugin-test-pkg</artifactId>
- <version>1.0.0-SNAPSHOT</version>
+ <version>1.0.0</version><!-- no SNAPSHOT to enable reproducible builds -->
<packaging>content-package</packaging>
<name>Packaging test</name>