-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
134 lines (102 loc) · 4.03 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
export APP_UID=$(shell id -u)
# BUILD_ID = commit_sha
BUILD_ID ?=$(shell test -d .git && git rev-parse HEAD | cut -c -8)
# REF_ID = branch_name
REF_ID ?=$(shell test -d .git \
&& git symbolic-ref --short HEAD \
| sed -e 's/[^a-z0-9]/-/g' -e 's/^[-+]//' -e 's/[-+]$$//' \
| cut -c 1-62)
DOCKER_IMAGE?=ghcr.io/kmmndr/yaroute
DOCKER_TAG?=${BUILD_ID}
# docker-build-image-base: ;
docker-build-image-ruby: docker-build-image-base
docker-build-image-build: docker-build-image-ruby
docker-build-image-test: docker-build-image-build
docker-build-image-local: docker-build-image-ruby
docker-build-image-final: docker-build-image-base docker-build-image-build
default: help
include makefiles/*.mk
## CI
build: \
docker-build-image-final \
docker-build-image-test
ci-build: \
docker-build-push-image-final \
docker-build-push-image-test
ci-release: \
docker-pull-tagged-image-final \
docker-tag-from-final \
docker-push-tagged-image \
docker-push-latest-image
ci-test: test-most test-system
## Tests
test-most:
@$(MAKE) dockerized-test-setup
@$(MAKE) -e stage=test dockerized-rails-test
@$(MAKE) dockerized-test-teardown
test-system:
@$(MAKE) dockerized-test-setup
@$(MAKE) -e stage=test dockerized-rails-test-system
@$(MAKE) dockerized-test-teardown
.PHONY: set-test-docker-compose-files
set-test-docker-compose-files:
$(eval compose_files=-f docker-compose.yml -f docker-compose.test.yml)
$(eval TEST_IMAGE?=${REGISTRY_PROJECT_URL}/${BUILD_SUBPATH}:${BUILD_ID}-test)
dockerized-test-setup:
@$(MAKE) -e stage=test generate-env dockerized-test-init
dockerized-test-init: environment test-docker-compose-clean
@$(load_env); \
set -eux; \
export TEST_IMAGE=${TEST_IMAGE}; \
${COMPOSE} ${compose_files} up -d; \
${COMPOSE} ${compose_files} run rails bundle exec sh -c " \
rm -rf coverage; \
bundle exec rake active_storage:bucket:reset; \
bundle exec rake db:migrate \
"
dockerized-test-teardown:
@$(MAKE) -e stage=test test-docker-compose-clean
test-docker-compose-clean: set-test-docker-compose-files docker-compose-clean
.PHONY: dockerized-rails-test
dockerized-rails-test: environment set-test-docker-compose-files
@$(load_env); \
set -eux; \
export TEST_IMAGE=${TEST_IMAGE}; \
${COMPOSE} ${compose_files} run rails \
env RAILS_ENV=test bundle exec rake test
.PHONY: dockerized-rails-test-system
dockerized-rails-test-system: environment set-test-docker-compose-files
@$(load_env); \
set -eux; \
export TEST_IMAGE=${TEST_IMAGE}; \
${COMPOSE} ${compose_files} run rails \
env RAILS_ENV=test bundle exec rake test:system
## Deployments
.PHONY: start
start: docker-compose-pull docker-compose-build docker-compose-start ##- Start
.PHONY: deploy
deploy: deploy-docker ##- alias for deploy-docker
.PHONY: deploy-docker
deploy-docker: docker-compose-pull docker-compose-build docker-compose-deploy
.PHONY: stop
stop: docker-compose-stop ##- Stop
## Debug
.PHONY: logs
logs: docker-compose-logs ##- Logs
.PHONY: clean
clean: docker-compose-clean ##- Stop and remove volumes
.PHONY: status
status: docker-compose-ps ##- Print container's status
.PHONY: load-database
load-database: environment database.sql ##- Load database
$(load_env); echo -n "Restoring database to stage '${stage}' (Enter 'YES' to continue) ? "; $(eval ok?=ko) (["${stage}"="${ok}"] || read ok); [ "$$ok" == 'YES' ]
@$(load_env); pv database.sql | ${COMPOSE} exec -e PGPASSWORD=$$APP_DATABASE_PASSWORD -T postgres psql -U $$APP_DATABASE_USER -h localhost -d $$APP_DATABASE_NAME > /dev/null
.PHONY: dump-database
dump-database: environment ##- Dump database
@$(load_env); ${COMPOSE} exec -e PGPASSWORD=$$APP_DATABASE_PASSWORD -T postgres pg_dump -U $$APP_DATABASE_USER -h localhost -d $$APP_DATABASE_NAME --clean | pv > database.sql
.PHONY: console
console: environment ##- Enter console
-$(load_env); ${COMPOSE} ${compose_files} exec rails /bin/ash
.PHONY: local-start
local-start: set-local-docker-compose-files docker-compose-build docker-compose-start ##- Build and start
@$(load_env); ${COMPOSE} exec rails sh -c "[ -x ./docker.local.sh ] && sudo ./docker.local.sh; true"