Pin pip tooling version in CI
Merged
DT
1d ago+16+16+01234567890123456789-1-1-0123456789
Installs pip from a hash-pinned bootstrap file (.github/pip-bootstrap.txt, pip 26.2.2, --require-hashes and --only-binary=:all:) before the first pip command in:
ci.ymlPython bindings job (beforepip install maturin)release.ymlwheel build job on non-Linux runners (Linux builds run inside the maturin container)release.ymlPyPI dry-run check, which previously usedpipx run twine check: it now sets up Python, bootstraps pip, installs twine and runspython -m twine check
The wheel test jobs install with --no-index from local artifacts and make no network requests, so they are unchanged.
Verified in a python:3.13-slim container: the bootstrap file yields pip 26.2.2 and python -m twine --version runs afterwards. No image or deployment is affected; the change takes effect on the next workflow run.
Summary by cubic
Pins CI pip to a hash-verified bootstrap file (.github/pip-bootstrap.txt, pip 26.2.2 with --require-hashes and --only-binary=:all:) so every pip invocation runs on a known-good version.
- Bootstraps pip before
pip install maturinin the CI Python bindings job. - Bootstraps pip on non-Linux release wheel build runners; Linux builds run inside the maturin container and are unaffected.
- The PyPI dry-run check now bootstraps pip, installs twine, and runs
python -m twine checkinstead ofpipx run twine check, gaining checkout and Python setup steps for manual runs. - Wheel test jobs stay unchanged because they install from local artifacts with
--no-indexand make no network requests.