-
Notifications
You must be signed in to change notification settings - Fork 281
Expand file tree
/
Copy pathMakefile
More file actions
144 lines (119 loc) · 3.88 KB
/
Copy pathMakefile
File metadata and controls
144 lines (119 loc) · 3.88 KB
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
.DEFAULT_GOAL := help
## -- Main Methods --
## Launch application and database
.PHONY: init
init:
docker compose up
## -- Development Methods --
## Launch services to support development environment
.PHONY: up
up:
docker compose -f docker/dev/docker-compose.yml up -d
## Terminate development environment
.PHONY: down
down:
docker compose -f docker/dev/docker-compose.yml down
## Terminate development environment and wipe the database volume
.PHONY: wipe
wipe:
docker compose -f docker/dev/docker-compose.yml down -v
## Drop, recreate and reseed postcodesiodb from the dump URL in ./latest
.PHONY: seed
seed:
docker exec dev-db-1 psql -U postcodesio -d postgres -c "DROP DATABASE IF EXISTS postcodesiodb;"
docker exec dev-db-1 psql -U postcodesio -d postgres -c "CREATE DATABASE postcodesiodb OWNER postcodesio;"
docker exec dev-db-1 psql -U postcodesio -d postcodesiodb -c "CREATE EXTENSION IF NOT EXISTS postgis;"
curl -sSL "$$(cat latest)" \
| gunzip \
| grep -vE '^\\(restrict|unrestrict) ' \
| docker exec -i dev-db-1 psql -U postcodesio -d postcodesiodb -v ON_ERROR_STOP=1 -q
$(MAKE) prewarm
## VACUUM ANALYZE + pg_prewarm hot tables/indexes (no-op if pg is tuned with autovacuum=off; safe to re-run)
.PHONY: prewarm
prewarm:
docker exec -i dev-db-1 psql -U postcodesio -d postcodesiodb -v ON_ERROR_STOP=1 -q < docker/prewarm.sql
## Tail development service logs
.PHONY: logs
logs:
docker compose -f docker/dev/docker-compose.yml logs -f
## Open psql shell to development pg instance
.PHONY: psql
psql:
PGPASSWORD=password psql -h 127.0.0.1 -p 5433 --username postcodesio postcodesiodb
## -- Test Methods --
## Launches test and pg containers with tests running
.PHONY: test
test:
docker compose -f docker/test/docker-compose.yml -f docker/test/test.yml up --exit-code-from api --build
## Launch test application and database
.PHONY: test-up
test-up:
docker compose -f docker/test/docker-compose.yml up -d --build
## Shut down test services
.PHONY: test-down
test-down:
docker compose -f docker/test/docker-compose.yml down
## Drop and reseed the test database from test/seed/seed.sql.gz
.PHONY: test-seed
test-seed:
docker compose -f docker/test/docker-compose.yml exec api pnpm run test:create
## Shell into test container
.PHONY: test-shell
test-shell:
docker compose -f docker/test/docker-compose.yml exec api /bin/bash
## Execute command in test container
.PHONY: test-exec
test-exec:
docker compose -f docker/test/docker-compose.yml exec api $(filter-out $@,$(MAKECMDGOALS))
## Tail test service logs
.PHONY: test-logs
test-logs:
docker compose -f docker/test/docker-compose.yml logs -f
## -- Live Test Methods --
## Build local pg and api images using pg_dump from S3
.PHONY: live-up
live-up:
docker compose -f docker/live-test/docker-compose.yml up -d --build
## Shut down live test services
.PHONY: live-down
live-down:
docker compose -f docker/live-test/docker-compose.yml down -v
## -- Misc --
## Update repository against origin/main
.PHONY: update
update:
git fetch
git merge --ff-only origin/main
## How to use this Makefile
.PHONY: help
help:
@printf "Usage\n";
@awk '{ \
if ($$0 ~ /^.PHONY: [a-zA-Z\-\_0-9]+$$/) { \
helpCommand = substr($$0, index($$0, ":") + 2); \
if (helpMessage) { \
printf "\033[36m%-20s\033[0m %s\n", \
helpCommand, helpMessage; \
helpMessage = ""; \
} \
} else if ($$0 ~ /^[a-zA-Z\-\_0-9.]+:/) { \
helpCommand = substr($$0, 0, index($$0, ":")); \
if (helpMessage) { \
printf "\033[36m%-20s\033[0m %s\n", \
helpCommand, helpMessage; \
helpMessage = ""; \
} \
} else if ($$0 ~ /^##/) { \
if (helpMessage) { \
helpMessage = helpMessage"\n "substr($$0, 3); \
} else { \
helpMessage = substr($$0, 3); \
} \
} else { \
if (helpMessage) { \
print "\n "helpMessage"\n" \
} \
helpMessage = ""; \
} \
}' \
$(MAKEFILE_LIST)