-
Notifications
You must be signed in to change notification settings - Fork 12
/
noxfile.py
96 lines (74 loc) · 2.56 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
import pathlib
import shutil
import nox
PYTHON_VERSION = "3.12"
ROOT = pathlib.Path(__file__).parent
@nox.session(python=PYTHON_VERSION, venv_backend="conda")
def test(session: nox.Session) -> None:
"""Run the tests."""
session.install("-e", ".[testing]")
session.run("pytest", "-vvv")
@nox.session(name="test-cli", python=PYTHON_VERSION, venv_backend="conda")
def test_cli(session: nox.Session) -> None:
"""Test the command line interface."""
session.install(".")
session.run("gflex", "--help")
session.run("gflex", "--version")
@nox.session
def lint(session: nox.Session) -> None:
"""Look for lint."""
session.install("pre-commit")
session.run("pre-commit", "run", "--all-files")
@nox.session
def build(session: nox.Session) -> None:
"""Build sdist and wheel dists."""
session.install("pip")
session.install("build")
session.run("python", "--version")
session.run("pip", "--version")
session.run("python", "-m", "build", "--outdir", "./build/wheelhouse")
@nox.session(name="publish-testpypi")
def publish_testpypi(session):
"""Publish wheelhouse/* to TestPyPI."""
session.run("twine", "check", "build/wheelhouse/*")
session.run(
"twine",
"upload",
"--skip-existing",
"--repository-url",
"https://test.pypi.org/legacy/",
"build/wheelhouse/*.tar.gz",
)
@nox.session(name="publish-pypi")
def publish_pypi(session):
"""Publish wheelhouse/* to PyPI."""
session.run("twine", "check", "build/wheelhouse/*")
session.run(
"twine",
"upload",
"--skip-existing",
"build/wheelhouse/*.tar.gz",
)
@nox.session(python=False)
def clean(session):
"""Remove all .venv's, build files and caches in the directory."""
for folder in _args_to_folders(session.posargs):
with session.chdir(folder):
shutil.rmtree("build", ignore_errors=True)
shutil.rmtree("build/wheelhouse", ignore_errors=True)
shutil.rmtree("gflex.egg-info", ignore_errors=True)
shutil.rmtree(".pytest_cache", ignore_errors=True)
shutil.rmtree(".venv", ignore_errors=True)
for pattern in ["*.py[co]", "__pycache__"]:
_clean_rglob(pattern)
def _args_to_folders(args):
return [ROOT] if not args else [pathlib.Path(f) for f in args]
def _clean_rglob(pattern):
nox_dir = pathlib.Path(".nox")
for p in pathlib.Path(".").rglob(pattern):
if nox_dir in p.parents:
continue
if p.is_dir():
p.rmdir()
else:
p.unlink()