.PHONY: help \ migrate/new migrate/up migrate/down migrate/status \ clickhouse/up clickhouse/down \ run/api run/workers run/console \ build/api build/workers \ test test/integration \ lint fmt tidy # --------------------------------------------------------------------------- # Configuration # --------------------------------------------------------------------------- # Auto-load .env if present, then export every variable so child processes # (go run, docker run, the apply script) inherit them. ifneq (,$(wildcard ./.env)) include .env export endif POSTGRES_DSN ?= postgres://renolation:renolation@103.188.82.191:5432/analytics?sslmode=disable POSTGRES_DSN_DOCKER ?= $(POSTGRES_DSN) CLICKHOUSE_ADDR ?= 192.168.1.60:9000 CLICKHOUSE_DB ?= analytics CLICKHOUSE_USER ?= renolation CLICKHOUSE_PASSWORD ?= renolation CLICKHOUSE_SECURE ?= 0 # Re-export everything the Go services + scripts consume. Explicit list is # required on GNU Make 3.81 (macOS default), where bare `export` is a no-op. export POSTGRES_DSN REDIS_ADDR export CLICKHOUSE_ADDR CLICKHOUSE_DB CLICKHOUSE_USER CLICKHOUSE_PASSWORD CLICKHOUSE_SECURE export ANALYTICS_HTTP_ADDR ANALYTICS_LOG_LEVEL ANALYTICS_SHUTDOWN_TIMEOUT_SECONDS export ANALYTICS_CACHE_TTL_QUERY_SECONDS ANALYTICS_CACHE_TTL_PROFILE_SECONDS ANALYTICS_CH_TEMPLATES_DIR export ANALYTICS_CH_SQL_USER ANALYTICS_CH_SQL_PASSWORD export WORKER_HTTP_ADDR WORKER_LOG_LEVEL WORKER_SHUTDOWN_TIMEOUT_SECONDS export WORKER_MAX_WORKERS WORKER_COMPUTE_TRAITS_EVERY WORKER_REFRESH_SEGMENT_EVERY MIGRATE_IMAGE ?= migrate/migrate:v4.17.1 MIGRATIONS_DIR := infra/migrations CLICKHOUSE_DIR := infra/clickhouse export CLICKHOUSE_ADDR CLICKHOUSE_DB CLICKHOUSE_USER CLICKHOUSE_PASSWORD CLICKHOUSE_SECURE # `migrate` CLI: prefer local binary, otherwise run the official Docker image. MIGRATE_BIN ?= $(shell command -v migrate 2>/dev/null) ifeq ($(MIGRATE_BIN),) MIGRATE = docker run --rm \ -v $(CURDIR)/$(MIGRATIONS_DIR):/migrations \ $(MIGRATE_IMAGE) -path=/migrations -database "$(POSTGRES_DSN_DOCKER)" MIGRATE_CREATE = docker run --rm \ -v $(CURDIR)/$(MIGRATIONS_DIR):/migrations \ $(MIGRATE_IMAGE) create -ext sql -dir /migrations -seq else MIGRATE = $(MIGRATE_BIN) -path $(MIGRATIONS_DIR) -database "$(POSTGRES_DSN)" MIGRATE_CREATE = $(MIGRATE_BIN) create -ext sql -dir $(MIGRATIONS_DIR) -seq endif # --------------------------------------------------------------------------- # Help # --------------------------------------------------------------------------- help: @echo "CDP Analytics (data-layer) - common tasks" @echo "" @echo " make migrate/new name=X create new PG migration" @echo " make migrate/up apply PG migrations" @echo " make migrate/down rollback one" @echo " make migrate/status migration status" @echo "" @echo " make clickhouse/up apply analytics ClickHouse DDL" @echo " make clickhouse/down drop analytics ClickHouse schema" @echo "" @echo " make run/api run analytics API (port 4000)" @echo " make run/workers run analytics worker (port 4001)" @echo " make run/console run analytics console (port 4002)" @echo "" @echo " make test unit tests" @echo " make test/integration integration tests (testcontainers)" @echo "" @echo " Shared infra (postgres, redis, clickhouse) lives in ../ingestion." @echo " Run 'make up' from there first." # --------------------------------------------------------------------------- # PostgreSQL migrations # --------------------------------------------------------------------------- migrate/new: @if [ -z "$(name)" ]; then echo "usage: make migrate/new name=add_xxx"; exit 1; fi $(MIGRATE_CREATE) $(name) migrate/up: $(MIGRATE) up migrate/down: $(MIGRATE) down 1 migrate/status: $(MIGRATE) version # --------------------------------------------------------------------------- # ClickHouse DDL # --------------------------------------------------------------------------- clickhouse/up: @bash infra/scripts/clickhouse_apply.sh up clickhouse/down: @bash infra/scripts/clickhouse_apply.sh down # --------------------------------------------------------------------------- # Run services # --------------------------------------------------------------------------- run/api: cd api && go run ./cmd/server run/workers: cd workers && go run ./cmd/worker run/console: @cd console && [ -d node_modules ] || npm install cd console && npm run dev # --------------------------------------------------------------------------- # Build # --------------------------------------------------------------------------- build/api: cd api && CGO_ENABLED=0 go build -o ../bin/api ./cmd/server build/workers: cd workers && CGO_ENABLED=0 go build -o ../bin/worker ./cmd/worker # --------------------------------------------------------------------------- # Tests # --------------------------------------------------------------------------- test: cd api && go test ./... -count=1 cd workers && go test ./... -count=1 test/integration: cd api && go test -tags=integration ./... -count=1 -timeout=5m cd workers && go test -tags=integration ./... -count=1 -timeout=5m # --------------------------------------------------------------------------- # Code quality # --------------------------------------------------------------------------- lint: cd api && golangci-lint run ./... cd workers && golangci-lint run ./... fmt: cd api && gofmt -w . cd workers && gofmt -w . tidy: cd api && go mod tidy cd workers && go mod tidy