forked from copier-org/copier
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdevtasks.py
86 lines (78 loc) · 2.41 KB
/
devtasks.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
"""Development helper tasks."""
import logging
import shutil
from pathlib import Path
from plumbum import TEE, CommandNotFound, ProcessExecutionError, local
_logger = logging.getLogger(__name__)
HERE = Path(__file__).parent
def clean():
"""Clean build, test or other process artifacts from the project workspace."""
build_artefacts = (
"build/",
"dist/",
"*.egg-info",
"pip-wheel-metadata",
)
python_artefacts = (
".pytest_cache",
"htmlcov",
".coverage",
"**/__pycache__",
"**/*.pyc",
"**/*.pyo",
)
project_dir = Path(".").resolve()
for pattern in build_artefacts + python_artefacts:
for matching_path in project_dir.glob(pattern):
print(f"Deleting {matching_path}")
if matching_path.is_dir():
shutil.rmtree(matching_path)
else:
matching_path.unlink()
def dev_setup():
"""Set up a development environment."""
with local.cwd(HERE):
local["direnv"]("allow")
local["poetry"]("install")
def lint(recycle_container=False):
"""Lint and format the project."""
args = [
"--extra-experimental-features",
"nix-command flakes",
"--accept-flake-config",
"develop",
"--impure",
HERE,
"--command",
"pre-commit",
"run",
"--color=always",
"--all-files",
]
try:
local["nix"].with_cwd(HERE)[args] & TEE
except CommandNotFound:
_logger.warn("Nix not found; fallback to a container")
runner = local.get("podman", "docker")
try:
(
runner[
"container",
"create",
"--name=copier-lint-v1",
f"--volume={HERE}:{HERE}:rw,z",
f"--workdir={HERE}",
"docker.io/nixos/nix",
"nix",
args,
]
& TEE
)
except ProcessExecutionError:
_logger.info(
"Couldn't create copier-lint-v1 container, probably because a previous one exists. "
"Remove it if you want to recycle it. Otherwise, this is OK."
)
runner["container", "start", "--attach", "copier-lint-v1"] & TEE
except ProcessExecutionError as error:
raise SystemExit(error.errno)