diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..6460951 --- /dev/null +++ b/Makefile @@ -0,0 +1,84 @@ +# ============================================ +# Makefile — gotest 标准化构建命令 +# 用法:make +# ============================================ + +APP_NAME := gotest +BUILD_DIR := build +GO_LDFLAGS := -s -w + +.DEFAULT_GOAL := help + +## help: 显示所有可用命令 +help: + @echo "" + @echo "$(APP_NAME) — 可用命令" + @echo "" + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \ + awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}' + @echo "" + +## build: 编译二进制到 build/ 目录 +build: + @echo "[BUILD] 编译 $(APP_NAME)..." + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 go build -ldflags="$(GO_LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME) . + @echo "[BUILD] 完成: $(BUILD_DIR)/$(APP_NAME)" + +## run: 直接运行(go run) +run: + go run . + +## build-prod: 生产级编译(prod 模式) +build-prod: + @echo "[BUILD] 生产级编译..." + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 APP_ENV=prod go build -ldflags="$(GO_LDFLAGS)" -o $(BUILD_DIR)/$(APP_NAME) . + @echo "[BUILD] 完成: $(BUILD_DIR)/$(APP_NAME)" + +## test: 运行测试 +test: + go test -v ./... + +## fmt: 格式化代码 +fmt: + go fmt ./... + +## vet: 静态检查 +vet: + go vet ./... + +## lint: 完整代码检查 (fmt + vet) +lint: fmt vet + @echo "[LINT] 代码检查完成" + +## docker-build: 构建 Docker 镜像 +docker-build: + @echo "[DOCKER] 构建镜像..." + docker build -t $(APP_NAME):latest . + @echo "[DOCKER] 完成: $(APP_NAME):latest" + +## docker-up: Docker Compose 启动全部服务 +docker-up: + docker-compose up -d + @echo "[DOCKER] 服务已启动: http://localhost:8080" + +## docker-down: Docker Compose 停止全部服务 +docker-down: + docker-compose down + +## clean: 清理构建产物 +clean: + @echo "[CLEAN] 清理..." + rm -rf $(BUILD_DIR) data/app.db + @echo "[CLEAN] 完成" + +## tidy: 整理 Go 模块依赖 +tidy: + go mod tidy + +## all: 完整流程 (lint → build → test) +all: lint build test + @echo "[ALL] 完整构建流程执行完毕" + +.PHONY: help build run build-prod test fmt vet lint docker-build docker-up docker-down clean tidy all