feat: 自动检测 Jenkins 更新

This commit is contained in:
2024-03-17 00:32:59 +08:00
parent 0fd72513be
commit 21a91a8405
4 changed files with 56 additions and 56 deletions

View File

@@ -45,12 +45,12 @@ subprojects {
} }
processResources { processResources {
val map = mutableMapOf<String, String>() val map = mutableMapOf<String, String>()
map["BUILD_ID"] = System.getenv().getOrDefault("BUILD_ID", "NONE") map["BUILD_ID"] = System.getenv().getOrDefault("BUILD_ID", "DEV")
map["BUILD_NUMBER"] = System.getenv().getOrDefault("BUILD_NUMBER", "NONE") map["BUILD_NUMBER"] = System.getenv().getOrDefault("BUILD_NUMBER", "DEV")
map["BUILD_DISPLAY_NAME"] = System.getenv().getOrDefault("BUILD_DISPLAY_NAME", "NONE") map["BUILD_DISPLAY_NAME"] = System.getenv().getOrDefault("BUILD_DISPLAY_NAME", "DEV")
map["JOB_URL"] = System.getenv().getOrDefault("JOB_URL", "NONE") map["JOB_URL"] = System.getenv().getOrDefault("JOB_URL", "DEV")
map["BUILD_URL"] = System.getenv().getOrDefault("BUILD_URL", "NONE") map["BUILD_URL"] = System.getenv().getOrDefault("BUILD_URL", "DEV")
map["GIT_COMMIT"] = System.getenv().getOrDefault("GIT_COMMIT", "NONE") map["GIT_COMMIT"] = System.getenv().getOrDefault("GIT_COMMIT", "DEV")
filesMatching("jenkins.yml") { filesMatching("jenkins.yml") {
expand(map) expand(map)
} }

View File

@@ -14,25 +14,17 @@ import cn.hamster3.mc.plugin.core.bukkit.page.handler.PageHandler;
import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener; import cn.hamster3.mc.plugin.core.bukkit.page.listener.PageListener;
import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion; import cn.hamster3.mc.plugin.core.bukkit.util.MinecraftVersion;
import cn.hamster3.mc.plugin.core.common.api.CoreAPI; 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 lombok.Getter;
import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.InventoryView;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.io.File; 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.Files;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.util.Objects; import java.util.Objects;
@@ -67,38 +59,6 @@ public class HamsterCorePlugin extends JavaPlugin {
return Bukkit.getScheduler().runTaskAsynchronously(instance, runnable); return Bukkit.getScheduler().runTaskAsynchronously(instance, runnable);
} }
public static void showUpdate(@NotNull CommandSender sender) {
HamsterCorePlugin.async(() -> {
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
InputStream resource = plugin.getResource("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.getName();
sender.sendMessage(String.format("§a检测到服务器内安装的 %s 插件有 %d 个版本更新", pluginName, version));
sender.sendMessage(String.format("§b下载链接: &b&n&l%s", jobUrl));
} catch (IOException ignored) {
}
}
});
}
@Override @Override
public void onLoad() { public void onLoad() {
instance = this; instance = this;
@@ -154,7 +114,7 @@ public class HamsterCorePlugin extends JavaPlugin {
sync(() -> { sync(() -> {
PointAPI.reloadPlayerPointAPIHook(); PointAPI.reloadPlayerPointAPIHook();
VaultAPI.reloadVaultHook(); VaultAPI.reloadVaultHook();
showUpdate(Bukkit.getConsoleSender()); JenkinsUpdateListener.showUpdate(Bukkit.getConsoleSender());
}); });
logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms"); logger.info("仓鼠核心启动完成,总计耗时 " + time + " ms");
} }

View File

@@ -1,11 +1,21 @@
package cn.hamster3.mc.plugin.core.bukkit.listener; package cn.hamster3.mc.plugin.core.bukkit.listener;
import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin; import cn.hamster3.mc.plugin.core.bukkit.HamsterCorePlugin;
import cn.hamster3.mc.plugin.core.common.config.YamlConfig;
import cn.hamster3.mc.plugin.core.common.util.JenkinsUtils;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.HashSet; import java.util.HashSet;
import java.util.UUID; import java.util.UUID;
@@ -16,6 +26,39 @@ public class JenkinsUpdateListener implements Listener {
private JenkinsUpdateListener() { private JenkinsUpdateListener() {
} }
public static void showUpdate(@NotNull CommandSender sender) {
HamsterCorePlugin.async(() -> {
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
InputStream resource = plugin.getResource("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("DEV")) {
continue;
}
String buildNumberString = jenkinsConfig.getString("BUILD_NUMBER");
if (buildNumberString == null || buildNumberString.equalsIgnoreCase("DEV")) {
continue;
}
int lastStableBuild = JenkinsUtils.getLastStableBuild(jobUrl, null, null);
int buildNumber = Integer.parseInt(buildNumberString);
int version = lastStableBuild - buildNumber;
if (version <= 0) {
continue;
}
String pluginName = plugin.getName();
sender.sendMessage(String.format(
"§a检测到插件 %s 有 %d 个版本更新, 下载链接: §n§l%s", pluginName, version, jobUrl
));
} catch (IOException ignored) {
}
}
});
}
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
@@ -25,6 +68,6 @@ public class JenkinsUpdateListener implements Listener {
if (!SHOWED.add(player.getUniqueId())) { if (!SHOWED.add(player.getUniqueId())) {
return; return;
} }
HamsterCorePlugin.showUpdate(player); showUpdate(player);
} }
} }

View File

@@ -95,11 +95,11 @@ public class HamsterCorePlugin extends Plugin {
try (InputStreamReader reader = new InputStreamReader(resource, StandardCharsets.UTF_8)) { try (InputStreamReader reader = new InputStreamReader(resource, StandardCharsets.UTF_8)) {
YamlConfig jenkinsConfig = YamlConfig.load(reader); YamlConfig jenkinsConfig = YamlConfig.load(reader);
String jobUrl = jenkinsConfig.getString("JOB_URL"); String jobUrl = jenkinsConfig.getString("JOB_URL");
if (jobUrl == null || jobUrl.equalsIgnoreCase("NONE")) { if (jobUrl == null || jobUrl.equalsIgnoreCase("DEV")) {
continue; continue;
} }
String buildNumberString = jenkinsConfig.getString("BUILD_NUMBER"); String buildNumberString = jenkinsConfig.getString("BUILD_NUMBER");
if (buildNumberString == null || buildNumberString.equalsIgnoreCase("NONE")) { if (buildNumberString == null || buildNumberString.equalsIgnoreCase("DEV")) {
continue; continue;
} }
int lastStableBuild = JenkinsUtils.getLastStableBuild(jobUrl, null, null); int lastStableBuild = JenkinsUtils.getLastStableBuild(jobUrl, null, null);
@@ -109,12 +109,9 @@ public class HamsterCorePlugin extends Plugin {
continue; continue;
} }
String pluginName = plugin.getDescription().getName(); String pluginName = plugin.getDescription().getName();
sender.sendMessage(TextComponent.fromLegacyText( sender.sendMessage(TextComponent.fromLegacyText(String.format(
String.format("§a检测到服务器内安装的 %s 插件有 %d 个版本更新", pluginName, version) "§a检测到插件 %s 落后 %d 个版本更新, 下载链接: §n§l%s", pluginName, version, jobUrl
)); )));
sender.sendMessage(TextComponent.fromLegacyText(
String.format("§b下载链接: &b&n&l%s", jobUrl)
));
} catch (IOException ignored) { } catch (IOException ignored) {
} }
} }