Bug#1151669: node-uplot: please make the build reproducible

Chris Lamb lamby at debian.org
Thu Oct 22 20:57:03 BST 2026


Source: node-uplot
Version: 1.6.32+ds3-1
Severity: wishlist
Tags: patch
User: reproducible-builds at lists.alioth.debian.org
Usertags: timestamps
X-Debbugs-Cc: reproducible-bugs at lists.alioth.debian.org

Hi,

Whilst working on the Reproducible Builds effort [0], we noticed that
node-uplot could not be built reproducibly. This is because the .js files
shipped in the binary embed the current build year for the copyright year
range.

A patch is attached that seeds this date from SOURCE_DATE_EPOCH (if it is
available).

 [0] https://reproducible-builds.org/


Regards,

-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby at debian.org / chris-lamb.co.uk
       `-
-------------- next part --------------
--- a/debian/patches/reproducible-build.patch	1969-12-31 16:00:00.000000000 -0800
--- b/debian/patches/reproducible-build.patch	2026-10-21 15:20:13.286291714 -0700
@@ -0,0 +1,26 @@
+Description: Make the build reproducible
+Author: Chris Lamb <lamby at debian.org>
+Last-Update: 2026-10-21
+
+--- node-uplot-1.6.32+ds3.orig/rollup.config.js
++++ node-uplot-1.6.32+ds3/rollup.config.js
+@@ -18,9 +18,11 @@ import terser from '@rollup/plugin-terse
+ const pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
+ const ver = "v" + pkg.version;
+ const urlVer = "https://github.com/leeoniya/uPlot (" + ver + ")";
++const epoch = Number(process.env["SOURCE_DATE_EPOCH"]);
++const timestamp = Number.isInteger(epoch) ? new Date(epoch * 1000) : new Date();
+ const banner = [
+ 	"/**",
+-	"* Copyright (c) " + new Date().getFullYear() + ", Leon Sorokin",
++	"* Copyright (c) " + timestamp.getFullYear() + ", Leon Sorokin",
+ 	"* All rights reserved. (MIT Licensed)",
+ 	"*",
+ 	"* uPlot.js (\u03bcPlot)",
+@@ -112,4 +112,4 @@ export default [
+ 			terser(terserOpts),
+ 		]
+ 	},
+-];
+\ No newline at end of file
++];
--- a/debian/patches/series	1969-12-31 16:00:00.000000000 -0800
--- b/debian/patches/series	2026-10-21 15:19:20.231617821 -0700
@@ -0,0 +1 @@
+reproducible-build.patch
--- a/rollup.config.js	2026-10-21 15:07:37.029063808 -0700
--- b/rollup.config.js	2026-10-21 15:19:20.000000000 -0700
@@ -18,9 +18,11 @@
 const pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
 const ver = "v" + pkg.version;
 const urlVer = "https://github.com/leeoniya/uPlot (" + ver + ")";
+const epoch = Number(process.env["SOURCE_DATE_EPOCH"]);
+const timestamp = Number.isInteger(epoch) ? new Date(epoch * 1000) : new Date();
 const banner = [
 	"/**",
-	"* Copyright (c) " + new Date().getFullYear() + ", Leon Sorokin",
+	"* Copyright (c) " + timestamp.getFullYear() + ", Leon Sorokin",
 	"* All rights reserved. (MIT Licensed)",
 	"*",
 	"* uPlot.js (\u03bcPlot)",
@@ -110,4 +112,4 @@
 			terser(terserOpts),
 		]
 	},
-];
\ No newline at end of file
+];


More information about the Reproducible-bugs mailing list