[Pkg-javascript-devel] Bug#1030724: node-marked-man: please make the build reproducible
    Chris Lamb 
    lamby at debian.org
       
    Mon Feb  6 19:38:03 GMT 2023
    
    
  
Source: node-marked-man
Version: 1.3.1-1
Severity: wishlist
Tags: patch
User: reproducible-builds at lists.alioth.debian.org
Usertags: timestamps toolchain
X-Debbugs-Cc: reproducible-bugs at lists.alioth.debian.org
Hi,
Whilst working on the Reproducible Builds effort [0] we noticed that
node-marked-man generates manpages that vary depending on the system
timezone. For example, within the tree of src:node-gulp:
  $ dpkg-parsechangelog --show-field=Date
  Wed, 30 Nov 2022 23:28:47 +0100
  $ TZ="/usr/share/zoneinfo/Etc/GMT-14" marked-man --name gulp --date="$(dpkg-parsechangelog --show-field=Date)" docs/CLI.md | head -n1
  .TH "GULP" "1" "December 2022" "4.0.2"
  $ TZ="/usr/share/zoneinfo/Etc/GMT+11" marked-man --name gulp --date="$(dpkg-parsechangelog --show-field=Date)" docs/CLI.md | head -n1
  .TH "GULP" "1" "November 2022" "4.0.2"
This seems to be caused by the use of Date.prototype.toLocaleDateString
in utils.js:
    export function manDate(date) {
      const stamp = parseInt(date);
      if (!Number.isNaN(stamp) && stamp.toString().length == date.length) date = stamp;
      date = new Date(date);
      return date.toLocaleString('en', { month: 'long', year: 'numeric' });
    }
A patch is attached that normalises this to UTC. After this patch is
applied, you get the following:
  $ TZ="/usr/share/zoneinfo/Etc/GMT-14" marked-man --name gulp --date="$(dpkg-parsechangelog --show-field=Date)" docs/CLI.md | head -n1
  .TH "GULP" "1" "November 2022" "4.0.2"
  $ TZ="/usr/share/zoneinfo/Etc/GMT+11" marked-man --name gulp --date="$(dpkg-parsechangelog --show-field=Date)" docs/CLI.md | head -n1
  .TH "GULP" "1" "November 2022" "4.0.2"
[0] https://reproducible-builds.org/
Regards,
-- 
      ,''`.
     : :'  :     Chris Lamb
     `. `'`      lamby at debian.org / chris-lamb.co.uk
       `-
-------------- next part --------------
diff --git a/src/utils.js b/src/utils.js
index 1c1d37d..59d042f 100644
--- a/src/utils.js
+++ b/src/utils.js
@@ -80,6 +80,7 @@ export function manDate(date) {
 	const stamp = parseInt(date);
 	if (!Number.isNaN(stamp) && stamp.toString().length == date.length) date = stamp;
 	date = new Date(date);
+	date = new Date(date.getTime() + date.getTimezoneOffset() * 60000);
 	return date.toLocaleString('en', { month: 'long', year: 'numeric' });
 }
 
    
    
More information about the Pkg-javascript-devel
mailing list