From 417c4d5afd1eed37f7f3f0373c8e70b98dc998d2 Mon Sep 17 00:00:00 2001 From: dongzi Date: Mon, 20 Jul 2026 14:50:08 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/config/code-check-config.yaml | 288 +++++++++++++++++++++++++++ .gitea/workflows/code-check.yaml | 83 ++++++++ 2 files changed, 371 insertions(+) create mode 100644 .gitea/config/code-check-config.yaml create mode 100644 .gitea/workflows/code-check.yaml diff --git a/.gitea/config/code-check-config.yaml b/.gitea/config/code-check-config.yaml new file mode 100644 index 0000000..532adfd --- /dev/null +++ b/.gitea/config/code-check-config.yaml @@ -0,0 +1,288 @@ +# ============================================================ +# 变更检测配置 +# ============================================================ + + +# 总开关:false-》流水线直接退出 +checker: + enabled: true + +# 类变更检测(Vo/Dto/Entity/Model 字段增删改等) +class_check: + enabled: true + # Dto 类字段变更后,继续检测受影响 Controller 的 API 参数变更 + dto_api_follow_up: + enabled: true + # Dto/Vo 嵌套关系索引:影响分析传播 & API 参数字段展开深度 + nest_index: + max_depth: 3 + dto_entity_conversion: + enabled: false + + # *-entity / *-model / *-common-entity / *-doris-model 模块 + model_dirs: + # fantaibao + - fantaibao-data-analysis/fantaibao-data-analysis-common-entity/src/main/java + - fantaibao-data-analysis/fantaibao-data-analysis-entity/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-entity/src/main/java + - fantaibao-personnel-evaluation/fantaibao-personnel-evaluation-entity/src/main/java + - fantaibao-thousands-faces/fantaibao-thousands-faces-entity/src/main/java + - fantaibao-training/fantaibao-training-entity/src/main/java + # jnpf + - jnpf-app/jnpf-app-entity/src/main/java + - jnpf-attence/jnpf-attence-entity/src/main/java + - jnpf-bigdata-support/jnpf-bigdata-support-entity/src/main/java + - jnpf-capital/jnpf-capital-entity/src/main/java + - jnpf-contract/jnpf-contract-entity/src/main/java + - jnpf-duty/jnpf-duty-entity/src/main/java + - jnpf-email/jnpf-email-entity/src/main/java + - jnpf-example/jnpf-example-entity/src/main/java + - jnpf-extend/jnpf-extend-entity/src/main/java + - jnpf-file/jnpf-file-model/src/main/java + - jnpf-file/jnpf-file-yozo/jnpf-file-yozo-entity/src/main/java + - jnpf-form/jnpf-form-entity/src/main/java + - jnpf-ftb/jnpf-ftb-entity/src/main/java + - jnpf-im/jnpf-im-entity/src/main/java + - jnpf-memoo-scheduling/jnpf-memoo-scheduling-entity/src/main/java + - jnpf-memoo-share/jnpf-memoo-share-entity/src/main/java + - jnpf-message/jnpf-message-entity/src/main/java + - jnpf-oauth/jnpf-oauth-entity/src/main/java + - jnpf-permission/jnpf-permission-entity/src/main/java + - jnpf-pub-opinion/jnpf-pub-opinion-doris-model/src/main/java + - jnpf-pub-opinion/jnpf-pub-opinion-entity/src/main/java + - jnpf-saas-billing/jnpf-saas-billing-entity/src/main/java + - jnpf-salary/jnpf-salary-entity/src/main/java + - jnpf-system/jnpf-system-entity/src/main/java + - jnpf-tenant/jnpf-tenant-entity/src/main/java + - jnpf-visualdata/jnpf-visualdata-entity/src/main/java + - jnpf-visualdev/jnpf-visualdev-base/jnpf-visualdev-base-entity/src/main/java + - jnpf-visualdev/jnpf-visualdev-generater/jnpf-visualdev-generater-entity/src/main/java + - jnpf-visualdev/jnpf-visualdev-onlinedev/jnpf-visualdev-onlinedev-entity/src/main/java + - jnpf-visualdev/jnpf-visualdev-portal/jnpf-visualdev-portal-entity/src/main/java + - jnpf-websocket/jnpf-websocket-entity/src/main/java + - jnpf-workflow/jnpf-workflow-engine/jnpf-workflow-engine-entity/src/main/java + - jnpf-workflow/jnpf-workflow-form/jnpf-workflow-form-entity/src/main/java + + # 接口索引扫描目录,用于分析类变更对 API 的影响范围 + endpoint_scan: + controllers: + # fantaibao + - fantaibao-data-analysis/fantaibao-data-analysis-server/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-consumers/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-controller/src/main/java + - fantaibao-personnel-evaluation/fantaibao-personnel-evaluation-biz/src/main/java + - fantaibao-thousands-faces/fantaibao-thousands-faces-biz/src/main/java + - fantaibao-training/fantaibao-training-consumers/src/main/java + - fantaibao-training/fantaibao-training-controller/src/main/java + # jnpf + - jnpf-app/jnpf-app-controller/src/main/java + - jnpf-attence/jnpf-attence-controller/src/main/java + - jnpf-bigdata-support/jnpf-bigdata-support-biz/src/main/java + - jnpf-capital/jnpf-capital-biz/src/main/java + - jnpf-contract/jnpf-contract-biz/src/main/java + - jnpf-duty/jnpf-duty-controller/src/main/java + - jnpf-email/jnpf-email-biz/src/main/java + - jnpf-example/jnpf-example-consumers/src/main/java + - jnpf-example/jnpf-example-controller/src/main/java + - jnpf-extend/jnpf-extend-controller/src/main/java + - jnpf-file/jnpf-file-storage/src/main/java + - jnpf-file/jnpf-file-upload/src/main/java + - jnpf-file/jnpf-file-yozo/jnpf-file-yozo-controller/src/main/java + - jnpf-form/jnpf-form-controller/src/main/java + - jnpf-ftb/jnpf-ftb-biz/src/main/java + - jnpf-im/jnpf-im-biz/src/main/java + - jnpf-memoo-scheduling/jnpf-memoo-scheduling-controller/src/main/java + - jnpf-memoo-share/jnpf-memoo-share-controller/src/main/java + - jnpf-message/jnpf-message-controller/src/main/java + - jnpf-oauth/jnpf-oauth-controller/src/main/java + - jnpf-permission/jnpf-permission-biz/src/main/java + - jnpf-permission/jnpf-permission-controller/src/main/java + - jnpf-pub-opinion/jnpf-pub-opinion-controller/src/main/java + - jnpf-saas-billing/jnpf-saas-billing-biz/src/main/java + - jnpf-salary/jnpf-salary-biz/src/main/java + - jnpf-scheduletask/jnpf-scheduletask-controller/src/main/java + - jnpf-system/jnpf-system-controller/src/main/java + - jnpf-tenant/jnpf-tenant-biz/src/main/java + - jnpf-tenant/jnpf-tenant-controller/src/main/java + - jnpf-visualdata/jnpf-visualdata-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-base/jnpf-visualdev-base-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-generater/jnpf-visualdev-generater-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-onlinedev/jnpf-visualdev-onlinedev-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-portal/jnpf-visualdev-portal-controller/src/main/java + - jnpf-websocket/jnpf-websocket-biz/src/main/java + - jnpf-workflow/jnpf-workflow-engine/jnpf-workflow-engine-controller/src/main/java + - jnpf-workflow/jnpf-workflow-form/jnpf-workflow-form-controller/src/main/java + feign_apis: + # fantaibao + - fantaibao-data-analysis/fantaibao-data-analysis-api/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-api/src/main/java + - fantaibao-personnel-evaluation/fantaibao-personnel-evaluation-api/src/main/java + - fantaibao-training/fantaibao-training-api/src/main/java + # jnpf + - jnpf-app/jnpf-app-api/src/main/java + - jnpf-attence/jnpf-attence-api/src/main/java + - jnpf-capital/jnpf-capital-api/src/main/java + - jnpf-contract/jnpf-contract-api/src/main/java + - jnpf-duty/jnpf-duty-api/src/main/java + - jnpf-email/jnpf-email-api/src/main/java + - jnpf-example/jnpf-example-api/src/main/java + - jnpf-extend/jnpf-extend-api/src/main/java + - jnpf-file/jnpf-file-api/src/main/java + - jnpf-form/jnpf-form-api/src/main/java + - jnpf-ftb/jnpf-ftb-api/src/main/java + - jnpf-im/jnpf-im-api/src/main/java + - jnpf-memoo-scheduling/jnpf-memoo-scheduling-api/src/main/java + - jnpf-memoo-share/jnpf-memoo-share-api/src/main/java + - jnpf-message/jnpf-message-api/src/main/java + - jnpf-oauth/jnpf-oauth-api/src/main/java + - jnpf-permission/jnpf-permission-api/src/main/java + - jnpf-saas-billing/jnpf-saas-billing-api/src/main/java + - jnpf-salary/jnpf-salary-api/src/main/java + - jnpf-scheduletask/jnpf-scheduletask-api/src/main/java + - jnpf-system/jnpf-system-api/src/main/java + - jnpf-tenant/jnpf-tenant-api/src/main/java + - jnpf-visualdev/jnpf-visualdev-base/jnpf-visualdev-base-api/src/main/java + - jnpf-visualdev/jnpf-visualdev-onlinedev/jnpf-visualdev-onlinedev-api/src/main/java + - jnpf-visualdev/jnpf-visualdev-portal/jnpf-visualdev-portal-api/src/main/java + - jnpf-websocket/jnpf-websocket-api/src/main/java + - jnpf-workflow/jnpf-workflow-engine/jnpf-workflow-engine-api/src/main/java + + # Dto/Entity 转换逻辑扫描目录(*-biz 及含业务逻辑的 server 模块) + conversion_scan: + # fantaibao + - fantaibao-data-analysis/fantaibao-data-analysis-server/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-biz/src/main/java + - fantaibao-personnel-evaluation/fantaibao-personnel-evaluation-biz/src/main/java + - fantaibao-thousands-faces/fantaibao-thousands-faces-biz/src/main/java + - fantaibao-training/fantaibao-training-biz/src/main/java + # jnpf + - jnpf-app/jnpf-app-biz/src/main/java + - jnpf-attence/jnpf-attence-biz/src/main/java + - jnpf-bigdata-support/jnpf-bigdata-support-biz/src/main/java + - jnpf-capital/jnpf-capital-biz/src/main/java + - jnpf-contract/jnpf-contract-biz/src/main/java + - jnpf-duty/jnpf-duty-biz/src/main/java + - jnpf-email/jnpf-email-biz/src/main/java + - jnpf-example/jnpf-example-biz/src/main/java + - jnpf-extend/jnpf-extend-biz/src/main/java + - jnpf-file/jnpf-file-yozo/jnpf-file-yozo-biz/src/main/java + - jnpf-form/jnpf-form-biz/src/main/java + - jnpf-ftb/jnpf-ftb-biz/src/main/java + - jnpf-im/jnpf-im-biz/src/main/java + - jnpf-memoo-scheduling/jnpf-memoo-scheduling-biz/src/main/java + - jnpf-memoo-share/jnpf-memoo-share-biz/src/main/java + - jnpf-message/jnpf-message-biz/src/main/java + - jnpf-oauth/jnpf-oauth-biz/src/main/java + - jnpf-permission/jnpf-permission-biz/src/main/java + - jnpf-pub-opinion/jnpf-pub-opinion-app-biz/src/main/java + - jnpf-pub-opinion/jnpf-pub-opinion-biz/src/main/java + - jnpf-saas-billing/jnpf-saas-billing-biz/src/main/java + - jnpf-salary/jnpf-salary-biz/src/main/java + - jnpf-system/jnpf-system-biz/src/main/java + - jnpf-tenant/jnpf-tenant-biz/src/main/java + - jnpf-visualdata/jnpf-visualdata-biz/src/main/java + - jnpf-visualdev/jnpf-visualdev-base/jnpf-visualdev-base-biz/src/main/java + - jnpf-visualdev/jnpf-visualdev-generater/jnpf-visualdev-generater-biz/src/main/java + - jnpf-visualdev/jnpf-visualdev-onlinedev/jnpf-visualdev-onlinedev-biz/src/main/java + - jnpf-visualdev/jnpf-visualdev-portal/jnpf-visualdev-portal-biz/src/main/java + - jnpf-websocket/jnpf-websocket-biz/src/main/java + - jnpf-workflow/jnpf-workflow-engine/jnpf-workflow-engine-biz/src/main/java + - jnpf-workflow/jnpf-workflow-form/jnpf-workflow-form-biz/src/main/java + + +# API 变更检测(路径 / 请求方式 / 参数),与 class_check 同级 +api_check: + enabled: true + exclude_framework_params: true + endpoint_scan: + controllers: + # fantaibao + - fantaibao-data-analysis/fantaibao-data-analysis-server/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-consumers/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-controller/src/main/java + - fantaibao-personnel-evaluation/fantaibao-personnel-evaluation-biz/src/main/java + - fantaibao-thousands-faces/fantaibao-thousands-faces-biz/src/main/java + - fantaibao-training/fantaibao-training-consumers/src/main/java + - fantaibao-training/fantaibao-training-controller/src/main/java + # jnpf + - jnpf-app/jnpf-app-controller/src/main/java + - jnpf-attence/jnpf-attence-controller/src/main/java + - jnpf-bigdata-support/jnpf-bigdata-support-biz/src/main/java + - jnpf-capital/jnpf-capital-biz/src/main/java + - jnpf-contract/jnpf-contract-biz/src/main/java + - jnpf-duty/jnpf-duty-controller/src/main/java + - jnpf-email/jnpf-email-biz/src/main/java + - jnpf-example/jnpf-example-consumers/src/main/java + - jnpf-example/jnpf-example-controller/src/main/java + - jnpf-extend/jnpf-extend-controller/src/main/java + - jnpf-file/jnpf-file-storage/src/main/java + - jnpf-file/jnpf-file-upload/src/main/java + - jnpf-file/jnpf-file-yozo/jnpf-file-yozo-controller/src/main/java + - jnpf-form/jnpf-form-controller/src/main/java + - jnpf-ftb/jnpf-ftb-biz/src/main/java + - jnpf-im/jnpf-im-biz/src/main/java + - jnpf-memoo-scheduling/jnpf-memoo-scheduling-controller/src/main/java + - jnpf-memoo-share/jnpf-memoo-share-controller/src/main/java + - jnpf-message/jnpf-message-controller/src/main/java + - jnpf-oauth/jnpf-oauth-controller/src/main/java + - jnpf-permission/jnpf-permission-biz/src/main/java + - jnpf-permission/jnpf-permission-controller/src/main/java + - jnpf-pub-opinion/jnpf-pub-opinion-controller/src/main/java + - jnpf-saas-billing/jnpf-saas-billing-biz/src/main/java + - jnpf-salary/jnpf-salary-biz/src/main/java + - jnpf-scheduletask/jnpf-scheduletask-controller/src/main/java + - jnpf-system/jnpf-system-controller/src/main/java + - jnpf-tenant/jnpf-tenant-biz/src/main/java + - jnpf-tenant/jnpf-tenant-controller/src/main/java + - jnpf-visualdata/jnpf-visualdata-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-base/jnpf-visualdev-base-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-generater/jnpf-visualdev-generater-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-onlinedev/jnpf-visualdev-onlinedev-controller/src/main/java + - jnpf-visualdev/jnpf-visualdev-portal/jnpf-visualdev-portal-controller/src/main/java + - jnpf-websocket/jnpf-websocket-biz/src/main/java + - jnpf-workflow/jnpf-workflow-engine/jnpf-workflow-engine-controller/src/main/java + - jnpf-workflow/jnpf-workflow-form/jnpf-workflow-form-controller/src/main/java + feign_apis: + # fantaibao + - fantaibao-data-analysis/fantaibao-data-analysis-api/src/main/java + - fantaibao-patrol-store/fantaibao-patrol-store-api/src/main/java + - fantaibao-personnel-evaluation/fantaibao-personnel-evaluation-api/src/main/java + - fantaibao-training/fantaibao-training-api/src/main/java + # jnpf + - jnpf-app/jnpf-app-api/src/main/java + - jnpf-attence/jnpf-attence-api/src/main/java + - jnpf-capital/jnpf-capital-api/src/main/java + - jnpf-contract/jnpf-contract-api/src/main/java + - jnpf-duty/jnpf-duty-api/src/main/java + - jnpf-email/jnpf-email-api/src/main/java + - jnpf-example/jnpf-example-api/src/main/java + - jnpf-extend/jnpf-extend-api/src/main/java + - jnpf-file/jnpf-file-api/src/main/java + - jnpf-form/jnpf-form-api/src/main/java + - jnpf-ftb/jnpf-ftb-api/src/main/java + - jnpf-im/jnpf-im-api/src/main/java + - jnpf-memoo-scheduling/jnpf-memoo-scheduling-api/src/main/java + - jnpf-memoo-share/jnpf-memoo-share-api/src/main/java + - jnpf-message/jnpf-message-api/src/main/java + - jnpf-oauth/jnpf-oauth-api/src/main/java + - jnpf-permission/jnpf-permission-api/src/main/java + - jnpf-saas-billing/jnpf-saas-billing-api/src/main/java + - jnpf-salary/jnpf-salary-api/src/main/java + - jnpf-scheduletask/jnpf-scheduletask-api/src/main/java + - jnpf-system/jnpf-system-api/src/main/java + - jnpf-tenant/jnpf-tenant-api/src/main/java + - jnpf-visualdev/jnpf-visualdev-base/jnpf-visualdev-base-api/src/main/java + - jnpf-visualdev/jnpf-visualdev-onlinedev/jnpf-visualdev-onlinedev-api/src/main/java + - jnpf-visualdev/jnpf-visualdev-portal/jnpf-visualdev-portal-api/src/main/java + - jnpf-websocket/jnpf-websocket-api/src/main/java + - jnpf-workflow/jnpf-workflow-engine/jnpf-workflow-engine-api/src/main/java + +# 企业微信通知开关 +wecom: + enabled: true + webhook_url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=61f08cc9-b734-4dff-a931-7f33654c0a81" + +notify: + only_on_change: true + # 实体类变更与 API 参数变更重叠时的通知策略:both | class_only | api_only + dto_overlap_mode: class_only diff --git a/.gitea/workflows/code-check.yaml b/.gitea/workflows/code-check.yaml new file mode 100644 index 0000000..11e6fed --- /dev/null +++ b/.gitea/workflows/code-check.yaml @@ -0,0 +1,83 @@ +name: CodeChecker 变更检测 +run-name: ${{ gitea.actor }}的CodeChecker变更检测 + +on: + push: +# branches: +# - check-code-dev-test + workflow_dispatch: + +env: + # CodeChecker 私库坐标:com.codechecker:code-checker:1.0.0 + CODE_CHECKER_VERSION: "1.0.0" + CODE_CHECKER_REPO_URL: "http://192.168.3.25:18081/nexus/repository/maven-releases" + +jobs: + code-check: + if: ${{ gitea.ref != 'refs/heads/pre' && gitea.ref != 'refs/heads/dev' && gitea.ref != 'refs/heads/master-2.0' }} + runs-on: jdk11 + steps: + # 浅克隆:CodeChecker 仅需 HEAD 与 HEAD~1,避免全量拉取 + # 指定 --branch 确保非默认分支推送时也能正确检出 gitea.sha + - name: 检出代码 + run: | + git config --global http.sslVerify false + git clone --depth 2 --single-branch --branch "${{ gitea.ref_name }}" \ + "https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" . + # 将 commit 绑定回本地分支,避免 detached HEAD 导致分支识别为「未知」 + git checkout -B "${{ gitea.ref_name }}" "${{ gitea.sha }}" + # git config --global http.sslVerify false + # git clone --depth 2 --single-branch --branch "${{ gitea.ref_name }}" \ + # "https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" . + # git checkout ${{ gitea.sha }} + + - name: 检查配置文件 + run: | + if [ ! -f .gitea/config/code-check-config.yaml ]; then + echo "错误: 缺少 .gitea/config/code-check-config.yaml" + exit 1 + fi + + - name: 从 Nexus 私库下载 CodeChecker + run: | + GROUP_PATH="com/codechecker/code-checker" + JAR_NAME="code-checker-${CODE_CHECKER_VERSION}.jar" + JAR_URL="${CODE_CHECKER_REPO_URL}/${GROUP_PATH}/${CODE_CHECKER_VERSION}/${JAR_NAME}" + JAR_PATH="/tmp/${JAR_NAME}" + + echo "下载: ${JAR_URL}" + if command -v curl >/dev/null 2>&1; then + curl -fsSL -o "${JAR_PATH}" "${JAR_URL}" + elif command -v wget >/dev/null 2>&1; then + wget -q -O "${JAR_PATH}" "${JAR_URL}" + else + echo "错误: Runner 缺少 curl 或 wget,无法从 Nexus 下载 jar" + exit 1 + fi + + if [ ! -s "${JAR_PATH}" ]; then + echo "错误: 下载失败或文件为空: ${JAR_PATH}" + exit 1 + fi + + ls -lh "${JAR_PATH}" + + - name: 验证 JDK + run: | + echo "Java: $(java -version 2>&1 | head -1)" + + - name: 执行 CodeChecker 变更检测 + run: | + OLD_SHA=$(git rev-parse HEAD~1 2>/dev/null || echo "") + if [ -z "$OLD_SHA" ]; then + echo "首次提交,跳过变更检测" + exit 0 + fi + COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S') + java -jar "/tmp/code-checker-${CODE_CHECKER_VERSION}.jar" \ + --config .gitea/config/code-check-config.yaml \ + --repo-root . \ + --old-sha "$OLD_SHA" \ + --new-sha "$(git rev-parse HEAD)" \ + --modifier "${{ gitea.actor }}" \ + --modify-time "$COMMIT_TIME"