The default Python pipeline in 2026
The Python ecosystem in 2026 looks different from five years ago. uv (Astral) replaces pip + virtualenv for most workflows. ruff replaces flake8/isort/black. pyright or mypy for types. pytest remains the standard test runner. pyproject.toml centralizes config.
The default Python CI shape:
- Checkout.
- Install
uv(fast, single binary). uv sync— install deps frompyproject.toml+ lockfile.ruff check+ruff format --check— lint and format gate.mypyorpyright— type-check.pytest— run tests with coverage.
Pinning matters more than convenience
Always pin Python: python-version: '3.12', not '3.x' or blank. Pin uv too: astral-sh/setup-uv@v3 with a specific version. CI that drifts when an underlying tool ships a new release is CI you cannot trust on a Friday afternoon.