* [2.x] Update virtualenv URLs to avoid blob URLs It looks like many people are hitting the HTTP 429 for old versions of cibuildwheel. These hosted versions of virtualenv should work, let's see... * Write the correct version strings * ci: some updates based on main branch Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * ci: move to using latest images Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * chore: fix up style checks Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * ci: newer azure images too Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * tests: use new SSL test from main Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> * Drop `build`'s installation from Pyodide build tools --------- Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com> Co-authored-by: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com>
207 lines
5.6 KiB
Python
Executable File
207 lines
5.6 KiB
Python
Executable File
#!/usr/bin/env -S uv run
|
|
|
|
# /// script
|
|
# dependencies = ["nox>=2025.2.9"]
|
|
# ///
|
|
|
|
"""
|
|
cibuildwheel's nox support
|
|
|
|
Tags:
|
|
|
|
lint: All linting jobs
|
|
update: All update jobs
|
|
|
|
See sessions with `nox -l`
|
|
"""
|
|
|
|
import os
|
|
import shutil
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import nox
|
|
|
|
nox.needs_version = ">=2025.2.9"
|
|
nox.options.default_venv_backend = "uv|virtualenv"
|
|
|
|
DIR = Path(__file__).parent.resolve()
|
|
|
|
|
|
@nox.session(tags=["lint"])
|
|
def lint(session: nox.Session) -> None:
|
|
"""
|
|
Run the linter.
|
|
"""
|
|
session.install("prek")
|
|
session.run("prek", "run", "--all-files", *session.posargs)
|
|
|
|
|
|
@nox.session(tags=["lint"])
|
|
def pylint(session: nox.Session) -> None:
|
|
"""
|
|
Run pylint.
|
|
"""
|
|
|
|
session.install("pylint>=3.2", "-e.")
|
|
session.run("pylint", "cibuildwheel", *session.posargs)
|
|
|
|
|
|
@nox.session
|
|
def tests(session: nox.Session) -> None:
|
|
"""
|
|
Run the unit and regular tests.
|
|
"""
|
|
pyproject = nox.project.load_toml()
|
|
session.install("-e.", *nox.project.dependency_groups(pyproject, "test"))
|
|
if session.posargs:
|
|
session.run("pytest", *session.posargs)
|
|
else:
|
|
unit_test_args = ["--run-docker"] if sys.platform.startswith("linux") else []
|
|
session.run("pytest", "cibuildwheel") # run doctests
|
|
session.run("pytest", "unit_test", *unit_test_args)
|
|
session.run("pytest", "test", "-x", "--durations", "0", "--timeout=2400", "test")
|
|
|
|
|
|
@nox.session(default=False, tags=["update"])
|
|
def update_constraints(session: nox.Session) -> None:
|
|
"""
|
|
Update the dependencies inplace.
|
|
"""
|
|
|
|
session.install("-e.", "click")
|
|
|
|
resources = Path("cibuildwheel/resources")
|
|
|
|
if session.venv_backend != "uv":
|
|
session.install("uv>=0.1.23")
|
|
|
|
# CUSTOM_COMPILE_COMMAND is a pip-compile option that tells users how to
|
|
# regenerate the constraints files
|
|
env = os.environ.copy()
|
|
env["UV_CUSTOM_COMPILE_COMMAND"] = f"nox -s {session.name}"
|
|
|
|
for minor_version in range(8, 15):
|
|
python_version = f"3.{minor_version}"
|
|
output_file = resources / f"constraints-python{python_version.replace('.', '')}.txt"
|
|
session.run(
|
|
"uv",
|
|
"pip",
|
|
"compile",
|
|
f"--python-version={python_version}",
|
|
"--upgrade",
|
|
resources / "constraints.in",
|
|
f"--output-file={output_file}",
|
|
env=env,
|
|
)
|
|
|
|
shutil.copyfile(
|
|
resources / "constraints-python314.txt",
|
|
resources / "constraints.txt",
|
|
)
|
|
|
|
build_platforms = nox.project.load_toml(resources / "build-platforms.toml")
|
|
pyodides = build_platforms["pyodide"]["python_configurations"]
|
|
for pyodide in pyodides:
|
|
python_version = ".".join(pyodide["version"].split(".")[:2])
|
|
pyodide_version = pyodide["default_pyodide_version"]
|
|
|
|
tmp_file = Path(session.create_tmp()) / "constraints-pyodide.in"
|
|
|
|
session.run(
|
|
"python",
|
|
"bin/generate_pyodide_constraints.py",
|
|
"--output-file",
|
|
tmp_file,
|
|
pyodide_version,
|
|
)
|
|
|
|
output_file = resources / f"constraints-pyodide{python_version.replace('.', '')}.txt"
|
|
session.run(
|
|
"uv",
|
|
"pip",
|
|
"compile",
|
|
f"--python-version={python_version}",
|
|
"--upgrade",
|
|
tmp_file,
|
|
f"--output-file={output_file}",
|
|
env=env,
|
|
)
|
|
|
|
|
|
@nox.session(default=False, tags=["update"])
|
|
def update_pins(session: nox.Session) -> None:
|
|
"""
|
|
Update the python, docker, virtualenv, node, and python-build-standalone
|
|
version pins inplace.
|
|
"""
|
|
pyproject = nox.project.load_toml()
|
|
session.install("-e.", *nox.project.dependency_groups(pyproject, "bin"))
|
|
session.run("python", "bin/update_pythons.py", "--force")
|
|
session.run("python", "bin/update_docker.py")
|
|
session.run("python", "bin/update_virtualenv.py", "--force")
|
|
session.run("python", "bin/update_nodejs.py", "--force")
|
|
session.run("python", "bin/update_python_build_standalone.py")
|
|
|
|
|
|
@nox.session(default=False, reuse_venv=True, tags=["update"])
|
|
def update_proj(session: nox.Session) -> None:
|
|
"""
|
|
Update the README inplace.
|
|
"""
|
|
session.install_and_run_script(
|
|
"bin/projects.py",
|
|
"docs/data/projects.yml",
|
|
*session.posargs,
|
|
)
|
|
|
|
|
|
@nox.session(default=False, reuse_venv=True, tags=["update"])
|
|
def generate_schema(session: nox.Session) -> None:
|
|
"""
|
|
Generate the cibuildwheel.schema.json file.
|
|
"""
|
|
output = session.install_and_run_script("bin/generate_schema.py", silent=True)
|
|
assert isinstance(output, str)
|
|
DIR.joinpath("cibuildwheel/resources/cibuildwheel.schema.json").write_text(output)
|
|
|
|
|
|
@nox.session(default=False, reuse_venv=True)
|
|
def bump_version(session: nox.Session) -> None:
|
|
"""
|
|
Bump cibuildwheel's version. Interactive.
|
|
"""
|
|
session.install_and_run_script("bin/bump_version.py")
|
|
|
|
|
|
@nox.session(default=False)
|
|
def docs(session: nox.Session) -> None:
|
|
"""
|
|
Build the docs. Will serve unless --non-interactive
|
|
"""
|
|
pyproject = nox.project.load_toml()
|
|
session.install("-e.", *nox.project.dependency_groups(pyproject, "docs"))
|
|
session.run("mkdocs", "serve" if session.interactive else "build", "--strict", *session.posargs)
|
|
|
|
|
|
@nox.session(default=False)
|
|
def build(session: nox.Session) -> None:
|
|
"""
|
|
Build an SDist and wheel.
|
|
"""
|
|
|
|
build_p = DIR.joinpath("build")
|
|
if build_p.exists():
|
|
shutil.rmtree(build_p)
|
|
|
|
dist_p = DIR.joinpath("dist")
|
|
if dist_p.exists():
|
|
shutil.rmtree(dist_p)
|
|
|
|
session.install("build")
|
|
session.run("python", "-m", "build")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
nox.main()
|