SERVICE_A := ./service_a SERVICE_B := ./service_b PG_VERSION := 17.6-alpine3.22 DB_NAME := meteologica .PHONY: dockerize-db # Remove and create a development database. dockerize-db: docker rm -f $(DB_NAME) docker run --name $(DB_NAME) -e POSTGRES_PASSWORD=secret -e POSTGRES_USER=developer -e POSTGRES_DB=$(DB_NAME) -p 5432:5432 -d postgres:$(PG_VERSION) sleep 10 make migrateup .PHONY: migrateup # Migrate all schemas, triggers and data located in database/migrations. migrateup: go run -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest -path $(SERVICE_A)/server/database/migrations -database "postgresql://developer:secret@localhost:5432/$(DB_NAME)?sslmode=disable" -verbose up .PHONY: run # Run all services run: cd $(SERVICE_A) && go run ./server/main.go & cd $(SERVICE_B) && go run ./server/main.go .PHONY: run-a # Run service_a only run-a: cd $(SERVICE_A) && go run ./server/main.go .PHONY: run-b # Run service_b only run-b: cd $(SERVICE_B) && go run ./server/main.go .PHONY: test # Run all tests with coverage test: @echo "Running tests for service_a..." cd $(SERVICE_A) && go test ./... -coverprofile=../service_a_coverage.out @echo "Running tests for service_b..." cd $(SERVICE_B) && go test ./... -coverprofile=../service_b_coverage.out @echo "\nCoverage reports generated:" @echo " - service_a_coverage.out" @echo " - service_b_coverage.out" .PHONY: coverage # View coverage reports in browser coverage: @echo "Opening service_a coverage report..." cd $(SERVICE_A) && go tool cover -html=../service_a_coverage.out @echo "Opening service_b coverage report..." cd $(SERVICE_B) && go tool cover -html=../service_b_coverage.out .PHONY: coverage-func # Show coverage summary in terminal coverage-func: @echo "Service A Coverage:" cd $(SERVICE_A) && go tool cover -func=../service_a_coverage.out @echo "\nService B Coverage:" cd $(SERVICE_B) && go tool cover -func=../service_b_coverage.out