Template
1
0
Fork 0
goth.stack/Makefile
Atridad Lahiji 043803e041
Some checks failed
Fly Deploy / Deploy app (push) Failing after 3s
Makefile!
2024-12-18 23:21:12 -06:00

142 lines
4.1 KiB
Makefile

# 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 := goth.stack
DOCKER_IMAGE := goth-stack
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