-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMakefile
144 lines (105 loc) · 4.41 KB
/
Makefile
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
.DEFAULT_GOAL := help
# Docker settings
DOCKER_COMPOSE_YAML = docker-compose.local.yml
APP_SERVICE = django
# Docker commands
dc = docker-compose -f $(DOCKER_COMPOSE_YAML)
run = $(dc) run --rm $(APP_SERVICE)
manage = python manage.py
pytest = $(run) pytest --timeout=5 --cov --cov-fail-under=90 $(ARGS)
.PHONY: help
help: ## Show this help.
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-16s\033[0m %s\n", $$1, $$2}'
.PHONY: clean-coverage
clean-coverage: ## Remove coverage reports
@echo "+ $@"
@rm -rf htmlcov/
@rm -rf .coverage
@rm -rf coverage.xml
.PHONY: clean-pytest
clean-pytest: ## Remove pytest cache
@echo "+ $@"
@rm -rf .pytest_cache/
.PHONY: clean-docs-build
clean-docs-build: ## Remove local docs
@echo "+ $@"
@rm -rf docs/_build
.PHONY: clean-build
clean-build: ## Remove build artifacts
@echo "+ $@"
@rm -fr build/
@rm -fr dist/
@rm -fr *.egg-info
.PHONY: clean-pyc
clean-pyc: ## Remove Python file artifacts
@echo "+ $@"
@find . -type d -name '__pycache__' -exec rm -rf {} +
@find . -type f -name '*.py[co]' -exec rm -f {} +
@find . -name '*~' -exec rm -f {} +
clean-docker: ## Clean Docker stuff
$(dc) down
.PHONY: clean ## Remove all file artifacts
clean: clean-build clean-pyc clean-coverage clean-pytest clean-docs-build clean-docker
install: ## Install dev dependencies in local environment
pip install --upgrade pip
pip install -r requirements/local.txt
showmigrations: ## Show migrations
$(manage) showmigrations
migrations: ## Make migrations with ARGS=appname
$(manage) makemigrations $(ARGS)
migrate: ## Migrate
$(manage) migrate
collectstatic: ## Collect static files
$(manage) collectstatic --noinput
.PHONY: urls
urls: ## Show URL endpoints
$(manage) show_urls
superuser: ## Create a superuser (user with admin rights)
$(manage) createsuperuser
logs: ## Tail container logs
$(dc) logs -f
run: ## Run Docker environment (reloads env vars)
$(dc) up --build --remove-orphans -d
run-debug: ## Run Docker environment with attachable debugger
DJANGO_DEBUG=True $(dc) up --build --remove-orphans -d
stop: ## Stop Docker environment
$(dc) stop
restart: ## Restart Docker environment
$(dc) restart
build: ## Build Docker images
$(dc) build
build-no-cache: ## Build Docker image with ARGS="container_name"
$(dc) build $(ARGS) --no-cache
status: ## Show container status
$(dc) ps
bash: ## Run a terminal shell command with ARGS="some command"
$(run) $(ARGS)
manage: ## Run a manage.py command with ARGS="some command"
$(manage) $(ARGS)
shell: ## Run a Django IDE shell in the app container
$(manage) shell
shell-plus: ## Run a Django IDE shell_plus in the app container
$(manage) shell_plus
dbshell: ## Run a psql shell in the app container
$(manage) dbshell
backup-db: ## Backup database
$(dc) run --rm postgres /usr/local/bin/backup
restore-db: ## Restore database with ARGS="backup_file.sql.gz"
$(dc) run --rm postgres /usr/local/bin/restore $(ARGS)
clearsessions: ## Clear database connections
$(manage) clearsessions
.PHONY: test
test: ## Run fast backend unit tests
$(pytest) -m "not slow"
test-all: ## Run all backend unit tests
$(pytest)
# Run all unit tests but stop on first error and drop into pdf to debug
pdb: ## Run all unit tests
$(pytest) -x --pdb
# Run all unit tests (report to terminal) with a coverage report
test-cov-term: ## Run all unit tests with a report (terminal)
$(pytest) --cov --cov-report term
test-cov-html: ## Run all unit tests with a report (html)
$(pytest) --cov --cov-report html
generate-secret: ## Generate a secret and print to terminal
$(manage) shell -c "from django.core.management import utils; print(utils.get_random_secret_key())"