# Emoji CHECK := โœ… BUILD := ๐Ÿ”จ CLEAN := ๐Ÿงน RUN := ๐Ÿš€ CSS := ๐ŸŽจ TEST := ๐Ÿงช DOCKER := ๐Ÿณ WARN := โš ๏ธ DOCS := ๐Ÿ“š # Variables BINARY_NAME := atri.dad DOCKER_IMAGE := atri-dot-dad GO_FILES := $(wildcard *.go) # CSS files are now static and don't need generation # Docker detection DOCKER_ENV := $(shell if [ -f /.dockerenv ]; then echo true; else echo false; fi) ifeq ($(DOCKER_ENV),true) BASE_PATH := /app else BASE_PATH := $(CURDIR) endif .PHONY: all build clean run dev stylegen docker-dev docker-build docker-run test help reset ensure-swag help: @echo "Available commands:" @echo "make clean - Remove build artifacts" @echo "make reset - Clean and reset the project to initial state" @echo "make build - Generate CSS, docs, and build Go binary" @echo "make run - Build and run the binary" @echo "make dev - Run in development mode" @echo "make docker-dev - Run development environment in Docker" @echo "make docker-run - Run production container" @echo "make test - Run tests" @echo "make prod - Full production build" # Check if swag is installed ensure-swag: @command -v swag >/dev/null 2>&1 || { \ echo "$(WARN) Swagger CLI (swag) is not installed. Installing..."; \ go install github.com/swaggo/swag/cmd/swag@latest; \ } reset: docker-clean @echo "$(CLEAN) Performing complete project reset..." @rm -f $(BINARY_NAME) @rm -rf docs/docs.go docs/swagger.json docs/swagger.yaml @go clean -cache -testcache -modcache @echo "$(CHECK) Project reset complete" clean: @echo "$(CLEAN) Cleaning build artifacts..." @rm -f $(BINARY_NAME) @echo "$(CHECK) Cleanup complete" docker-clean: @echo "$(CLEAN) Cleaning Docker artifacts..." @docker-compose down --rmi all --volumes @echo "$(CHECK) Docker cleanup complete" swaggergen: ensure-swag @echo "$(DOCS) Generating Swagger documentation..." @swag init @echo "$(CHECK) Swagger docs generated" generate: swaggergen build: generate @echo "$(BUILD) Building binary..." @go build -o $(BINARY_NAME) @echo "$(CHECK) Build complete: $(BINARY_NAME)" test: @echo "$(TEST) Running tests..." @go test ./... @echo "$(CHECK) Tests complete" dev: generate @echo "$(RUN) Starting development server..." @go run main.go run: build @echo "$(RUN) Running server..." @./$(BINARY_NAME) docker-dev: @echo "$(DOCKER) Starting development container..." @docker-compose -f docker-compose.dev.yml up --build docker-build: generate @echo "$(DOCKER) Building production Docker image..." @docker build -t $(DOCKER_IMAGE) . @echo "$(CHECK) Docker image build complete" docker-run: docker-build @echo "$(DOCKER) Running production container..." @docker-compose up deps: @echo "$(BUILD) Installing dependencies..." @go mod download @go install github.com/swaggo/swag/cmd/swag@latest @echo "$(CHECK) Dependencies installed" fmt: @echo "$(BUILD) Formatting code..." @go fmt ./... @echo "$(CHECK) Code formatting complete" # Full production build prod: clean generate build @echo "$(CHECK) Production build complete" .DEFAULT_GOAL := help