Skip to content

Commit 19f9abf

Browse files
authored
Ensure Sigstore CLI on downloads server is >= 3.6.2 and < 4 (#293)
1 parent 4c12c87 commit 19f9abf

File tree

3 files changed

+36
-34
lines changed

3 files changed

+36
-34
lines changed

add_to_pydotorg.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -364,32 +364,6 @@ def has_sigstore_signature(filename: str) -> bool:
364364
os.path.exists(filename + ".sig") and os.path.exists(filename + ".crt")
365365
)
366366

367-
# Ensure that Sigstore CLI installed on the download server is
368-
# at least v3.0.0 or later to ensure valid Sigstore bundles are generated.
369-
try:
370-
sigstore_version_stdout = subprocess.check_output(
371-
["python3", "-m", "sigstore", "--version"]
372-
)
373-
sigstore_version_match = re.search(
374-
r"([0-9][0-9.]*[0-9])", sigstore_version_stdout.decode()
375-
)
376-
if not sigstore_version_match:
377-
error(
378-
f"Couldn't determine version of Sigstore CLI: "
379-
f"{sigstore_version_stdout.decode()}"
380-
)
381-
sigstore_version = sigstore_version_match.group(1)
382-
sigstore_major_version = int(sigstore_version.partition(".")[0])
383-
if sigstore_major_version < 3:
384-
error(
385-
f"Sigstore v3 or later must be installed "
386-
f"(currently {sigstore_version}), "
387-
f"run: python -m pip install -r requirements.txt"
388-
)
389-
except subprocess.CalledProcessError:
390-
error("Couldn't determine version of Sigstore CLI")
391-
print(f"Sigstore CLI installed is version v{sigstore_version}")
392-
393367
# Skip files that already have a signature (likely source distributions)
394368
unsigned_files = [
395369
filename for filename in filenames if not has_sigstore_signature(filename)

run_release.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -365,14 +365,21 @@ def check_sigstore_client(db: ReleaseShelf) -> None:
365365
)
366366
_, stdout, _ = client.exec_command("python3 -m sigstore --version")
367367
sigstore_version = stdout.read(1000).decode()
368-
sigstore_vermatch = re.match("^sigstore ([0-9.]+)", sigstore_version)
369-
if not sigstore_vermatch or tuple(
370-
int(part) for part in sigstore_vermatch.group(1).split(".")
371-
) < (3, 5):
372-
raise ReleaseException(
373-
f"Sigstore version not detected or not valid. "
374-
f"Expecting 3.5.x or later: {sigstore_version}"
375-
)
368+
check_sigstore_version(sigstore_version)
369+
370+
371+
def check_sigstore_version(version: str) -> None:
372+
version_match = re.match("^sigstore ([0-9.]+)", version)
373+
if version_match:
374+
version_tuple = tuple(int(part) for part in version_match.group(1).split("."))
375+
if (3, 6, 2) <= version_tuple < (4, 0):
376+
# good version
377+
return
378+
379+
raise ReleaseException(
380+
f"Sigstore version not detected or not valid. "
381+
f"Expecting >= 3.6.2 and < 4.0.0, got: {version}"
382+
)
376383

377384

378385
def check_buildbots(db: ReleaseShelf) -> None:

tests/test_run_release.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,27 @@
1111
from release import ReleaseShelf, Tag
1212

1313

14+
@pytest.mark.parametrize(
15+
"version",
16+
["sigstore 3.6.2", "sigstore 3.6.6"],
17+
)
18+
def test_check_sigstore_version_success(version) -> None:
19+
# Verify runs with no exceptions
20+
run_release.check_sigstore_version(version)
21+
22+
23+
@pytest.mark.parametrize(
24+
"version",
25+
["sigstore 3.4.0", "sigstore 3.6.0", "sigstore 4.0.0", ""],
26+
)
27+
def test_check_sigstore_version_exception(version) -> None:
28+
with pytest.raises(
29+
run_release.ReleaseException,
30+
match="Sigstore version not detected or not valid",
31+
):
32+
run_release.check_sigstore_version(version)
33+
34+
1435
@pytest.mark.parametrize(
1536
["url", "expected"],
1637
[

0 commit comments

Comments
 (0)