diff --git a/pom.xml b/pom.xml
index 340049c..dc25aeb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -197,6 +197,18 @@
4.13.1
test
+
+ com.github.stefanbirkner
+ system-rules
+ 1.19.0
+ test
+
+
+ com.github.stefanbirkner
+ system-lambda
+ 1.1.0
+ test
+
org.slf4j
slf4j-api
diff --git a/src/main/java/org/redline_rpm/Builder.java b/src/main/java/org/redline_rpm/Builder.java
index 0639157..fc89cb8 100644
--- a/src/main/java/org/redline_rpm/Builder.java
+++ b/src/main/java/org/redline_rpm/Builder.java
@@ -102,7 +102,17 @@ public class Builder {
*/
public Builder() {
format.getHeader().createEntry( HEADERI18NTABLE, "C");
- format.getHeader().createEntry( BUILDTIME, ( int) ( System.currentTimeMillis() / 1000));
+ long sourceDateEpoch=0;
+ long buildTime = System.currentTimeMillis()/1000;
+ try {
+ sourceDateEpoch = Long.parseLong(System.getenv("SOURCE_DATE_EPOCH"));
+ }catch(NumberFormatException e) {
+ // do nothing
+ }
+ if(sourceDateEpoch!=0){
+ buildTime = sourceDateEpoch;
+ }
+ format.getHeader().createEntry( BUILDTIME, ( int)buildTime);
format.getHeader().createEntry( RPMVERSION, "4.4.2");
format.getHeader().createEntry( PAYLOADFORMAT, "cpio");
format.getHeader().createEntry( PAYLOADCOMPRESSOR, "gzip");
diff --git a/src/test/java/org/redline_rpm/BuilderTest.java b/src/test/java/org/redline_rpm/BuilderTest.java
index 22536e6..9ef4a91 100644
--- a/src/test/java/org/redline_rpm/BuilderTest.java
+++ b/src/test/java/org/redline_rpm/BuilderTest.java
@@ -1,7 +1,8 @@
package org.redline_rpm;
+import org.junit.Rule;
import org.junit.Test;
-import org.redline_rpm.Scanner;
+import org.junit.contrib.java.lang.system.EnvironmentVariables;
import org.redline_rpm.header.Format;
import org.redline_rpm.header.Header.HeaderTag;
import org.redline_rpm.header.Header;
@@ -23,6 +24,9 @@
public class BuilderTest extends TestBase {
+ @Rule
+ public final EnvironmentVariables environmentVariables = new EnvironmentVariables();
+
@Test
public void testLongNameTruncation() throws Exception {
Builder builder = new Builder();
@@ -205,6 +209,27 @@ public void testProvideOverride() throws Exception {
}
+ /**
+ * Allows the Build Date of the RPM to be overridden by the environment variable SOURCE_DATE_EPOCH
+ * See https://reproducible-builds.org/docs/source-date-epoch/
+ * @throws Exception
+ */
+ @Test
+ public void testReproducibleBuilds() throws Exception {
+ final String EXPECTED_BUILD_TIME="1644516016";
+ environmentVariables.set("SOURCE_DATE_EPOCH", EXPECTED_BUILD_TIME);
+
+ Builder builder = new Builder();
+ builder.setPackage("testReproducibleBuilds", "1.0", "1");
+ builder.build( new File( getTargetDir()));
+
+ Format format = new Scanner().run(channelWrapper("target" + File.separator + "testReproducibleBuilds-1.0-1.noarch.rpm"));
+ System.out.println(EXPECTED_BUILD_TIME+" hhhhhh ==" + format.getHeader().getEntry(HeaderTag.BUILDTIME).toString());
+
+ assertEquals("buildtime[tag=1006,type=4,count=1,size=4,offset=36]\n\t"+EXPECTED_BUILD_TIME+", ", format.getHeader().getEntry(HeaderTag.BUILDTIME).toString());
+
+ }
+
@Test
public void testAddHeaderEntry() {
Builder builder = new Builder();