Golang_demo/Makefile
2025-06-25 13:26:35 +08:00

129 lines
2.9 KiB
Makefile

# 应用配置
APP_NAME := golang-demo
VERSION := 1.0.0
BUILD_TIME := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
GIT_COMMIT := $(shell git rev-parse --short HEAD)
# Go配置
GOCMD := go
GOBUILD := $(GOCMD) build
GOCLEAN := $(GOCMD) clean
GOTEST := $(GOCMD) test
GOGET := $(GOCMD) get
GOMOD := $(GOCMD) mod
# Docker配置
DOCKER_IMAGE := $(APP_NAME):$(VERSION)
DOCKER_LATEST := $(APP_NAME):latest
# 构建标志
LDFLAGS := -ldflags="-w -s -X main.buildTime=$(BUILD_TIME) -X main.gitCommit=$(GIT_COMMIT)"
.PHONY: help build test clean run deps docker-build docker-run docker-stop docker-clean all
# 默认目标
all: deps test build
# 显示帮助信息
help:
@echo "Available commands:"
@echo " deps - Download dependencies"
@echo " test - Run tests"
@echo " build - Build the application"
@echo " run - Run the application"
@echo " clean - Clean build artifacts"
@echo " docker-build - Build Docker image"
@echo " docker-run - Run Docker container"
@echo " docker-stop - Stop Docker container"
@echo " docker-clean - Clean Docker images"
@echo " dev - Run in development mode"
@echo " prod - Run in production mode"
# 下载依赖
deps:
@echo "Downloading dependencies..."
$(GOMOD) download
$(GOMOD) verify
$(GOMOD) tidy
# 运行测试
test:
@echo "Running tests..."
$(GOTEST) -v ./...
$(GOCMD) vet ./...
# 构建应用
build:
@echo "Building $(APP_NAME)..."
CGO_ENABLED=0 GOOS=linux $(GOBUILD) $(LDFLAGS) -o $(APP_NAME) .
# 运行应用
run: build
@echo "Running $(APP_NAME)..."
./$(APP_NAME)
# 开发模式运行
dev:
@echo "Running in development mode..."
GIN_MODE=debug $(GOCMD) run .
# 生产模式运行
prod:
@echo "Running in production mode..."
GIN_MODE=release ./$(APP_NAME)
# 清理构建产物
clean:
@echo "Cleaning..."
$(GOCLEAN)
rm -f $(APP_NAME)
# 构建Docker镜像
docker-build:
@echo "Building Docker image..."
docker build \
--build-arg BUILD_TIME="$(BUILD_TIME)" \
--build-arg GIT_COMMIT="$(GIT_COMMIT)" \
-t $(DOCKER_IMAGE) \
-t $(DOCKER_LATEST) .
# 运行Docker容器
docker-run: docker-build
@echo "Running Docker container..."
docker run -d \
--name $(APP_NAME) \
-p 8080:8080 \
-e GIN_MODE=release \
$(DOCKER_LATEST)
# 停止Docker容器
docker-stop:
@echo "Stopping Docker container..."
docker stop $(APP_NAME) || true
docker rm $(APP_NAME) || true
# 清理Docker镜像
docker-clean:
@echo "Cleaning Docker images..."
docker rmi $(DOCKER_IMAGE) || true
docker rmi $(DOCKER_LATEST) || true
docker image prune -f
# 重新部署
redeploy: docker-stop docker-run
# 查看日志
logs:
docker logs -f $(APP_NAME)
# 健康检查
health:
@echo "Checking application health..."
curl -f http://localhost:8080/health || echo "Health check failed"
# 显示版本信息
version:
@echo "App: $(APP_NAME)"
@echo "Version: $(VERSION)"
@echo "Build Time: $(BUILD_TIME)"
@echo "Git Commit: $(GIT_COMMIT)"