d8f62653e5
* gnu/packages/python-xyz.scm (python-robotframework): Update to 5.0. [patches]: Remove python-robotframework-ug2html.patch. Add python-robotframework-atest.patch and update python-robotframework-source-date-epoch.patch. [phases]: Use gexps. {delete-problematic-tests}: New phase. {check}: Also run `atest', the acceptance test suite. [native-inputs]: Use new style. Add python-lxml, python-pyyaml, python-xmlschema, scrot and xvfb-run. * gnu/packages/patches/python-robotframework-atest.patch: New file. * gnu/packages/patches/python-robotframework-source-date-epoch.patch: Update patch. * gnu/packages/patches/python-robotframework-ug2html.patch: Delete file. * gnu/local.mk (dist_patch_DATA): Adjust accordingly.
165 lines
6.5 KiB
Diff
165 lines
6.5 KiB
Diff
Patch submitted upstream: https://github.com/robotframework/robotframework/pull/4286.
|
|
|
|
diff --git a/BUILD.rst b/BUILD.rst
|
|
index 67902dd09..749c53fde 100644
|
|
--- a/BUILD.rst
|
|
+++ b/BUILD.rst
|
|
@@ -204,6 +204,9 @@ Creating distributions
|
|
|
|
7. Documentation
|
|
|
|
+ - For a reproducible build, set the ``SOURCE_DATE_EPOCH``
|
|
+ environment variable to 1.
|
|
+
|
|
- Generate library documentation::
|
|
|
|
invoke library-docs all
|
|
diff --git a/atest/robot/libdoc/html_output.robot b/atest/robot/libdoc/html_output.robot
|
|
index f42a4b150..af428c967 100644
|
|
--- a/atest/robot/libdoc/html_output.robot
|
|
+++ b/atest/robot/libdoc/html_output.robot
|
|
@@ -15,7 +15,7 @@ Version
|
|
|
|
Generated
|
|
[Template] Should Match Regexp
|
|
- ${MODEL}[generated] \\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}
|
|
+ ${MODEL}[generated] \\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2}
|
|
|
|
Scope
|
|
${MODEL}[scope] GLOBAL
|
|
diff --git a/atest/robot/libdoc/json_output.robot b/atest/robot/libdoc/json_output.robot
|
|
index 78305a458..654603704 100644
|
|
--- a/atest/robot/libdoc/json_output.robot
|
|
+++ b/atest/robot/libdoc/json_output.robot
|
|
@@ -15,7 +15,7 @@ Version
|
|
|
|
Generated
|
|
[Template] Should Match Regexp
|
|
- ${MODEL}[generated] \\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}
|
|
+ ${MODEL}[generated] \\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2}
|
|
|
|
Scope
|
|
${MODEL}[scope] GLOBAL
|
|
diff --git a/atest/robot/libdoc/libdoc_resource.robot b/atest/robot/libdoc/libdoc_resource.robot
|
|
index bd7c10ecd..b7e06aacc 100644
|
|
--- a/atest/robot/libdoc/libdoc_resource.robot
|
|
+++ b/atest/robot/libdoc/libdoc_resource.robot
|
|
@@ -92,7 +92,8 @@ Lineno Should Be
|
|
Element Attribute Should Be ${LIBDOC} lineno ${lineno}
|
|
|
|
Generated Should Be Defined
|
|
- Element Attribute Should Match ${LIBDOC} generated ????-??-??T??:??:??Z
|
|
+ # For example, '1970-01-01T00:00:01+00:00'.
|
|
+ Element Attribute Should Match ${LIBDOC} generated ????-??-??T??:??:?????:??
|
|
|
|
Spec version should be correct
|
|
Element Attribute Should Be ${LIBDOC} specversion 4
|
|
diff --git a/doc/userguide/ug2html.py b/doc/userguide/ug2html.py
|
|
index 033203552..b278c71c8 100755
|
|
--- a/doc/userguide/ug2html.py
|
|
+++ b/doc/userguide/ug2html.py
|
|
@@ -150,8 +150,7 @@ def create_userguide():
|
|
install_file = _copy_installation_instructions()
|
|
|
|
description = 'HTML generator for Robot Framework User Guide.'
|
|
- arguments = ['--time',
|
|
- '--stylesheet-path', ['src/userguide.css'],
|
|
+ arguments = ['--stylesheet-path', ['src/userguide.css'],
|
|
'src/RobotFrameworkUserGuide.rst',
|
|
'RobotFrameworkUserGuide.html']
|
|
os.chdir(CURDIR)
|
|
diff --git a/src/robot/libdocpkg/model.py b/src/robot/libdocpkg/model.py
|
|
index 5f44039ef..c36bf4a49 100644
|
|
--- a/src/robot/libdocpkg/model.py
|
|
+++ b/src/robot/libdocpkg/model.py
|
|
@@ -19,7 +19,7 @@ from itertools import chain
|
|
|
|
from robot.model import Tags
|
|
from robot.running import ArgumentSpec
|
|
-from robot.utils import getshortdoc, get_timestamp, Sortable, setter
|
|
+from robot.utils import get_timestamp_for_doc, getshortdoc, Sortable, setter
|
|
|
|
from .htmlutils import DocFormatter, DocToHtml, HtmlToText
|
|
from .writer import LibdocWriter
|
|
@@ -113,7 +113,7 @@ class LibraryDoc:
|
|
'name': self.name,
|
|
'doc': self.doc,
|
|
'version': self.version,
|
|
- 'generated': get_timestamp(daysep='-', millissep=None),
|
|
+ 'generated': get_timestamp_for_doc(),
|
|
'type': self.type,
|
|
'scope': self.scope,
|
|
'docFormat': self.doc_format,
|
|
diff --git a/src/robot/libdocpkg/xmlwriter.py b/src/robot/libdocpkg/xmlwriter.py
|
|
index a765ebb2b..980debebb 100644
|
|
--- a/src/robot/libdocpkg/xmlwriter.py
|
|
+++ b/src/robot/libdocpkg/xmlwriter.py
|
|
@@ -13,9 +13,7 @@
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
-from datetime import datetime
|
|
-
|
|
-from robot.utils import XmlWriter
|
|
+from robot.utils import XmlWriter, get_timestamp_for_doc
|
|
|
|
|
|
class LibdocXmlWriter:
|
|
@@ -32,12 +30,11 @@ class LibdocXmlWriter:
|
|
self._write_end(writer)
|
|
|
|
def _write_start(self, libdoc, writer):
|
|
- generated = datetime.utcnow().replace(microsecond=0).isoformat() + 'Z'
|
|
attrs = {'name': libdoc.name,
|
|
'type': libdoc.type,
|
|
'format': libdoc.doc_format,
|
|
'scope': libdoc.scope,
|
|
- 'generated': generated,
|
|
+ 'generated': get_timestamp_for_doc(),
|
|
'specversion': '4'}
|
|
self._add_source_info(attrs, libdoc)
|
|
writer.start('keywordspec', attrs)
|
|
diff --git a/src/robot/utils/__init__.py b/src/robot/utils/__init__.py
|
|
index 442ffa4f3..80793ec29 100644
|
|
--- a/src/robot/utils/__init__.py
|
|
+++ b/src/robot/utils/__init__.py
|
|
@@ -58,9 +58,9 @@ from .robotinspect import is_init
|
|
from .robotio import binary_file_writer, create_destination_directory, file_writer
|
|
from .robotpath import abspath, find_file, get_link_path, normpath
|
|
from .robottime import (elapsed_time_to_string, format_time, get_elapsed_time,
|
|
- get_time, get_timestamp, secs_to_timestamp,
|
|
- secs_to_timestr, timestamp_to_secs, timestr_to_secs,
|
|
- parse_time)
|
|
+ get_time, get_timestamp, get_timestamp_for_doc,
|
|
+ secs_to_timestamp, secs_to_timestr, timestamp_to_secs,
|
|
+ timestr_to_secs, parse_time)
|
|
from .robottypes import (FALSE_STRINGS, TRUE_STRINGS, is_bytes, is_dict_like, is_falsy,
|
|
is_integer, is_list_like, is_number, is_pathlike, is_string,
|
|
is_truthy, is_union, type_name, type_repr, typeddict_types)
|
|
diff --git a/src/robot/utils/robottime.py b/src/robot/utils/robottime.py
|
|
index 97a7d1af0..4a0ba2d83 100644
|
|
--- a/src/robot/utils/robottime.py
|
|
+++ b/src/robot/utils/robottime.py
|
|
@@ -13,6 +13,8 @@
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
+import datetime
|
|
+import os
|
|
import re
|
|
import time
|
|
|
|
@@ -316,6 +318,13 @@ def get_timestamp(daysep='', daytimesep=' ', timesep=':', millissep='.'):
|
|
return TIMESTAMP_CACHE.get_timestamp(daysep, daytimesep, timesep, millissep)
|
|
|
|
|
|
+def get_timestamp_for_doc():
|
|
+ """Return a timestamp that honors `SOURCE_DATE_EPOCH`."""
|
|
+ ts = float(os.getenv('SOURCE_DATE_EPOCH', time.time()))
|
|
+ dt = datetime.datetime.fromtimestamp(round(ts), datetime.timezone.utc)
|
|
+ return dt.isoformat()
|
|
+
|
|
+
|
|
def timestamp_to_secs(timestamp, seps=None):
|
|
try:
|
|
secs = _timestamp_to_millis(timestamp, seps) / 1000.0
|