108 lines
4.5 KiB
Makefile
108 lines
4.5 KiB
Makefile
GO ?= go
|
|
AIR ?= air
|
|
SWAG ?= swag
|
|
GOOSE ?= goose
|
|
GOOSE_DIR ?= migrations/goose
|
|
MIGRATE_APPLY_FROM ?= 20260414
|
|
|
|
.PHONY: air swag test worker file-worker migrate-status migrate-up migrate-up-to migrate-apply migrate-reapply hospital-apply
|
|
|
|
air:
|
|
@command -v $(AIR) >/dev/null 2>&1 || { \
|
|
echo "air not found. Install with: go install github.com/air-verse/air@latest"; \
|
|
exit 1; \
|
|
}
|
|
$(AIR) -c .air.toml
|
|
|
|
swag:
|
|
@command -v $(SWAG) >/dev/null 2>&1 || { \
|
|
echo "swag not found. Install with: go install github.com/swaggo/swag/cmd/swag@latest"; \
|
|
exit 1; \
|
|
}
|
|
GOCACHE=$${GOCACHE:-/tmp/go-cache} $(SWAG) init -g cmd/api/main.go -o docs --parseDependency --parseInternal
|
|
|
|
test:
|
|
$(GO) test ./... -coverprofile=coverage.out
|
|
$(GO) tool cover -func=coverage.out
|
|
|
|
worker:
|
|
WORKER_JOB=email $(GO) run ./cmd/worker
|
|
|
|
file-worker:
|
|
WORKER_JOB=file_processing $(GO) run ./cmd/worker
|
|
|
|
migrate-status:
|
|
@command -v $(GOOSE) >/dev/null 2>&1 || { \
|
|
echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \
|
|
exit 1; \
|
|
}
|
|
@MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \
|
|
MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \
|
|
test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \
|
|
$(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" status
|
|
|
|
migrate-up:
|
|
@command -v $(GOOSE) >/dev/null 2>&1 || { \
|
|
echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \
|
|
exit 1; \
|
|
}
|
|
@MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \
|
|
MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \
|
|
test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \
|
|
$(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" up
|
|
|
|
migrate-up-to:
|
|
@command -v $(GOOSE) >/dev/null 2>&1 || { \
|
|
echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \
|
|
exit 1; \
|
|
}
|
|
@MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \
|
|
MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \
|
|
test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \
|
|
test -n "$(v)" || { echo "usage: make migrate-up-to v=20260414"; exit 1; }; \
|
|
$(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" up-to $(v)
|
|
|
|
migrate-apply:
|
|
@command -v $(GOOSE) >/dev/null 2>&1 || { \
|
|
echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \
|
|
exit 1; \
|
|
}
|
|
@MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \
|
|
MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \
|
|
test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \
|
|
MODULES="$(modules)"; \
|
|
test -n "$$MODULES" || { \
|
|
echo "usage: make migrate-apply modules=opc,kassa"; \
|
|
echo "hint: use 'make migrate-reapply [from=YYYYMMDD]' for full down-to/up behavior"; \
|
|
exit 1; \
|
|
}; \
|
|
TMP_DIR="$$(mktemp -d)"; \
|
|
echo "Applying selected import apply migrations for modules: $$MODULES"; \
|
|
for m in $$(echo "$$MODULES" | tr ',' ' '); do \
|
|
FOUND="$$(ls -1 $(GOOSE_DIR)/*_$${m}_import_apply.sql 2>/dev/null || true)"; \
|
|
if [ -z "$$FOUND" ]; then \
|
|
echo "No apply migration found for module '$$m' in $(GOOSE_DIR)"; \
|
|
rm -rf "$$TMP_DIR"; \
|
|
exit 1; \
|
|
fi; \
|
|
for f in $$FOUND; do cp "$$f" "$$TMP_DIR"/; done; \
|
|
done; \
|
|
$(GOOSE) -dir "$$TMP_DIR" -no-versioning mysql "$$MYSQL_DSN_VAL" up; \
|
|
rm -rf "$$TMP_DIR"
|
|
|
|
migrate-reapply:
|
|
@command -v $(GOOSE) >/dev/null 2>&1 || { \
|
|
echo "goose not found. Install with: go install github.com/pressly/goose/v3/cmd/goose@latest"; \
|
|
exit 1; \
|
|
}
|
|
@MYSQL_DSN_VAL="$${MYSQL_DSN:-$$(grep -hE '^MYSQL_DSN=' .env .env.local 2>/dev/null | tail -n1 | cut -d= -f2-)}"; \
|
|
MYSQL_DSN_VAL="$${MYSQL_DSN_VAL#\"}"; MYSQL_DSN_VAL="$${MYSQL_DSN_VAL%\"}"; \
|
|
test -n "$$MYSQL_DSN_VAL" || { echo "MYSQL_DSN is required (set env or define in .env/.env.local)"; exit 1; }; \
|
|
FROM_VER="$(from)"; \
|
|
if [ -z "$$FROM_VER" ]; then FROM_VER="$(MIGRATE_APPLY_FROM)"; fi; \
|
|
echo "Re-applying migrations from version $$FROM_VER to latest"; \
|
|
$(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" down-to "$$FROM_VER"; \
|
|
$(GOOSE) -dir $(GOOSE_DIR) mysql "$$MYSQL_DSN_VAL" up
|
|
|
|
hospital-apply: migrate-apply
|