summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Mayer <entroP@gmail.com>2019-11-09 08:36:45 -0800
committerJustin Mayer <entroP@gmail.com>2019-11-09 08:36:45 -0800
commite46b6232546a75b31f5cf3ae8f9aa9a624344915 (patch)
tree89d85ec34ca482d0e25846e0f3e89deb08427ded
parent01eb08c42b543450ee5e0e3de3854526708a6711 (diff)
downloadpelican-e46b6232546a75b31f5cf3ae8f9aa9a624344915.tar.gz
Add initial Invoke tasks.py file
-rw-r--r--tasks.py81
1 files changed, 81 insertions, 0 deletions
diff --git a/tasks.py b/tasks.py
new file mode 100644
index 00000000..7d9ff1d9
--- /dev/null
+++ b/tasks.py
@@ -0,0 +1,81 @@
+import os
+from pathlib import Path
+from shutil import which
+
+from invoke import task
+
+PKG_NAME = "pelican"
+PKG_PATH = Path("pelican")
+ACTIVE_VENV = os.environ.get("VIRTUAL_ENV", None)
+VENV_HOME = Path(os.environ.get("WORKON_HOME", "~/virtualenvs"))
+VENV_PATH = Path(ACTIVE_VENV) if ACTIVE_VENV else (VENV_HOME / PKG_NAME)
+VENV = str(VENV_PATH.expanduser())
+
+TOOLS = ["poetry", "pre-commit"]
+POETRY = which("poetry") if which("poetry") else (VENV / Path("bin") / "poetry")
+PRECOMMIT = (
+ which("pre-commit") if which("pre-commit") else (VENV / Path("bin") / "pre-commit")
+)
+
+
+@task
+def tests(c):
+ """Run the test suite"""
+ c.run(f"{VENV}/bin/python -Wd -m unittest discover", pty=True)
+
+
+@task
+def black(c, check=False, diff=False):
+ """Run Black auto-formatter, optionally with --check or --diff"""
+ check_flag, diff_flag = "", ""
+ if check:
+ check_flag = "--check"
+ if diff:
+ diff_flag = "--diff"
+ c.run(f"{VENV}/bin/black {check_flag} {diff_flag} {PKG_PATH} tasks.py")
+
+
+@task
+def isort(c, check=False, diff=False):
+ check_flag, diff_flag = "", ""
+ if check:
+ check_flag = "-c"
+ if diff:
+ diff_flag = "--diff"
+ c.run(
+ f"{VENV}/bin/isort {check_flag} {diff_flag} --recursive {PKG_PATH}/* tasks.py"
+ )
+
+
+@task
+def flake8(c):
+ c.run(f"{VENV}/bin/flake8 {PKG_PATH} tasks.py")
+
+
+@task
+def lint(c):
+ isort(c, check=True)
+ black(c, check=True)
+ flake8(c)
+
+
+@task
+def tools(c):
+ """Install tools in the virtual environment if not already on PATH"""
+ for tool in TOOLS:
+ if not which(tool):
+ c.run(f"{VENV}/bin/pip install {tool}")
+
+
+@task
+def precommit(c):
+ """Install pre-commit hooks to .git/hooks/pre-commit"""
+ c.run(f"{PRECOMMIT} install")
+
+
+@task
+def setup(c):
+ c.run(f"{VENV}/bin/pip install -U pip")
+ tools(c)
+ c.run(f"{POETRY} install")
+ precommit(c)