forked from bcgov/talent-cloud
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
240 lines (177 loc) · 10.3 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
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
# Makefile
# Run in the bash context and not /bin/sh (default)
SHELL := /bin/bash
# Environment variables for project
export $(sed 's/=.*//' .env)
ENV := $(PWD)/.env
include $(ENV)
# Project
export PROJECT := tc
export CONTAINER_REGISTRY := ""
# Openshift
export APP_NAME:=tcloud
export OS_NAMESPACE_PREFIX:=cd4869
export OS_NAMESPACE_SUFFIX?=dev
export TARGET_NAMESPACE=$(OS_NAMESPACE_PREFIX)-$(OS_NAMESPACE_SUFFIX)
export TOOLS_NAMESPACE=$(OS_NAMESPACE_PREFIX)-tools
export KEYCLOAK_AUTH_DEV=https://dev.loginproxy.gov.bc.ca/auth
export KEYCLOAK_AUTH_TEST=https://test.loginproxy.gov.bc.ca/auth
export KEYCLOAK_AUTH_PROD=https://loginproxy.gov.bc.ca/auth
export KEYCLOAK_AUTH=$(KEYCLOAK_AUTH_TEST)
export SERVER_POD:=$(shell oc get pods -o custom-columns=POD:.metadata.name --no-headers -l name=tcloud-server | head -n 1)
# Git
export COMMIT_SHA:=$(shell git rev-parse --short=7 HEAD)
export LAST_COMMIT_MESSAGE:=$(shell git log -1 --oneline --decorate=full --no-color --format="%h, %cn, %f, %D" | sed 's/->/:/')
export GIT_LOCAL_BRANCH?=$(shell git rev-parse --abbrev-ref HEAD)
export GIT_LOCAL_BRANCH := $(or $(GIT_LOCAL_BRANCH),dev)
build-test:
@echo "+\n++ Make: Running test build ...\n+"
@$(shell echo ./scripts/setenv.sh local ci )
@docker-compose -f docker-compose.ci.yml up --force-recreate -d --build
test-backend-pipeline:
@docker exec tc-backend-ci npm run test:pipeline
test-frontend-pipeline:
@docker exec tc-frontend-ci npm run test:pipeline
run-db:
@docker-compose up -d db
build-local:
@echo "+\n++ Make: Run/Build locally ...\n+"
@$(shell echo ./scripts/setenv.sh ci local )
@docker-compose up --force-recreate -d --build
run-local:
@echo "+\n++ Make: Running locally ...\n+"
@$(shell echo ./scripts/setenv.sh ci local )
@docker-compose up -d
local-frontend-logs:
@docker logs $(PROJECT)-frontend --tail 25 --follow
local-backend-logs:
@docker logs $(PROJECT)-backend --tail 25 --follow
local-nginx-logs:
@docker logs $(PROJECT)-nginx --tail 25 --follow
local-db-logs:
@docker logs db --tail 25 --follow
local-db-workspace:
@docker exec -it $(PROJECT)-db sh
local-backend-workspace:
@docker exec -it $(PROJECT)-backend sh
local-frontend-workspace:
@docker exec -it $(PROJECT)-frontend sh
local-nginx-workspace:
@docker exec -it $(PROJECT)-nginx sh
close:
@echo "+\n++ Make: Run/Close ...\n+"
@docker-compose down -v --remove-orphans
build-prod:
@echo "+\n++ Make: Run/Build production ...\n+"
@docker build --platform linux/amd64 -t $(CONTAINER_REGISTRY)/frontend:latest ./frontend
@docker build --platform linux/amd64 -t $(CONTAINER_REGISTRY)/backend:latest ./backend
push-prod:
@echo "+\n++ Make: Run/Push production ...\n+"
@docker push $(CONTAINER_REGISTRY)/frontend:latest
@docker push $(CONTAINER_REGISTRY)/backend:latest
open-db-tunnel:
@oc project $(TARGET_NAMESPACE)
# Use patroni-0 to make EDIT changes, patroni-1 for READ ONLY
@oc port-forward $(APP_NAME)-patroni-0 5432
### Openshift Setup
db-prep:
@oc process -f openshift/patroni.prep.yml -p APP_NAME=$(APP_NAME) | oc create -n $(TARGET_NAMESPACE) -f -
@oc policy add-role-to-user system:image-puller system:serviceaccount:$(TARGET_NAMESPACE):$(APP_NAME)-patroni -n $(TOOLS_NAMESPACE)
# Will potentially want to run the build in our namespace, but the build config pulled from GitHub doesn't seem to work
# https://github.com/bcgov/patroni-postgres-container/blob/master/openshift/templates/build.yaml
#db-build:
# @oc process -f openshift/patroni.bc.yml | oc create -n ${TOOLS_NAMESPACE} -f -
db-create:
@oc process -f openshift/patroni.dc.yml -p APP_NAME=tcloud | oc apply -n $(TARGET_NAMESPACE) -f -
db-backup-build:
@oc process -f openshift/backup.dc.yml -p APP_NAME=tcloud-backup | oc apply -n $(TARGET_NAMESPACE) -f -
db-backup-create:
@oc process -f openshift/backup.dc.yml -p APP_NAME=tcloud-backup | oc apply -n $(TARGET_NAMESPACE) -f -
networking-prep:
@oc process -f openshift/networking.yml | oc apply -n $(TARGET_NAMESPACE) -f -
deployment-prep:
@oc process -f openshift/server.prep.yml -p APP_NAME=$(APP_NAME) -p KEYCLOAK_AUTH_SERVER=$(KEYCLOAK_AUTH) -p KEYCLOAK_CLIENT=$(KEYCLOAK_CLIENT) -p APP_ENV=$(OS_NAMESPACE_SUFFIX) | oc create -n $(TARGET_NAMESPACE) -f -
@oc policy add-role-to-user system:image-puller system:serviceaccount:$(TARGET_NAMESPACE):default -n $(TOOLS_NAMESPACE)
server-create:
@oc process -f openshift/server.bc.yml -p APP_NAME=$(APP_NAME) | oc apply -n $(TOOLS_NAMESPACE) -f -
@oc process -f openshift/server.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) | oc apply -n $(TARGET_NAMESPACE) -f -
server-config:
@oc -n $(TARGET_NAMESPACE) process -f openshift/server.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) CONFIG_VERSION=$(COMMIT_SHA) | oc apply -n $(TARGET_NAMESPACE) -f -
client-create:
@oc process -f openshift/client.bc.yml -p APP_NAME=$(APP_NAME) | oc apply -n $(TOOLS_NAMESPACE) -f -
@oc process -f openshift/client.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) | oc apply -n $(TARGET_NAMESPACE) -f -
client-config:
@oc -n $(TARGET_NAMESPACE) process -f openshift/client.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) CONFIG_VERSION=$(COMMIT_SHA) | oc apply -n $(TARGET_NAMESPACE) -f -
### Openshift CI
deployment-dry-run:
@oc -n $(TARGET_NAMESPACE) process -f openshift/server.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) CONFIG_VERSION=$(COMMIT_SHA) | oc apply -n $(TARGET_NAMESPACE) -f - --dry-run=client
@oc -n $(TARGET_NAMESPACE) process -f openshift/client.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) CONFIG_VERSION=$(COMMIT_SHA) | oc apply -n $(TARGET_NAMESPACE) -f - --dry-run=client
deployment-update:
@oc -n $(TARGET_NAMESPACE) process -f openshift/server.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) CONFIG_VERSION=$(COMMIT_SHA) | oc apply -n $(TARGET_NAMESPACE) -f -
@oc -n $(TARGET_NAMESPACE) process -f openshift/client.dc.yml -p APP_NAME=$(APP_NAME) IMAGE_NAMESPACE=$(TOOLS_NAMESPACE) IMAGE_TAG=$(OS_NAMESPACE_SUFFIX) CONFIG_VERSION=$(COMMIT_SHA) | oc apply -n $(TARGET_NAMESPACE) -f -
build-config-update-server:
@echo "Processiong and applying Server Building config in $(TOOLS_NAMESPACE) namespace"
@oc -n $(TOOLS_NAMESPACE) process -f openshift/server.bc.yml -p REF=$(BUILD_REF) -p APP_NAME=$(APP_NAME) | oc apply -n $(TOOLS_NAMESPACE) -f -
build-config-update-client:
@echo "Processiong and applying Client Building config in $(TOOLS_NAMESPACE) namespace"
@oc -n $(TOOLS_NAMESPACE) process -f openshift/client.bc.yml -p REF=$(BUILD_REF) -p APP_NAME=$(APP_NAME) | oc apply -n $(TOOLS_NAMESPACE) -f -
deployment-build-server: build-config-update-server
@echo "Building server image in $(TOOLS_NAMESPACE) namespace"
@oc cancel-build bc/$(APP_NAME)-server -n $(TOOLS_NAMESPACE)
@oc start-build $(APP_NAME)-server -n $(TOOLS_NAMESPACE) --wait --follow=true --build-arg VERSION="$(LAST_COMMIT)"
@oc tag $(APP_NAME)-server:latest $(APP_NAME)-server:$(COMMIT_SHA) -n $(TOOLS_NAMESPACE)
deployment-build-client: build-config-update-client
@echo "Building Client image in $(TOOLS_NAMESPACE) namespace"
@oc cancel-build bc/$(APP_NAME)-client -n $(TOOLS_NAMESPACE)
@oc start-build $(APP_NAME)-client -n $(TOOLS_NAMESPACE) --wait --follow=true --build-arg VERSION="$(LAST_COMMIT)"
@oc tag $(APP_NAME)-client:latest $(APP_NAME)-client:$(COMMIT_SHA) -n $(TOOLS_NAMESPACE)
deployment-tag-to-deploy-server:
@oc tag $(APP_NAME)-server:$(COMMIT_SHA) $(APP_NAME)-server:$(OS_NAMESPACE_SUFFIX) -n $(TOOLS_NAMESPACE)
deployment-tag-to-deploy-client:
@oc tag $(APP_NAME)-client:$(COMMIT_SHA) $(APP_NAME)-client:$(OS_NAMESPACE_SUFFIX) -n $(TOOLS_NAMESPACE)
### Tagging
tag-dev:
@git tag -fa dev -m "Deploy $(git rev-parse --abbrev-ref HEAD) to DEV env"
@git push --force origin refs/tags/dev:refs/tags/dev
tag-test:
@git tag -fa test -m "Deploy $(git rev-parse --abbrev-ref HEAD) to TEST env"
@git push --force origin refs/tags/test:refs/tags/test
tag-prod:
@git tag -fa prod -m "Deploy $(git rev-parse --abbrev-ref HEAD) to PROD env"
@git push --force origin refs/tags/prod:refs/tags/prod
build-local-prod:
@docker-compose down
@docker build -f ./frontend/Dockerfile.prod ./frontend -t test-fe-prod:latest
@docker build -f ./backend/Dockerfile.prod ./backend -t test-be-prod:latest
run-local-prod:
@docker-compose down
@docker run -p3000:3000 test-fe-prod:latest
@docker run -p3001:3000 test-be-prod:latest
# ===================================
# Migrations
# ===================================
migration-create:
@docker exec tc-backend-${ENV} npm run migration:create
migration-generate:
@docker exec tc-backend-${ENV} npm run migration:generate
migration-revert:
@docker exec tc-backend-${ENV} npm run migration:revert
migration-run:
@docker exec tc-backend-${ENV} ./node_modules/.bin/ts-node ./node_modules/typeorm/cli migration:run -d ./src/database/datasource.ts
seed-data:
@docker exec -it tc-backend-local ./node_modules/.bin/ts-node -e 'require("./src/database/seed-functions.ts")'
@docker exec -it tc-backend-local ./node_modules/.bin/ts-node -e 'require("./src/database/seed-location.ts")'
@docker exec -it tc-backend-local ./node_modules/.bin/ts-node -e 'require("./src/database/create-availability-functions.ts")'
@docker exec -it tc-backend-local ./node_modules/.bin/ts-node -e 'require("./src/common/utils.ts")'
delete-db:
@docker exec -it tc-db-local psql -U tc_user -d tc -c "DROP SCHEMA public CASCADE;"
@docker exec -it tc-db-local psql -U tc_user -d tc -c "CREATE SCHEMA public;"
# if this doesn't run, try to run the SERVER pod cmd and copy the first pod name into this command
seed-data-oc:
@oc rsh $(SERVER_POD) ./node_modules/.bin/ts-node -e 'require("./dist/database/seed-location.js")'
@oc rsh $(SERVER_POD) ./node_modules/.bin/ts-node -e 'require("./dist/database/seed-functions.js")'
@oc rsh $(SERVER_POD) ./node_modules/.bin/ts-node -e 'require("./dist/database/create-availability-functions.js")'
seed-dummy-data-oc:
@oc rsh $(SERVER_POD) ./node_modules/.bin/ts-node -e 'require("./dist/common/utils.js")'
migration-run-oc:
@oc rsh $(SERVER_POD) ./node_modules/.bin/ts-node ./node_modules/typeorm/cli migration:run -d ./dist/database/datasource.js