Make the build reproducible
While auditing Debian's packages, Chris Lamb reported[*] that weather-util's correlation set generation is not reproducible because it embeds timestamps without a means to override them and also varies by system timezone. Allow SOURCE_DATE_EPOCH from the calling environment and assume UTC rather than relying on locale settings when no timezones are specified. [*] https://bugs.debian.org/964721
This commit is contained in:
committed by
Jeremy Stanley
parent
9e7002438b
commit
8ad1f3f02c
22
weather.py
22
weather.py
@@ -1268,56 +1268,56 @@ def correlate():
|
|||||||
weather_copyright,
|
weather_copyright,
|
||||||
os.path.basename( sys.argv[0] ),
|
os.path.basename( sys.argv[0] ),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( time.time() )
|
datetime.datetime.utcfromtimestamp( int(os.environ.get('SOURCE_DATE_EPOCH', time.time())) )
|
||||||
),
|
),
|
||||||
hashlib.md5( open(gcounties_an, "rb").read() ).hexdigest(),
|
hashlib.md5( open(gcounties_an, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(gcounties_an) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(gcounties_an) )
|
||||||
),
|
),
|
||||||
gcounties_an,
|
gcounties_an,
|
||||||
hashlib.md5( open(gcousubs_an, "rb").read() ).hexdigest(),
|
hashlib.md5( open(gcousubs_an, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(gcousubs_an) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(gcousubs_an) )
|
||||||
),
|
),
|
||||||
gcousubs_an,
|
gcousubs_an,
|
||||||
hashlib.md5( open(gplace_an, "rb").read() ).hexdigest(),
|
hashlib.md5( open(gplace_an, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(gplace_an) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(gplace_an) )
|
||||||
),
|
),
|
||||||
gplace_an,
|
gplace_an,
|
||||||
hashlib.md5( open(gzcta_an, "rb").read() ).hexdigest(),
|
hashlib.md5( open(gzcta_an, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(gzcta_an) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(gzcta_an) )
|
||||||
),
|
),
|
||||||
gzcta_an,
|
gzcta_an,
|
||||||
hashlib.md5( open(cpfzcf_fn, "rb").read() ).hexdigest(),
|
hashlib.md5( open(cpfzcf_fn, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(cpfzcf_fn) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(cpfzcf_fn) )
|
||||||
),
|
),
|
||||||
cpfzcf_fn,
|
cpfzcf_fn,
|
||||||
hashlib.md5( open(nsdcccc_fn, "rb").read() ).hexdigest(),
|
hashlib.md5( open(nsdcccc_fn, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(nsdcccc_fn) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(nsdcccc_fn) )
|
||||||
),
|
),
|
||||||
nsdcccc_fn,
|
nsdcccc_fn,
|
||||||
hashlib.md5( open(ourairports_fn, "rb").read() ).hexdigest(),
|
hashlib.md5( open(ourairports_fn, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(ourairports_fn) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(ourairports_fn) )
|
||||||
),
|
),
|
||||||
ourairports_fn,
|
ourairports_fn,
|
||||||
hashlib.md5( open(overrides_fn, "rb").read() ).hexdigest(),
|
hashlib.md5( open(overrides_fn, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(overrides_fn) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(overrides_fn) )
|
||||||
),
|
),
|
||||||
overrides_fn,
|
overrides_fn,
|
||||||
hashlib.md5( open(slist_fn, "rb").read() ).hexdigest(),
|
hashlib.md5( open(slist_fn, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(slist_fn) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(slist_fn) )
|
||||||
),
|
),
|
||||||
slist_fn,
|
slist_fn,
|
||||||
hashlib.md5( open(zlist_fn, "rb").read() ).hexdigest(),
|
hashlib.md5( open(zlist_fn, "rb").read() ).hexdigest(),
|
||||||
datetime.date.isoformat(
|
datetime.date.isoformat(
|
||||||
datetime.datetime.fromtimestamp( os.path.getmtime(zlist_fn) )
|
datetime.datetime.utcfromtimestamp( os.path.getmtime(zlist_fn) )
|
||||||
),
|
),
|
||||||
zlist_fn
|
zlist_fn
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user