Prevent the extension manifests from embedding the current date. This is inspired by the Debian "Use-build-id-as-langpack-version-for-reproducibility.patch" maintained for their Firefox package as well as reproducible-builds.org guidelines from https://reproducible-builds.org/docs/source-date-epoch/. Upstream status: https://phabricator.services.mozilla.com/D169979 --- ./python/mozbuild/mozbuild/action/langpack_manifest.py.old 2023-02-13 11:01:21.051537347 -0500 +++ ./python/mozbuild/mozbuild/action/langpack_manifest.py 2023-02-13 11:04:33.141817330 -0500 @@ -36,6 +36,15 @@ pushlog_api_url = "{0}/json-rev/{1}" +import os +import time +import datetime + +def get_build_date(): + """Honor SOURCE_DATE_EPOCH for reproducibility.""" + return datetime.datetime.utcfromtimestamp( + int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))) + ### # Retrievers a UTC datetime of the push for the current commit # from a mercurial clone directory. @@ -54,7 +63,7 @@ with mozversioncontrol.get_repository_object(path=path) as repo: phase = repo._run("log", "-r", ".", "-T" "{phase}") if phase.strip() != "public": - return datetime.datetime.utcnow() + return get_build_date() repo_url = repo._run("paths", "default") repo_url = repo_url.strip().replace("ssh://", "https://") repo_url = repo_url.replace("hg://", "https://") @@ -105,7 +114,7 @@ dt = get_dt_from_hg(path) if dt is None: - dt = datetime.datetime.utcnow() + dt = get_build_date() dt = dt.replace(microsecond=0) return dt.strftime("%Y%m%d%H%M%S")