Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
189 lines (160 loc) · 6.61 KB
/
Copy pathMakefile
File metadata and controls
189 lines (160 loc) · 6.61 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
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
ifneq (,$(wildcard .env))
include .env
export
endif
export EMAIL
DOCKER_COMPOSE_FILE = docker-compose.dev.yaml
DOCKER_COMPOSE_FILES = -f $(DOCKER_COMPOSE_FILE) $(if $(wildcard docker-compose.override.yml),-f docker-compose.override.yml)
DOCKER_COMPOSE_DEV = docker compose $(DOCKER_COMPOSE_FILES)
DOCKER_COMPOSE_TEST = docker compose $(DOCKER_COMPOSE_FILES)
DOCKER_COMPOSE_ENV = POSTGRESQL_DATABASE='$(POSTGRESQL_DATABASE)' POSTGRESQL_USERNAME='$(POSTGRESQL_USERNAME)' POSTGRESQL_PASSWORD='$(POSTGRESQL_PASSWORD)' AUTHARA_INTERNAL_API_TOKEN='$(AUTHARA_INTERNAL_API_TOKEN)' AUTHARA_JWT_ISSUER='$(AUTHARA_JWT_ISSUER)' AUTHARA_JWT_PRIVATE_KEYS='$(AUTHARA_JWT_PRIVATE_KEYS)' AUTHARA_CHALLENGE_VERIFICATION_CODE_KEYS='$(AUTHARA_CHALLENGE_VERIFICATION_CODE_KEYS)' AUTHARA_WEBHOOK_SECRET='$(AUTHARA_WEBHOOK_SECRET)'
POSTGRES_SERVICE = postgres
AUTHARA_SERVICE = authara
MIGRATIONS_SERVICE = backend-migrations
MAILPIT_SERVICE = mailpit
TEST_DB_NAME ?= authara_test
TEST_DB_HOST ?= postgres
TEST_DB_PORT ?= 5432
TEST_DB_TIMEZONE ?= UTC
TEST_DB_LOG_SQL ?= false
.PHONY: dev dev-tailwind mailpit-up mailpit-down connect-db migrate-up db-clean db-truncate-table db-reset admin-by-email operator-by-email \
test test-up test-db-create test-migrate test-run test-down test-reset \
test-coverage test-coverage-profile test-coverage-html generate openapi-generate check-generated
generate: openapi-generate
openapi-generate:
go generate ./internal/http/openapi
check-generated: generate
git diff --exit-code -- internal/http/openapi/generated.go
dev:
@if command -v tmux >/dev/null 2>&1; then \
if tmux has-session -t authara 2>/dev/null; then \
echo "Attaching to existing authara dev session..."; \
tmux attach -t authara; \
else \
echo "Starting dev environment with tmux..."; \
tmux new-session -d -s authara -c '$(CURDIR)' \
'$(DOCKER_COMPOSE_ENV) $(DOCKER_COMPOSE_DEV) up' \; \
attach; \
fi; \
else \
echo ""; \
echo "tmux not found."; \
echo ""; \
echo "Please run: $(DOCKER_COMPOSE_DEV) up"; \
echo ""; \
fi
dev-tailwind:
$(DOCKER_COMPOSE_DEV) up frontend-tailwind
mailpit-up:
$(DOCKER_COMPOSE_DEV) up -d $(MAILPIT_SERVICE)
@echo "Mailpit SMTP: localhost:1025"
@echo "Mailpit UI: http://localhost:8025"
mailpit-down:
$(DOCKER_COMPOSE_DEV) stop $(MAILPIT_SERVICE)
connect-db:
$(DOCKER_COMPOSE_DEV) exec -it $(POSTGRES_SERVICE) \
psql -U $(POSTGRESQL_USERNAME) -d $(POSTGRESQL_DATABASE)
migrate-up:
$(DOCKER_COMPOSE_DEV) build $(MIGRATIONS_SERVICE)
$(DOCKER_COMPOSE_DEV) run --rm $(MIGRATIONS_SERVICE)
db-clean: db-reset
db-truncate-table:
ifndef TABLE
$(error TABLE is required. Usage: make db-truncate-table TABLE=table_name)
endif
$(DOCKER_COMPOSE_DEV) exec -T $(POSTGRES_SERVICE) \
psql -U $(POSTGRESQL_USERNAME) -d $(POSTGRESQL_DATABASE) \
-c "TRUNCATE TABLE authara.$(TABLE) RESTART IDENTITY CASCADE;"
db-reset:
$(DOCKER_COMPOSE_DEV) exec -T $(POSTGRES_SERVICE) \
psql -U $(POSTGRESQL_USERNAME) -d $(POSTGRESQL_DATABASE) \
-c "DROP SCHEMA IF EXISTS authara CASCADE; \
DROP SCHEMA IF EXISTS public CASCADE; \
CREATE SCHEMA public;"
$(MAKE) migrate-up
admin-by-email:
ifndef EMAIL
$(error EMAIL is required. Usage: make admin-by-email EMAIL=user@example.com)
endif
$(DOCKER_COMPOSE_DEV) exec -T $(AUTHARA_SERVICE) \
go run ./cmd/authara admin grant --email "$$EMAIL"
operator-by-email:
ifndef EMAIL
$(error EMAIL is required. Usage: make operator-by-email EMAIL=user@example.com)
endif
$(DOCKER_COMPOSE_DEV) exec -T $(AUTHARA_SERVICE) \
go run ./cmd/authara operator grant --email "$$EMAIL"
# Full local test flow
test: test-up test-db-create test-migrate test-run
test-up:
$(DOCKER_COMPOSE_TEST) up -d $(POSTGRES_SERVICE) $(MAILPIT_SERVICE)
until $(DOCKER_COMPOSE_TEST) exec -T $(POSTGRES_SERVICE) \
pg_isready -U $(POSTGRESQL_USERNAME) -d postgres >/dev/null 2>&1; do \
echo "waiting for postgres..."; \
sleep 2; \
done
test-db-create:
@if ! $(DOCKER_COMPOSE_TEST) exec -T $(POSTGRES_SERVICE) \
psql -U $(POSTGRESQL_USERNAME) -d postgres -tAc "SELECT 1 FROM pg_database WHERE datname='$(TEST_DB_NAME)'" | grep -q 1; then \
echo "creating test database $(TEST_DB_NAME)..."; \
$(DOCKER_COMPOSE_TEST) exec -T $(POSTGRES_SERVICE) \
psql -U $(POSTGRESQL_USERNAME) -d postgres -v ON_ERROR_STOP=1 \
-c "CREATE DATABASE $(TEST_DB_NAME)"; \
else \
echo "test database $(TEST_DB_NAME) already exists"; \
fi
test-migrate:
$(DOCKER_COMPOSE_TEST) run --rm \
-e POSTGRESQL_HOST=$(TEST_DB_HOST) \
-e POSTGRESQL_PORT=$(TEST_DB_PORT) \
-e POSTGRESQL_DATABASE=$(TEST_DB_NAME) \
-e POSTGRESQL_USERNAME=$(POSTGRESQL_USERNAME) \
-e POSTGRESQL_PASSWORD=$(POSTGRESQL_PASSWORD) \
$(MIGRATIONS_SERVICE) \
up -env=default -config=./dbconfig.yaml
test-run:
$(DOCKER_COMPOSE_TEST) run --rm \
-e POSTGRESQL_HOST=$(TEST_DB_HOST) \
-e POSTGRESQL_PORT=$(TEST_DB_PORT) \
-e POSTGRESQL_DATABASE=$(TEST_DB_NAME) \
-e POSTGRESQL_USERNAME=$(POSTGRESQL_USERNAME) \
-e POSTGRESQL_PASSWORD=$(POSTGRESQL_PASSWORD) \
-e POSTGRESQL_TIMEZONE=$(TEST_DB_TIMEZONE) \
-e POSTGRESQL_LOG_SQL=$(TEST_DB_LOG_SQL) \
-e AUTHARA_TEST_MAILPIT_HTTP_URL=http://mailpit:8025 \
-e AUTHARA_TEST_MAILPIT_SMTP_HOST=mailpit \
-e AUTHARA_TEST_MAILPIT_SMTP_PORT=1025 \
$(AUTHARA_SERVICE) \
go test ./... -count=1
test-reset:
$(DOCKER_COMPOSE_TEST) exec -T $(POSTGRES_SERVICE) \
psql -U $(POSTGRESQL_USERNAME) -d postgres -v ON_ERROR_STOP=1 \
-c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$(TEST_DB_NAME)' AND pid <> pg_backend_pid();" \
-c "DROP DATABASE IF EXISTS $(TEST_DB_NAME);"
test-down:
$(DOCKER_COMPOSE_TEST) down
test-coverage: test-up test-db-create test-migrate
$(DOCKER_COMPOSE_TEST) run --rm \
-e POSTGRESQL_HOST=$(TEST_DB_HOST) \
-e POSTGRESQL_PORT=$(TEST_DB_PORT) \
-e POSTGRESQL_DATABASE=$(TEST_DB_NAME) \
-e POSTGRESQL_USERNAME=$(POSTGRESQL_USERNAME) \
-e POSTGRESQL_PASSWORD=$(POSTGRESQL_PASSWORD) \
-e POSTGRESQL_TIMEZONE=$(TEST_DB_TIMEZONE) \
-e POSTGRESQL_LOG_SQL=$(TEST_DB_LOG_SQL) \
$(AUTHARA_SERVICE) \
go test ./... -count=1 -cover
test-coverage-profile: test-up test-db-create test-migrate
$(DOCKER_COMPOSE_TEST) run --rm \
-v $(PWD):/app \
-e POSTGRESQL_HOST=$(TEST_DB_HOST) \
-e POSTGRESQL_PORT=$(TEST_DB_PORT) \
-e POSTGRESQL_DATABASE=$(TEST_DB_NAME) \
-e POSTGRESQL_USERNAME=$(POSTGRESQL_USERNAME) \
-e POSTGRESQL_PASSWORD=$(POSTGRESQL_PASSWORD) \
-e POSTGRESQL_TIMEZONE=$(TEST_DB_TIMEZONE) \
-e POSTGRESQL_LOG_SQL=$(TEST_DB_LOG_SQL) \
$(AUTHARA_SERVICE) \
sh -c 'go test ./... -count=1 -coverprofile=coverage.out && go tool cover -func=coverage.out'
test-coverage-html: test-coverage-profile
go tool cover -html=coverage.out