feat: 修改从gitea上获取配置的逻辑
All checks were successful
Redis序列化结构检查 / redis-schema-check (push) Has been skipped
All checks were successful
Redis序列化结构检查 / redis-schema-check (push) Has been skipped
This commit is contained in:
@@ -19,7 +19,7 @@ notify:
|
|||||||
enabled: true
|
enabled: true
|
||||||
webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fa14f0b3-e01a-40f6-96bd-e18beb94e85e
|
webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fa14f0b3-e01a-40f6-96bd-e18beb94e85e
|
||||||
notify_on_clean: false
|
notify_on_clean: false
|
||||||
title_prefix: "[Redis数据结构变更]"
|
title_prefix: "【Redis数据结构变更】"
|
||||||
|
|
||||||
# 观察期:先只扫描 jnpf-tenant 模块,稳定后改为 include_modules: []
|
# 观察期:先只扫描 jnpf-tenant 模块,稳定后改为 include_modules: []
|
||||||
include_modules:
|
include_modules:
|
||||||
|
|||||||
@@ -22,20 +22,12 @@ public class ReportBuilder {
|
|||||||
public String toMarkdown(CheckReport report) {
|
public String toMarkdown(CheckReport report) {
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
sb.append("## ").append(titlePrefix).append(' ')
|
sb.append("## ").append(titlePrefix).append(' ')
|
||||||
.append(nvl(report.getRepository())).append('\n');
|
.append(nvl(report.getRepository())).append("\n\n");
|
||||||
sb.append("> 分支: ").append(nvl(report.getBranch())).append('\n');
|
sb.append("> **分支**: ").append(nvl(report.getBranch())).append('\n');
|
||||||
sb.append("> 提交: ").append(shortSha(report.getOldSha()))
|
sb.append("> **提交**: ").append(shortSha(report.getOldSha()))
|
||||||
.append(" → ").append(shortSha(report.getNewSha())).append('\n');
|
.append(" → ").append(shortSha(report.getNewSha())).append('\n');
|
||||||
sb.append("> 提交人: ").append(nvl(report.getModifier())).append('\n');
|
sb.append("> **提交人**: ").append(nvl(report.getModifier())).append('\n');
|
||||||
sb.append("> 时间: ").append(nvl(report.getModifyTime())).append('\n');
|
sb.append("> **时间**: ").append(nvl(report.getModifyTime())).append("\n\n");
|
||||||
sb.append("> 模式: ").append(nvl(report.getMode()));
|
|
||||||
if (report.isBlocked()) {
|
|
||||||
sb.append("(已阻断)");
|
|
||||||
}
|
|
||||||
sb.append('\n');
|
|
||||||
sb.append("> 汇总: P0=").append(report.count(Severity.P0))
|
|
||||||
.append(" P1=").append(report.count(Severity.P1))
|
|
||||||
.append(" P2=").append(report.count(Severity.P2)).append("\n\n");
|
|
||||||
|
|
||||||
Map<Severity, List<SchemaChange>> grouped = new EnumMap<>(Severity.class);
|
Map<Severity, List<SchemaChange>> grouped = new EnumMap<>(Severity.class);
|
||||||
for (SchemaChange c : report.getChanges()) {
|
for (SchemaChange c : report.getChanges()) {
|
||||||
@@ -55,10 +47,10 @@ public class ReportBuilder {
|
|||||||
}
|
}
|
||||||
sb.append('\n');
|
sb.append('\n');
|
||||||
if (c.getWriteLocation() != null) {
|
if (c.getWriteLocation() != null) {
|
||||||
sb.append(" - 位置: ").append(c.getWriteLocation()).append('\n');
|
sb.append(" - **位置**: ").append(c.getWriteLocation()).append('\n');
|
||||||
}
|
}
|
||||||
if (c.getMessage() != null) {
|
if (c.getMessage() != null) {
|
||||||
sb.append(" - ").append(c.getMessage()).append('\n');
|
sb.append(" - ").append(formatDetailMessage(c.getMessage())).append('\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sb.append('\n');
|
sb.append('\n');
|
||||||
@@ -66,6 +58,40 @@ public class ReportBuilder {
|
|||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将详情文案中的 key 加粗,如「删除字段 lastError」→「**删除字段**: lastError」。
|
||||||
|
*/
|
||||||
|
private String formatDetailMessage(String message) {
|
||||||
|
String trimmed = message.trim();
|
||||||
|
int colonCn = trimmed.indexOf(':');
|
||||||
|
if (colonCn > 0 && colonCn <= 24) {
|
||||||
|
return "**" + trimmed.substring(0, colonCn) + "**: "
|
||||||
|
+ trimmed.substring(colonCn + 1).trim();
|
||||||
|
}
|
||||||
|
int colonEn = trimmed.indexOf(':');
|
||||||
|
if (colonEn > 0 && colonEn <= 24 && !trimmed.substring(0, colonEn).contains(" ")) {
|
||||||
|
return "**" + trimmed.substring(0, colonEn) + "**: "
|
||||||
|
+ trimmed.substring(colonEn + 1).trim();
|
||||||
|
}
|
||||||
|
String[] knownPrefixes = {
|
||||||
|
"删除字段 ", "新增字段 ", "字段路径迁移 ", "新增包装层 ", "新增 Redis 写入点,",
|
||||||
|
"删除 Redis 写入点,原 value 类型: "
|
||||||
|
};
|
||||||
|
for (String prefix : knownPrefixes) {
|
||||||
|
if (trimmed.startsWith(prefix)) {
|
||||||
|
String key = prefix.trim();
|
||||||
|
if (key.endsWith(",") || key.endsWith(",")) {
|
||||||
|
key = key.substring(0, key.length() - 1);
|
||||||
|
}
|
||||||
|
return "**" + key + "**: " + trimmed.substring(prefix.length()).trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (trimmed.startsWith("字段 ") && trimmed.contains(" 类型由 ")) {
|
||||||
|
return "**字段类型变更**: " + trimmed.substring("字段 ".length()).trim();
|
||||||
|
}
|
||||||
|
return trimmed;
|
||||||
|
}
|
||||||
|
|
||||||
public String toConsole(CheckReport report) {
|
public String toConsole(CheckReport report) {
|
||||||
if (!report.hasChanges()) {
|
if (!report.hasChanges()) {
|
||||||
return "未检测到 Redis 序列化结构变更。";
|
return "未检测到 Redis 序列化结构变更。";
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
package com.codechecker.redis.report;
|
||||||
|
|
||||||
|
import com.codechecker.redis.diff.ChangeType;
|
||||||
|
import com.codechecker.redis.diff.SchemaChange;
|
||||||
|
import com.codechecker.redis.diff.Severity;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
class ReportBuilderTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void markdownTemplateWithoutModeAndSummary() {
|
||||||
|
CheckReport report = new CheckReport();
|
||||||
|
report.setRepository("jnpf-java-cloud");
|
||||||
|
report.setBranch("code/redis_change_detection_v1.0");
|
||||||
|
report.setOldSha("cedd161c");
|
||||||
|
report.setNewSha("67c8a6eb");
|
||||||
|
report.setModifier("dongzi");
|
||||||
|
report.setModifyTime("2026-07-13 16:54:17");
|
||||||
|
report.setMode("notify");
|
||||||
|
|
||||||
|
SchemaChange change = new SchemaChange(ChangeType.FIELD_REMOVED);
|
||||||
|
change.setSeverity(Severity.P0);
|
||||||
|
change.setKeyPattern("saas:period-config:migration:current");
|
||||||
|
change.setWriteLocation("SaasPeriodConfigMigrationRedisSupport#putCurrent:41");
|
||||||
|
change.setMessage("删除字段 lastError1");
|
||||||
|
report.getChanges().add(change);
|
||||||
|
|
||||||
|
String md = new ReportBuilder("[Redis数据结构变更]").toMarkdown(report);
|
||||||
|
|
||||||
|
assertTrue(md.startsWith("## [Redis数据结构变更] jnpf-java-cloud"));
|
||||||
|
assertTrue(md.contains("> **分支**: code/redis_change_detection_v1.0"));
|
||||||
|
assertTrue(md.contains("> **提交**: cedd161c → 67c8a6eb"));
|
||||||
|
assertTrue(md.contains("> **提交人**: dongzi"));
|
||||||
|
assertTrue(md.contains("> **时间**: 2026-07-13 16:54:17"));
|
||||||
|
assertTrue(md.contains(" - **位置**: SaasPeriodConfigMigrationRedisSupport#putCurrent:41"));
|
||||||
|
assertTrue(md.contains(" - **删除字段**: lastError1"));
|
||||||
|
assertFalse(md.contains("模式"));
|
||||||
|
assertFalse(md.contains("汇总"));
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user