From: Rob Browning <rlb@defaultvalue.org>
Date: Sat, 3 May 2025 16:25:44 -0500
Subject: write-pom: make pom.properties generated date reproducible

Defer to SOURCE_DATE_EPOCH for pom.properties generated date, and
switch to TZ-invariant UTC representation.

Bug-Debian: https://bugs.debian.org/1095578
Forwarded: https://ask.clojure.org/index.php/14389/please-consider-making-properties-reproducible-generated
---
 .../clojure/clojure/tools/build/tasks/write_pom.clj   | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/main/clojure/clojure/tools/build/tasks/write_pom.clj b/src/main/clojure/clojure/tools/build/tasks/write_pom.clj
index fa9cb5b..ea1cce3 100644
--- a/src/main/clojure/clojure/tools/build/tasks/write_pom.clj
+++ b/src/main/clojure/clojure/tools/build/tasks/write_pom.clj
@@ -21,7 +21,8 @@
     [clojure.tools.build.util.file :as file])
   (:import [clojure.data.xml.node Element]
            [java.io Reader]
-           [java.util Date]))
+           [java.time Instant ZoneId ZonedDateTime]
+           [java.time.format DateTimeFormatter]))
 
 (xml/alias-uri 'pom "http://maven.apache.org/POM/4.0.0")
 (def ^:private pom-ns (name (.-name ^clojure.lang.Namespace (get (ns-aliases *ns*) 'pom))))
@@ -271,7 +272,13 @@
     (spit (jio/file pom-dir-file "pom.properties")
       (str/join (System/lineSeparator)
         ["# Generated by org.clojure/tools.build"
-         (format "# %tc" (Date.))
+         (let [dtf (DateTimeFormatter/ofPattern "E MMM d HH:mm:ss 'UTC' u")
+               inst (or (some-> "SOURCE_DATE_EPOCH"
+                                System/getenv
+                                parse-long
+                                Instant/ofEpochSecond)
+                        (Instant/now))]
+           (str "# " (.format dtf (ZonedDateTime/ofInstant inst (ZoneId/of "Z")))))
          (format "version=%s" version)
          (format "groupId=%s" (namespace lib))
          (format "artifactId=%s" (name lib))]))))
-- 
2.47.2

