129 lines
2.9 KiB
Makefile
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)"
|