2323PACKAGE_NAME: str = "{{cookiecutter.package_name}}"
2424
2525
26+ @nox.session(python=DEFAULT_PYTHON_VERSION, name="pre-commit")
27+ def pre_commit(session: Session) -> None:
28+ """Run pre-commit checks."""
29+ session.log("Installing pre-commit dependencies...")
30+ session.run("uv", "sync", "--locked", "--group", "dev", "pre-commit", external=True)
31+
32+
2633@nox.session(python=DEFAULT_PYTHON_VERSION, name="format-python")
2734def format_python(session: Session) -> None:
2835 """Run Python code formatter (Ruff format)."""
2936 session.log("Installing formatting dependencies...")
30- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", "lint", external=True)
37+ session.run("uv", "sync", "--locked", "--group ", "dev", "lint", external=True)
3138
3239 session.log(f"Running Ruff formatter check with py{session.python}.")
3340 # Use --check, not fix. Fixing is done by pre-commit or manual run.
@@ -38,7 +45,7 @@ def format_python(session: Session) -> None:
3845def lint_python(session: Session) -> None:
3946 """Run Python code linters (Ruff check, Pydocstyle rules)."""
4047 session.log("Installing linting dependencies...")
41- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", "lint", external=True)
48+ session.run("uv", "sync", "--locked", "--group ", "dev", "lint", external=True)
4249
4350 session.log(f"Running Ruff check with py{session.python}.")
4451 session.run("uv", "run", "ruff", "check", "--verbose", external=True)
@@ -48,7 +55,7 @@ def lint_python(session: Session) -> None:
4855def typecheck(session: Session) -> None:
4956 """Run static type checking (Pyright) on Python code."""
5057 session.log("Installing type checking dependencies...")
51- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", "typecheck", external=True)
58+ session.run("uv", "sync", "--locked", "--group ", "dev", "typecheck", external=True)
5259
5360 session.log(f"Running Pyright check with py{session.python}.")
5461 session.run("uv", "run", "pyright", external=True)
@@ -58,7 +65,7 @@ def typecheck(session: Session) -> None:
5865def security_python(session: Session) -> None:
5966 """Run code security checks (Bandit) on Python code."""
6067 session.log("Installing security dependencies...")
61- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", "security", external=True)
68+ session.run("uv", "sync", "--locked", "--group ", "dev", "security", external=True)
6269
6370 session.log(f"Running Bandit static security analysis with py{session.python}.")
6471 session.run("uv", "run", "bandit", "-r", PACKAGE_NAME, "-c", ".bandit", "-ll", "-s", external=True)
@@ -71,7 +78,7 @@ def security_python(session: Session) -> None:
7178def tests_python(session: Session) -> None:
7279 """Run the Python test suite (pytest with coverage)."""
7380 session.log("Installing test dependencies...")
74- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", "test", external=True)
81+ session.run("uv", "sync", "--locked", "--group ", "dev", "test", external=True)
7582
7683 session.log(f"Running test suite with py{session.python}.")
7784 test_results_dir = Path("test-results")
@@ -101,7 +108,7 @@ def tests_rust(session: Session) -> None:
101108def docs_build(session: Session) -> None:
102109 """Build the project documentation (Sphinx)."""
103110 session.log("Installing documentation dependencies...")
104- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", "docs", external=True)
111+ session.run("uv", "sync", "--locked", "--group ", "dev", "docs", external=True)
105112
106113 session.log(f"Building documentation with py{session.python}.")
107114 docs_build_dir = Path("docs") / "_build" / "html"
@@ -118,7 +125,7 @@ def build_python(session: Session) -> None:
118125 """Build sdist and wheel packages (uv build)."""
119126 session.log("Installing build dependencies...")
120127 # Sync core & dev deps are needed for accessing project source code.
121- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", external=True)
128+ session.run("uv", "sync", "--locked", "--group ", "dev", external=True)
122129
123130 session.log(f"Building sdist and wheel packages with py{session.python}.")
124131 {% if cookiecutter.add_rust_extension == 'y' -%}
@@ -154,7 +161,7 @@ def build_container(session: Session) -> None:
154161
155162 current_dir = Path(".")
156163 session.log(f"Ensuring core dependencies are synced in {current_dir.resolve()} for build context...")
157- session.run("uv", "sync", "--locked", "--clean", external=True)
164+ session.run("uv", "sync", "--locked", external=True)
158165
159166 session.log(f"Building Docker image using {container_cli}.")
160167 project_image_name = PACKAGE_NAME.replace("_", "-").lower()
@@ -300,7 +307,7 @@ def coverage(session: Session) -> None:
300307 session.log("Note: Ensure 'nox -s test-python' was run across all desired Python versions first to generate coverage data.")
301308
302309 session.log("Installing dependencies for coverage report session...")
303- session.run("uv", "sync", "--locked", "--clean", "--groups ", "dev", "test", external=True)
310+ session.run("uv", "sync", "--locked", "--group ", "dev", "test", external=True)
304311
305312 coverage_combined_file = Path(".") / ".coverage"
306313
0 commit comments