-
Notifications
You must be signed in to change notification settings - Fork 25
/
noxfile.py
131 lines (104 loc) · 3.08 KB
/
noxfile.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from __future__ import annotations
import argparse
import shutil
import sys
from pathlib import Path
import nox
nox.needs_version = ">=2024.3.2"
nox.options.sessions = ["lint", "tests"]
nox.options.default_venv_backend = "uv|virtualenv"
DIR = Path(__file__).parent.resolve()
@nox.session(reuse_venv=True)
def lint(session):
"""
Run the linter.
"""
session.install("pre-commit")
session.run("pre-commit", "run", "--all-files", *session.posargs)
@nox.session
def pylint(session: nox.Session) -> None:
"""
Run pylint.
"""
session.install("pylint~=2.17.0")
session.install("-e.")
session.run("pylint", "hist", *session.posargs)
@nox.session(reuse_venv=True)
def tests(session):
"""
Run the unit and regular tests.
"""
session.install("-e", ".[test,plot]")
args = ["--mpl"] if sys.platform.startswith("linux") else []
session.run("pytest", *args, *session.posargs)
@nox.session
def regenerate(session):
"""
Regenerate MPL images.
"""
session.install("-e", ".[test,plot]")
if not sys.platform.startswith("linux"):
session.error(
"Must be run from Linux, images will be slightly different on macOS"
)
session.run("pytest", "--mpl-generate-path=tests/baseline", *session.posargs)
@nox.session(reuse_venv=True)
def docs(session: nox.Session) -> None:
"""
Build the docs. Pass "--serve" to serve.
"""
parser = argparse.ArgumentParser()
parser.add_argument("--serve", action="store_true", help="Serve after building")
args = parser.parse_args(session.posargs)
session.install("-e", ".[docs]")
session.chdir("docs")
session.run("sphinx-build", "-M", "html", ".", "_build")
if args.serve:
print("Launching docs at http://localhost:8000/ - use Ctrl-C to quit")
session.run("python", "-m", "http.server", "8000", "-d", "_build/html")
@nox.session(reuse_venv=True)
def build_api_docs(session: nox.Session) -> None:
"""
Build (regenerate) API docs.
"""
session.install("sphinx")
session.chdir("docs")
session.run(
"sphinx-apidoc",
"-o",
"reference/",
"--separate",
"--force",
"--module-first",
"../src/hist",
)
@nox.session(reuse_venv=True)
def build(session):
"""
Build an SDist and wheel.
"""
args = [] if shutil.which("uv") else ["uv"]
session.install("build==1.2.0", *args)
session.run("python", "-m", "build", "--installer=uv")
@nox.session()
def boost(session):
"""
Build against latest boost-histogram.
"""
tmpdir = session.create_tmp()
session.chdir(tmpdir)
# Support running with -r/-R
if not Path("boost-histogram").is_dir():
session.run(
"git",
"clone",
"--recursive",
"https://github.com/scikit-hep/boost-histogram",
external=True,
)
session.chdir("boost-histogram")
session.install(".")
session.chdir(DIR)
session.install("-e.[test,plot]", "pip")
session.run("pip", "list")
session.run("pytest", *session.posargs)