|
1 | | -.PHONY: generate build run test test-integration test-all lint swagger docker docker-down ci benchmark migrate-up migrate-down migrate-version migrate-create |
| 1 | +.PHONY: generate build run test test-integration test-all lint swagger docker docker-down ci benchmark \ |
| 2 | + migrate-create migrate-up migrate-down migrate-down-one migrate-version migrate-force \ |
| 3 | + migrate-up-docker migrate-down-docker migrate-down-one-docker migrate-version-docker migrate-force-docker |
2 | 4 |
|
3 | | -MIGRATIONS_PATH ?= migrations |
| 5 | +MIGRATE ?= migrate |
| 6 | +MIGRATIONS_DIR ?= migrations |
| 7 | +MIGRATE_DATABASE_URL ?= |
| 8 | +MIGRATE_DOCKER_IMAGE ?= migrate/migrate |
| 9 | +COMPOSE_PROJECT_NAME ?= $(notdir $(CURDIR)) |
| 10 | +COMPOSE_NETWORK ?= $(COMPOSE_PROJECT_NAME)_default |
4 | 11 |
|
5 | 12 | # Code generation |
6 | | -generate: |
| 13 | +generate: |
7 | 14 | sqlc generate |
8 | 15 | swag init -g cmd/server/main.go --output docs/swagger |
9 | 16 |
|
10 | 17 | docs: generate |
11 | 18 |
|
| 19 | +# Database migrations (golang-migrate) |
| 20 | +migrate-create: |
| 21 | + @test -n "$(name)" || (echo "Usage: make migrate-create name=add_users_table" && exit 1) |
| 22 | + @mkdir -p $(MIGRATIONS_DIR) |
| 23 | + $(MIGRATE) create -ext sql -dir $(MIGRATIONS_DIR) $(name) |
| 24 | + |
| 25 | +migrate-up: |
| 26 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 27 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 28 | + $(MIGRATE) -path $(MIGRATIONS_DIR) -database "$$db_url" up |
| 29 | + |
| 30 | +migrate-down: |
| 31 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 32 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 33 | + $(MIGRATE) -path $(MIGRATIONS_DIR) -database "$$db_url" down -all |
| 34 | + |
| 35 | +migrate-down-one: |
| 36 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 37 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 38 | + $(MIGRATE) -path $(MIGRATIONS_DIR) -database "$$db_url" down 1 |
| 39 | + |
| 40 | +migrate-version: |
| 41 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 42 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 43 | + $(MIGRATE) -path $(MIGRATIONS_DIR) -database "$$db_url" version |
| 44 | + |
| 45 | +migrate-force: |
| 46 | + @test -n "$(version)" || (echo "Usage: make migrate-force version=<number>" && exit 1) |
| 47 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 48 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 49 | + $(MIGRATE) -path $(MIGRATIONS_DIR) -database "$$db_url" force $(version) |
| 50 | + |
| 51 | +# Database migrations via Docker (uses Compose network, works with DATABASE_URL=db:5432) |
| 52 | +migrate-up-docker: |
| 53 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 54 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 55 | + docker run --rm --network $(COMPOSE_NETWORK) -v "$(CURDIR)/$(MIGRATIONS_DIR):/migrations" $(MIGRATE_DOCKER_IMAGE) -path /migrations -database "$$db_url" up |
| 56 | + |
| 57 | +migrate-down-docker: |
| 58 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 59 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 60 | + docker run --rm --network $(COMPOSE_NETWORK) -v "$(CURDIR)/$(MIGRATIONS_DIR):/migrations" $(MIGRATE_DOCKER_IMAGE) -path /migrations -database "$$db_url" down -all |
| 61 | + |
| 62 | +migrate-down-one-docker: |
| 63 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 64 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 65 | + docker run --rm --network $(COMPOSE_NETWORK) -v "$(CURDIR)/$(MIGRATIONS_DIR):/migrations" $(MIGRATE_DOCKER_IMAGE) -path /migrations -database "$$db_url" down 1 |
| 66 | + |
| 67 | +migrate-version-docker: |
| 68 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 69 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 70 | + docker run --rm --network $(COMPOSE_NETWORK) -v "$(CURDIR)/$(MIGRATIONS_DIR):/migrations" $(MIGRATE_DOCKER_IMAGE) -path /migrations -database "$$db_url" version |
| 71 | + |
| 72 | +migrate-force-docker: |
| 73 | + @test -n "$(version)" || (echo "Usage: make migrate-force-docker version=<number>" && exit 1) |
| 74 | + @db_url="$${MIGRATE_DATABASE_URL:-$${DATABASE_URL:-$$(grep -E '^DATABASE_URL=' .env 2>/dev/null | head -n1 | cut -d= -f2-)}}"; \ |
| 75 | + test -n "$$db_url" || (echo "Set MIGRATE_DATABASE_URL or DATABASE_URL (or add DATABASE_URL to .env)" && exit 1); \ |
| 76 | + docker run --rm --network $(COMPOSE_NETWORK) -v "$(CURDIR)/$(MIGRATIONS_DIR):/migrations" $(MIGRATE_DOCKER_IMAGE) -path /migrations -database "$$db_url" force $(version) |
| 77 | + |
12 | 78 | # Build |
13 | 79 | build: generate |
14 | 80 | go build -o bin/capy-server ./cmd/server |
|
22 | 88 | go test -v -race -short ./... |
23 | 89 |
|
24 | 90 | test-integration: |
| 91 | + go test -tags=integration ./internal/database/... -count=1 |
25 | 92 | go test -tags=integration ./tests/integration/... -coverprofile=coverage.out -coverpkg=./... |
26 | | - go tool cover -html=coverage.out |
| 93 | + go tool cover -func=coverage.out |
27 | 94 |
|
28 | 95 | test-all: |
29 | 96 | go test -v -race -tags=integration ./... |
|
0 commit comments