项目结构变更

This commit is contained in:
2026-06-09 11:20:24 +08:00
parent fb6cd124c8
commit 871823b3da
45 changed files with 222 additions and 223 deletions

View File

@@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aicheck</groupId>
<artifactId>class-checker</artifactId>
<groupId>com.codechecker</groupId>
<artifactId>code-checker</artifactId>
<version>1.0.0</version>
<build>
<finalName>class-checker</finalName>
<finalName>code-checker</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
@@ -23,7 +23,7 @@
<configuration>
<transformers>
<transformer>
<mainClass>com.aicheck.ClassCheckMain</mainClass>
<mainClass>com.codechecker.CodeCheckMain</mainClass>
</transformer>
</transformers>
<filters>

View File

@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aicheck</groupId>
<artifactId>class-checker</artifactId>
<groupId>com.codechecker</groupId>
<artifactId>code-checker</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
@@ -40,7 +40,7 @@
</dependencies>
<build>
<finalName>class-checker</finalName>
<finalName>code-checker</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -60,7 +60,7 @@
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.aicheck.ClassCheckMain</mainClass>
<mainClass>com.codechecker.CodeCheckMain</mainClass>
</transformer>
</transformers>
<filters>

View File

@@ -1,15 +1,15 @@
package com.aicheck;
package com.codechecker;
import com.aicheck.analyzer.ClassChangeAnalyzer;
import com.aicheck.analyzer.EndpointIndexBuilder;
import com.aicheck.api.analyzer.ApiChangeAnalyzer;
import com.aicheck.api.model.EndpointChangeReport;
import com.aicheck.api.notify.ApiChangeNotifier;
import com.aicheck.config.AppConfig;
import com.aicheck.git.GitChangeScanner;
import com.aicheck.model.ApiEndpoint;
import com.aicheck.model.ClassChangeReport;
import com.aicheck.notify.WeComNotifier;
import com.codechecker.analyzer.ClassChangeAnalyzer;
import com.codechecker.analyzer.EndpointIndexBuilder;
import com.codechecker.api.analyzer.ApiChangeAnalyzer;
import com.codechecker.api.model.EndpointChangeReport;
import com.codechecker.api.notify.ApiChangeNotifier;
import com.codechecker.config.AppConfig;
import com.codechecker.git.GitChangeScanner;
import com.codechecker.model.ApiEndpoint;
import com.codechecker.model.ClassChangeReport;
import com.codechecker.notify.WeComNotifier;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;
@@ -22,9 +22,9 @@ import java.util.concurrent.Callable;
/**
* CLI 入口加载配置 扫描 git 变更 分析影响 输出/发送企微通知
*/
@Command(name = "class-checker", mixinStandardHelpOptions = true,
@Command(name = "code-checker", mixinStandardHelpOptions = true,
description = "检测类变更与 API 变更并发送企业微信通知")
public class ClassCheckMain implements Callable<Integer> {
public class CodeCheckMain implements Callable<Integer> {
@Option(names = "--config", required = true, description = "配置文件路径")
private Path config;
@@ -45,7 +45,7 @@ public class ClassCheckMain implements Callable<Integer> {
/** 程序入口 */
public static void main(String[] args) {
int exitCode = new CommandLine(new ClassCheckMain()).execute(args);
int exitCode = new CommandLine(new CodeCheckMain()).execute(args);
System.exit(exitCode);
}
@@ -53,17 +53,22 @@ public class ClassCheckMain implements Callable<Integer> {
@Override
public Integer call() throws Exception {
AppConfig appConfig = AppConfig.load(config.toAbsolutePath());
if (!appConfig.isMasterEnabled()) {
System.out.println("变更检测已全部关闭checker.enabled=false");
return 0;
}
GitChangeScanner gitScanner = new GitChangeScanner(repoRoot.toAbsolutePath());
int totalSent = 0;
if (appConfig.isEnabled()) {
totalSent += runClassChangeCheck(appConfig, gitScanner);
if (appConfig.isClassCheckEnabled()) {
totalSent += executeClassCheck(appConfig, gitScanner);
} else {
System.out.println("类变更检测已关闭class_check.enabled=false");
}
if (appConfig.isApiCheckEnabled()) {
totalSent += runApiChangeCheck(appConfig, gitScanner);
totalSent += executeApiCheck(appConfig, gitScanner);
} else {
System.out.println("API 变更检测已关闭api_check.enabled=false");
}
@@ -74,7 +79,7 @@ public class ClassCheckMain implements Callable<Integer> {
return 0;
}
private int runClassChangeCheck(AppConfig appConfig, GitChangeScanner gitScanner) throws Exception {
private int executeClassCheck(AppConfig appConfig, GitChangeScanner gitScanner) throws Exception {
System.out.println("=== 类变更检测 ===");
EndpointIndexBuilder indexBuilder = new EndpointIndexBuilder();
Map<String, ApiEndpoint> endpointIndex = indexBuilder.buildIndex(repoRoot.toAbsolutePath(), appConfig);
@@ -95,7 +100,7 @@ public class ClassCheckMain implements Callable<Integer> {
return reports.size();
}
private int runApiChangeCheck(AppConfig appConfig, GitChangeScanner gitScanner) throws Exception {
private int executeApiCheck(AppConfig appConfig, GitChangeScanner gitScanner) throws Exception {
System.out.println("=== API 变更检测 ===");
ApiChangeAnalyzer analyzer = new ApiChangeAnalyzer(gitScanner);
List<EndpointChangeReport> reports = analyzer.analyze(

View File

@@ -1,14 +1,14 @@
package com.aicheck.analyzer;
package com.codechecker.analyzer;
import com.aicheck.config.AppConfig;
import com.aicheck.git.GitChangeScanner;
import com.aicheck.model.ChangedClassFile;
import com.aicheck.model.ClassChangeKind;
import com.aicheck.model.ClassChangeReport;
import com.aicheck.model.FieldChange;
import com.aicheck.model.FieldInfo;
import com.aicheck.parser.ClassDeclParser;
import com.aicheck.parser.ClassFieldParser;
import com.codechecker.config.AppConfig;
import com.codechecker.git.GitChangeScanner;
import com.codechecker.model.ChangedClassFile;
import com.codechecker.model.ClassChangeKind;
import com.codechecker.model.ClassChangeReport;
import com.codechecker.model.FieldChange;
import com.codechecker.model.FieldInfo;
import com.codechecker.parser.ClassDeclParser;
import com.codechecker.parser.ClassFieldParser;
import java.io.IOException;
import java.nio.file.Path;
@@ -32,7 +32,7 @@ public class ClassChangeAnalyzer {
/** 扫描变更文件并逐条分析,无实质变更的 MODIFIED 会被跳过 */
public List<ClassChangeReport> analyze(Path repoRoot, AppConfig config, String oldSha, String newSha,
Map<String, com.aicheck.model.ApiEndpoint> endpointIndex) throws IOException {
Map<String, com.codechecker.model.ApiEndpoint> endpointIndex) throws IOException {
List<ChangedClassFile> changedFiles = gitScanner.scanChangedClasses(oldSha, newSha);
List<ClassChangeReport> reports = new ArrayList<>();
@@ -51,7 +51,7 @@ public class ClassChangeAnalyzer {
/** 处理删除:标记 DELETED 并分析影响(基于旧源码) */
private ClassChangeReport analyzeDeleted(ChangedClassFile changedFile, AppConfig config, Path repoRoot,
String oldSha, Map<String, com.aicheck.model.ApiEndpoint> endpointIndex)
String oldSha, Map<String, com.codechecker.model.ApiEndpoint> endpointIndex)
throws IOException {
String path = changedFile.getRelativePath();
String oldSource = gitScanner.readFileAtCommit(oldSha, path);
@@ -75,7 +75,7 @@ public class ClassChangeAnalyzer {
/** 处理修改/重命名:字段 diff → 判定 changeKind → 影响分析 */
private ClassChangeReport analyzeModifiedOrRenamed(ChangedClassFile changedFile, AppConfig config,
Path repoRoot, String oldSha, String newSha,
Map<String, com.aicheck.model.ApiEndpoint> endpointIndex)
Map<String, com.codechecker.model.ApiEndpoint> endpointIndex)
throws IOException {
String oldPath = changedFile.pathForOldCommit();
String newPath = changedFile.getRelativePath();

View File

@@ -1,8 +1,8 @@
package com.aicheck.analyzer;
package com.codechecker.analyzer;
import com.aicheck.config.AppConfig;
import com.aicheck.model.ApiEndpoint;
import com.aicheck.parser.EndpointParser;
import com.codechecker.config.AppConfig;
import com.codechecker.model.ApiEndpoint;
import com.codechecker.parser.EndpointParser;
import java.io.IOException;
import java.nio.file.Path;

View File

@@ -1,7 +1,7 @@
package com.aicheck.analyzer;
package com.codechecker.analyzer;
import com.aicheck.model.FieldChange;
import com.aicheck.model.FieldInfo;
import com.codechecker.model.FieldChange;
import com.codechecker.model.FieldInfo;
import java.util.ArrayList;
import java.util.LinkedHashMap;

View File

@@ -1,10 +1,10 @@
package com.aicheck.analyzer;
package com.codechecker.analyzer;
import com.aicheck.config.AppConfig;
import com.aicheck.model.ApiEndpoint;
import com.aicheck.model.ClassChangeReport;
import com.aicheck.model.ClassType;
import com.aicheck.parser.ConversionParser;
import com.codechecker.config.AppConfig;
import com.codechecker.model.ApiEndpoint;
import com.codechecker.model.ClassChangeReport;
import com.codechecker.model.ClassType;
import com.codechecker.parser.ConversionParser;
import java.io.IOException;
import java.nio.file.Path;

View File

@@ -1,11 +1,11 @@
package com.aicheck.api.analyzer;
package com.codechecker.api.analyzer;
import com.aicheck.api.model.EndpointChangeReport;
import com.aicheck.api.model.EndpointSnapshot;
import com.aicheck.api.parser.EndpointSnapshotParser;
import com.aicheck.api.scanner.ApiFileChangeScanner;
import com.aicheck.config.AppConfig;
import com.aicheck.git.GitChangeScanner;
import com.codechecker.api.model.EndpointChangeReport;
import com.codechecker.api.model.EndpointSnapshot;
import com.codechecker.api.parser.EndpointSnapshotParser;
import com.codechecker.api.scanner.ApiFileChangeScanner;
import com.codechecker.config.AppConfig;
import com.codechecker.git.GitChangeScanner;
import java.io.IOException;
import java.nio.file.Path;
@@ -13,7 +13,7 @@ import java.util.ArrayList;
import java.util.List;
/**
* API 变更分析编排 {@link com.aicheck.analyzer.ClassChangeAnalyzer} 平行互不调用
* API 变更分析编排 {@link com.codechecker.analyzer.ClassChangeAnalyzer} 平行互不调用
*/
public class ApiChangeAnalyzer {
private final GitChangeScanner gitScanner;

View File

@@ -1,9 +1,9 @@
package com.aicheck.api.analyzer;
package com.codechecker.api.analyzer;
import com.aicheck.api.model.ApiChangeKind;
import com.aicheck.api.model.EndpointChangeReport;
import com.aicheck.api.model.EndpointSnapshot;
import com.aicheck.api.model.ParameterChange;
import com.codechecker.api.model.ApiChangeKind;
import com.codechecker.api.model.EndpointChangeReport;
import com.codechecker.api.model.EndpointSnapshot;
import com.codechecker.api.model.ParameterChange;
import java.io.IOException;
import java.util.ArrayList;

View File

@@ -1,13 +1,13 @@
package com.aicheck.api.analyzer;
package com.codechecker.api.analyzer;
import com.aicheck.analyzer.FieldDiffEngine;
import com.aicheck.api.model.EndpointSnapshot;
import com.aicheck.api.model.MethodParameterSnapshot;
import com.aicheck.api.model.ParameterChange;
import com.aicheck.api.parser.NestedDtoFieldParser;
import com.aicheck.api.parser.NestedFieldInfo;
import com.aicheck.model.FieldChange;
import com.aicheck.model.FieldInfo;
import com.codechecker.analyzer.FieldDiffEngine;
import com.codechecker.api.model.EndpointSnapshot;
import com.codechecker.api.model.MethodParameterSnapshot;
import com.codechecker.api.model.ParameterChange;
import com.codechecker.api.parser.NestedDtoFieldParser;
import com.codechecker.api.parser.NestedFieldInfo;
import com.codechecker.model.FieldChange;
import com.codechecker.model.FieldInfo;
import java.io.IOException;
import java.nio.file.Path;

View File

@@ -1,7 +1,7 @@
package com.aicheck.api.model;
package com.codechecker.api.model;
/**
* API 变更类型与类变更 {@link com.aicheck.model.ClassChangeKind} 独立
* API 变更类型与类变更 {@link com.codechecker.model.ClassChangeKind} 独立
*/
public enum ApiChangeKind {
NEW_ENDPOINT,

View File

@@ -1,4 +1,4 @@
package com.aicheck.api.model;
package com.codechecker.api.model;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package com.aicheck.api.model;
package com.codechecker.api.model;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package com.aicheck.api.model;
package com.codechecker.api.model;
/**
* 接口方法入参快照

View File

@@ -1,4 +1,4 @@
package com.aicheck.api.model;
package com.codechecker.api.model;
/**
* API 参数或 RequestBody 嵌套字段变更

View File

@@ -1,10 +1,10 @@
package com.aicheck.api.notify;
package com.codechecker.api.notify;
import com.aicheck.api.model.ApiChangeKind;
import com.aicheck.api.model.EndpointChangeReport;
import com.aicheck.api.model.ParameterChange;
import com.aicheck.common.MarkdownStyles;
import com.aicheck.common.WeComMarkdownSender;
import com.codechecker.api.model.ApiChangeKind;
import com.codechecker.api.model.EndpointChangeReport;
import com.codechecker.api.model.ParameterChange;
import com.codechecker.common.MarkdownStyles;
import com.codechecker.common.WeComMarkdownSender;
import java.util.ArrayList;
import java.util.LinkedHashMap;

View File

@@ -1,8 +1,8 @@
package com.aicheck.api.parser;
package com.codechecker.api.parser;
import com.aicheck.api.model.EndpointSnapshot;
import com.aicheck.api.model.MethodParameterSnapshot;
import com.aicheck.parser.TypeNameUtils;
import com.codechecker.api.model.EndpointSnapshot;
import com.codechecker.api.model.MethodParameterSnapshot;
import com.codechecker.parser.TypeNameUtils;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.NodeList;

View File

@@ -1,4 +1,4 @@
package com.aicheck.api.parser;
package com.codechecker.api.parser;
import java.io.IOException;
import java.nio.file.Files;

View File

@@ -1,4 +1,4 @@
package com.aicheck.api.parser;
package com.codechecker.api.parser;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.comments.JavadocComment;

View File

@@ -1,8 +1,8 @@
package com.aicheck.api.parser;
package com.codechecker.api.parser;
import com.aicheck.model.FieldInfo;
import com.aicheck.parser.ClassFieldParser;
import com.aicheck.parser.TypeNameUtils;
import com.codechecker.model.FieldInfo;
import com.codechecker.parser.ClassFieldParser;
import com.codechecker.parser.TypeNameUtils;
import java.io.IOException;
import java.nio.file.Path;

View File

@@ -1,4 +1,4 @@
package com.aicheck.api.parser;
package com.codechecker.api.parser;
/**
* DTO 嵌套字段扁平化条目dot path

View File

@@ -1,6 +1,6 @@
package com.aicheck.api.scanner;
package com.codechecker.api.scanner;
import com.aicheck.git.GitChangeScanner;
import com.codechecker.git.GitChangeScanner;
import java.io.IOException;
import java.nio.file.Path;

View File

@@ -1,4 +1,4 @@
package com.aicheck.common;
package com.codechecker.common;
/**
* 企微 Markdown v1 公共样式类变更 / API 变更通知共用

View File

@@ -1,4 +1,4 @@
package com.aicheck.common;
package com.codechecker.common;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;

View File

@@ -1,4 +1,4 @@
package com.aicheck.config;
package com.codechecker.config;
import org.yaml.snakeyaml.Yaml;
@@ -14,7 +14,8 @@ import java.util.Map;
* 读取 .gitea/config.yaml提供检测开关扫描目录企微配置等
*/
public class AppConfig {
private boolean enabled = true;
private boolean masterEnabled = true;
private boolean classCheckEnabled = true;
private boolean dtoEntityConversionEnabled = true;
private List<String> modelDirs = new ArrayList<>();
private List<String> controllerScanDirs = new ArrayList<>();
@@ -42,8 +43,11 @@ public class AppConfig {
}
AppConfig config = new AppConfig();
Map<String, Object> checker = mapOrEmpty(root.get("checker"));
config.masterEnabled = boolOrDefault(checker.get("enabled"), true);
Map<String, Object> classCheck = mapOrEmpty(root.get("class_check"));
config.enabled = boolOrDefault(classCheck.get("enabled"), true);
config.classCheckEnabled = boolOrDefault(classCheck.get("enabled"), true);
Map<String, Object> conversion = mapOrEmpty(classCheck.get("dto_entity_conversion"));
config.dtoEntityConversionEnabled = boolOrDefault(conversion.get("enabled"), true);
@@ -115,9 +119,14 @@ public class AppConfig {
return value == null ? "" : value.toString();
}
/** 变更检测总开关 */
public boolean isEnabled() {
return enabled;
/** 变更检测总开关checker.enabled控制 class_check + api_check */
public boolean isMasterEnabled() {
return masterEnabled;
}
/** 类变更检测开关class_check.enabled */
public boolean isClassCheckEnabled() {
return classCheckEnabled;
}
/** Dto→Entity 类转换检测开关 */

View File

@@ -1,8 +1,8 @@
package com.aicheck.git;
package com.codechecker.git;
import com.aicheck.model.ChangedClassFile;
import com.aicheck.model.ClassType;
import com.aicheck.parser.ClassDeclParser;
import com.codechecker.model.ChangedClassFile;
import com.codechecker.model.ClassType;
import com.codechecker.parser.ClassDeclParser;
import java.io.BufferedReader;
import java.io.IOException;

View File

@@ -1,4 +1,4 @@
package com.aicheck.model;
package com.codechecker.model;
import java.util.LinkedHashSet;
import java.util.Set;

View File

@@ -1,4 +1,4 @@
package com.aicheck.model;
package com.codechecker.model;
/**
* Git 扫描得到的单个 Java 模型类变更记录

View File

@@ -1,4 +1,4 @@
package com.aicheck.model;
package com.codechecker.model;
/**
* 单次类变更的类型决定通知内容与影响分析策略

View File

@@ -1,4 +1,4 @@
package com.aicheck.model;
package com.codechecker.model;
import java.util.ArrayList;
import java.util.List;

View File

@@ -1,4 +1,4 @@
package com.aicheck.model;
package com.codechecker.model;
/**
* 目标模型类后缀类型决定通知模版中展示哪些影响段落

View File

@@ -1,4 +1,4 @@
package com.aicheck.model;
package com.codechecker.model;
/**
* 字段级 diff 结果用于通知中的 [新增]/[删除]/[修改]/[重命名]

View File

@@ -1,4 +1,4 @@
package com.aicheck.model;
package com.codechecker.model;
import java.util.Objects;

View File

@@ -1,9 +1,9 @@
package com.aicheck.notify;
package com.codechecker.notify;
import com.aicheck.model.ApiEndpoint;
import com.aicheck.model.ClassChangeReport;
import com.aicheck.model.ClassType;
import com.aicheck.model.FieldChange;
import com.codechecker.model.ApiEndpoint;
import com.codechecker.model.ClassChangeReport;
import com.codechecker.model.ClassType;
import com.codechecker.model.FieldChange;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;

View File

@@ -1,4 +1,4 @@
package com.aicheck.parser;
package com.codechecker.parser;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;

View File

@@ -1,6 +1,6 @@
package com.aicheck.parser;
package com.codechecker.parser;
import com.aicheck.model.FieldInfo;
import com.codechecker.model.FieldInfo;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;

View File

@@ -1,4 +1,4 @@
package com.aicheck.parser;
package com.codechecker.parser;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;

View File

@@ -1,6 +1,6 @@
package com.aicheck.parser;
package com.codechecker.parser;
import com.aicheck.model.ApiEndpoint;
import com.codechecker.model.ApiEndpoint;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.NodeList;

View File

@@ -1,4 +1,4 @@
package com.aicheck.parser;
package com.codechecker.parser;
import com.github.javaparser.ast.type.ClassOrInterfaceType;
import com.github.javaparser.ast.type.Type;

View File

@@ -1,52 +1,35 @@
# ============================================================
# 变更检测配置
# 由 CI 流水线加载jar 位于 .gitea/workflows/class-checker.jar
# 变更检测配置
# 由 CI 流水线加载jar 位于 .gitea/workflows/code-checker.jar
# 修改后 push 即可生效,无需重新打包 jar除非改动了 Java 源码)
# ============================================================
# 总开关。false 时跳过全部检测,流水线直接成功退出
class_check:
# 总开关false 时跳过 class_check + api_check流水线直接退出
checker:
enabled: true
# Dto → Entity 类转换影响检测开关
# true分析 Dto 变更是否通过 convert() 或 BeanUtils.copyProperties 影响到 Entity
# false通知中「② 类转换影响」段落显示「未开启检测」
# 类变更检测Vo/Dto/Entity/Model 字段增删改等)
class_check:
enabled: true
dto_entity_conversion:
enabled: false
# 模型类源码目录(相对仓库根路径,可配置多个)
# 用于声明 Vo/Dto/Entity/Model 所在模块;当前版本按 git diff 全仓库扫描,
# 类名须以 Dto、Vo、VO、Entity、Model 结尾才会纳入检测
model_dirs:
- jnpf-ftb/jnpf-ftb-entity/src/main/java
# 接口索引扫描目录,用于分析类变更对 API 的影响范围
endpoint_scan:
controllers:
# Spring @RestController / @Controller 所在目录
# 解析 @RequestMapping 等注解建立「HTTP 方法 + 路径 → 入参/返回值类型」索引
- jnpf-ftb/jnpf-ftb-biz/src/main/java
feign_apis:
# OpenFeign @FeignClient 接口所在目录
# 解析 Feign 接口方法签名,补充远程调用端的影响范围
- jnpf-ftb/jnpf-ftb-api/src/main/java
conversion_scan:
# Dto → Entity 转换代码扫描目录(相对仓库根路径,可配置多个)
# 在这些目录中搜索 BeanUtils.copyProperties(source, target) 等调用,
# 判断哪些 Entity 会因 Dto 字段变更而受影响
- jnpf-ftb/jnpf-ftb-biz/src/main/java
# 企业微信通知开关 # false不发送企微完整通知内容仅打印到 CI 日志
wecom:
enabled: true
webhook_url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=61f08cc9-b734-4dff-a931-7f33654c0a81"
# true无变更时打印「无类变更静默退出」后正常结束不发送通知
notify:
only_on_change: true
# API 变更检测(路径 / 请求方式 / 参数),与 class_check 共用同一 jar 与 wecom 配置
# API 变更检测(路径 / 请求方式 / 参数),与 class_check 同级
api_check:
enabled: true
exclude_framework_params: true
@@ -55,3 +38,11 @@ api_check:
- jnpf-ftb/jnpf-ftb-biz/src/main/java
feign_apis:
- jnpf-ftb/jnpf-ftb-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

View File

@@ -1,59 +0,0 @@
name: 类变更检测
run-name: ${{ gitea.actor }}的类变更检测
#on: [push]
on:
push:
branches:
- class-check
workflow_dispatch:
jobs:
class-change-check:
if: ${{ gitea.ref != 'refs/heads/pre' && gitea.ref != 'refs/heads/dev' && gitea.ref != 'refs/heads/master-2.0' }}
runs-on: jdk11
steps:
- name: 检出代码
run: |
git config --global http.sslVerify false
git clone "https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" .
git checkout ${{ gitea.sha }}
#
# run: |
# git clone --depth=2 \
# "http://oauth2:${{ gitea.token }}@host.docker.internal:3000/${{ gitea.repository }}.git" \
# .
# git checkout ${{ gitea.sha }}
- name: 检查配置文件与预编译 jar
run: |
if [ ! -f .gitea/config.yaml ]; then
echo "错误: 缺少 .gitea/config.yaml"
exit 1
fi
if [ ! -f .gitea/workflows/class-checker.jar ]; then
echo "错误: 缺少 .gitea/workflows/class-checker.jar"
echo "请本地执行: powershell -File scripts/build-class-checker.ps1"
exit 1
fi
- name: 验证 JDK
run: |
echo "Java: $(java -version 2>&1 | head -1)"
- name: 执行类变更检测
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 .gitea/workflows/class-checker.jar \
--config .gitea/config.yaml \
--repo-root . \
--old-sha "$OLD_SHA" \
--new-sha "$(git rev-parse HEAD)" \
--modifier "${{ gitea.actor }}" \
--modify-time "$COMMIT_TIME"

View File

@@ -0,0 +1,53 @@
name: CodeChecker 变更检测
run-name: ${{ gitea.actor }}的CodeChecker变更检测
on:
push:
branches:
- class-check
workflow_dispatch:
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:
- name: 检出代码
run: |
git config --global http.sslVerify false
git clone "https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" .
git checkout ${{ gitea.sha }}
- name: 检查配置文件与预编译 jar
run: |
if [ ! -f .gitea/config.yaml ]; then
echo "错误: 缺少 .gitea/config.yaml"
exit 1
fi