summaryrefslogtreecommitdiffstats
path: root/noxfile.py
diff options
context:
space:
mode:
Diffstat (limited to 'noxfile.py')
-rw-r--r--noxfile.py99
1 files changed, 99 insertions, 0 deletions
diff --git a/noxfile.py b/noxfile.py
new file mode 100644
index 0000000..eee4f7b
--- /dev/null
+++ b/noxfile.py
@@ -0,0 +1,99 @@
+"""Development automation
+"""
+import os
+
+import nox
+
+nox.options.sessions = ["lint", "test", "doctest"]
+nox.options.reuse_existing_virtualenvs = True
+
+
+def _install_this_project_with_flit(session, *, extras=None, editable=False):
+ session.install("flit")
+ args = []
+ if extras:
+ args.append("--extras")
+ args.append(",".join(extras))
+ if editable:
+ args.append("--pth-file" if os.name == "nt" else "--symlink")
+
+ session.run("flit", "install", "--deps=production", *args, silent=True)
+
+
+@nox.session(python="3.11")
+def lint(session):
+ session.install("pre-commit")
+
+ if session.posargs:
+ args = session.posargs
+ elif "CI" in os.environ:
+ args = ["--show-diff-on-failure"]
+ else:
+ args = []
+
+ session.run("pre-commit", "run", "--all-files", *args)
+
+
+@nox.session(python=["3.7", "3.8", "3.9", "3.10", "3.11", "pypy3"])
+def test(session):
+ _install_this_project_with_flit(session, editable=True)
+ session.install("-r", "tests/requirements.txt")
+
+ htmlcov_output = os.path.join(session.virtualenv.location, "htmlcov")
+
+ session.run(
+ "pytest",
+ "--cov=installer",
+ "--cov-fail-under=100",
+ "--cov-report=term-missing",
+ f"--cov-report=html:{htmlcov_output}",
+ "--cov-context=test",
+ "-n",
+ "auto",
+ *session.posargs,
+ )
+
+
+@nox.session(python=["3.7", "3.8", "3.9", "3.10", "3.11", "pypy3"])
+def doctest(session):
+ session.install(".")
+ session.install("-r", "docs/requirements.txt")
+
+ session.run("sphinx-build", "-b", "doctest", "docs/", "build/doctest")
+
+
+@nox.session(python="3.11", name="update-launchers")
+def update_launchers(session):
+ session.install("httpx")
+ session.run("python", "tools/update_launchers.py")
+
+
+#
+# Documentation
+#
+@nox.session(python="3.11")
+def docs(session):
+ _install_this_project_with_flit(session)
+ session.install("-r", "docs/requirements.txt")
+
+ # Generate documentation into `build/docs`
+ session.run("sphinx-build", "-W", "-b", "html", "docs/", "build/docs")
+
+
+@nox.session(name="docs-live", python="3.11")
+def docs_live(session):
+ _install_this_project_with_flit(session, editable=True)
+ session.install("-r", "docs/requirements.txt")
+ session.install("sphinx-autobuild")
+
+ # fmt: off
+ session.run(
+ "sphinx-autobuild", "docs/", "build/docs",
+ # Rebuild all files when rebuilding
+ "-a",
+ # Trigger rebuilds on code changes (for autodoc)
+ "--watch", "src/installer",
+ # Use a not-common high-numbered port
+ "--port", "8765",
+ )
+ # fmt: on