From a560531e701901ed64a15481679f98cae53f6884 Mon Sep 17 00:00:00 2001 From: ZacharyZcR <2903735704@qq.com> Date: Mon, 18 May 2026 04:57:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DCI:=20=E8=A6=86=E7=9B=96?= =?UTF-8?q?=E7=8E=87=E9=97=A8=E7=A6=81=E6=94=B9=E7=94=A8awk=E6=95=B4?= =?UTF-8?q?=E6=95=B0=E6=AF=94=E8=BE=83,=20lint=E8=BF=87=E6=BB=A4=E7=AE=80?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 覆盖率检查移除bc依赖,改用awk int()整数比较 - lint过滤用单条grep -vE替代管道链,更健壮 - 测试命令预计算包列表避免子shell问题 --- .github/workflows/test-build.yml | 47 ++++++++++++-------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/.github/workflows/test-build.yml b/.github/workflows/test-build.yml index 023e50a..31c0a68 100644 --- a/.github/workflows/test-build.yml +++ b/.github/workflows/test-build.yml @@ -56,32 +56,22 @@ jobs: - name: 运行 golangci-lint run: | - # 安装 golangci-lint v2 (需要 Go 1.22+,仅用于静态分析,不影响二进制兼容性) + # 安装 golangci-lint v2 (需 Go 1.22+,仅用于静态分析,不影响二进制兼容性) go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.12.1 - # 运行检查并灵活处理结果 - set +e - golangci-lint run --timeout=5m > lint_output.txt 2>&1 - LINT_EXIT_CODE=$? + # 运行检查 + golangci-lint run --timeout=5m > lint_output.txt 2>&1 || true cat lint_output.txt - set -e - # 只关注真正的 bug,忽略代码质量建议 - # 过滤规则: - # - gocognit/gocyclo: 复杂度警告(阈值已在配置中设置) - # - QF/S/ST: staticcheck 的代码质量改进建议(非bug) - if [ $LINT_EXIT_CODE -ne 0 ]; then - CRITICAL_ISSUES=$(grep -E "\.go:[0-9]+:[0-9]+:" lint_output.txt | grep -v "gocognit" | grep -v "gocyclo" | grep -v "QF[0-9]" | grep -v " S[0-9]" | grep -v "ST[0-9]" || true) - if [ -n "$CRITICAL_ISSUES" ]; then - echo "❌ Linting failed with critical issues:" - echo "$CRITICAL_ISSUES" | head -20 - exit 1 - else - echo "⚠️ Only quality suggestions - PASSING" - exit 0 - fi + # 过滤非关键问题(复杂度建议和 staticcheck 风格建议不阻塞 CI) + CRITICAL=$(grep -E "\.go:[0-9]+:[0-9]+:" lint_output.txt \ + | grep -vE "gocognit|gocyclo|QF[0-9]+| S[0-9]+|ST[0-9]+" || true) + if [ -n "$CRITICAL" ]; then + echo "❌ Linting failed with critical issues:" + echo "$CRITICAL" | head -20 + exit 1 fi - echo "✅ No lint issues found" + echo "✅ Lint 检查通过" - name: 检查代码复杂度(质量门禁) run: | @@ -132,7 +122,8 @@ jobs: - name: 运行测试 run: | # 排除第三方grdp库测试(存在环境依赖问题) - go test -vet=off -race -coverprofile=coverage.out -covermode=atomic $(go list ./... | grep -v '/mylib/grdp/') + PKGS=$(go list ./... | grep -v '/mylib/grdp/') + go test -vet=off -race -coverprofile=coverage.out -covermode=atomic $PKGS - name: 上传覆盖率 uses: actions/upload-artifact@v4 @@ -153,18 +144,14 @@ jobs: echo "### 🚦 覆盖率质量门禁" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - # 提取总体覆盖率 - TOTAL_COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print $3}' | sed 's/%//') + # 提取总体覆盖率(awk 整数比较,不需要 bc) + TOTAL_COVERAGE=$(go tool cover -func=coverage.out | grep total | awk '{print int($3)}') echo "总体覆盖率: ${TOTAL_COVERAGE}%" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - # 检查核心模块覆盖率(core, common/parsers必须>50%) - CORE_COVERAGE=$(go tool cover -func=coverage.out | grep "^github.com/shadow1ng/fscan/core/" | grep -v "_test.go" | awk '{sum+=$3; count++} END {if(count>0) print sum/count; else print 0}') - PARSERS_COVERAGE=$(go tool cover -func=coverage.out | grep "^github.com/shadow1ng/fscan/common/parsers/" | grep -v "_test.go" | awk '{sum+=$3; count++} END {if(count>0) print sum/count; else print 0}') - - # 警告阈值:总体<40%, 核心模块<50% - if (( $(echo "$TOTAL_COVERAGE < 40" | bc -l) )); then + # 警告阈值:总体<40% + if [ "$TOTAL_COVERAGE" -lt 40 ]; then echo "⚠️ **警告**: 总体覆盖率 ${TOTAL_COVERAGE}% < 40%,建议补充测试" >> $GITHUB_STEP_SUMMARY fi