Skip to content

Commit f8b20fb

Browse files
committed
fix:code check test
1 parent 97df9cf commit f8b20fb

1 file changed

Lines changed: 56 additions & 94 deletions

File tree

.github/scripts/checkstyle-pr.sh

Lines changed: 56 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
#!/bin/bash
22
# ============================================================
3-
# checkstyle-pr.sh - Checkstyle 增量扫描(多模块,包含测试
4-
# 功能:只扫描本次提交中变更的 Java 文件(所有模块,src/main 和 src/test)
5-
# 生成报告,根据违规数决定退出码
3+
# checkstyle-pr.sh - 增量检查(扫描整个变更文件,不过滤行号
4+
# 功能:对本次提交中变更的 Java 文件执行完整的 Checkstyle 检查
5+
# 不阻断构建,生成完整报告
66
# ============================================================
77

88
set -e
99

1010
echo "========================================"
11-
echo " Checkstyle 增量扫描(多模块)"
12-
echo " 扫描范围:所有模块的变更 Java 文件(包含测试"
11+
echo " Checkstyle 增量检查"
12+
echo " 扫描范围:本次变更的 Java 文件(完整文件"
1313
echo "========================================"
1414

1515
# 1. 确定目标分支
@@ -29,7 +29,7 @@ else
2929
echo "🔍 本地运行模式,对比分支: $BASE_BRANCH"
3030
fi
3131

32-
# 2. 获取变更的 Java 文件(所有模块)
32+
# 2. 获取变更的 Java 文件
3333
CHANGED_FILES=$(git diff --name-only "$BASE_BRANCH" HEAD 2>/dev/null | grep '\.java$' || true)
3434

3535
if [ -z "$CHANGED_FILES" ]; then
@@ -41,117 +41,79 @@ echo "📝 变更的 Java 文件:"
4141
echo "$CHANGED_FILES"
4242
echo "----------------------------------------"
4343

44-
# 3. 按模块分组,提取模块内相对路径
45-
declare -A module_files
46-
for file in $CHANGED_FILES; do
47-
# 提取第一级目录作为模块名(例如 base, app, core 等)
48-
module="${file%%/*}"
49-
# 如果模块名为空或文件在根目录,跳过
50-
if [ -z "$module" ] || [ "$module" == "$file" ]; then
51-
echo "⚠️ 忽略根目录文件: $file"
52-
continue
53-
fi
54-
# 去掉模块前缀,得到相对路径
55-
rel="${file#$module/}"
56-
# 追加到对应模块的列表中(逗号分隔)
57-
if [ -z "${module_files[$module]}" ]; then
58-
module_files[$module]="$rel"
59-
else
60-
module_files[$module]="${module_files[$module]},$rel"
61-
fi
62-
done
44+
# 3. 将文件列表转为逗号分隔
45+
FILES_LIST=$(echo "$CHANGED_FILES" | tr '\n' ',' | sed 's/,$//')
46+
47+
# 4. 执行 Checkstyle 扫描(生成完整报告)
48+
echo "🚀 执行 Checkstyle 扫描(完整文件)..."
49+
echo "FILES_LIST: $FILES_LIST"
50+
set +e
51+
mvn -pl base checkstyle:check \
52+
-Dcheckstyle.config.location=checkstyle/huawei-checkstyle.xml \
53+
-Dcheckstyle.violationSeverity=warning
54+
MVN_EXIT=$?
55+
set -e
6356

