-
Notifications
You must be signed in to change notification settings - Fork 1
/
justfile
122 lines (84 loc) · 3.67 KB
/
justfile
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
set dotenv-load := true
# just has no idiom for setting a default value for an environment variable
# so we shell out, as we need VIRTUAL_ENV in the justfile environment
export VIRTUAL_ENV := `echo ${VIRTUAL_ENV:-.venv}`
export BIN := VIRTUAL_ENV + if os_family() == "unix" { "/bin" } else { "/Scripts" }
export PIP := BIN + if os_family() == "unix" { "/python -m pip" } else { "/python.exe -m pip" }
# enforce our chosen pip compile flags
export COMPILE := BIN + "/pip-compile --allow-unsafe"
# list available commands
default:
@{{ just_executable() }} --list
# clean up temporary files
clean:
rm -rf .venv
# ensure valid virtualenv
virtualenv:
#!/usr/bin/env bash
set -euo pipefail
# allow users to specify python version in .env
PYTHON_VERSION=${PYTHON_VERSION:-python3.10}
# create venv and upgrade pip
test -d $VIRTUAL_ENV || { $PYTHON_VERSION -m venv $VIRTUAL_ENV && $PIP install --upgrade pip; }
# ensure we have pip-tools so we can run pip-compile
test -e $BIN/pip-compile || $PIP install pip-tools
_compile src dst *args: virtualenv
#!/usr/bin/env bash
set -euo pipefail
# exit if src file is older than dst file (-nt = 'newer than', but we negate with || to avoid error exit code)
test "${FORCE:-}" = "true" -o {{ src }} -nt {{ dst }} || exit 0
{{ COMPILE }} --output-file={{ dst }} {{ src }} {{ args }}
# This project currently has no production dependencies, as it vendors them. See DEVELOPERS.md.
#
# update requirements.prod.txt if requirements.prod.in has changed
#requirements-prod *args:
# {{ just_executable() }} _compile requirements.prod.in requirements.prod.txt {{ args }}
# update requirements.dev.txt if requirements.dev.in has changed
requirements-dev *args: virtualenv
{{ just_executable() }} _compile requirements.dev.in requirements.dev.txt {{ args }}
# ensure prod requirements installed and up to date
#prodenv: requirements-prod
# #!/usr/bin/env bash
# set -euo pipefail
# # exit if .txt file has not changed since we installed them (-nt == "newer than', but we negate with || to avoid error exit code)
# test requirements.prod.txt -nt $VIRTUAL_ENV/.prod || exit 0
#
# $PIP install -r requirements.prod.txt
# touch $VIRTUAL_ENV/.prod
# && dependencies are run after the recipe has run. Needs just>=0.9.9. This is
# a killer feature over Makefiles.
#
# ensure dev requirements installed and up to date
devenv: requirements-dev && install-precommit
#!/usr/bin/env bash
set -euo pipefail
# exit if .txt file has not changed since we installed them (-nt == "newer than', but we negate with || to avoid error exit code)
test requirements.dev.txt -nt $VIRTUAL_ENV/.dev || exit 0
$PIP install -r requirements.dev.txt
touch $VIRTUAL_ENV/.dev
# ensure precommit is installed
install-precommit:
#!/usr/bin/env bash
set -euo pipefail
BASE_DIR=$(git rev-parse --show-toplevel)
test -f $BASE_DIR/.git/hooks/pre-commit || $BIN/pre-commit install
# upgrade dev or prod dependencies (specify package to upgrade single package, all by default)
upgrade env package="": virtualenv
#!/usr/bin/env bash
set -euo pipefail
opts="--upgrade"
test -z "{{ package }}" || opts="--upgrade-package {{ package }}"
FORCE=true {{ just_executable() }} requirements-{{ env }} $opts
test *args: devenv
$BIN/coverage run --module pytest {{ args }}
$BIN/coverage report || $BIN/coverage html
black *args=".": devenv
$BIN/black --check {{ args }}
ruff *args=".": devenv
$BIN/ruff check {{ args }}
# run the various dev checks but does not change any files
check: black ruff
# fix formatting and import sort ordering
fix: devenv
$BIN/black .
$BIN/ruff --fix .