-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
126 lines (107 loc) · 5.54 KB
/
Copy pathMakefile
File metadata and controls
126 lines (107 loc) · 5.54 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
SHELL := /usr/bin/env bash
include ./public/backend/.env
PSQL=PGPASSWORD=$(POSTGRES_PASSWORD) psql -h localhost -U $(POSTGRES_USER)
DB_NAME=${POSTGRES_DATABASE}
DB_SCHEMA=${POSTGRES_SCHEMA}
FLYWAY=flyway
MIGRATIONS_DIR=migrations/rst
FIXTURES_DIR=migrations/fixtures
MIGRATION_TABLE=flyway_schema_history
FIXTURE_TABLE=flyway_fixture_schema_history
.PHONY: create_db
create_db:
@$(PSQL) -d template1 -tc "SELECT count(*) FROM pg_database WHERE datname = '$(DB_NAME)'" | \
grep -q 1 || \
$(PSQL) -d template1 -c "CREATE DATABASE $(DB_NAME)";
.PHONY: drop_db
drop_db:
@$(PSQL) -d template1 -tc "SELECT count(*) FROM pg_database WHERE datname = '$(DB_NAME)'" | \
grep -q 0 || \
$(PSQL) -d template1 -c "DROP DATABASE $(DB_NAME)";
.PHONY: migrate
migrate:
$(FLYWAY) -url=jdbc:postgresql://$(POSTGRES_HOST)/$(DB_NAME) -user=$(POSTGRES_USER) -password=$(POSTGRES_PASSWORD) -schemas=$(DB_SCHEMA) -locations=filesystem:$(MIGRATIONS_DIR) -table=$(MIGRATION_TABLE) -baselineOnMigrate=true -validateMigrationNaming=true migrate
.PHONY: load_fixtures
load_fixtures:
$(FLYWAY) -url=jdbc:postgresql://$(POSTGRES_HOST)/$(DB_NAME) -user=$(POSTGRES_USER) -password=$(POSTGRES_PASSWORD) -locations=filesystem:$(FIXTURES_DIR) -table=$(FIXTURE_TABLE) -baselineOnMigrate=true -validateMigrationNaming=true migrate
.PHONY: clean
clean:
$(FLYWAY) -url=jdbc:postgresql://$(POSTGRES_HOST)/$(DB_NAME) -user=$(POSTGRES_USER) -password=$(POSTGRES_PASSWORD) -schemas=$(DB_SCHEMA) -locations=filesystem:$(MIGRATIONS_DIR) clean
.PHONY: terminate_connections
terminate_connections:
@echo "Terminating active connections to $(DB_NAME)..."
@$(PSQL) -d template1 -tc "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='$(DB_NAME)' AND pid <> pg_backend_pid();"
.PHONY: reset_db
reset_db: terminate_connections drop_db create_db migrate load_fixtures
# Reset the project, useful when switching branches with different packages and migrations
.PHONY: reset_project
reset_project:
@echo "Resetting the project..."
make reset_db
npm install
rm -rf public/backend/src/generated/prisma
rm -rf admin/backend/src/generated/prisma
cd public/backend && npx prisma generate --sql
cd admin/backend && npx prisma generate --sql
@echo "Project reset completed."
.PHONY: load_test
load_test: ## run public backend performance tests with k6
load_test: SERVER_HOST=http://localhost:8000
load_test: SERVER_API_ROUTE=/api
load_test: SERVER_ROUTE=$(SERVER_HOST)$(SERVER_API_ROUTE)
load_test: SAVE_RESULTS=false
load_test: OUT_OPTION=$(if $(filter true,$(SAVE_RESULTS)),--out csv=k6_results/public_load_test_results.csv)
load_test:
@mkdir -p k6_results
@echo "Running PUBLIC backend performance tests with k6"
@k6 -e SERVER_HOST=$(SERVER_ROUTE) run tests/load/public/main.js $(OUT_OPTION)
.PHONY: load_test_admin
load_test_admin: ## run admin backend performance tests with k6
load_test_admin: SERVER_HOST=http://localhost:8001
load_test_admin: SAVE_RESULTS=false
load_test_admin: OUT_OPTION=$(if $(filter true,$(SAVE_RESULTS)),--out csv=k6_results/admin_load_test_results.csv)
load_test_admin:
@mkdir -p k6_results
@echo "Running ADMIN backend performance tests with k6"
@echo "NOTE: Ensure auth guards are disabled on target environment"
@k6 -e SERVER_HOST=$(SERVER_HOST) run tests/load/admin/main.js $(OUT_OPTION)
# LocalStack S3 Development
LOCALSTACK_ENDPOINT=http://localhost:4566
IMAGES_BUCKET=rst-storage-images-dev
DOCUMENTS_BUCKET=rst-storage-public-documents-dev
CONSENT_BUCKET=rst-storage-consent-forms-dev
CORS_CONFIG='{"CORSRules":[{"AllowedHeaders":["*"],"AllowedMethods":["PUT","GET","HEAD"],"AllowedOrigins":["http://localhost:3001"],"ExposeHeaders":["ETag"],"MaxAgeSeconds":3000}]}'
.PHONY: localstack
localstack: ## Start LocalStack Docker container (background)
@if docker ps --format '{{.Names}}' | grep -q '^localstack$$'; then \
echo "LocalStack is already running."; \
else \
echo "Starting LocalStack..."; \
docker stop localstack 2>/dev/null || true; \
docker rm localstack 2>/dev/null || true; \
docker run -d --rm --name localstack -p 4566:4566 -p 4571:4571 localstack/localstack; \
echo "Waiting for LocalStack to be ready..."; \
until curl -s $(LOCALSTACK_ENDPOINT)/_localstack/health | grep -q '"s3": "running"'; do sleep 1; done; \
echo "LocalStack is ready at $(LOCALSTACK_ENDPOINT)"; \
fi
.PHONY: localstack-stop
localstack-stop: ## Stop LocalStack Docker container
@echo "Stopping LocalStack..."
@docker stop localstack 2>/dev/null || true
.PHONY: localstack-buckets
localstack-buckets: ## Create S3 buckets in LocalStack
@echo "Creating S3 buckets in LocalStack..."
@aws --endpoint-url=$(LOCALSTACK_ENDPOINT) s3 mb s3://$(IMAGES_BUCKET) 2>/dev/null || true
@aws --endpoint-url=$(LOCALSTACK_ENDPOINT) s3 mb s3://$(DOCUMENTS_BUCKET) 2>/dev/null || true
@aws --endpoint-url=$(LOCALSTACK_ENDPOINT) s3 mb s3://$(CONSENT_BUCKET) 2>/dev/null || true
@echo "Buckets created."
.PHONY: localstack-cors
localstack-cors: ## Configure CORS rules for LocalStack S3 buckets
@echo "Configuring CORS for S3 buckets..."
@aws --endpoint-url=$(LOCALSTACK_ENDPOINT) s3api put-bucket-cors --bucket $(IMAGES_BUCKET) --cors-configuration $(CORS_CONFIG)
@aws --endpoint-url=$(LOCALSTACK_ENDPOINT) s3api put-bucket-cors --bucket $(DOCUMENTS_BUCKET) --cors-configuration $(CORS_CONFIG)
@aws --endpoint-url=$(LOCALSTACK_ENDPOINT) s3api put-bucket-cors --bucket $(CONSENT_BUCKET) --cors-configuration $(CORS_CONFIG)
@echo "CORS configured."
.PHONY: localstack-setup
localstack-setup: localstack localstack-buckets localstack-cors ## Start LocalStack, create buckets, and configure CORS
@echo "LocalStack S3 setup complete."