64-
if [ ${#module_files[@]} -eq 0 ]; then
65-
echo "⚠️ 没有识别到任何模块,跳过检查。"
57+
# 额外生成 HTML 报告(不受违规影响,始终执行)
58+
echo "📄 生成 HTML 报告..."
59+
mvn -pl base checkstyle:checkstyle \
60+
-Dcheckstyle.config.location=checkstyle/huawei-checkstyle.xml \
61+
-Dcheckstyle.outputFormat=html \
62+
-Dcheckstyle.violationSeverity=warning
63+
64+
# 5. 确定报告路径(根据项目结构调整)
65+
REPORT_FILE="base/target/checkstyle-result.xml"
66+
if [ ! -f "$REPORT_FILE" ]; then
67+
echo "❌ 未生成 Checkstyle 报告,请检查 Maven 配置。"
6668
exit 0
6769
fi
6870

69-
echo "📝 按模块分组后的相对路径:"
70-
for module in "${!module_files[@]}"; do
71-
echo " $module: ${module_files[$module]}"
72-
done
73-
echo "----------------------------------------"
71+
# 6. 统计违规数
72+
VIOLATIONS=$(grep -c '<error' "$REPORT_FILE" || true)
7473

75-
# 4. 对每个模块执行 Checkstyle 检查
76-
total_violations=0
77-
for module in "${!module_files[@]}"; do
78-
file_list="${module_files[$module]}"
79-
echo "🚀 扫描模块: $module"
80-
echo " 文件列表: $file_list"
81-
82-
if [ ! -d "$module" ] || [ ! -f "$module/pom.xml" ]; then
83-
echo "⚠️ 模块目录 $module 不存在或没有 pom.xml,跳过。"
84-
continue
85-
fi
86-
87-
# 执行 Checkstyle(生成 XML 报告)
88-
echo " - 生成 XML 报告..."
89-
set +e
90-
(cd "$module" && mvn checkstyle:check \
91-
-Dcheckstyle.config.location=../checkstyle/huawei-checkstyle.xml \
92-
-Dcheckstyle.includes="$file_list" \
93-
-Dcheckstyle.violationSeverity=warning)
94-
if [ $? -ne 0 ]; then
95-
echo " ⚠️ 模块 $module 的 Checkstyle 检查失败(但继续)"
96-
fi
97-
set -e
98-
99-
# 生成 HTML 报告
100-
echo " - 生成 HTML 报告..."
101-
set +e
102-
(cd "$module" && mvn checkstyle:checkstyle \
103-
-Dcheckstyle.config.location=../checkstyle/huawei-checkstyle.xml \
104-
-Dcheckstyle.includes="$file_list" \
105-
-Dcheckstyle.outputFormat=html \
106-
-Dcheckstyle.violationSeverity=warning)
107-
if [ $? -ne 0 ]; then
108-
echo " ⚠️ 模块 $module 的 HTML 报告生成失败(但继续)"
109-
fi
110-
set -e
111-
112-
# 统计该模块的违规数
113-
report_file="$module/target/checkstyle-result.xml"
114-
if [ -f "$report_file" ]; then
115-
count=$(grep -c '<error' "$report_file" || true)
116-
total_violations=$((total_violations + count))
117-
echo " 模块 $module 违规数: $count"
118-
else
119-
echo " ⚠️ 模块 $module 未生成报告"
120-
fi
121-
echo ""
122-
done
123-
124-
# 5. 输出汇总信息
12574
echo "----------------------------------------"
126-
if [ $total_violations -eq 0 ]; then
75+
if [ $VIOLATIONS -eq 0 ]; then
12776
echo "✅ 所有变更文件未发现违规!"
12877
else
129-
echo "⚠️ 总计发现 $total_violations 个违规。"
78+
echo "⚠️ 发现 $VIOLATIONS 个违规项(完整文件扫描)"
79+
echo ""
80+
echo "📋 违规摘要(前 30 条):"
81+
grep '<error' "$REPORT_FILE" | head -30 | sed 's/<error //; s/\/>//' | \
82+
sed 's/line="/行号: /; s/column="/列: /; s/severity="/严重性: /; s=message="=信息: =; s=source="//' | \
83+
while read -r line; do
84+
echo " $line"
85+
done
13086
fi
13187

132-
# 6. 输出到 Step Summary(可选)
88+
# 7. 输出到 GitHub Step Summary
13389
if [ -n "$GITHUB_STEP_SUMMARY" ]; then
13490
{
135-
echo "## 📋 Checkstyle 汇总报告"
91+
echo "## 📋 Checkstyle 报告"
13692
echo ""
13793
echo "| 指标 | 结果 |"
13894
echo "|------|------|"
139-
if [ $total_violations -eq 0 ]; then
140-
echo "| 总违规数 | ✅ **0** |"
95+
if [ $VIOLATIONS -eq 0 ]; then
96+
echo "| 违规数 | ✅ **0** |"
14197
else
142-
echo "| 总违规数 | ⚠️ **$total_violations** |"
98+
echo "| 违规数 | ⚠️ **$VIOLATIONS** |"
14399
fi
144-
echo "| 涉及模块 | ${!module_files[*]} |"
100+
echo "| 扫描文件 | **$(echo "$CHANGED_FILES" | wc -l)** 个变更 Java 文件 |"
101+
echo "| 检查方式 | 对变更文件进行完整扫描 |"
145102
echo ""
146-
echo "📥 完整报告已作为 Artifact 上传。"
103+
echo "📥 完整报告已作为 Artifact 上传,请在工作流运行页面下载"
147104
} >> "$GITHUB_STEP_SUMMARY"
105+
echo "✅ Step Summary 已更新"
148106
fi
149107

150-
# 7. 根据违规数决定构建状态
151-
if [ $total_violations -eq 0 ]; then
108+
# 8. 始终以成功状态退出
109+
# ================================================
110+
# 7. 根据违规数决定构建状态(拦截 PR)
111+
# ================================================
112+
if [ $VIOLATIONS -eq 0 ]; then
152113
echo "✅ 检查通过,构建成功。"
153114
exit 0
154115
else
155-
echo "❌ 发现 $total_violations 个违规,构建失败。"
116+
echo "❌ 发现 $VIOLATIONS 个违规,构建失败。"
117+
# 为了让 GitHub Actions 标记为失败,退出码设为 1
156118
exit 1
157119
fi

0 commit comments

Comments
 (0)