feat: 自动检测 Jenkins 更新

This commit is contained in:
2024-03-17 00:08:50 +08:00
parent 401fb60cea
commit 0fd72513be
5 changed files with 169 additions and 3 deletions

View File

@@ -2,11 +2,21 @@ package cn.hamster3.mc.plugin.core.bungee;
import cn.hamster3.mc.plugin.core.bungee.api.CoreBungeeAPI;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.JenkinsUtils;
import lombok.Getter;
import net.kyori.adventure.platform.bungeecord.BungeeAudiences;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.logging.Logger;
@@ -56,6 +66,7 @@ public class HamsterCorePlugin extends Plugin {
logger.info("已创建 AudienceProvider");
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
showUpdate(ProxyServer.getInstance().getConsole());
}
@Override
@@ -73,4 +84,40 @@ public class HamsterCorePlugin extends Plugin {
long time = System.currentTimeMillis() - start;
logger.info("仓鼠核心已关闭,总计耗时 " + time + " ms");
}
private void showUpdate(@NotNull CommandSender sender) {
ProxyServer.getInstance().getScheduler().runAsync(HamsterCorePlugin.getInstance(), () -> {
for (Plugin plugin : ProxyServer.getInstance().getPluginManager().getPlugins()) {
InputStream resource = plugin.getResourceAsStream("jenkins.yml");
if (resource == null) {
continue;
}
try (InputStreamReader reader = new InputStreamReader(resource, StandardCharsets.UTF_8)) {
YamlConfig jenkinsConfig = YamlConfig.load(reader);
String jobUrl = jenkinsConfig.getString("JOB_URL");
if (jobUrl == null || jobUrl.equalsIgnoreCase("NONE")) {
continue;
}
String buildNumberString = jenkinsConfig.getString("BUILD_NUMBER");
if (buildNumberString == null || buildNumberString.equalsIgnoreCase("NONE")) {
continue;
}
int lastStableBuild = JenkinsUtils.getLastStableBuild(jobUrl, null, null);
int buildNumber = Integer.parseInt(buildNumberString);
int version = lastStableBuild - buildNumber;
if (version <= 0) {
continue;
}
String pluginName = plugin.getDescription().getName();
sender.sendMessage(TextComponent.fromLegacyText(
String.format("§a检测到服务器内安装的 %s 插件有 %d 个版本更新", pluginName, version)
));
sender.sendMessage(TextComponent.fromLegacyText(
String.format("§b下载链接: &b&n&l%s", jobUrl)
));
} catch (IOException ignored) {
}
}
});
}
}