GO ?= go TIMESCALE_VERSION := pg17 MOD_NAME := nats-app DB_NAME := nats-db NATS_NAME := nats-sv NATS_VERSION := 2.12.0-alpine3.22 .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 timescale/timescaledb-ha:$(TIMESCALE_VERSION) sleep 10 make migrateup .PHONY: dockerize-nats # Remove and create a NATS server. dockerize-nats: docker rm -f $(NATS_NAME) docker run --name $(NATS_NAME) -p 4222:4222 -d nats:$(NATS_VERSION) sleep 5 .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 app/database -database "postgresql://developer:secret@localhost:5432/$(DB_NAME)?sslmode=disable" -verbose up .PHONY: mock # Mock database mock: go run go.uber.org/mock/mockgen@latest -package sensors -destination internal/domains/sensors/repository_mock.go $(MOD_NAME)/internal/domains/sensors Repository .PHONY: test # Run tests tests: go test ./... -cover .PHONY: run # Start app in development environment run: go run ./app/. .PHONY: run-prod run-prod: # Start app in production environment go run ./app/. -env=prod .PHONY: lazy-start lazy-start: # Install dependencies, tools, dockerize containers, run tests and run app. go mod download make dockerize-db make dockerize-nats make run-prod