|
| 1 | +from pathlib import Path |
| 2 | + |
| 3 | +import nox |
| 4 | + |
| 5 | +ROOT = Path(__file__).parent |
| 6 | +DOCS = ROOT / "docs" |
| 7 | +PACKAGE = ROOT / "sphinx_json_schema_spec" |
| 8 | + |
| 9 | + |
| 10 | +nox.options.sessions = [] |
| 11 | + |
| 12 | + |
| 13 | +def session(default=True, **kwargs): |
| 14 | + def _session(fn): |
| 15 | + if default: |
| 16 | + nox.options.sessions.append(kwargs.get("name", fn.__name__)) |
| 17 | + return nox.session(**kwargs)(fn) |
| 18 | + |
| 19 | + return _session |
| 20 | + |
| 21 | + |
| 22 | +@session(python=["3.7", "3.8", "3.9", "3.10", "3.11", "pypy3"]) |
| 23 | +def tests(session): |
| 24 | + session.install("-r", str(ROOT / "test-requirements.txt")) |
| 25 | + session.run("pytest", "--verbosity=3") |
| 26 | + |
| 27 | + |
| 28 | +@session(tags=["build"]) |
| 29 | +def build(session): |
| 30 | + session.install("build") |
| 31 | + tmpdir = session.create_tmp() |
| 32 | + session.run("python", "-m", "build", str(ROOT), "--outdir", tmpdir) |
| 33 | + |
| 34 | + |
| 35 | +@session(tags=["style"]) |
| 36 | +def readme(session): |
| 37 | + session.install("build", "twine") |
| 38 | + tmpdir = session.create_tmp() |
| 39 | + session.run("python", "-m", "build", str(ROOT), "--outdir", tmpdir) |
| 40 | + session.run("python", "-m", "twine", "check", tmpdir + "/*") |
| 41 | + |
| 42 | + |
| 43 | +@session(tags=["style"]) |
| 44 | +def style(session): |
| 45 | + session.install( |
| 46 | + "flake8", |
| 47 | + "flake8-broken-line", |
| 48 | + "flake8-bugbear", |
| 49 | + "flake8-commas", |
| 50 | + "flake8-quotes", |
| 51 | + "flake8-tidy-imports", |
| 52 | + ) |
| 53 | + session.run("python", "-m", "flake8", str(PACKAGE), __file__) |
| 54 | + |
| 55 | + |
| 56 | +@session() |
| 57 | +def typing(session): |
| 58 | + session.install("mypy", "types-docutils", "types-lxml", str(ROOT)) |
| 59 | + session.run("python", "-m", "mypy", str(PACKAGE)) |
| 60 | + |
| 61 | + |
| 62 | +@session(tags=["docs"]) |
| 63 | +@nox.parametrize( |
| 64 | + "builder", |
| 65 | + [ |
| 66 | + nox.param(name, id=name) |
| 67 | + for name in [ |
| 68 | + "dirhtml", |
| 69 | + "doctest", |
| 70 | + "linkcheck", |
| 71 | + "man", |
| 72 | + "spelling", |
| 73 | + ] |
| 74 | + ], |
| 75 | +) |
| 76 | +def docs(session, builder): |
| 77 | + session.install("-r", str(DOCS / "requirements.txt")) |
| 78 | + tmpdir = Path(session.create_tmp()) |
| 79 | + argv = ["-n", "-T", "-W"] |
| 80 | + if builder != "spelling": |
| 81 | + argv += ["-q"] |
| 82 | + session.run( |
| 83 | + "python", |
| 84 | + "-m", |
| 85 | + "sphinx", |
| 86 | + "-b", |
| 87 | + builder, |
| 88 | + str(DOCS), |
| 89 | + str(tmpdir / builder), |
| 90 | + *argv, |
| 91 | + ) |
| 92 | + |
| 93 | + |
| 94 | +@session(tags=["docs", "style"], name="docs(style)") |
| 95 | +def docs_style(session): |
| 96 | + session.install( |
| 97 | + "doc8", |
| 98 | + "pygments", |
| 99 | + "pygments-github-lexers", |
| 100 | + ) |
| 101 | + session.run("python", "-m", "doc8", "--max-line-length", "1000", str(DOCS)) |
0 commit comments