kopia lustrzana https://github.com/jupyterhub/repo2docker
runtime.txt: allow name-yyyy-mm-dd (no version)
rodzic
7ec064c128
commit
53cc506e8e
|
@ -759,6 +759,11 @@ class BaseImage(BuildPack):
|
|||
|
||||
Returns (runtime, version, date), tuple components may be None.
|
||||
Returns (None, None, None) if runtime.txt not found.
|
||||
|
||||
Supported formats:
|
||||
name-version
|
||||
name-version-yyyy-mm-dd
|
||||
name-yyyy-mm-dd
|
||||
"""
|
||||
if hasattr(self, "_runtime"):
|
||||
return self._runtime
|
||||
|
@ -776,15 +781,19 @@ class BaseImage(BuildPack):
|
|||
version = None
|
||||
date = None
|
||||
|
||||
parts = runtime_txt.split("-", 2)
|
||||
if len(parts) > 0 and parts[0]:
|
||||
name = parts[0]
|
||||
if len(parts) > 1 and parts[1]:
|
||||
parts = runtime_txt.split("-")
|
||||
if len(parts) not in (2, 4, 5) or any(not (p) for p in parts):
|
||||
raise ValueError(f"Invalid runtime.txt: {runtime_txt}")
|
||||
|
||||
name = parts[0]
|
||||
|
||||
if len(parts) in (2, 5):
|
||||
version = parts[1]
|
||||
if len(parts) > 2 and parts[2]:
|
||||
date = parts[2]
|
||||
|
||||
if len(parts) in (4, 5):
|
||||
date = "-".join(parts[-3:])
|
||||
if not re.match(r"\d\d\d\d-\d\d-\d\d", date):
|
||||
raise ValueError(f"Invalid date, expected YYYY-MM-DD: {date}")
|
||||
raise ValueError(f"Invalid runtime.txt date: {date}")
|
||||
date = datetime.datetime.fromisoformat(date).date()
|
||||
|
||||
self._runtime = (name, version, date)
|
||||
|
|
|
@ -57,10 +57,9 @@ def test_unsupported_python(tmpdir, python_version, base_image):
|
|||
"runtime_txt, expected",
|
||||
[
|
||||
(None, (None, None, None)),
|
||||
("", (None, None, None)),
|
||||
("abc", ("abc", None, None)),
|
||||
("abc-001", ("abc", "001", None)),
|
||||
("abc-001-2025-06-22", ("abc", "001", date(2025, 6, 22))),
|
||||
("abc-2025-06-22", ("abc", None, date(2025, 6, 22))),
|
||||
("a_b/c-0.0.1-2025-06-22", ("a_b/c", "0.0.1", date(2025, 6, 22))),
|
||||
],
|
||||
)
|
||||
|
@ -73,3 +72,24 @@ def test_runtime(tmpdir, runtime_txt, expected, base_image):
|
|||
|
||||
base = BaseImage(base_image)
|
||||
assert base.runtime == expected
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"runtime_txt",
|
||||
[
|
||||
"",
|
||||
"abc",
|
||||
"abc-001-25-06-22",
|
||||
],
|
||||
)
|
||||
def test_invalid_runtime(tmpdir, runtime_txt, base_image):
|
||||
tmpdir.chdir()
|
||||
|
||||
if runtime_txt is not None:
|
||||
with open("runtime.txt", "w") as f:
|
||||
f.write(runtime_txt)
|
||||
|
||||
base = BaseImage(base_image)
|
||||
|
||||
with pytest.raises(ValueError, match=r"^Invalid runtime.txt.*"):
|
||||
base.runtime
|
||||
|
|
Ładowanie…
Reference in New Issue