From 0024ec7e20867b88283ae5848b0d0a1e57e27fa6 Mon Sep 17 00:00:00 2001 From: Cubxity Date: Sat, 25 Mar 2023 19:42:00 +0100 Subject: [PATCH 01/11] feat: initial folia support This allows UnifiedMetrics to run on Folia. However, TPS metrics are not accurate. This is due to the fundamental difference in ticking. --- platforms/bukkit/build.gradle.kts | 12 ++++++- .../{BukkitDispatcher.kt => Dispatchers.kt} | 14 +++++++- .../UnifiedMetricsBukkitBootstrap.kt | 8 ++++- .../bukkit/metric/tick/TickCollection.kt | 9 +++--- .../metrics/bukkit/util/BukkitPlatform.kt | 32 +++++++++++++++++++ .../bukkit/src/main/resources/plugin.yml | 1 + 6 files changed, 68 insertions(+), 8 deletions(-) rename platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/{BukkitDispatcher.kt => Dispatchers.kt} (80%) create mode 100644 platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/BukkitPlatform.kt diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index ee6bb0f9..ca029352 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -17,18 +17,24 @@ plugins { id("com.github.johnrengelman.shadow") + id("io.papermc.paperweight.userdev") version "1.5.3" } repositories { + mavenLocal() maven("https://papermc.io/repo/repository/maven-public/") } dependencies { api(project(":unifiedmetrics-core")) - compileOnly("com.destroystokyo.paper", "paper-api", "1.16.5-R0.1-SNAPSHOT") +// compileOnly("com.destroystokyo.paper", "paper-api", "1.16.5-R0.1-SNAPSHOT") + paperweight.devBundle("dev.folia", "1.19.4-R0.1-SNAPSHOT") } tasks { + assemble { + dependsOn(reobfJar) + } shadowJar { archiveClassifier.set("") relocate("retrofit2", "dev.cubxity.plugins.metrics.libs.retrofit2") @@ -46,3 +52,7 @@ tasks { } } } + +java { + disableAutoTargetJvm() +} diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/BukkitDispatcher.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/Dispatchers.kt similarity index 80% rename from platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/BukkitDispatcher.kt rename to platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/Dispatchers.kt index 35fda7ae..5cbea24a 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/BukkitDispatcher.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/Dispatchers.kt @@ -17,6 +17,7 @@ package dev.cubxity.plugins.metrics.bukkit +import io.papermc.paper.threadedregions.RegionizedServer import kotlinx.coroutines.* import org.bukkit.Bukkit import org.bukkit.plugin.java.JavaPlugin @@ -47,4 +48,15 @@ class BukkitDispatcher(private val plugin: JavaPlugin) : CoroutineDispatcher(), plugin.server.scheduler.runTask(plugin, block) } } -} \ No newline at end of file +} + +@OptIn(InternalCoroutinesApi::class) +class FoliaDispatcher : CoroutineDispatcher(), Delay { + override fun scheduleResumeAfterDelay(timeMillis: Long, continuation: CancellableContinuation) { + TODO("Not yet implemented") + } + + override fun dispatch(context: CoroutineContext, block: Runnable) { + RegionizedServer.getInstance().addTask(block) + } +} diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt index 21e60eed..82958885 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt @@ -19,7 +19,9 @@ package dev.cubxity.plugins.metrics.bukkit.bootstrap import dev.cubxity.plugins.metrics.api.platform.PlatformType import dev.cubxity.plugins.metrics.bukkit.BukkitDispatcher +import dev.cubxity.plugins.metrics.bukkit.FoliaDispatcher import dev.cubxity.plugins.metrics.bukkit.UnifiedMetricsBukkitPlugin +import dev.cubxity.plugins.metrics.bukkit.util.BukkitPlatform import dev.cubxity.plugins.metrics.common.UnifiedMetricsBootstrap import dev.cubxity.plugins.metrics.common.plugin.logger.JavaLogger import kotlinx.coroutines.CoroutineDispatcher @@ -47,9 +49,13 @@ class UnifiedMetricsBukkitBootstrap : JavaPlugin(), UnifiedMetricsBootstrap { override val logger = JavaLogger(getLogger()) - override val dispatcher: CoroutineDispatcher = BukkitDispatcher(this) + override val dispatcher: CoroutineDispatcher = when (BukkitPlatform.current) { + BukkitPlatform.Folia -> FoliaDispatcher() + else -> BukkitDispatcher(this) + } override fun onEnable() { + logger.info("Running on Bukkit platform ${BukkitPlatform.current}") plugin.enable() } diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/tick/TickCollection.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/tick/TickCollection.kt index 917a9761..93759d47 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/tick/TickCollection.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/tick/TickCollection.kt @@ -23,14 +23,13 @@ import dev.cubxity.plugins.metrics.api.metric.collector.Histogram import dev.cubxity.plugins.metrics.api.metric.store.VolatileDoubleStore import dev.cubxity.plugins.metrics.api.metric.store.VolatileLongStore import dev.cubxity.plugins.metrics.bukkit.bootstrap.UnifiedMetricsBukkitBootstrap -import dev.cubxity.plugins.metrics.bukkit.util.classExists +import dev.cubxity.plugins.metrics.bukkit.util.BukkitPlatform import dev.cubxity.plugins.metrics.common.metric.Metrics class TickCollection(bootstrap: UnifiedMetricsBukkitBootstrap) : CollectorCollection { - private val reporter = if (classExists("com.destroystokyo.paper.event.server.ServerTickStartEvent")) { - PaperTickReporter(this, bootstrap) - } else { - BukkitTickReporter(this, bootstrap) + private val reporter = when (BukkitPlatform.current) { + BukkitPlatform.Folia, BukkitPlatform.Paper -> PaperTickReporter(this, bootstrap) + else -> BukkitTickReporter(this, bootstrap) } // The callback is called from a single thread diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/BukkitPlatform.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/BukkitPlatform.kt new file mode 100644 index 00000000..aec8dd4d --- /dev/null +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/BukkitPlatform.kt @@ -0,0 +1,32 @@ +/* + * This file is part of UnifiedMetrics. + * + * UnifiedMetrics is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * UnifiedMetrics is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with UnifiedMetrics. If not, see . + */ + +package dev.cubxity.plugins.metrics.bukkit.util + +enum class BukkitPlatform { + Bukkit, + Paper, + Folia; + + companion object { + val current = when { + classExists("io.papermc.paper.threadedregions.RegionizedServer") -> Folia + classExists("com.destroystokyo.paper.event.server.ServerTickStartEvent") -> Paper + else -> Bukkit + } + } +} diff --git a/platforms/bukkit/src/main/resources/plugin.yml b/platforms/bukkit/src/main/resources/plugin.yml index bf17856d..d336f5cb 100644 --- a/platforms/bukkit/src/main/resources/plugin.yml +++ b/platforms/bukkit/src/main/resources/plugin.yml @@ -2,6 +2,7 @@ name: UnifiedMetrics main: dev.cubxity.plugins.metrics.bukkit.bootstrap.UnifiedMetricsBukkitBootstrap description: "Fully-featured metrics plugin for Minecraft servers" api-version: 1.16 +folia-supported: true author: Cubxity version: ${version} load: STARTUP \ No newline at end of file From 39c17f91906dc14406814bc9797e5c8c78a80244 Mon Sep 17 00:00:00 2001 From: Cubxity Date: Sun, 26 Mar 2023 15:29:13 +0200 Subject: [PATCH 02/11] feat: initial regionized server metrics --- .../common/config/UnifiedMetricsConfig.kt | 3 +- .../plugins/metrics/common/metric/Metrics.kt | 5 ++ .../bukkit/UnifiedMetricsBukkitPlugin.kt | 6 ++ .../regionized/FoliaServerCollection.kt | 25 +++++++ .../metric/regionized/FoliaServerCollector.kt | 67 +++++++++++++++++++ 5 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollection.kt create mode 100644 platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt diff --git a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/config/UnifiedMetricsConfig.kt b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/config/UnifiedMetricsConfig.kt index 5badbfce..ffd2abbb 100644 --- a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/config/UnifiedMetricsConfig.kt +++ b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/config/UnifiedMetricsConfig.kt @@ -46,7 +46,8 @@ data class UnifiedMetricsCollectorsConfig( val server: Boolean = true, val world: Boolean = true, val tick: Boolean = true, - val events: Boolean = true + val events: Boolean = true, + val regionizedServer: Boolean = true ) private fun env(name: String, default: String): String = diff --git a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt index a456962b..97f82672 100644 --- a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt +++ b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt @@ -35,4 +35,9 @@ object Metrics { const val WorldPlayersCount = "minecraft_world_players_count" const val WorldLoadedChunks = "minecraft_world_loaded_chunks" } + + object RegionizedServer { + const val RegionCount = "minecraft_regionized_region_count" + const val RegionTick = "minecraft_regionized_region_tick_total" + } } \ No newline at end of file diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt index 5de34860..5cf1e453 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt @@ -20,9 +20,11 @@ package dev.cubxity.plugins.metrics.bukkit import dev.cubxity.plugins.metrics.api.UnifiedMetrics import dev.cubxity.plugins.metrics.bukkit.bootstrap.UnifiedMetricsBukkitBootstrap import dev.cubxity.plugins.metrics.bukkit.metric.events.EventsCollection +import dev.cubxity.plugins.metrics.bukkit.metric.regionized.FoliaServerCollection import dev.cubxity.plugins.metrics.bukkit.metric.server.ServerCollection import dev.cubxity.plugins.metrics.bukkit.metric.tick.TickCollection import dev.cubxity.plugins.metrics.bukkit.metric.world.WorldCollection +import dev.cubxity.plugins.metrics.bukkit.util.BukkitPlatform import dev.cubxity.plugins.metrics.core.plugin.CoreUnifiedMetricsPlugin import org.bukkit.plugin.ServicePriority import java.util.concurrent.Executors @@ -50,6 +52,10 @@ class UnifiedMetricsBukkitPlugin( if (world) registerCollection(WorldCollection(bootstrap)) if (tick) registerCollection(TickCollection(bootstrap)) if (events) registerCollection(EventsCollection(bootstrap)) + + if (regionizedServer && BukkitPlatform.current == BukkitPlatform.Folia) { + registerCollection(FoliaServerCollection()) + } } } } diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollection.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollection.kt new file mode 100644 index 00000000..32b8be82 --- /dev/null +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollection.kt @@ -0,0 +1,25 @@ +/* + * This file is part of UnifiedMetrics. + * + * UnifiedMetrics is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * UnifiedMetrics is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with UnifiedMetrics. If not, see . + */ + +package dev.cubxity.plugins.metrics.bukkit.metric.regionized + +import dev.cubxity.plugins.metrics.api.metric.collector.Collector +import dev.cubxity.plugins.metrics.api.metric.collector.CollectorCollection + +class FoliaServerCollection : CollectorCollection { + override val collectors: List = listOf(FoliaServerCollector()) +} \ No newline at end of file diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt new file mode 100644 index 00000000..b44c514f --- /dev/null +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt @@ -0,0 +1,67 @@ +/* + * This file is part of UnifiedMetrics. + * + * UnifiedMetrics is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * UnifiedMetrics is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with UnifiedMetrics. If not, see . + */ + +package dev.cubxity.plugins.metrics.bukkit.metric.regionized + +import dev.cubxity.plugins.metrics.api.metric.collector.Collector +import dev.cubxity.plugins.metrics.api.metric.data.CounterMetric +import dev.cubxity.plugins.metrics.api.metric.data.GaugeMetric +import dev.cubxity.plugins.metrics.api.metric.data.Metric +import dev.cubxity.plugins.metrics.common.metric.Metrics +import io.papermc.paper.threadedregions.ThreadedRegionizer +import io.papermc.paper.threadedregions.ThreadedRegionizer.ThreadedRegion +import io.papermc.paper.threadedregions.TickRegions.TickRegionData +import io.papermc.paper.threadedregions.TickRegions.TickRegionSectionData +import org.bukkit.Bukkit +import org.bukkit.World +import java.lang.reflect.Field +import java.lang.reflect.Method + + +class FoliaServerCollector : Collector { + override fun collect(): List { + val worlds = Bukkit.getWorlds() + val samples = ArrayList(worlds.size * 3 + 1) + + val regions = ArrayList>() + for (world in worlds) { +// val world = (bukkitWorld as CraftWorld).handle + getRegioniser(world).computeForAllRegions(regions::add) + } + + for (region in regions) { + val tags = mapOf("world" to region.data.world.world.name, "region" to "${region.id}") + samples.add(CounterMetric(Metrics.RegionizedServer.RegionTick, tags, region.data.currentTick)) + } + + samples.add(GaugeMetric(Metrics.RegionizedServer.RegionCount, value = regions.size)) + + return samples + } + + private fun getRegioniser(world: World): ThreadedRegionizer { + // return ((CraftWorld) world).getHandle().regioniser; + // TODO: Cache reflection + + val craftWorldClass: Class<*> = world.javaClass + val getHandleMethod: Method = craftWorldClass.getMethod("getHandle") + val serverLevel: Any = getHandleMethod.invoke(world) + val serverLevelClass: Class<*> = serverLevel.javaClass + val regioniserField: Field = serverLevelClass.getField("regioniser") + return regioniserField.get(serverLevel) as ThreadedRegionizer + } +} \ No newline at end of file From 1612aeea9ea7c3180f1ae82ef70c7ba752f626e8 Mon Sep 17 00:00:00 2001 From: Cubxity Date: Fri, 2 Jun 2023 22:32:04 +0200 Subject: [PATCH 03/11] feat: improve folia metrics --- .../plugins/metrics/common/metric/Metrics.kt | 1 + .../UnifiedMetricsBukkitBootstrap.kt | 2 +- .../metric/regionized/FoliaServerCollector.kt | 25 ++++------------- .../plugins/metrics/bukkit/util/FoliaExt.kt | 27 +++++++++++++++++++ 4 files changed, 34 insertions(+), 21 deletions(-) create mode 100644 platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt diff --git a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt index 97f82672..6fb5e06c 100644 --- a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt +++ b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt @@ -39,5 +39,6 @@ object Metrics { object RegionizedServer { const val RegionCount = "minecraft_regionized_region_count" const val RegionTick = "minecraft_regionized_region_tick_total" + const val RegionOwnedSections = "minecraft_regionized_region_owned_sections" } } \ No newline at end of file diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt index 82958885..a7fe9c43 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/bootstrap/UnifiedMetricsBukkitBootstrap.kt @@ -55,7 +55,7 @@ class UnifiedMetricsBukkitBootstrap : JavaPlugin(), UnifiedMetricsBootstrap { } override fun onEnable() { - logger.info("Running on Bukkit platform ${BukkitPlatform.current}") + (this as UnifiedMetricsBootstrap).logger.info("Running on Bukkit platform ${BukkitPlatform.current}") plugin.enable() } diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt index b44c514f..8c5dc7d7 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt @@ -21,47 +21,32 @@ import dev.cubxity.plugins.metrics.api.metric.collector.Collector import dev.cubxity.plugins.metrics.api.metric.data.CounterMetric import dev.cubxity.plugins.metrics.api.metric.data.GaugeMetric import dev.cubxity.plugins.metrics.api.metric.data.Metric +import dev.cubxity.plugins.metrics.bukkit.util.regioniser import dev.cubxity.plugins.metrics.common.metric.Metrics -import io.papermc.paper.threadedregions.ThreadedRegionizer import io.papermc.paper.threadedregions.ThreadedRegionizer.ThreadedRegion import io.papermc.paper.threadedregions.TickRegions.TickRegionData import io.papermc.paper.threadedregions.TickRegions.TickRegionSectionData import org.bukkit.Bukkit -import org.bukkit.World -import java.lang.reflect.Field -import java.lang.reflect.Method class FoliaServerCollector : Collector { override fun collect(): List { val worlds = Bukkit.getWorlds() - val samples = ArrayList(worlds.size * 3 + 1) val regions = ArrayList>() for (world in worlds) { -// val world = (bukkitWorld as CraftWorld).handle - getRegioniser(world).computeForAllRegions(regions::add) + world.regioniser.computeForAllRegions(regions::add) } + val samples = ArrayList(regions.size * 2 + 1) for (region in regions) { - val tags = mapOf("world" to region.data.world.world.name, "region" to "${region.id}") + val tags = mapOf("world" to region.data.world.serverLevelData.levelName, "region" to "${region.id}") samples.add(CounterMetric(Metrics.RegionizedServer.RegionTick, tags, region.data.currentTick)) + samples.add(GaugeMetric(Metrics.RegionizedServer.RegionOwnedSections, tags, region.ownedSections.size)) } samples.add(GaugeMetric(Metrics.RegionizedServer.RegionCount, value = regions.size)) return samples } - - private fun getRegioniser(world: World): ThreadedRegionizer { - // return ((CraftWorld) world).getHandle().regioniser; - // TODO: Cache reflection - - val craftWorldClass: Class<*> = world.javaClass - val getHandleMethod: Method = craftWorldClass.getMethod("getHandle") - val serverLevel: Any = getHandleMethod.invoke(world) - val serverLevelClass: Class<*> = serverLevel.javaClass - val regioniserField: Field = serverLevelClass.getField("regioniser") - return regioniserField.get(serverLevel) as ThreadedRegionizer - } } \ No newline at end of file diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt new file mode 100644 index 00000000..857c6a3a --- /dev/null +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt @@ -0,0 +1,27 @@ +/* + * This file is part of UnifiedMetrics. + * + * UnifiedMetrics is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * UnifiedMetrics is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with UnifiedMetrics. If not, see . + */ + +package dev.cubxity.plugins.metrics.bukkit.util + +import io.papermc.paper.threadedregions.ThreadedRegionizer +import io.papermc.paper.threadedregions.TickRegions.TickRegionData +import io.papermc.paper.threadedregions.TickRegions.TickRegionSectionData +import org.bukkit.World +import org.bukkit.craftbukkit.v1_19_R3.CraftWorld + +val World.regioniser: ThreadedRegionizer + get() = (this as CraftWorld).handle.regioniser From b8bbc94f92b872d1e933495672eb0a231f4296c6 Mon Sep 17 00:00:00 2001 From: Cubxity Date: Sun, 4 Jun 2023 20:41:14 +0200 Subject: [PATCH 04/11] feat: improve folia metrics --- .../dev/cubxity/plugins/metrics/common/metric/Metrics.kt | 4 +++- platforms/bukkit/build.gradle.kts | 2 +- .../bukkit/metric/regionized/FoliaServerCollector.kt | 8 ++++++-- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt index 6fb5e06c..8bfbeadb 100644 --- a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt +++ b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/Metrics.kt @@ -39,6 +39,8 @@ object Metrics { object RegionizedServer { const val RegionCount = "minecraft_regionized_region_count" const val RegionTick = "minecraft_regionized_region_tick_total" - const val RegionOwnedSections = "minecraft_regionized_region_owned_sections" + const val RegionEntitiesCount = "minecraft_regionized_region_entities_count" + const val RegionPlayersCount = "minecraft_regionized_region_players_count" + const val RegionChunksCount = "minecraft_regionized_region_chunks_count" } } \ No newline at end of file diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index ca029352..4cce438e 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -21,8 +21,8 @@ plugins { } repositories { - mavenLocal() maven("https://papermc.io/repo/repository/maven-public/") + mavenLocal() } dependencies { diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt index 8c5dc7d7..d1314f32 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt @@ -38,11 +38,15 @@ class FoliaServerCollector : Collector { world.regioniser.computeForAllRegions(regions::add) } - val samples = ArrayList(regions.size * 2 + 1) + val samples = ArrayList(regions.size * 4 + 1) for (region in regions) { val tags = mapOf("world" to region.data.world.serverLevelData.levelName, "region" to "${region.id}") samples.add(CounterMetric(Metrics.RegionizedServer.RegionTick, tags, region.data.currentTick)) - samples.add(GaugeMetric(Metrics.RegionizedServer.RegionOwnedSections, tags, region.ownedSections.size)) + + val stats = region.data.regionStats + samples.add(GaugeMetric(Metrics.RegionizedServer.RegionEntitiesCount, tags, stats.entityCount)) + samples.add(GaugeMetric(Metrics.RegionizedServer.RegionPlayersCount, tags, stats.playerCount)) + samples.add(GaugeMetric(Metrics.RegionizedServer.RegionChunksCount, tags, stats.chunkCount)) } samples.add(GaugeMetric(Metrics.RegionizedServer.RegionCount, value = regions.size)) From ef353fd7b2d2b3af39106dcb375a4bb72b0302a1 Mon Sep 17 00:00:00 2001 From: Cubxity Date: Sun, 4 Jun 2023 21:38:46 +0200 Subject: [PATCH 05/11] feat: mark folia collection as async --- .../plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt | 6 +++--- .../{FoliaServerCollection.kt => FoliaRegionCollection.kt} | 6 ++++-- .../{FoliaServerCollector.kt => FoliaRegionCollector.kt} | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) rename platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/{FoliaServerCollection.kt => FoliaRegionCollection.kt} (84%) rename platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/{FoliaServerCollector.kt => FoliaRegionCollector.kt} (98%) diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt index 5cf1e453..141f0dbf 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/UnifiedMetricsBukkitPlugin.kt @@ -20,7 +20,7 @@ package dev.cubxity.plugins.metrics.bukkit import dev.cubxity.plugins.metrics.api.UnifiedMetrics import dev.cubxity.plugins.metrics.bukkit.bootstrap.UnifiedMetricsBukkitBootstrap import dev.cubxity.plugins.metrics.bukkit.metric.events.EventsCollection -import dev.cubxity.plugins.metrics.bukkit.metric.regionized.FoliaServerCollection +import dev.cubxity.plugins.metrics.bukkit.metric.regionized.FoliaRegionCollection import dev.cubxity.plugins.metrics.bukkit.metric.server.ServerCollection import dev.cubxity.plugins.metrics.bukkit.metric.tick.TickCollection import dev.cubxity.plugins.metrics.bukkit.metric.world.WorldCollection @@ -30,7 +30,7 @@ import org.bukkit.plugin.ServicePriority import java.util.concurrent.Executors class UnifiedMetricsBukkitPlugin( - override val bootstrap: UnifiedMetricsBukkitBootstrap + override val bootstrap: UnifiedMetricsBukkitBootstrap ) : CoreUnifiedMetricsPlugin() { private val executor = Executors.newScheduledThreadPool(1) @@ -54,7 +54,7 @@ class UnifiedMetricsBukkitPlugin( if (events) registerCollection(EventsCollection(bootstrap)) if (regionizedServer && BukkitPlatform.current == BukkitPlatform.Folia) { - registerCollection(FoliaServerCollection()) + registerCollection(FoliaRegionCollection()) } } } diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollection.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaRegionCollection.kt similarity index 84% rename from platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollection.kt rename to platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaRegionCollection.kt index 32b8be82..54ad8b72 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollection.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaRegionCollection.kt @@ -20,6 +20,8 @@ package dev.cubxity.plugins.metrics.bukkit.metric.regionized import dev.cubxity.plugins.metrics.api.metric.collector.Collector import dev.cubxity.plugins.metrics.api.metric.collector.CollectorCollection -class FoliaServerCollection : CollectorCollection { - override val collectors: List = listOf(FoliaServerCollector()) +class FoliaRegionCollection : CollectorCollection { + override val collectors: List = listOf(FoliaRegionCollector()) + override val isAsync: Boolean + get() = true } \ No newline at end of file diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaRegionCollector.kt similarity index 98% rename from platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt rename to platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaRegionCollector.kt index d1314f32..93a97c97 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaServerCollector.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/metric/regionized/FoliaRegionCollector.kt @@ -29,7 +29,7 @@ import io.papermc.paper.threadedregions.TickRegions.TickRegionSectionData import org.bukkit.Bukkit -class FoliaServerCollector : Collector { +class FoliaRegionCollector : Collector { override fun collect(): List { val worlds = Bukkit.getWorlds() From a3c0c6b3605ef0e8a70131b5547032c7ab11a8d9 Mon Sep 17 00:00:00 2001 From: Cubxity Date: Fri, 16 Jun 2023 14:58:25 +0200 Subject: [PATCH 06/11] fix(folia): update craftbukkit version --- platforms/bukkit/build.gradle.kts | 2 +- .../kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/platforms/bukkit/build.gradle.kts b/platforms/bukkit/build.gradle.kts index 4cce438e..75bed03a 100644 --- a/platforms/bukkit/build.gradle.kts +++ b/platforms/bukkit/build.gradle.kts @@ -28,7 +28,7 @@ repositories { dependencies { api(project(":unifiedmetrics-core")) // compileOnly("com.destroystokyo.paper", "paper-api", "1.16.5-R0.1-SNAPSHOT") - paperweight.devBundle("dev.folia", "1.19.4-R0.1-SNAPSHOT") + paperweight.devBundle("dev.folia", "1.20.1-R0.1-SNAPSHOT") } tasks { diff --git a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt index 857c6a3a..85f98282 100644 --- a/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt +++ b/platforms/bukkit/src/main/kotlin/dev/cubxity/plugins/metrics/bukkit/util/FoliaExt.kt @@ -21,7 +21,7 @@ import io.papermc.paper.threadedregions.ThreadedRegionizer import io.papermc.paper.threadedregions.TickRegions.TickRegionData import io.papermc.paper.threadedregions.TickRegions.TickRegionSectionData import org.bukkit.World -import org.bukkit.craftbukkit.v1_19_R3.CraftWorld +import org.bukkit.craftbukkit.v1_20_R1.CraftWorld val World.regioniser: ThreadedRegionizer get() = (this as CraftWorld).handle.regioniser From 8018f69493e4e44ae37713ecc5f63403fc4fba5c Mon Sep 17 00:00:00 2001 From: Cubxity Date: Thu, 13 Jul 2023 17:18:54 +0200 Subject: [PATCH 07/11] feat: add per-thread cpu time collector --- .../metric/system/thread/ThreadCollector.kt | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt index 4ae07096..9a7bb846 100644 --- a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt +++ b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt @@ -18,6 +18,7 @@ package dev.cubxity.plugins.metrics.common.metric.system.thread import dev.cubxity.plugins.metrics.api.metric.collector.Collector +import dev.cubxity.plugins.metrics.api.metric.collector.NANOSECONDS_PER_SECOND import dev.cubxity.plugins.metrics.api.metric.data.CounterMetric import dev.cubxity.plugins.metrics.api.metric.data.GaugeMetric import dev.cubxity.plugins.metrics.api.metric.data.Metric @@ -26,10 +27,29 @@ import java.lang.management.ManagementFactory class ThreadCollector : Collector { private val bean = ManagementFactory.getThreadMXBean() - override fun collect(): List = listOf( - GaugeMetric("jvm_threads_current_count", value = bean.threadCount), - GaugeMetric("jvm_threads_daemon_count", value = bean.daemonThreadCount), - CounterMetric("jvm_threads_started_total", value = bean.totalStartedThreadCount), - GaugeMetric("jvm_threads_peak", value = bean.peakThreadCount), - ) + override fun collect(): List { + val ids = bean.allThreadIds + val list = ArrayList(4 + 2 * ids.size) + + list += GaugeMetric("jvm_threads_current_count", value = bean.threadCount) + list += GaugeMetric("jvm_threads_daemon_count", value = bean.daemonThreadCount) + list += CounterMetric("jvm_threads_started_total", value = bean.totalStartedThreadCount) + list += GaugeMetric("jvm_threads_peak", value = bean.peakThreadCount) + + ids.forEach { id -> + val info = bean.getThreadInfo(id) + val labels = mapOf("thread" to info.threadName) + list += CounterMetric( + "jvm_threads_cpu_time_total", + value = bean.getThreadCpuTime(id) / NANOSECONDS_PER_SECOND, + labels = labels + ) + list += CounterMetric( + "jvm_threads_user_time_total", + value = bean.getThreadUserTime(id) / NANOSECONDS_PER_SECOND, + labels = labels + ) + } + return list + } } \ No newline at end of file From 4bdb982b7847a30fe0ef3e2ee829415e1ec547a4 Mon Sep 17 00:00:00 2001 From: Cubxity Date: Thu, 14 Sep 2023 20:14:50 +0200 Subject: [PATCH 08/11] fix: npe when collecting thread-specific metrics `ThreadInfo#getThreadName` may return null, which causes the ThreadCollector to throw a NPE. --- .../metrics/common/metric/system/thread/ThreadCollector.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt index 9a7bb846..0e48972c 100644 --- a/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt +++ b/common/src/main/kotlin/dev/cubxity/plugins/metrics/common/metric/system/thread/ThreadCollector.kt @@ -37,7 +37,7 @@ class ThreadCollector : Collector { list += GaugeMetric("jvm_threads_peak", value = bean.peakThreadCount) ids.forEach { id -> - val info = bean.getThreadInfo(id) + val info = bean.getThreadInfo(id) ?: return@forEach val labels = mapOf("thread" to info.threadName) list += CounterMetric( "jvm_threads_cpu_time_total", From 4f30e35584ac6b77fa009d47198b00881a0e30d9 Mon Sep 17 00:00:00 2001 From: ItsNiceCraft <74358857+ItsNiceCraft@users.noreply.github.com> Date: Thu, 28 Sep 2023 19:35:33 +0200 Subject: [PATCH 09/11] docs: replace old github wiki with new page in readme (#107) --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 76417c86..b1c0861a 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ UnifiedMetrics is a fully-featured free and open-source metrics collection plugi licensed under [GNU LGPLv3](COPYING.LESSER). [![Grafana Dashboard](.github/assets/grafana.png)](https://unifiedmetrics-demo.cubxity.dev) -*Dashboard [included](https://github.com/Cubxity/UnifiedMetrics/wiki/Grafana) out-of-box!* +*Dashboard [included](https://docs.cubxity.dev/docs/unifiedmetrics/guides/grafana) out-of-box!* Click [here](https://unifiedmetrics-demo.cubxity.dev) for live preview! ## Features @@ -37,7 +37,7 @@ Click [here](https://unifiedmetrics-demo.cubxity.dev) for live preview! ## Getting started -Read the [wiki](https://github.com/Cubxity/UnifiedMetrics/wiki) for instructions on how to get started. +Read the [wiki](https://docs.cubxity.dev/docs/unifiedmetrics/intro) for instructions on how to get started. ## Metrics @@ -45,7 +45,7 @@ Read the [wiki](https://github.com/Cubxity/UnifiedMetrics/wiki) for instructions Table of metrics (click to show) | Collector | Description | Platform | Default | -|---------------|-------------------------------------------------|------------------|---------| +| ------------- | ----------------------------------------------- | ---------------- | ------- | | systemGc | Garbage collection duration and freed bytes | All | true | | systemMemory | Memory used, committed, max and init | All | true | | systemProcess | CPU load, seconds, and process start time | All | true | From 02f7898e22bf6462cbab365c64f3cda2a2d34bfa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 15 Oct 2023 10:12:50 +0200 Subject: [PATCH 10/11] chore(deps): update all non-major dependencies (#106) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 14 +++++++------- platforms/fabric/build.gradle.kts | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ac72c34e..3fa8f862 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index 0adc8e1a..1aa94a42 100755 --- a/gradlew +++ b/gradlew @@ -145,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -153,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -202,11 +202,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/platforms/fabric/build.gradle.kts b/platforms/fabric/build.gradle.kts index 30e60f06..8d2fc2a4 100644 --- a/platforms/fabric/build.gradle.kts +++ b/platforms/fabric/build.gradle.kts @@ -16,7 +16,7 @@ */ plugins { - id("fabric-loom") version "1.3.9" + id("fabric-loom") version "1.4.1" id("net.kyori.blossom") } @@ -30,7 +30,7 @@ dependencies { // https://fabricmc.net/versions.html minecraft("com.mojang:minecraft:1.17.1") mappings("net.fabricmc:yarn:1.17.1+build.65:v2") - modImplementation("net.fabricmc:fabric-loader:0.14.22") + modImplementation("net.fabricmc:fabric-loader:0.14.23") modImplementation("net.fabricmc.fabric-api:fabric-api:0.46.1+1.17") modImplementation("net.fabricmc:fabric-language-kotlin:1.10.10+kotlin.1.9.10") From 38730f6d8da997048f879efd749dd0d34f065c3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 15 Oct 2023 10:12:59 +0200 Subject: [PATCH 11/11] chore(deps): update actions/checkout action to v4 (#105) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/preview.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/preview.yml b/.github/workflows/preview.yml index 31265980..a13fd050 100644 --- a/.github/workflows/preview.yml +++ b/.github/workflows/preview.yml @@ -7,7 +7,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Configure GPG Key run: echo "${{secrets.SIGNING_KEY}}" | base64 --decode > /tmp/keyring.gpg - name: Set up JDK 17 @@ -35,7 +35,7 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Configure GPG Key run: echo "${{secrets.SIGNING_KEY}}" | base64 --decode > /tmp/keyring.gpg - name: Set up JDK 17 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 54b3f4ac..1bffd253 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,7 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Configure GPG Key run: echo "${{secrets.SIGNING_KEY}}" | base64 --decode > /tmp/keyring.gpg - name: Set up JDK 17 @@ -34,7 +34,7 @@ jobs: publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Configure GPG Key run: echo "${{secrets.SIGNING_KEY}}" | base64 --decode > /tmp/keyring.gpg - name: Set up JDK 17