Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Validate Requires-Python metadata against the "mindeps" build in CI config #809

Merged
merged 6 commits into from
Oct 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -85,3 +85,5 @@ jobs:
run: python -m pip install -U tox
- name: check package metadata
run: python -m tox -e twine-check,poetry-check
- name: check min version is tested in CI
run: python -m tox r -e check-min-python-is-tested
63 changes: 63 additions & 0 deletions scripts/ensure_min_python_is_tested.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# this script should only be called via
# tox run -e check-min-python-is-tested
#
# no other usages are supported
import pathlib
import subprocess
import sys

import ruamel.yaml

YAML = ruamel.yaml.YAML(typ="safe")
REPO_ROOT = pathlib.Path(__file__).parent.parent

proc = subprocess.run(
["python", "-m", "mddj", "read", "requires-python", "--lower-bound"],
check=True,
capture_output=True,
cwd=REPO_ROOT,
)
requires_python_version = proc.stdout.decode().strip()

with open(REPO_ROOT / ".github" / "workflows" / "build.yaml") as f:
workflow = YAML.load(f)
try:
test_mindeps_job = workflow["jobs"]["test-mindeps"]
except KeyError:
raise ValueError("Could not find the test-mindeps job. Perhaps it has moved?")

job_steps = test_mindeps_job["steps"]
for step in job_steps:
if "uses" in step and "actions/setup-python" in step["uses"]:
setup_python_step = step
break
else:
raise ValueError("Could not find the setup-python step.")

python_version = setup_python_step["with"]["python-version"]
if python_version != requires_python_version:
print("ERROR: ensure_min_python_is_tested.py failed!")
print(
f"\nPackage data sets 'Requires-Python: >={requires_python_version}', "
f"but the test-mindeps job is configured to test '{python_version}'.\n",
file=sys.stderr,
)
sys.exit(1)


proc = subprocess.run(
["python", "-m", "mddj", "read", "tox", "min-version"],
kurtmckee marked this conversation as resolved.
Show resolved Hide resolved
check=True,
capture_output=True,
cwd=REPO_ROOT,
)
tox_min_python_version = proc.stdout.decode().strip()
if tox_min_python_version != requires_python_version:
print("ERROR: ensure_min_python_is_tested.py failed!")
print(
f"\nPackage data sets 'Requires-Python: >={requires_python_version}', "
"but tox is configured to test with a minimum of "
f"'{tox_min_python_version}'.\n",
file=sys.stderr,
)
sys.exit(1)
8 changes: 8 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,14 @@ commands =
py311: pip-compile --strip-extras -q -U --resolver=backtracking docs.in -o py{py_dot_ver}/docs.txt
py311: pip-compile --strip-extras -q -U --resolver=backtracking typing.in -o py{py_dot_ver}/typing.txt

[testenv:check-min-python-is-tested]
description = Check the Requires-Python metadata against CI config
skip_install = true
deps =
ruamel.yaml<0.18
mddj==0.0.6
commands = python scripts/ensure_min_python_is_tested.py

[testenv:prepare-release]
skip_install = true
deps = scriv
Expand Down