Skip to content

Commit 34f8a99

Browse files
committed
fix:code check test
1 parent 664554d commit 34f8a99

1 file changed

Lines changed: 50 additions & 11 deletions

File tree

.github/scripts/checkstyle-pr.sh

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ else
3030
fi
3131

3232
# 2. 获取变更的 Java 文件
33-
CHANGED_FILES=$(git diff --name-only "$BASE_BRANCH" HEAD 2>/dev/null | grep '\.java$' || true)
33+
if [ "$BASE_BRANCH" == "HEAD^" ]; then
34+
CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRT "$BASE_BRANCH" HEAD -- '*.java' 2>/dev/null || true)
35+
else
36+
CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRT "$BASE_BRANCH"...HEAD -- '*.java' 2>/dev/null || true)
37+
fi
3438

3539
if [ -z "$CHANGED_FILES" ]; then
3640
echo "✅ 没有 Java 文件变更,跳过检查。"
@@ -41,7 +45,7 @@ echo "📝 变更的 Java 文件:"
4145
echo "$CHANGED_FILES"
4246
echo "----------------------------------------"
4347

44-
# 按模块分组
48+
# 按模块分组,并把路径转换为 Checkstyle includes 使用的源码相对路径
4549
declare -A module_files
4650
for file in $CHANGED_FILES; do
4751
module="${file%%/*}"
@@ -50,10 +54,22 @@ for file in $CHANGED_FILES; do
5054
continue
5155
fi
5256
rel="${file#$module/}"
57+
case "$rel" in
58+
src/main/java/*)
59+
include="${rel#src/main/java/}"
60+
;;
61+
src/test/java/*)
62+
include="${rel#src/test/java/}"
63+
;;
64+
*)
65+
echo "⚠️ 跳过非源码目录 Java 文件: $file"
66+
continue
67+
;;
68+
esac
5369
if [ -z "${module_files[$module]}" ]; then
54-
module_files[$module]="$rel"
70+
module_files[$module]="$include"
5571
else
56-
module_files[$module]="${module_files[$module]},$rel"
72+
module_files[$module]="${module_files[$module]},$include"
5773
fi
5874
done
5975

@@ -69,10 +85,12 @@ done
6985
echo "----------------------------------------"
7086

7187
total_violations=0
88+
execution_failures=0
7289

7390
# 对每个模块执行 Checkstyle
7491
for module in "${!module_files[@]}"; do
7592
file_list="${module_files[$module]}"
93+
report_file="$module/target/checkstyle-result.xml"
7694
echo "🚀 扫描模块: $module"
7795
echo " 文件列表: $file_list"
7896

@@ -85,11 +103,21 @@ for module in "${!module_files[@]}"; do
85103
echo "$file_list"
86104
set +e
87105
PROJECT_ROOT=$(pwd)
106+
rm -f "$report_file"
88107
output=$(cd "$module" && \
89108
echo " Current directory: $(pwd)" && \
90109
echo " Checking file existence:" && \
91-
ls -l "${module_files[$module]}" 2>/dev/null || echo " ⚠️ not found" && \
92-
mvn checkstyle:check -X \
110+
IFS=',' read -ra includes <<< "$file_list" && \
111+
for include in "${includes[@]}"; do \
112+
if [ -f "src/main/java/$include" ]; then \
113+
ls -l "src/main/java/$include"; \
114+
elif [ -f "src/test/java/$include" ]; then \
115+
ls -l "src/test/java/$include"; \
116+
else \
117+
echo " ⚠️ not found: $include"; \
118+
fi; \
119+
done && \
120+
mvn checkstyle:check \
93121
-Dcheckstyle.config.location="$PROJECT_ROOT/checkstyle/huawei-checkstyle.xml" \
94122
-Dcheckstyle.violationSeverity=warning \
95123
-Dcheckstyle.outputFormat=xml \
@@ -99,15 +127,22 @@ for module in "${!module_files[@]}"; do
99127
echo " ⚠️ 模块 $module 的 Checkstyle 检查失败(但继续)"
100128
fi
101129
set -e
130+
echo "$output"
102131

103-
# 从输出中提取违规数
104-
count=$(echo "$output" | grep -oE 'You have [0-9]+ Checkstyle violations' | grep -oE '[0-9]+' | tail -1)
105-
if [ -z "$count" ]; then
132+
# 从 XML 报告中统计违规数,比解析 Maven 日志更稳定
133+
if [ -f "$report_file" ]; then
134+
count=$(grep -c -- '<error ' "$report_file" 2>/dev/null || true)
135+
else
106136
count=0
107137
fi
108138
total_violations=$((total_violations + count))
109139
echo " 模块 $module 违规数: $count"
110140

141+
if [ $mvn_exit -ne 0 ] && [ "$count" -eq 0 ]; then
142+
echo " ❌ 模块 $module 的 Checkstyle 执行失败,且未生成可解析的违规报告。"
143+
execution_failures=$((execution_failures + 1))
144+
fi
145+
111146
# (可选)生成 HTML 报告供人工查看
112147
echo " - 生成 HTML 报告(可选)..."
113148
set +e
@@ -152,17 +187,21 @@ if [ -n "$GITHUB_STEP_SUMMARY" ]; then
152187
else
153188
echo "| 总违规数 | ⚠️ **$total_violations** |"
154189
fi
190+
echo "| 执行失败模块数 | $execution_failures |"
155191
echo "| 涉及模块 | ${!module_files[*]} |"
156192
echo ""
157193
echo "📥 完整报告已作为 Artifact 上传。"
158194
} >> "$GITHUB_STEP_SUMMARY"
159195
fi
160196

161197
# 根据违规数决定退出码
162-
if [ $total_violations -eq 0 ]; then
198+
if [ $total_violations -eq 0 ] && [ $execution_failures -eq 0 ]; then
163199
echo "✅ 检查通过,构建成功。"
164200
exit 0
201+
elif [ $execution_failures -ne 0 ]; then
202+
echo "❌ 有 $execution_failures 个模块 Checkstyle 执行失败,构建失败。"
203+
exit 1
165204
else
166205
echo "❌ 发现 $total_violations 个违规,构建失败。"
167206
exit 1
168-
fi
207+
fi

0 commit comments

Comments
 (0)