forked from djangopackages/djangopackages
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjustfile
300 lines (235 loc) · 7.44 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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
set dotenv-load := false
alias pip-compile := lock
DATABASE_URL := env_var_or_default('DATABASE_URL', 'postgres://djangopackages:djangopackages@postgres/djangopackages')
@_default:
just --list
# Format the justfile
@fmt:
just --fmt --unstable
# --------------------------------------------------
# script to rule them all recipes - start
# --------------------------------------------------
# Performs initial setup for Docker images and allows Arguments to be passed
bootstrap *ARGS:
#!/usr/bin/env bash
set -euo pipefail
python -m pip install --upgrade pip uv
if [ ! -f ".env.local" ]; then
echo ".env.local created"
cp .env.local.example .env.local
fi
docker compose {{ ARGS }} build --force-rm
# Builds the Docker Images with optional arguments
@build *ARGS:
docker compose {{ ARGS }} build
# Builds the Docker Images with no optional arguments
@cibuild:
just build
# Drop into the console on the docker image
@console:
docker compose run django /bin/bash
# Duplicates the `up` command
@server *ARGS="--detach":
just up {{ ARGS }}
# Perform the initial setup for the Docker containers
@setup:
just bootstrap
# Create a Superuser
@createsuperuser USERNAME EMAIL:
docker compose run django python manage.py createsuperuser \
--username={{ USERNAME }} \
--email={{ EMAIL }}
# Run the tests using the Django test runner
@test *ARGS="--no-input":
docker compose run django python manage.py test {{ ARGS }}
# Once completed, it will run an update of *something*
@update:
echo "TODO: update"
# --------------------------------------------------
# script to rule them all recipes - end
# --------------------------------------------------
# Update the version; Used before release to production
@bump *ARGS:
bumpver update {{ ARGS }}
# --------------------------------------------------
# Caddy recipes
# --------------------------------------------------
# Format our Caddyfile
@caddy-fmt:
docker compose run --rm caddy caddy fmt -overwrite /etc/caddy/Caddyfile
# Is our Caddyfile valid?
@caddy-validate:
docker compose run --rm caddy caddy validate -adapter caddyfile -config /etc/caddy/Caddyfile
# --------------------------------------------------
# Docs recipes
# --------------------------------------------------
# @docs:
# cd docs && make docs
@docs-down *ARGS:
docker compose --profile=docs down {{ ARGS }}
@docs-up *ARGS="--detach":
docker compose --profile=docs up {{ ARGS }}
@docs-update *ARGS:
uv --quiet pip compile \
{{ ARGS }} \
docs/requirements.in \
--generate-hashes \
--output-file docs/requirements.txt
# --------------------------------------------------
# Deployment and production recipes
# --------------------------------------------------
# Clear sessions
@clearsessions:
uv --quiet tool run \
--python=3.9 \
--with Fabric3 \
--with rich \
fab production clearsessions
# Deploys to production
@deploy:
uv --quiet tool run \
--python=3.9 \
--with Fabric3 \
--with rich \
fab production deploy
# Purge our CloudFlare cache
@purge_cache:
docker compose run django cli4 --delete purge_everything=true /zones/:djangopackages.org/purge_cache
# --------------------------------------------------
# Docker recipes
# --------------------------------------------------
# Bring down your docker containers
@down *ARGS:
docker compose down {{ ARGS }}
# Allows you to view the output from running containers
@logs *ARGS:
docker compose logs {{ ARGS }}
# Restart all services
@restart *ARGS:
docker compose restart {{ ARGS }}
# Start all services
@start *ARGS="--detach":
docker compose up {{ ARGS }}
@status:
docker compose ps
# Stop all services
@stop:
docker compose down
# Tail service logs
@tail:
just logs --follow
# Bring up your Docker Containers
@up *ARGS:
docker compose up {{ ARGS }}
# --------------------------------------------------
# Django recipes
# --------------------------------------------------
# Run the collectstatic management command
@collectstatic *ARGS="--no-input":
docker compose run django python manage.py collectstatic {{ ARGS }}
# Run the tests with pytest
@pytest *ARGS:
docker compose run django pytest {{ ARGS }}
# Run the tests with pytest and generate coverage reports
@pytest-coverage *ARGS:
docker compose run django pytest \
{{ ARGS }} \
--cov-report html \
--cov-report term:skip-covered \
--cov .
# Run the shell management command
@shell *ARGS:
docker compose run django python manage.py shell {{ ARGS }}
# --------------------------------------------------
# Linter recipes
# --------------------------------------------------
# Check consistency of your env files
@lint:
# TODO: consider bringing these back because they have some value
# -modenv check
# -just lint-codespell
-just pre-commit-all-files
# Fixes common misspellings in text files
@lint-codespell:
codespell --skip *.conf,*.csv,*.js*,./.git,./collected_static,./data,./docs/_*,./htmlcov,./static .
# --------------------------------------------------
@cron:
just management-command import_classifiers
just management-command import_products
just management-command import_releases
just management-command packages_download_stats ./pypi.db
# --------------------------------------------------
# A Linter for performance anti-patterns
@perflint:
uv --quiet tool run \
perflint ../djangopackages-git/ \
--load-plugins=perflint
# Compile new python dependencies
@lock *ARGS:
uv pip compile \
{{ ARGS }} \
requirements.in \
--generate-hashes \
--output-file requirements.txt
uv pip compile \
{{ ARGS }} \
docs/requirements.in \
--generate-hashes \
--output-file docs/requirements.txt
# Run pre-commit
@pre-commit *ARGS:
uv tool run \
--with pre-commit-uv \
pre-commit run {{ ARGS }}
@pre-commit-all-files:
just pre-commit --all-files
# Upgrade existing Python dependencies to their latest versions
@upgrade:
just lock --upgrade
# Run a management command as specified by ARGS
@management-command ARGS:
docker compose run --rm django python manage.py {{ ARGS }}
# Remove current application services
@remove:
...
# --------------------------------------------------
# Tailwind CSS recipes
# --------------------------------------------------
@tailwind *ARGS:
npx tailwindcss \
--config ./static/js/tailwind.config.js \
--input ./static/css/tailwindcss.css \
--output ./static/css/tailwindcss.min.css \
{{ ARGS }}
@tailwind-build:
just tailwind build
@tailwind-lint:
npx rustywind --check-formatted templates/
# npx rustywind --write templates/
@tailwind-watch:
just tailwind-build
just tailwind --watch
# dump database to file
@pg_dump file='db.dump':
docker compose run \
--no-deps \
--rm \
postgres \
pg_dump \
--dbname "{{ DATABASE_URL }}" \
--file /code/{{ file }} \
--format=c \
--verbose
# restore database dump from file
@pg_restore file='db.dump':
docker compose run \
--no-deps \
--rm \
postgres \
pg_restore \
--clean \
--dbname "{{ DATABASE_URL }}" \
--if-exists \
--no-owner \
--verbose \
/code/{{ file }}