~roadmr/isitdeployable/revision-disappeared-ohnoes

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