feat: 修改从gitea上获取配置的逻辑
All checks were successful
Redis序列化结构检查 / redis-schema-check (push) Has been skipped

This commit is contained in:
2026-07-13 16:49:00 +08:00
parent 327546b127
commit 797f435ccd
7 changed files with 52 additions and 17 deletions

View File

@@ -75,7 +75,7 @@ public class RedisSchemaCheckerMain implements Callable<Integer> {
boolean shouldNotify = config.getNotify().isEnabled()
&& (report.hasChanges() || config.getNotify().isNotifyOnClean());
if (shouldNotify && !dryRun) {
String webhook = System.getenv(config.getNotify().getWebhookEnv());
String webhook = config.getNotify().getWebhookUrl();
boolean ok = new WeComNotifier().sendMarkdown(webhook, builder.toMarkdown(report));
System.out.println("[redis-schema-checker] 企微通知发送: " + (ok ? "成功" : "失败/跳过"));
}

View File

@@ -37,7 +37,8 @@ public class CheckerConfig {
public static class Notify {
private boolean enabled = true;
private String webhookEnv = "WECOM_ROBOT_WEBHOOK";
/** 企微机器人 Webhook 完整 URL */
private String webhookUrl = "";
private boolean notifyOnClean = false;
private String titlePrefix = "[Redis结构变更]";
@@ -49,12 +50,12 @@ public class CheckerConfig {
this.enabled = enabled;
}
public String getWebhookEnv() {
return webhookEnv;
public String getWebhookUrl() {
return webhookUrl;
}
public void setWebhookEnv(String webhookEnv) {
this.webhookEnv = webhookEnv;
public void setWebhookUrl(String webhookUrl) {
this.webhookUrl = webhookUrl;
}
public boolean isNotifyOnClean() {

View File

@@ -85,7 +85,7 @@ public final class ConfigLoader {
Map<String, Object> notify = asMap(map.get("notify"));
CheckerConfig.Notify n = config.getNotify();
n.setEnabled(bool(notify, "enabled", true));
n.setWebhookEnv(str(notify, "webhook_env", "WECOM_ROBOT_WEBHOOK"));
n.setWebhookUrl(resolveWebhookUrl(notify));
n.setNotifyOnClean(bool(notify, "notify_on_clean", false));
n.setTitlePrefix(str(notify, "title_prefix", "[Redis结构变更]"));
@@ -137,6 +137,21 @@ public final class ConfigLoader {
return config;
}
/**
* 优先读取 webhook_url兼容旧字段 webhook_env值为 http 开头时视为 URL
*/
private static String resolveWebhookUrl(Map<String, Object> notify) {
String url = str(notify, "webhook_url", "");
if (url != null && !url.trim().isEmpty()) {
return url.trim();
}
String legacy = str(notify, "webhook_env", "");
if (legacy != null && legacy.trim().startsWith("http")) {
return legacy.trim();
}
return "";
}
@SuppressWarnings("unchecked")
private static Map<String, Object> asMap(Object obj) {
if (obj instanceof Map) {

View File

@@ -20,7 +20,7 @@ source_roots:
# 通知配置
notify:
enabled: true
webhook_env: "WECOM_ROBOT_WEBHOOK"
webhook_url: ""
notify_on_clean: false
title_prefix: "[Redis结构变更]"

View File

@@ -38,4 +38,28 @@ class ConfigLoaderTest {
assertFalse(config.getNotify().isEnabled());
assertTrue(config.getBlockSeverities().contains("P2"));
}
@Test
void loadsWebhookUrlFromConfig(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException {
Path cfg = tmp.resolve("biz.yaml");
Files.write(cfg, ("notify:\n"
+ " webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=test\n"
).getBytes(StandardCharsets.UTF_8));
CheckerConfig config = ConfigLoader.load(cfg);
assertEquals("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=test",
config.getNotify().getWebhookUrl());
}
@Test
void legacyWebhookEnvUrlStillWorks(@org.junit.jupiter.api.io.TempDir Path tmp) throws IOException {
Path cfg = tmp.resolve("biz.yaml");
Files.write(cfg, ("notify:\n"
+ " webhook_env: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=legacy\n"
).getBytes(StandardCharsets.UTF_8));
CheckerConfig config = ConfigLoader.load(cfg);
assertEquals("https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=legacy",
config.getNotify().getWebhookUrl());
}
}