Bug#1017475: sphinx-panels: please make the build reproducible
Chris Lamb
lamby at debian.org
Tue Aug 16 17:55:12 BST 2022
Source: sphinx-panels
Version: 0.6.0-2
Severity: wishlist
Tags: patch
User: reproducible-builds at lists.alioth.debian.org
Usertags: randomness
X-Debbugs-Cc: reproducible-bugs at lists.alioth.debian.org
Hi,
Whilst working on the Reproducible Builds effort [0] we noticed that
sphinx-panels could not be built reproducibly.
This is because it uses Python's uuid.uuid4 to generate unique
identifiers, but those numbers are random/nondeterminstic by design.
I've attached a patch that will seed these random numbers from
SOURCE_DATE_EPOCH if it exists, otherwise it will revert back to
random numbers.
[0] https://reproducible-builds.org/
Regards,
--
,''`.
: :' : Chris Lamb
`. `'` lamby at debian.org / chris-lamb.co.uk
`-
-------------- next part --------------
diff --git a/sphinx_panels/tabs.py b/sphinx_panels/tabs.py
index ac2a546..725a5f4 100644
--- a/sphinx_panels/tabs.py
+++ b/sphinx_panels/tabs.py
@@ -1,4 +1,8 @@
-from uuid import uuid4
+import os
+import random
+import time
+import uuid
+
from typing import Optional
from docutils import nodes
@@ -10,6 +14,9 @@ from sphinx.util.nodes import NodeMatcher
LOGGER = getLogger(__name__)
+rnd = random.Random()
+rnd.seed(os.environ.get("SOURCE_DATE_EPOCH", time.time()))
+
def setup_tabs(app):
app.add_directive("tabbed", TabbedDirective)
@@ -122,7 +129,7 @@ class TabbedHtmlTransform(SphinxPostTransform):
formats = ("html",)
def get_unique_key(self):
- return str(uuid4())
+ return uuid.UUID(int=rnd.getrandbits(128), version=4).hex
def run(self):
matcher = NodeMatcher(nodes.container, type="tabbed")
More information about the Reproducible-bugs
mailing list