Skip to content

Commit 2caa38d

Browse files
authored
chore: modernize noxfile (#623)
Modernize noxfile and docs job. Signed-off-by: Henry Schreiner <[email protected]>
1 parent 55fe65c commit 2caa38d

File tree

2 files changed

+41
-19
lines changed

2 files changed

+41
-19
lines changed

docs/conf.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88

99
# Warning: do not change the path here. To use autodoc, you need to install the
1010
# package first.
11-
from pkg_resources import get_distribution
11+
import importlib.metadata
1212

1313
# -- Project information -----------------------------------------------------
1414

1515
project = "Hist"
1616
copyright = "2020, Henry Schreiner"
1717
author = "Henry Schreiner and Nino Lau"
18-
version = get_distribution("hist").version
18+
version = importlib.metadata.version("hist")
1919

2020

2121
# -- General configuration ---------------------------------------------------

noxfile.py

100644100755
Lines changed: 39 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
#!/usr/bin/env -S uv run -q
2+
# /// script
3+
# dependencies = ["nox>=2025.2.9"]
4+
# ///
5+
16
from __future__ import annotations
27

38
import argparse
@@ -7,8 +12,7 @@
712

813
import nox
914

10-
nox.needs_version = ">=2024.3.2"
11-
nox.options.sessions = ["lint", "tests"]
15+
nox.needs_version = ">=2025.2.9"
1216
nox.options.default_venv_backend = "uv|virtualenv"
1317

1418
DIR = Path(__file__).parent.resolve()
@@ -44,7 +48,7 @@ def tests(session):
4448
session.run("pytest", *args, *session.posargs)
4549

4650

47-
@nox.session(venv_backend="uv")
51+
@nox.session(venv_backend="uv", default=False)
4852
def minimums(session):
4953
"""
5054
Run with the minimum dependencies.
@@ -54,7 +58,7 @@ def minimums(session):
5458
session.run("pytest", *session.posargs)
5559

5660

57-
@nox.session
61+
@nox.session(default=False)
5862
def regenerate(session):
5963
"""
6064
Regenerate MPL images.
@@ -67,26 +71,40 @@ def regenerate(session):
6771
session.run("pytest", "--mpl-generate-path=tests/baseline", *session.posargs)
6872

6973

70-
@nox.session(reuse_venv=True)
74+
@nox.session(reuse_venv=True, default=False)
7175
def docs(session: nox.Session) -> None:
7276
"""
73-
Build the docs. Pass "--serve" to serve.
77+
Build the docs. Use "--non-interactive" to avoid serving. Pass "-b linkcheck" to check links.
7478
"""
7579

7680
parser = argparse.ArgumentParser()
77-
parser.add_argument("--serve", action="store_true", help="Serve after building")
78-
args = parser.parse_args(session.posargs)
81+
parser.add_argument(
82+
"-b", dest="builder", default="html", help="Build target (default: html)"
83+
)
84+
args, posargs = parser.parse_known_args(session.posargs)
85+
86+
serve = args.builder == "html" and session.interactive
87+
extra_installs = ["sphinx-autobuild"] if serve else []
88+
session.install("-e.[docs]", *extra_installs)
7989

80-
session.install("-e", ".[docs]")
8190
session.chdir("docs")
82-
session.run("sphinx-build", "-M", "html", ".", "_build")
8391

84-
if args.serve:
85-
print("Launching docs at http://localhost:8000/ - use Ctrl-C to quit")
86-
session.run("python", "-m", "http.server", "8000", "-d", "_build/html")
92+
shared_args = (
93+
"-n", # nitpicky mode
94+
"-T", # full tracebacks
95+
f"-b={args.builder}",
96+
".",
97+
f"_build/{args.builder}",
98+
*posargs,
99+
)
87100

101+
if serve:
102+
session.run("sphinx-autobuild", "--open-browser", *shared_args)
103+
else:
104+
session.run("sphinx-build", "--keep-going", *shared_args)
88105

89-
@nox.session(reuse_venv=True)
106+
107+
@nox.session(reuse_venv=True, default=False)
90108
def build_api_docs(session: nox.Session) -> None:
91109
"""
92110
Build (regenerate) API docs.
@@ -105,18 +123,18 @@ def build_api_docs(session: nox.Session) -> None:
105123
)
106124

107125

108-
@nox.session(reuse_venv=True)
126+
@nox.session(reuse_venv=True, default=False)
109127
def build(session):
110128
"""
111129
Build an SDist and wheel.
112130
"""
113131

114132
args = [] if shutil.which("uv") else ["uv"]
115-
session.install("build==1.2.0", *args)
133+
session.install("build", *args)
116134
session.run("python", "-m", "build", "--installer=uv")
117135

118136

119-
@nox.session()
137+
@nox.session(default=False)
120138
def boost(session):
121139
"""
122140
Build against latest boost-histogram.
@@ -139,3 +157,7 @@ def boost(session):
139157
session.install("-e.[test,plot]", "pip")
140158
session.run("pip", "list")
141159
session.run("pytest", *session.posargs)
160+
161+
162+
if __name__ == "__main__":
163+
nox.main()

0 commit comments

Comments
 (0)