-
Notifications
You must be signed in to change notification settings - Fork 4
/
Makefile
168 lines (136 loc) · 4.75 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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# Project configuration.
PROJECT_NAME = api
# Makefile parameters.
RUN ?= local
SUFFIX ?=
TAG ?= $(shell git describe)$(SUFFIX)
# General.
SHELL = /bin/bash
TOPDIR = $(shell git rev-parse --show-toplevel)
# Docker.
DOCKERFILE = Dockerfile$(SUFFIX)
DOCKER_ORG = requestyoracks
DOCKER_REPO = $(DOCKER_ORG)/$(PROJECT_NAME)
DOCKER_IMG = $(DOCKER_REPO):$(TAG)
# Chart.
CHART_REPO = ${RYR_PROJECT_DIR}/charts/charts
CHART_NAME = $(CHART_REPO)/$(PROJECT_NAME)
# Run commands.
DOCKER_RUN_CMD = docker run --rm -t -v=$$(pwd):/code $(DOCKER_IMG)
VENV_BIN = venv/bin
LOCAL_RUN_CMD = source $(VENV_BIN)/activate &&
# Determine whether running the command in a container or locally.
ifeq ($(RUN),docker)
RUN_CMD = $(DOCKER_RUN_CMD)
else
RUN_CMD = $(LOCAL_RUN_CMD)
endif
default: setup
help: # Display help
@awk -F ':|##' \
'/^[^\t].+?:.*?##/ {\
printf "\033[36m%-30s\033[0m %s\n", $$1, $$NF \
}' $(MAKEFILE_LIST) | sort
.PHONY: build-docker
build-docker: ## Build the docker image
@docker build -t $(DOCKER_IMG) -f $(DOCKERFILE) .
.PHONY: ci
ci: ci-format ci-linters ci-tests ci-docs ## Run all CI targets at once
.PHONY: ci-docs
ci-docs: ## Ensure the documentation builds
$(RUN_CMD) tox -e docs
.PHONY: ci-format
ci-format: ## Check the code formatting using YAPF
$(RUN_CMD) tox -e format-check
.PHONY: ci-linters
ci-linters: ## Run the static analyzers
$(RUN_CMD) tox -e flake8,pydocstyle,pylint
.PHONY: ci-tests
ci-tests: ## Run the unit tests
$(RUN_CMD) tox
.PHONY: clean
clean: clean-repo clean-minikube clean-docker ## Clean everything (!DESTRUCTIVE!)
.PHONY: clean-docker
clean-docker: ## Remove all docker artifacts for this project (!DESTRUCTIVE!)
@docker image rm -f $(shell docker image ls --filter reference='$(DOCKER_REPO)' -q) || true
.PHONY: clean-minikube
clean-minikube: ## Remove all the Kubernetes objects associated to this project (!DESTRUCTIVE!)
@helm --kube-context minikube delete --purge $(PROJECT_NAME) || true
.PHONY: clean-repo
clean-repo: ## Remove unwanted files in project (!DESTRUCTIVE!)
@cd $(TOPDIR) && git clean -ffdx && git reset --hard
.PHONY: deploy-minikube-api
deploy-minikube-api: ## Deploy the API on Minikube
cd charts \
&& helm upgrade $(PROJECT_NAME) $(CHART_NAME) \
--kube-context minikube \
--install \
-f values.common.yaml \
-f values.minikube.yaml \
--set image.tag=$(TAG)
.PHONY: deploy-minikube-celery-worker
deploy-minikube-celery-worker: ## Deploy the API on Minikube
cd charts/celery-worker \
&& helm upgrade celery-worker $(CHART_REPO)/celery-worker \
--kube-context minikube \
--install \
-f values.common.yaml \
-f values.minikube.yaml \
--set image.tag=$(TAG)
.PHONY: deploy-minikube-flower
deploy-minikube-flower: ## Deploy Flower on Minikiube
helm upgrade flower ryr/flower \
--kube-context minikube \
--install \
--version 0.1.0
.PHONY: deploy-prod-api
deploy-prod-api: ## Deploy the API in production
cd charts \
&& helm upgrade $(PROJECT_NAME) $(CHART_NAME) \
--kube-context gke_request-yo-racks-1499134244211_us-central1-a_ryr-prod \
--install \
--version 0.2.5 \
-f values.common.yaml \
-f values.prod.yaml \
--set image.tag=$(TAG)
.PHONY: dist
dist: wheel ## Package the application
.PHONY: docs
docs: ## Build documentation
$(RUN_CMD) tox -e docs
.PHONY: format
format: ## Format the codebase using YAPF
$(RUN_CMD) tox -e format
.PHONY: local-envvars
local-envvars: ## Setup Django environment variables for this project
@bash tools/kubernetes-local-env-vars.sh
.PHONY: local-celery-worker
local-celery-worker: ## Start a local celery worker
source $(HOME)/.config/ryr/ryr-env.sh \
&& export RYR_LOG_LEVEL=info \
&& eval $$(tools/kubernetes-local-env-vars.sh) \
&& $(LOCAL_RUN_CMD) docker/docker-entrypoint.sh celery worker
.PHONY: local-api
local-api: ## Run connexion locally
source $(HOME)/.config/ryr/ryr-env.sh \
&& export CONNEXION_SETTINGS_MODULE=api.settings.local \
&& export RYR_API_API_OPTS="--reload --timeout 1800" \
&& export RYR_LOG_LEVEL=info \
&& eval $$(tools/kubernetes-local-env-vars.sh) \
&& $(LOCAL_RUN_CMD) docker/docker-entrypoint.sh api
.PHONY: setup
setup: venv build-docker ## Setup the full environment (default)
venv: venv/bin/activate ## Setup local venv
echo "[ -f $(VENV_BIN)/postactivate ] && . $(VENV_BIN)/postactivate" >> $(VENV_BIN)/activate
echo "export PYTHONBREAKPOINT=bpdb.set_trace" > $(VENV_BIN)/postactivate
echo "unset PYTHONBREAKPOINT" > $(VENV_BIN)/predeactivate
venv/bin/activate: requirements.txt
test -d venv || python3 -m venv venv || virtualenv --no-setuptools --no-wheel -p python3 venv
. venv/bin/activate \
&& pip install --upgrade pip setuptools \
&& pip install -U -r requirements.txt \
&& pip install -r requirements-dev.txt \
&& pip install -e .
.PHONY: wheel
wheel: ## Build a wheel package
$(RUN_CMD) tox -e wheel