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
|
PROJECT_NAME = django_project
# define docker related variables
DOCKER_COMPOSE_FILES ?= -f docker-compose.yml
DOCKER_COMPOSE ?= $(ENV)/bin/docker-compose
IMAGE_NAME ?= isitdeployable
IMAGE_TAG ?= $(shell bzr version-info --custom --template={branch_nick}-{revno})
UID := $(shell id -u)
GID := $(shell id -g)
# export variables so docker-compose will pick it up from the env
export UID GID IMAGE_NAME IMAGE_TAG
# pre-process arguments
# if the first argument is "special" (docker-compose, docker-test)...
ifneq (,$(filter $(firstword $(MAKECMDGOALS)),docker-compose docker-test))
# use the rest as sub-arguments
ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
# ...and turn them into do-nothing targets
$(eval $(ARGS):;@:)
endif
docker-bootstrap: $(ENV) fetch-sourcedeps
$(ENV)/bin/pip install --find-links=$(WHEELS_DIR) --no-index -r requirements-docker.txt
docker-build: version ## Build images
$(MAKE) docker-compose ARGS="build"
docker-run: ## Run stack in foreground
DOCKER_COMPOSE_FILES="$(DOCKER_COMPOSE_FILES) -f docker-compose.secrets.yml" $(MAKE) docker-compose ARGS="up"
docker-start: ## Run stack in background
DOCKER_COMPOSE_FILES="$(DOCKER_COMPOSE_FILES) -f docker-compose.secrets.yml" $(MAKE) docker-compose ARGS="up -d"
docker-stop: ## Stop containers
DOCKER_COMPOSE_FILES="$(DOCKER_COMPOSE_FILES) -f docker-compose.secrets.yml" $(MAKE) docker-compose ARGS="down"
docker-clean: docker-stop ## Remove images
docker rmi $(IMAGE_TAG)
docker-compose: $(ENV)
$(DOCKER_COMPOSE) $(DOCKER_COMPOSE_FILES) $(ARGS)
docker-build-test: ## Build image for running tests
sed -e 's/{{IMAGE_NAME}}/$(IMAGE_NAME)/g' -e 's/{{IMAGE_TAG}}/$(IMAGE_TAG)/g' Dockerfile.test > Dockerfile.test.$(IMAGE_TAG)
docker build -f Dockerfile.test.$(IMAGE_TAG) -t $(IMAGE_NAME):$(IMAGE_TAG)-test .
docker-test: docker-build-test ## Run tests using containers
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="up -d"
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="run app make app-update-db"
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="run app make test $(ARGS)"
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="down"
DOCKER_COMPOSE_FILES='-f docker-compose.yml -f docker-compose.test.yml' $(MAKE) docker-compose ARGS="rm --force"
docker rmi $(IMAGE_NAME):$(IMAGE_TAG)-test
docker-loaddata:
$(MAKE) docker-compose ARGS="run --rm app make manage ARGS='loaddata fixtures/group.json' PYTHON=python"
### targets for in-container use
app-update-db: DB_USER=$(shell echo $(DATABASE_URL) | cut -d ':' -f 2 | cut -d '@' -f 1 | sed -e 's|//||')
app-update-db: export DATABASE_URL=$(ADMIN_DATABASE_URL)
app-update-db:
$(MAKE) manage ARGS='migrate --noinput' PYTHON=python
$(MAKE) manage ARGS='grantuser $(DB_USER)' PYTHON=python
app-start: BIND = 0.0.0.0:8000
app-start: WORKERS ?= 3
app-start: PYTHON = python
app-start: collectstatic
talisker --workers=$(WORKERS) --bind=$(BIND) $(PROJECT_NAME).wsgi:application
worker:
python $(PROJECT_NAME)/celeryapp.py worker &
python $(PROJECT_NAME)/celeryapp.py beat
|