# Colors CYAN := \033[36m YELLOW := \033[33m GREEN := \033[32m RED := \033[31m RESET := \033[0m # 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_INPUT := lib/stylegen/base.css CSS_OUTPUT := public/css/styles.css # 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 "$(CYAN)Available commands:$(RESET)" @echo "$(YELLOW)make clean$(RESET) - Remove build artifacts" @echo "$(YELLOW)make reset$(RESET) - Clean and reset the project to initial state" @echo "$(YELLOW)make build$(RESET) - Generate CSS, docs, and build Go binary" @echo "$(YELLOW)make run$(RESET) - Build and run the binary" @echo "$(YELLOW)make dev$(RESET) - Run in development mode" @echo "$(YELLOW)make docker-dev$(RESET)- Run development environment in Docker" @echo "$(YELLOW)make docker-run$(RESET)- Run production container" @echo "$(YELLOW)make test$(RESET) - Run tests" @echo "$(YELLOW)make prod$(RESET) - Full production build" # Check if swag is installed ensure-swag: @command -v swag >/dev/null 2>&1 || { \ echo "$(WARN) $(RED)Swagger CLI (swag) is not installed. Installing...$(RESET)"; \ go install github.com/swaggo/swag/cmd/swag@latest; \ } reset: @echo "$(CLEAN) $(CYAN)Performing complete project reset...$(RESET)" @rm -f $(BINARY_NAME) @rm -f $(CSS_OUTPUT) @rm -rf public/css/* @rm -f tailwind.config.js @rm -rf docs/docs.go docs/swagger.json docs/swagger.yaml @go clean -cache -testcache -modcache @echo "$(CHECK) $(GREEN)Project reset complete$(RESET)" clean: @echo "$(CLEAN) $(CYAN)Cleaning build artifacts...$(RESET)" @rm -f $(BINARY_NAME) @rm -f $(CSS_OUTPUT) @echo "$(CHECK) $(GREEN)Cleanup complete$(RESET)" stylegen: @echo "$(CSS) $(CYAN)Generating CSS styles...$(RESET)" @echo "Current working directory: $$(pwd)" @echo "Contents of current directory:" @ls -la @echo "\nContents of lib/stylegen:" @ls -la lib/stylegen @echo "\nContents of lib/stylegen/tw:" @ls -la lib/stylegen/tw @chmod +x $(BASE_PATH)/lib/stylegen/gen.sh @chmod +x $(BASE_PATH)/lib/stylegen/tw/* @$(BASE_PATH)/lib/stylegen/gen.sh \ -e "html" \ -d "$(BASE_PATH)/pages/templates" \ -o "$(BASE_PATH)/public/css" @echo "$(CHECK) $(GREEN)CSS generation complete$(RESET)" swaggergen: ensure-swag @echo "$(DOCS) $(CYAN)Generating Swagger documentation...$(RESET)" @swag init @echo "$(CHECK) $(GREEN)Swagger docs generated$(RESET)" # Combined generation target generate: stylegen swaggergen build: generate @echo "$(BUILD) $(CYAN)Building binary...$(RESET)" @go build -o $(BINARY_NAME) @echo "$(CHECK) $(GREEN)Build complete: $(BINARY_NAME)$(RESET)" test: @echo "$(TEST) $(CYAN)Running tests...$(RESET)" @go test ./... @echo "$(CHECK) $(GREEN)Tests complete$(RESET)" dev: generate @echo "$(RUN) $(CYAN)Starting development server...$(RESET)" @go run main.go run: build @echo "$(RUN) $(CYAN)Running server...$(RESET)" @./$(BINARY_NAME) docker-dev: @echo "$(DOCKER) $(CYAN)Starting development container...$(RESET)" @docker-compose -f docker-compose.dev.yml up --build docker-build: generate @echo "$(DOCKER) $(CYAN)Building production Docker image...$(RESET)" @docker build -t $(DOCKER_IMAGE) . @echo "$(CHECK) $(GREEN)Docker image build complete$(RESET)" docker-run: docker-build @echo "$(DOCKER) $(CYAN)Running production container...$(RESET)" @docker-compose up deps: @echo "$(BUILD) $(CYAN)Installing dependencies...$(RESET)" @go mod download @go install github.com/swaggo/swag/cmd/swag@latest @echo "$(CHECK) $(GREEN)Dependencies installed$(RESET)" fmt: @echo "$(BUILD) $(CYAN)Formatting code...$(RESET)" @go fmt ./... @echo "$(CHECK) $(GREEN)Code formatting complete$(RESET)" # Full production build prod: clean generate build @echo "$(CHECK) $(GREEN)Production build complete$(RESET)" .DEFAULT_GOAL := help