-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathMakefile
More file actions
286 lines (236 loc) · 11.7 KB
/
Copy pathMakefile
File metadata and controls
286 lines (236 loc) · 11.7 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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
.PHONY: help install install-dev format lint type-check security test clean all ci frontend-check-node frontend-install frontend-lint frontend-format frontend-test backend-install backend-dev backend-format backend-lint backend-type-check backend-security backend-test backend-clean backend-all backend-ci st-engine-install st-engine-dev st-engine-format st-engine-lint st-engine-type-check st-engine-security st-engine-test st-engine-clean st-engine-all st-engine-ci docker-base-backend docker-base-engine docker-base-agent docker-base-all docker-push-base-backend docker-push-base-engine docker-push-base-agent docker-push-base-all docker-build-backend docker-build-engine docker-build-all
# Docker Hub username (can be overridden via environment variable)
DOCKER_USER ?= charmy1220
BACKEND_PYTHON ?= $(if $(CONDA_PREFIX),$(CONDA_PREFIX)/bin/python,python)
ST_ENGINE_PYTHON ?= $(BACKEND_PYTHON)
# Ubuntu 系统自带 Node 12,Prettier 3 / Vite 5 需要 >=18。
# 非交互终端(make / IDE)往往不会 source nvm,这里自动选用 nvm 里最新的 Node。
NODE_MAJOR := $(shell node -p "parseInt(process.versions.node, 10)" 2>/dev/null || echo 0)
ifeq ($(shell [ "$(NODE_MAJOR)" -lt 18 ] && echo yes),yes)
NVM_DIR ?= $(HOME)/.nvm
NVM_NODE_BIN := $(shell ls -1d $(NVM_DIR)/versions/node/v*/bin 2>/dev/null | sort -V | tail -1)
ifneq ($(NVM_NODE_BIN),)
export PATH := $(NVM_NODE_BIN):$(PATH)
endif
endif
# 默认目标
help:
@echo "LMeterX 项目管理命令:"
@echo ""
@echo "全局命令:"
@echo " help - 显示此帮助信息"
@echo " install - 安装所有项目的生产依赖"
@echo " install-dev - 安装所有项目的开发依赖"
@echo " format - 格式化所有项目的代码"
@echo " lint - 检查所有项目的代码质量"
@echo " test - 运行所有项目的测试"
@echo " clean - 清理所有项目的缓存文件"
@echo " all - 运行所有项目的完整检查"
@echo " ci - 运行所有项目的 CI/CD 检查"
@echo ""
@echo "Docker 镜像构建命令:"
@echo " docker-base-backend - 构建后端基础镜像 (含所有依赖+Playwright)"
@echo " docker-base-engine - 构建引擎基础镜像 (含所有依赖)"
@echo " docker-base-agent - 构建 Agent 基础镜像 (含所有依赖)"
@echo " docker-base-all - 构建所有基础镜像"
@echo " docker-push-base-backend - 推送后端基础镜像到 Docker Hub"
@echo " docker-push-base-engine - 推送引擎基础镜像到 Docker Hub"
@echo " docker-push-base-agent - 推送 Agent 基础镜像到阿里云仓库"
@echo " docker-push-base-all - 推送所有基础镜像"
@echo " docker-build-backend - 构建后端应用镜像 (基于基础镜像,极快)"
@echo " docker-build-engine - 构建引擎应用镜像 (基于基础镜像,极快)"
@echo " docker-build-all - 构建所有应用镜像"
@echo ""
@echo "Frontend 命令:"
@echo " frontend-install - 安装前端依赖"
@echo " frontend-lint - 检查前端代码质量"
@echo " frontend-format - 格式化前端代码"
@echo " frontend-test - 运行前端测试"
@echo ""
@echo "Backend 命令:"
@echo " backend-install - 安装后端生产依赖"
@echo " backend-dev - 安装后端开发依赖"
@echo " backend-format - 格式化后端代码"
@echo " backend-lint - 检查后端代码质量"
@echo " backend-type-check - 后端类型检查"
@echo " backend-security - 后端安全检查"
@echo " backend-test - 运行后端测试"
@echo " backend-clean - 清理后端缓存"
@echo " backend-all - 运行后端所有检查"
@echo " backend-ci - 后端 CI/CD 检查"
@echo ""
@echo "ST Engine 命令:"
@echo " st-engine-install - 安装引擎生产依赖"
@echo " st-engine-dev - 安装引擎开发依赖"
@echo " st-engine-format - 格式化引擎代码"
@echo " st-engine-lint - 检查引擎代码质量"
@echo " st-engine-type-check - 引擎类型检查"
@echo " st-engine-security - 引擎安全检查"
@echo " st-engine-test - 运行引擎测试"
@echo " st-engine-clean - 清理引擎缓存"
@echo " st-engine-all - 运行引擎所有检查"
@echo " st-engine-ci - 引擎 CI/CD 检查"
# 全局命令
install: frontend-install backend-install st-engine-install
@echo "所有项目依赖安装完成!"
install-dev: backend-dev st-engine-dev
@echo "所有项目开发依赖安装完成!"
format: frontend-format backend-format st-engine-format
@echo "所有项目代码格式化完成!"
lint: frontend-lint backend-lint st-engine-lint
@echo "所有项目代码质量检查完成!"
type-check: backend-type-check st-engine-type-check
@echo "所有项目类型检查完成!"
security: backend-security st-engine-security
@echo "所有项目安全检查完成!"
test: frontend-test backend-test st-engine-test
@echo "所有项目测试完成!"
clean: backend-clean st-engine-clean
@echo "所有项目缓存清理完成!"
all: format lint type-check security test
@echo "所有项目完整检查完成!"
ci: frontend-lint frontend-test backend-ci st-engine-ci
@echo "所有项目 CI/CD 检查完成!"
# Frontend 命令
frontend-check-node:
@node -e "const m=parseInt(process.versions.node,10); if(m<18){console.error('前端需要 Node.js >= 18,当前是 '+process.version+'。请安装 nvm 并执行: nvm install 18'); process.exit(1)}"
frontend-install: frontend-check-node
@echo "正在安装前端依赖..."
cd frontend && npm install
frontend-lint: frontend-check-node
@echo "正在检查前端代码质量..."
cd frontend && npm run lint
frontend-format: frontend-check-node
@echo "正在格式化前端代码..."
cd frontend && npm run format
frontend-test: frontend-check-node
@echo "正在运行前端测试..."
cd frontend && npm test
# Backend 命令
backend-install:
@echo "正在安装后端生产依赖..."
cd backend && $(BACKEND_PYTHON) -m pip install -r requirements.txt
backend-dev:
@echo "正在安装后端开发依赖..."
cd backend && $(BACKEND_PYTHON) -m pip install -r requirements-dev.txt
backend-format:
@echo "正在格式化后端代码..."
cd backend && isort . && black .
backend-lint:
@echo "正在检查后端代码质量..."
cd backend && flake8 .
backend-type-check:
@echo "正在进行后端类型检查..."
cd backend && mypy .
backend-security:
@echo "正在进行后端安全检查..."
cd backend && bandit -r . -c pyproject.toml -f json -o bandit-report.json || bandit -r . -c pyproject.toml
backend-test:
@echo "正在运行后端测试..."
cd backend && TESTING=1 $(BACKEND_PYTHON) -m pytest --cov=. --cov-report=html --cov-report=term-missing
backend-clean:
@echo "正在清理后端缓存..."
cd backend && find . -type f -name "*.pyc" -delete && \
find . -type d -name "__pycache__" -delete && \
find . -type d -name "*.egg-info" -exec rm -rf {} + && \
find . -type d -name ".pytest_cache" -exec rm -rf {} + && \
find . -type d -name ".mypy_cache" -exec rm -rf {} + && \
find . -type f -name ".coverage" -delete && \
find . -type d -name "htmlcov" -exec rm -rf {} + && \
find . -type f -name "bandit-report.json" -delete
backend-all: backend-format backend-lint backend-type-check backend-security backend-test
@echo "后端所有检查完成!"
backend-ci:
@echo "正在运行后端 CI/CD 检查..."
cd backend && black --check . && \
isort --check-only . && \
flake8 . && \
mypy . && \
(bandit -r . -c pyproject.toml -f json -o bandit-report.json || bandit -r . -c pyproject.toml) && \
TESTING=1 $(BACKEND_PYTHON) -m pytest --cov=. --cov-report=term-missing
# ST Engine 命令
st-engine-install:
@echo "正在安装引擎生产依赖..."
cd st_engine && $(ST_ENGINE_PYTHON) -m pip install -r requirements.txt
st-engine-dev:
@echo "正在安装引擎开发依赖..."
cd st_engine && $(ST_ENGINE_PYTHON) -m pip install -r requirements.txt && $(ST_ENGINE_PYTHON) -m pip install -r requirements-dev.txt
st-engine-format:
@echo "正在格式化引擎代码..."
cd st_engine && isort . && black .
st-engine-lint:
@echo "正在检查引擎代码质量..."
cd st_engine && flake8 .
st-engine-type-check:
@echo "正在进行引擎类型检查..."
cd st_engine && mypy .
st-engine-security:
@echo "正在进行引擎安全检查..."
cd st_engine && bandit -r . -c pyproject.toml
st-engine-test:
@echo "正在运行引擎测试..."
cd st_engine && $(ST_ENGINE_PYTHON) -m pytest
st-engine-clean:
@echo "正在清理引擎缓存..."
cd st_engine && find . -type f -name "*.pyc" -delete && \
find . -type d -name "__pycache__" -delete && \
find . -type d -name "*.egg-info" -exec rm -rf {} + && \
find . -type d -name ".pytest_cache" -exec rm -rf {} + && \
find . -type d -name ".mypy_cache" -exec rm -rf {} + && \
rm -rf htmlcov/ && \
rm -rf .coverage && \
rm -rf coverage.xml
st-engine-all: st-engine-format st-engine-lint st-engine-type-check st-engine-security st-engine-test
@echo "引擎所有检查完成!"
st-engine-ci:
@echo "正在运行引擎 CI/CD 检查..."
cd st_engine && isort --check-only --diff . && \
black --check --diff . && \
flake8 . && \
mypy . && \
bandit -r . -c pyproject.toml && \
$(ST_ENGINE_PYTHON) -m pytest
# ============================================================
# Docker 镜像构建命令
# ============================================================
# --- 基础镜像构建 (首次 / 依赖变更时执行,较慢但只需偶尔执行) ---
docker-base-backend:
@echo "正在构建后端基础镜像 (含 Python 依赖 + Playwright)..."
docker build -t $(DOCKER_USER)/lmeterx-be-base:latest -f backend/Dockerfile.base backend/
@echo "后端基础镜像构建完成: $(DOCKER_USER)/lmeterx-be-base:latest"
docker-base-engine:
@echo "正在构建引擎基础镜像 (含 Python 依赖)..."
docker build -t $(DOCKER_USER)/lmeterx-eng-base:latest -f st_engine/Dockerfile.base st_engine/
@echo "引擎基础镜像构建完成: $(DOCKER_USER)/lmeterx-eng-base:latest"
docker-base-agent:
@echo "正在构建 Agent 基础镜像 (含 Python 依赖)..."
docker build -t eng-center-registry.cn-shanghai.cr.aliyuncs.com/qa/llmeter-agent:base -f cluster-agent/Dockerfile.base cluster-agent/
@echo "Agent 基础镜像构建完成: eng-center-registry.cn-shanghai.cr.aliyuncs.com/qa/llmeter-agent:base"
docker-base-all: docker-base-backend docker-base-engine docker-base-agent
@echo "所有基础镜像构建完成!"
# --- 推送基础镜像到 Docker Hub / 阿里云仓库 ---
docker-push-base-backend:
@echo "正在推送后端基础镜像到 Docker Hub..."
docker push $(DOCKER_USER)/lmeterx-be-base:latest
@echo "后端基础镜像推送完成!"
docker-push-base-engine:
@echo "正在推送引擎基础镜像到 Docker Hub..."
docker push $(DOCKER_USER)/lmeterx-eng-base:latest
@echo "引擎基础镜像推送完成!"
docker-push-base-agent:
@echo "正在推送 Agent 基础镜像到阿里云仓库..."
docker push eng-center-registry.cn-shanghai.cr.aliyuncs.com/qa/llmeter-agent:base
@echo "Agent 基础镜像推送完成!"
docker-push-base-all: docker-push-base-backend docker-push-base-engine docker-push-base-agent
@echo "所有基础镜像推送完成!"
# --- 应用镜像构建 (日常开发,基于基础镜像,极快) ---
docker-build-backend:
@echo "正在构建后端应用镜像 (基于基础镜像)..."
docker build -t $(DOCKER_USER)/lmeterx-be:latest -f backend/Dockerfile .
@echo "后端应用镜像构建完成: $(DOCKER_USER)/lmeterx-be:latest"
docker-build-engine:
@echo "正在构建引擎应用镜像 (基于基础镜像)..."
docker build -t $(DOCKER_USER)/lmeterx-eng:latest -f st_engine/Dockerfile .
@echo "引擎应用镜像构建完成: $(DOCKER_USER)/lmeterx-eng:latest"
docker-build-all: docker-build-backend docker-build-engine
@echo "所有应用镜像构建完成!"