From 3ee826263694f06baf685af0546b0f320e6c13c9 Mon Sep 17 00:00:00 2001 From: Oak Date: Fri, 31 Jul 2026 20:13:29 +0100 Subject: [PATCH 1/7] Very early implementation of tests --- settings.gradle.kts | 3 +- tests/common-plugins-test/build.gradle.kts | 3 + .../commonplugins/CommonPluginsTest.java | 108 ++++++++ .../src/main/resources/common-plugins.yml | 232 ++++++++++++++++++ 4 files changed, 345 insertions(+), 1 deletion(-) create mode 100644 tests/common-plugins-test/build.gradle.kts create mode 100644 tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java create mode 100644 tests/common-plugins-test/src/main/resources/common-plugins.yml diff --git a/settings.gradle.kts b/settings.gradle.kts index 2e634ec..f9f9d89 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -30,4 +30,5 @@ include("platform:cli") include("platform:paper-api") include("platform:paper-plugin") include("platform:velocity-api") -include("platform:velocity-plugin") \ No newline at end of file +include("platform:velocity-plugin") +include("tests:common-plugins-test") \ No newline at end of file diff --git a/tests/common-plugins-test/build.gradle.kts b/tests/common-plugins-test/build.gradle.kts new file mode 100644 index 0000000..04fc355 --- /dev/null +++ b/tests/common-plugins-test/build.gradle.kts @@ -0,0 +1,3 @@ +dependencies { + implementation(project(":platform:cli")) +} \ No newline at end of file diff --git a/tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java b/tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java new file mode 100644 index 0000000..6e715b1 --- /dev/null +++ b/tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java @@ -0,0 +1,108 @@ +package org.lushplugins.pluginupdater.tests.commonplugins; + +import com.electronwill.nightconfig.core.Config; +import com.electronwill.nightconfig.yaml.YamlFormat; +import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; +import org.lushplugins.pluginupdater.api.updater.PluginData; +import org.lushplugins.pluginupdater.api.updater.PluginInfo; +import org.lushplugins.pluginupdater.api.util.UpdaterConstants; +import org.lushplugins.pluginupdater.cli.PluginUpdaterCLI; +import org.lushplugins.pluginupdater.cli.platform.CLIPlatform; +import org.lushplugins.pluginupdater.cli.plugin.CLIPluginInfo; +import org.lushplugins.pluginupdater.common.config.deserializer.PluginDataDeserializer; + +import java.io.InputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Objects; +import java.util.logging.Level; + +public class CommonPluginsTest { + + static { + Thread.setDefaultUncaughtExceptionHandler((thread, throwable) -> { + StringWriter sw = new StringWriter(); + throwable.printStackTrace(new PrintWriter(sw)); + UpdaterConstants.LOGGER.severe(sw.toString()); + }); + } + + public static void main(String[] args) { + PluginUpdaterCLI cli = PluginUpdaterCLI.prepareCLI(); + + InputStream resource = cli.getResourceStream("common-plugins.yml"); + Config config = YamlFormat.defaultInstance().createParser().parse(resource); + List undownloadedPluginData = config.entrySet().stream() + .map((entry) -> { + // The following method requires PluginInfo to be available before being run but does not use the + // current version so we can just supply an empty version + PluginInfo pluginInfo = new CLIPluginInfo(entry.getKey(), "0.0.0", null); + Config pluginConfig = config.get(entry.getKey()); + // As we are hard coding the local version we must remove the version-format option + pluginConfig.remove("version-format"); + return PluginDataDeserializer.deserialize(pluginInfo, pluginConfig); + }) + .filter(Objects::nonNull) + .sorted(Comparator.comparing(PluginData::pluginName)) + .toList(); + + // We fetch all latest versions and then download all jars + // This is to ensure that each process is handled in batches + for (PluginData pluginData : undownloadedPluginData) { + cli.getLogger().info("Fetching %s's latest version" + .formatted(pluginData.pluginName())); + try { + pluginData.latestVersion(pluginData.fetchLatestVersion().version()); + } catch (RuntimeException e) { + cli.getLogger().severe(e.getMessage()); + } + } + + Path downloadDir = cli.getPluginsFolder(); + for (PluginData pluginData : undownloadedPluginData) { + pluginData.downloadUpdate(downloadDir); + } + + // Platform needs to be created after plugins are downloaded as it collects data from jars on startup + CLIPlatform platform = new CLIPlatform(cli); + List commonPluginData = config.entrySet().stream() + .map((entry) -> { + String pluginName = entry.getKey(); + PluginInfo pluginInfo = platform.getPlugin(pluginName); + if (pluginInfo == null) { + cli.getLogger().log(Level.WARNING, "Failed to find plugin jar for %s" + .formatted(pluginName)); + return null; + } + + return PluginDataDeserializer.deserialize(pluginInfo, config.get(pluginName)); + }) + .filter(Objects::nonNull) + .toList(); + + testRemoteVersionParsing(commonPluginData); + } + + public static void testLocalVersionParsing(List commonPluginData) { + + } + + public static void testRemoteVersionParsing(List commonPluginData) { + List problemPlugins = new ArrayList<>(); + for (PluginData pluginData : commonPluginData) { + try { + pluginData.fetchLatestVersion(); + } catch (InvalidVersionFormatException e) { + problemPlugins.add(pluginData.pluginName()); + } + } + + if (!problemPlugins.isEmpty()) { + throw new RuntimeException("Failed to parse remote version strings for: " + String.join(", ", problemPlugins)); + } + } +} diff --git a/tests/common-plugins-test/src/main/resources/common-plugins.yml b/tests/common-plugins-test/src/main/resources/common-plugins.yml new file mode 100644 index 0000000..be8323d --- /dev/null +++ b/tests/common-plugins-test/src/main/resources/common-plugins.yml @@ -0,0 +1,232 @@ +# TODO: Work out how to use the same file as in paper-plugin +BannerMaker: + source: github + github-repo: jyhsu2000/BannerMaker +BlueMap: + source: modrinth + modrinth-project-id: swbUV1cr +CarbonChat: + source: modrinth + modrinth-project-id: QzooIsZI +Chunky: + source: modrinth + modrinth-project-id: fALzjamp +ChunkyBorder: + source: modrinth + modrinth-project-id: s86X568j +CommandPanels: + source: modrinth + modrinth-project-id: towqcvHT +commandtimer: + source: github + github-repo: titivermeesch/CommandTimer +ConditionalEvents: + source: modrinth + modrinth-project-id: 4EEcEnDG +CoreProtect: + source: modrinth + modrinth-project-id: Lu3KuzdV +CrazyCrates: + source: modrinth + modrinth-project-id: r3BBZyf3 +DeadChest: + source: modrinth + modrinth-project-id: pKqnV03Y +DecentHolograms: + source: modrinth + modrinth-project-id: w02MKsTg +DeluxeMentions: + source: github + github-repo: RubenArtz/DeluxeMentions +DeluxeMenus: + source: modrinth + modrinth-project-id: kKZkPgJ7 +DHSupport: + source: modrinth + modrinth-project-id: IjY7seTG +DiscordSRV: + source: modrinth + modrinth-project-id: UmLGoGij +Dynmap: + source: modrinth + modrinth-project-id: fRQREgAc +EpicRename: + source: spigot + spigot-resource-id: 4341 +Essentials: + source: modrinth + modrinth-project-id: hXiIvTyT +EssentialsSpawn: + source: modrinth + modrinth-project-id: sYpvDxGJ +EternalTags: + source: spigot + spigot-resource-id: 91842 +ExcellentCrates: + source: modrinth + modrinth-project-id: TdefKtjL +ExcellentEnchants: + source: modrinth + modrinth-project-id: QufNAmjx +FairyChat: + source: modrinth + modrinth-project-id: gnSidBpb +FastAsyncWorldEdit: + source: modrinth + modrinth-project-id: z4HZZnLr + loaders: paper +floodgate: + source: geyser + project-name: floodgate + version-format: -.+ \(b-\) + latest-version-format: +ForcePack: + source: modrinth + modrinth-project-id: v182E90X +Geyser-Spigot: + source: geyser + project-name: geyser +GPFlags: + source: spigot + spigot-resource-id: 55773 +GriefPrevention: + source: modrinth + modrinth-project-id: O4o4mKaq +GSit: + source: modrinth + modrinth-project-id: GOHbQGyX +HuskChat: + source: modrinth + modrinth-project-id: SSXTD3me +HuskHomes: + source: modrinth + modrinth-project-id: J6U9o3JG +Images: + source: spigot + spigot-resource-id: 53036 +LuckPerms: + source: modrinth + modrinth-project-id: Vebnzrzj +mclogs: + source: modrinth + modrinth-project-id: 6DdCzpTL +Minepacks: + source: spigot + spigot-resource-id: 19286 +Multiverse-Core: + source: modrinth + modrinth-project-id: 3wmN97b8 +Multiverse-Inventories: + source: modrinth + modrinth-project-id: qvdtDX3s +Multiverse-NetherPortals: + source: modrinth + modrinth-project-id: vtawPsTo +Multiverse-Portals: + source: modrinth + modrinth-project-id: 8VMk6P0I +Multiverse-SignPortals: + source: modrinth + modrinth-project-id: WuErDeI1 +NametagEdit: + source: spigot + spigot-resource-id: 3836 +nightcore: + source: modrinth + modrinth-project-id: Y4NRwMW5 +packetevents: + source: modrinth + modrinth-project-id: HYKaKraK +PlaceholderAPI: + source: modrinth + modrinth-project-id: lKEzGugV +Plan: + source: github + github-repo: plan-player-analytics/Plan +PlayerParticles: + source: modrinth + modrinth-project-id: LFI8sNdf +PluginPortal: + source: modrinth + modrinth-project-id: 5qkQnnWO +ProtocolLib: + source: github + github-repo: dmulloy2/ProtocolLib +SimplePortals: + source: spigot + spigot-resource-id: 56772 +SimpleVoiceChat: + source: modrinth + modrinth-project-id: 9eGKb6K1 +SkinsRestorer: + source: modrinth + modrinth-project-id: TsLS8Py5 +Skulls: + source: spigot + spigot-resource-id: 90098 +spark: + source: spigot + spigot-resource-id: 57242 +squaremap: + source: modrinth + modrinth-project-id: PFb7ZqK6 +SunLight: + source: modrinth + modrinth-project-id: ZVX6Kjqj +TAB: + source: modrinth + modrinth-project-id: gG7VFbG0 +TAB-Bridge: + source: modrinth + modrinth-project-id: kG3hVbBX +TabTPS: + source: modrinth + modrinth-project-id: cUhi3iB2 +Tebex: + source: modrinth + modrinth-project-id: nRA0jiJt + loaders: paper +Tweakin: + source: spigot + spigot-resource-id: 93444 +UltraCosmetics: + source: modrinth + modrinth-project-id: GLJ7ZGMW +Vault: + source: spigot + spigot-resource-id: 34315 + version-format: (?:-b)? +VentureChat: + source: spigot + spigot-resource-id: 771 +ViaBackwards: + source: modrinth + modrinth-project-id: NpvuJQoq + channels: release +ViaRewind: + source: modrinth + modrinth-project-id: TbHIxhx5 + channels: release +ViaVersion: + source: modrinth + modrinth-project-id: P1OZGk5p + channels: release +VillagerMarket: + source: spigot + spigot-resource-id: 82965 +voicechat: + source: modrinth + modrinth-project-id: 9eGKb6K1 +VoidGen: + source: modrinth + modrinth-project-id: DCTiMOWF +WorldEdit: + source: modrinth + modrinth-project-id: 1u6JkXh5 +WorldGuard: + source: modrinth + modrinth-project-id: DKY9btbd + channels: release +WorldGuardExtraFlagsPlus: + source: modrinth + modrinth-project-id: DsxKmIdB From ddd90f4202456ecb0ce3d3aec09da0d1ea7fb1eb Mon Sep 17 00:00:00 2001 From: Oak Date: Fri, 31 Jul 2026 21:36:38 +0100 Subject: [PATCH 2/7] Improved test implementation --- platform/paper-plugin/build.gradle.kts | 3 + .../paper/test/PaperUpdaterTests.java | 12 + platform/velocity-plugin/build.gradle.kts | 3 + .../paper/test/VelocityUpdaterTests.java | 12 + .../commonplugins/CommonPluginsTest.java | 42 ++-- .../src/main/resources/common-plugins.yml | 232 ------------------ 6 files changed, 48 insertions(+), 256 deletions(-) create mode 100644 platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java create mode 100644 platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java delete mode 100644 tests/common-plugins-test/src/main/resources/common-plugins.yml diff --git a/platform/paper-plugin/build.gradle.kts b/platform/paper-plugin/build.gradle.kts index d9e557b..3f3a645 100644 --- a/platform/paper-plugin/build.gradle.kts +++ b/platform/paper-plugin/build.gradle.kts @@ -10,6 +10,9 @@ dependencies { implementation(project(":common:impl")) implementation(project(":platform:paper-api")) implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.17") + + testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") + testImplementation(project(":tests:common-plugins-test")) } tasks { diff --git a/platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java b/platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java new file mode 100644 index 0000000..726b1f1 --- /dev/null +++ b/platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java @@ -0,0 +1,12 @@ +package org.lushplugins.pluginupdater.paper.test; + +import org.junit.jupiter.api.Test; +import org.lushplugins.pluginupdater.tests.commonplugins.CommonPluginsTest; + +public class PaperUpdaterTests { + + @Test + public void test() { + CommonPluginsTest.runTest("common-plugins.yml"); + } +} diff --git a/platform/velocity-plugin/build.gradle.kts b/platform/velocity-plugin/build.gradle.kts index 3f76c0f..88adfe2 100644 --- a/platform/velocity-plugin/build.gradle.kts +++ b/platform/velocity-plugin/build.gradle.kts @@ -12,6 +12,9 @@ dependencies { implementation(project(":platform:velocity-api")) implementation("io.github.revxrsal:lamp.velocity:4.0.0-rc.17") implementation("io.github.revxrsal:lamp.brigadier:4.0.0-rc.17") + + testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") + testImplementation(project(":tests:common-plugins-test")) } tasks { diff --git a/platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java b/platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java new file mode 100644 index 0000000..3a2dfcb --- /dev/null +++ b/platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java @@ -0,0 +1,12 @@ +package org.lushplugins.pluginupdater.paper.test; + +import org.junit.jupiter.api.Test; +import org.lushplugins.pluginupdater.tests.commonplugins.CommonPluginsTest; + +public class VelocityUpdaterTests { + + @Test + public void test() { + CommonPluginsTest.runTest("common-plugins.yml"); + } +} diff --git a/tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java b/tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java index 6e715b1..c29bd58 100644 --- a/tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java +++ b/tests/common-plugins-test/src/main/java/org/lushplugins/pluginupdater/tests/commonplugins/CommonPluginsTest.java @@ -2,7 +2,6 @@ import com.electronwill.nightconfig.core.Config; import com.electronwill.nightconfig.yaml.YamlFormat; -import org.lushplugins.pluginupdater.api.exception.InvalidVersionFormatException; import org.lushplugins.pluginupdater.api.updater.PluginData; import org.lushplugins.pluginupdater.api.updater.PluginInfo; import org.lushplugins.pluginupdater.api.util.UpdaterConstants; @@ -15,7 +14,6 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.nio.file.Path; -import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -31,10 +29,15 @@ public class CommonPluginsTest { }); } - public static void main(String[] args) { + public static void testLocalVersionParsing(List commonPluginData) { + + } + + public static void runTest(String pluginsResource) { PluginUpdaterCLI cli = PluginUpdaterCLI.prepareCLI(); - InputStream resource = cli.getResourceStream("common-plugins.yml"); + boolean passing = true; + InputStream resource = cli.getResourceStream(pluginsResource); Config config = YamlFormat.defaultInstance().createParser().parse(resource); List undownloadedPluginData = config.entrySet().stream() .map((entry) -> { @@ -47,7 +50,7 @@ public static void main(String[] args) { return PluginDataDeserializer.deserialize(pluginInfo, pluginConfig); }) .filter(Objects::nonNull) - .sorted(Comparator.comparing(PluginData::pluginName)) + .sorted(Comparator.comparing((pluginData) -> pluginData.pluginName().toLowerCase())) .toList(); // We fetch all latest versions and then download all jars @@ -59,12 +62,18 @@ public static void main(String[] args) { pluginData.latestVersion(pluginData.fetchLatestVersion().version()); } catch (RuntimeException e) { cli.getLogger().severe(e.getMessage()); + passing = false; } } Path downloadDir = cli.getPluginsFolder(); for (PluginData pluginData : undownloadedPluginData) { - pluginData.downloadUpdate(downloadDir); + try { + pluginData.downloadUpdate(downloadDir); + } catch (Throwable e) { + cli.getLogger().log(Level.SEVERE, "Failed to download latest version of " + pluginData.pluginName(), e); + passing = false; + } } // Platform needs to be created after plugins are downloaded as it collects data from jars on startup @@ -84,25 +93,10 @@ public static void main(String[] args) { .filter(Objects::nonNull) .toList(); - testRemoteVersionParsing(commonPluginData); - } - - public static void testLocalVersionParsing(List commonPluginData) { - - } - - public static void testRemoteVersionParsing(List commonPluginData) { - List problemPlugins = new ArrayList<>(); - for (PluginData pluginData : commonPluginData) { - try { - pluginData.fetchLatestVersion(); - } catch (InvalidVersionFormatException e) { - problemPlugins.add(pluginData.pluginName()); - } - } + testLocalVersionParsing(commonPluginData); - if (!problemPlugins.isEmpty()) { - throw new RuntimeException("Failed to parse remote version strings for: " + String.join(", ", problemPlugins)); + if (!passing) { + throw new IllegalStateException("This test has been marked as failed"); } } } diff --git a/tests/common-plugins-test/src/main/resources/common-plugins.yml b/tests/common-plugins-test/src/main/resources/common-plugins.yml deleted file mode 100644 index be8323d..0000000 --- a/tests/common-plugins-test/src/main/resources/common-plugins.yml +++ /dev/null @@ -1,232 +0,0 @@ -# TODO: Work out how to use the same file as in paper-plugin -BannerMaker: - source: github - github-repo: jyhsu2000/BannerMaker -BlueMap: - source: modrinth - modrinth-project-id: swbUV1cr -CarbonChat: - source: modrinth - modrinth-project-id: QzooIsZI -Chunky: - source: modrinth - modrinth-project-id: fALzjamp -ChunkyBorder: - source: modrinth - modrinth-project-id: s86X568j -CommandPanels: - source: modrinth - modrinth-project-id: towqcvHT -commandtimer: - source: github - github-repo: titivermeesch/CommandTimer -ConditionalEvents: - source: modrinth - modrinth-project-id: 4EEcEnDG -CoreProtect: - source: modrinth - modrinth-project-id: Lu3KuzdV -CrazyCrates: - source: modrinth - modrinth-project-id: r3BBZyf3 -DeadChest: - source: modrinth - modrinth-project-id: pKqnV03Y -DecentHolograms: - source: modrinth - modrinth-project-id: w02MKsTg -DeluxeMentions: - source: github - github-repo: RubenArtz/DeluxeMentions -DeluxeMenus: - source: modrinth - modrinth-project-id: kKZkPgJ7 -DHSupport: - source: modrinth - modrinth-project-id: IjY7seTG -DiscordSRV: - source: modrinth - modrinth-project-id: UmLGoGij -Dynmap: - source: modrinth - modrinth-project-id: fRQREgAc -EpicRename: - source: spigot - spigot-resource-id: 4341 -Essentials: - source: modrinth - modrinth-project-id: hXiIvTyT -EssentialsSpawn: - source: modrinth - modrinth-project-id: sYpvDxGJ -EternalTags: - source: spigot - spigot-resource-id: 91842 -ExcellentCrates: - source: modrinth - modrinth-project-id: TdefKtjL -ExcellentEnchants: - source: modrinth - modrinth-project-id: QufNAmjx -FairyChat: - source: modrinth - modrinth-project-id: gnSidBpb -FastAsyncWorldEdit: - source: modrinth - modrinth-project-id: z4HZZnLr - loaders: paper -floodgate: - source: geyser - project-name: floodgate - version-format: -.+ \(b-\) - latest-version-format: -ForcePack: - source: modrinth - modrinth-project-id: v182E90X -Geyser-Spigot: - source: geyser - project-name: geyser -GPFlags: - source: spigot - spigot-resource-id: 55773 -GriefPrevention: - source: modrinth - modrinth-project-id: O4o4mKaq -GSit: - source: modrinth - modrinth-project-id: GOHbQGyX -HuskChat: - source: modrinth - modrinth-project-id: SSXTD3me -HuskHomes: - source: modrinth - modrinth-project-id: J6U9o3JG -Images: - source: spigot - spigot-resource-id: 53036 -LuckPerms: - source: modrinth - modrinth-project-id: Vebnzrzj -mclogs: - source: modrinth - modrinth-project-id: 6DdCzpTL -Minepacks: - source: spigot - spigot-resource-id: 19286 -Multiverse-Core: - source: modrinth - modrinth-project-id: 3wmN97b8 -Multiverse-Inventories: - source: modrinth - modrinth-project-id: qvdtDX3s -Multiverse-NetherPortals: - source: modrinth - modrinth-project-id: vtawPsTo -Multiverse-Portals: - source: modrinth - modrinth-project-id: 8VMk6P0I -Multiverse-SignPortals: - source: modrinth - modrinth-project-id: WuErDeI1 -NametagEdit: - source: spigot - spigot-resource-id: 3836 -nightcore: - source: modrinth - modrinth-project-id: Y4NRwMW5 -packetevents: - source: modrinth - modrinth-project-id: HYKaKraK -PlaceholderAPI: - source: modrinth - modrinth-project-id: lKEzGugV -Plan: - source: github - github-repo: plan-player-analytics/Plan -PlayerParticles: - source: modrinth - modrinth-project-id: LFI8sNdf -PluginPortal: - source: modrinth - modrinth-project-id: 5qkQnnWO -ProtocolLib: - source: github - github-repo: dmulloy2/ProtocolLib -SimplePortals: - source: spigot - spigot-resource-id: 56772 -SimpleVoiceChat: - source: modrinth - modrinth-project-id: 9eGKb6K1 -SkinsRestorer: - source: modrinth - modrinth-project-id: TsLS8Py5 -Skulls: - source: spigot - spigot-resource-id: 90098 -spark: - source: spigot - spigot-resource-id: 57242 -squaremap: - source: modrinth - modrinth-project-id: PFb7ZqK6 -SunLight: - source: modrinth - modrinth-project-id: ZVX6Kjqj -TAB: - source: modrinth - modrinth-project-id: gG7VFbG0 -TAB-Bridge: - source: modrinth - modrinth-project-id: kG3hVbBX -TabTPS: - source: modrinth - modrinth-project-id: cUhi3iB2 -Tebex: - source: modrinth - modrinth-project-id: nRA0jiJt - loaders: paper -Tweakin: - source: spigot - spigot-resource-id: 93444 -UltraCosmetics: - source: modrinth - modrinth-project-id: GLJ7ZGMW -Vault: - source: spigot - spigot-resource-id: 34315 - version-format: (?:-b)? -VentureChat: - source: spigot - spigot-resource-id: 771 -ViaBackwards: - source: modrinth - modrinth-project-id: NpvuJQoq - channels: release -ViaRewind: - source: modrinth - modrinth-project-id: TbHIxhx5 - channels: release -ViaVersion: - source: modrinth - modrinth-project-id: P1OZGk5p - channels: release -VillagerMarket: - source: spigot - spigot-resource-id: 82965 -voicechat: - source: modrinth - modrinth-project-id: 9eGKb6K1 -VoidGen: - source: modrinth - modrinth-project-id: DCTiMOWF -WorldEdit: - source: modrinth - modrinth-project-id: 1u6JkXh5 -WorldGuard: - source: modrinth - modrinth-project-id: DKY9btbd - channels: release -WorldGuardExtraFlagsPlus: - source: modrinth - modrinth-project-id: DsxKmIdB From cee6c38d16b9b2183fb52008e3ec4ee1b8017f74 Mon Sep 17 00:00:00 2001 From: Oak Date: Fri, 31 Jul 2026 21:39:16 +0100 Subject: [PATCH 3/7] Added system properties to platform tests --- .../pluginupdater/paper/test/PaperUpdaterTests.java | 5 +++++ .../pluginupdater/paper/test/VelocityUpdaterTests.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java b/platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java index 726b1f1..de87304 100644 --- a/platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java +++ b/platform/paper-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/PaperUpdaterTests.java @@ -5,6 +5,11 @@ public class PaperUpdaterTests { + static { + System.setProperty("platform", "paper"); + System.setProperty("server-version", "26.1.2"); + } + @Test public void test() { CommonPluginsTest.runTest("common-plugins.yml"); diff --git a/platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java b/platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java index 3a2dfcb..0da1751 100644 --- a/platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java +++ b/platform/velocity-plugin/src/test/java/org/lushplugins/pluginupdater/paper/test/VelocityUpdaterTests.java @@ -5,6 +5,11 @@ public class VelocityUpdaterTests { + static { + System.setProperty("platform", "velocity"); + System.setProperty("server-version", "4.1.0"); + } + @Test public void test() { CommonPluginsTest.runTest("common-plugins.yml"); From 12374dcc116b99da7002a854804ab8e56e0eb7cb Mon Sep 17 00:00:00 2001 From: Oak Date: Fri, 31 Jul 2026 21:53:14 +0100 Subject: [PATCH 4/7] Fixed tests --- platform/paper-plugin/build.gradle.kts | 7 ++++++- platform/velocity-plugin/build.gradle.kts | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/platform/paper-plugin/build.gradle.kts b/platform/paper-plugin/build.gradle.kts index 3f3a645..7349e6e 100644 --- a/platform/paper-plugin/build.gradle.kts +++ b/platform/paper-plugin/build.gradle.kts @@ -11,8 +11,9 @@ dependencies { implementation(project(":platform:paper-api")) implementation("io.github.revxrsal:lamp.bukkit:4.0.0-rc.17") - testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation(project(":tests:common-plugins-test")) + testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } tasks { @@ -50,6 +51,10 @@ tasks { modrinth("z4HZZnLr", "zAlVhTdU") // FastAsyncWorldEdit } } + + test { + useJUnitPlatform() + } } modrinth { diff --git a/platform/velocity-plugin/build.gradle.kts b/platform/velocity-plugin/build.gradle.kts index 88adfe2..4155301 100644 --- a/platform/velocity-plugin/build.gradle.kts +++ b/platform/velocity-plugin/build.gradle.kts @@ -13,8 +13,9 @@ dependencies { implementation("io.github.revxrsal:lamp.velocity:4.0.0-rc.17") implementation("io.github.revxrsal:lamp.brigadier:4.0.0-rc.17") - testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") testImplementation(project(":tests:common-plugins-test")) + testImplementation("org.junit.jupiter:junit-jupiter:5.10.2") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } tasks { @@ -35,6 +36,10 @@ tasks { modrinth("tab-was-taken", "MsHr6ITb") } } + + test { + useJUnitPlatform() + } } modrinth { From 02592359ad37b6c698b98f9c2cdaad0c9d6f4f22 Mon Sep 17 00:00:00 2001 From: Oak Date: Fri, 31 Jul 2026 22:26:13 +0100 Subject: [PATCH 5/7] Added clarity to potential test failure --- .../org/lushplugins/pluginupdater/cli/platform/CLIPlatform.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/cli/src/main/java/org/lushplugins/pluginupdater/cli/platform/CLIPlatform.java b/platform/cli/src/main/java/org/lushplugins/pluginupdater/cli/platform/CLIPlatform.java index 4f189b4..88947ad 100644 --- a/platform/cli/src/main/java/org/lushplugins/pluginupdater/cli/platform/CLIPlatform.java +++ b/platform/cli/src/main/java/org/lushplugins/pluginupdater/cli/platform/CLIPlatform.java @@ -51,7 +51,7 @@ public CLIPlatform(PluginUpdaterCLI cli) { fallbackInfoParser = fallbackInfoParser.getFallbackInfoParser(); } } catch (IOException e) { - throw new RuntimeException(e); + cli.getLogger().log(Level.SEVERE, "Failed to interpret jar file for " + path, e); } return null; From 5288c995ffcc2925cabcb9194c4dd6669b1b3a98 Mon Sep 17 00:00:00 2001 From: Oak Date: Fri, 31 Jul 2026 22:28:53 +0100 Subject: [PATCH 6/7] Migrated GPFlags common plugin to use Modrinth as source --- platform/paper-plugin/src/main/resources/common-plugins.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/paper-plugin/src/main/resources/common-plugins.yml b/platform/paper-plugin/src/main/resources/common-plugins.yml index b5c4e18..97d991d 100644 --- a/platform/paper-plugin/src/main/resources/common-plugins.yml +++ b/platform/paper-plugin/src/main/resources/common-plugins.yml @@ -86,8 +86,8 @@ Geyser-Spigot: source: geyser project-name: geyser GPFlags: - source: spigot - spigot-resource-id: 55773 + source: modrinth + modrinth-project-id: Z0NVSlL6 GriefPrevention: source: modrinth modrinth-project-id: O4o4mKaq From 70e1663ee06fce470ea6a4116fccd1447b83e1fe Mon Sep 17 00:00:00 2001 From: Oak Date: Fri, 31 Jul 2026 22:35:04 +0100 Subject: [PATCH 7/7] Adjusted pr tests workflow to not run tests when building --- .github/workflows/pr-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index a1715bc..51e5ad8 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -21,7 +21,7 @@ jobs: uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Paper platform' - gradle-tasks: 'platform:paper-plugin:build' + gradle-tasks: 'platform:paper-plugin:build -x test' build-velocity: name: 'Velocity Platform' @@ -29,4 +29,4 @@ jobs: uses: ./.github/workflows/build-platform.yml with: display-name: 'Build Velocity platform' - gradle-tasks: 'platform:velocity-plugin:build' \ No newline at end of file + gradle-tasks: 'platform:velocity-plugin:build -x test' \ No newline at end of file