README
liblaf-nox-recipes keeps noxfile.py sessions small by packaging the uv, pytest, and CUDA glue you would otherwise repeat across repositories.
โจ Features¶
- ๐จ Bootstrap
uv-managed environments in one call:setup_uv()compiles constraints frompyproject.toml, resolves the dependency groups you ask for, syncs the session environment, and installs the current project in editable mode. - ๐ Exercise multiple dependency strategies:
Resolutionexposeshighest,lowest, andlowest-directmodes so you can cover both everyday development and lower-bound compatibility in CI. - ๐งช Keep test sessions short without hiding
pytest:pytest()forwardss.posargs, supports per-session environment variables, and keeps shared flags out of each@nox.session. - โก Run CodSpeed-friendly benchmarks:
pytest_bench()adds the benchmark marker,--codspeed, and single-process defaults when helpers likepytest-xdistare installed. - ๐ฅ๏ธ Skip GPU-only jobs safely:
supports_cuda()andcuda_driver_version()use NVML to decide whether CUDA-specific sessions should run.
๐ฆ Installation¶
[!NOTE]
liblaf-nox-recipesrequires Python 3.12+ and expectsuvto be available anywhere yournoxsessions run.
If you also want uv to create and manage the virtual environments that nox uses, install nox-uv and set nox.options.default_venv_backend = "uv" in your noxfile.py.
๐ Quick Start¶
from typing import Any
import nox
from liblaf import nox_recipes as recipes
from liblaf.nox_recipes import Resolution
nox.options.default_venv_backend = "uv"
nox.options.reuse_existing_virtualenvs = True
PYPROJECT: dict[str, Any] = nox.project.load_toml("pyproject.toml")
PYTHON_VERSIONS: list[str] = nox.project.python_versions(PYPROJECT)
@nox.session(python=PYTHON_VERSIONS, reuse_venv=True, tags=["test"])
@nox.parametrize(
"resolution",
[
nox.param(Resolution.HIGHEST, id="highest"),
nox.param(Resolution.LOWEST_DIRECT, id="lowest-direct"),
],
)
def test(s: nox.Session, resolution: Resolution) -> None:
recipes.setup_uv(s, groups=["test"], resolution=resolution)
recipes.pytest(s, suppress_no_test_exit_code=True)
Start with setup_uv() for the common case. When you need finer control, drop down to uv_pip_compile(), uv_pip_sync(), and uv_pip_install() directly. For GPU-only jobs, guard the session with supports_cuda() before doing any CUDA-dependent work.
โจ๏ธ Local Development¶
git clone https://github.com/liblaf/nox-recipes.git
cd nox-recipes
mise run install
nox
mise run docs:serve
nox executes the test-tagged matrix from noxfile.py, and mise run docs:serve rebuilds the docs site that also embeds this README.
๐ค Contributing¶
Focused issues and pull requests are welcome. Please run nox before opening a PR, and rebuild the docs with mise run docs:serve when you change documentation or public APIs.
