-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
124 lines (100 loc) · 3.45 KB
/
Copy pathMakefile
File metadata and controls
124 lines (100 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# =============================================================================
# GLOBAL VARIABLES
# =============================================================================
.DEFAULT_GOAL := help
SHELL := /bin/bash
PROJECT_NAME := argus
VERSION := 0.2.0
COMMIT_HASH := $(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown")
BUILD_TIME := $(shell date -u +"%Y-%m-%dT%H:%M:%SZ")
CARGO := cargo
DOCKER := docker
IMAGE_NAME := $(PROJECT_NAME)
IMAGE_TAG := $(VERSION)-$(COMMIT_HASH)
# =============================================================================
# TARGETS
# =============================================================================
.PHONY: help
help: ## 显示此帮助信息
@echo "当前版本: $(VERSION) ($(COMMIT_HASH))"
@awk 'BEGIN {FS = ":.*##"; printf "\n使用方法:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-20s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
##@ 开发环境
.PHONY: deps
deps: ## 检查并安装项目依赖
@echo "检查依赖..."
@$(CARGO) check
.PHONY: fmt
fmt: ## 格式化代码
@echo "格式化代码..."
@$(CARGO) fmt --all
.PHONY: lint
lint: ## 代码静态检查 (格式化 + clippy)
@echo "执行代码检查..."
@$(CARGO) fmt --all -- --check
@$(CARGO) clippy --all-targets --all-features -- -D warnings \
--allow clippy::empty_line_after_doc_comments \
--allow clippy::enum_variant_names \
--allow clippy::type_complexity \
--allow clippy::collapsible_if
##@ 测试与运行
.PHONY: test
test: ## 运行单元测试
@echo "运行测试..."
@$(CARGO) test
##@ 本地构建
.PHONY: local-build
local-build: ## 编译项目 (开发模式,未优化)
@echo "构建项目 (开发模式)..."
@$(CARGO) build
.PHONY: local-run
local-run: ## 编译并运行项目 (开发模式)
@echo "运行项目 (开发模式)..."
@$(CARGO) run
##@ 生产构建
.PHONY: build
build: ## 编译项目 (生产模式,已优化)
@echo "构建项目 (生产模式)..."
@$(CARGO) build --release
.PHONY: run
run: ## 编译并运行项目 (生产模式)
@echo "运行项目 (生产模式)..."
@$(CARGO) run --release
##@ Docker 部署
.PHONY: image
image: ## 构建 Docker 镜像
@echo "构建 Docker 镜像: $(IMAGE_NAME):$(IMAGE_TAG)..."
@$(DOCKER) build -t $(IMAGE_NAME):$(IMAGE_TAG) .
@$(DOCKER) tag $(IMAGE_NAME):$(IMAGE_TAG) $(IMAGE_NAME):latest
.PHONY: run-container
run-container: ## 运行 Docker 容器
@echo "启动容器: $(IMAGE_NAME)..."
@$(DOCKER) run -d \
--name $(IMAGE_NAME) \
--env-file .env \
--restart unless-stopped \
$(IMAGE_NAME):$(IMAGE_TAG)
.PHONY: stop-container
stop-container: ## 停止并删除 Docker 容器
@echo "停止容器: $(IMAGE_NAME)..."
@$(DOCKER) stop $(IMAGE_NAME) || true
@$(DOCKER) rm $(IMAGE_NAME) || true
.PHONY: logs
logs: ## 查看容器日志
@$(DOCKER) logs -f $(IMAGE_NAME)
##@ 清理与维护
.PHONY: clean
clean: ## 清理构建产物和缓存
@echo "清理构建产物..."
@$(CARGO) clean
.PHONY: clean-all
clean-all: clean ## 清理所有文件 (包括 Docker 镜像)
@echo "清理 Docker 镜像..."
@$(DOCKER) rmi $(IMAGE_NAME):$(IMAGE_TAG) || true
@$(DOCKER) rmi $(IMAGE_NAME):latest || true
.PHONY: info
info: ## 显示项目信息
@echo "项目名称: $(PROJECT_NAME)"
@echo "版本号 : $(VERSION)"
@echo "提交哈希: $(COMMIT_HASH)"
@echo "构建时间: $(BUILD_TIME)"
@echo "镜像标签: $(IMAGE_NAME):$(IMAGE_TAG)"