From 8517a25160264e005c8d019b4ee1636fa31e651d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Schottst=C3=A4dt?= Date: Thu, 11 Jun 2026 23:32:44 +0200 Subject: [PATCH] fix release scroll metadata validation --- .github/workflows/release.yml | 188 +++++++++--------- scripts/prebuild/main.go | 2 +- scripts/validate-release-workflow/main.go | 129 ++++++++++++ .../validate-release-workflow/main_test.go | 43 ++++ scripts/validate_all_scrolls.sh | 2 + .../lgsm/.build/versions/pzserver/chunks.yaml | 24 +++ scrolls/lgsm/pzserver/scroll.yaml | 25 +++ 7 files changed, 318 insertions(+), 95 deletions(-) create mode 100644 scripts/validate-release-workflow/main.go create mode 100644 scripts/validate-release-workflow/main_test.go create mode 100644 scrolls/lgsm/.build/versions/pzserver/chunks.yaml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5196ed09..1eaf13b4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,100 +58,100 @@ jobs: - name: Pushing new scrolls shell: bash run: | - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.17 ./scrolls/minecraft/minecraft-spigot/1.17 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.17.1 ./scrolls/minecraft/minecraft-spigot/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.18 ./scrolls/minecraft/minecraft-spigot/1.18 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.18.1 ./scrolls/minecraft/minecraft-spigot/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.18.2 ./scrolls/minecraft/minecraft-spigot/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19 ./scrolls/minecraft/minecraft-spigot/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.1 ./scrolls/minecraft/minecraft-spigot/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.2 ./scrolls/minecraft/minecraft-spigot/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.3 ./scrolls/minecraft/minecraft-spigot/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.4 ./scrolls/minecraft/minecraft-spigot/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.1 ./scrolls/minecraft/minecraft-spigot/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.2 ./scrolls/minecraft/minecraft-spigot/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.4 ./scrolls/minecraft/minecraft-spigot/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.6 ./scrolls/minecraft/minecraft-spigot/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.1 ./scrolls/minecraft/minecraft-spigot/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.3 ./scrolls/minecraft/minecraft-spigot/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.4 ./scrolls/minecraft/minecraft-spigot/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.5 ./scrolls/minecraft/minecraft-spigot/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.6 ./scrolls/minecraft/minecraft-spigot/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.8 ./scrolls/minecraft/minecraft-spigot/1.21.8 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.17 ./scrolls/minecraft/minecraft-vanilla/1.17 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.17.1 ./scrolls/minecraft/minecraft-vanilla/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.18 ./scrolls/minecraft/minecraft-vanilla/1.18 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.18.1 ./scrolls/minecraft/minecraft-vanilla/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.18.2 ./scrolls/minecraft/minecraft-vanilla/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19 ./scrolls/minecraft/minecraft-vanilla/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.1 ./scrolls/minecraft/minecraft-vanilla/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.2 ./scrolls/minecraft/minecraft-vanilla/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.3 ./scrolls/minecraft/minecraft-vanilla/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.4 ./scrolls/minecraft/minecraft-vanilla/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.1 ./scrolls/minecraft/minecraft-vanilla/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.2 ./scrolls/minecraft/minecraft-vanilla/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.4 ./scrolls/minecraft/minecraft-vanilla/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.6 ./scrolls/minecraft/minecraft-vanilla/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.1 ./scrolls/minecraft/minecraft-vanilla/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.3 ./scrolls/minecraft/minecraft-vanilla/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.4 ./scrolls/minecraft/minecraft-vanilla/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.5 ./scrolls/minecraft/minecraft-vanilla/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.6 ./scrolls/minecraft/minecraft-vanilla/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.7 ./scrolls/minecraft/minecraft-vanilla/1.21.7 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.17 ./scrolls/minecraft/papermc/1.17 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.17.1 ./scrolls/minecraft/papermc/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.18.1 ./scrolls/minecraft/papermc/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.18.2 ./scrolls/minecraft/papermc/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19 ./scrolls/minecraft/papermc/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.1 ./scrolls/minecraft/papermc/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.2 ./scrolls/minecraft/papermc/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.3 ./scrolls/minecraft/papermc/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.4 ./scrolls/minecraft/papermc/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.1 ./scrolls/minecraft/papermc/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.2 ./scrolls/minecraft/papermc/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.4 ./scrolls/minecraft/papermc/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.6 ./scrolls/minecraft/papermc/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.1 ./scrolls/minecraft/papermc/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.3 ./scrolls/minecraft/papermc/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.4 ./scrolls/minecraft/papermc/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.5 ./scrolls/minecraft/papermc/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.6 ./scrolls/minecraft/papermc/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.7 ./scrolls/minecraft/papermc/1.21.7 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.17.1 ./scrolls/minecraft/forge/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.18 ./scrolls/minecraft/forge/1.18 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.18.1 ./scrolls/minecraft/forge/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.18.2 ./scrolls/minecraft/forge/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19 ./scrolls/minecraft/forge/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.1 ./scrolls/minecraft/forge/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.2 ./scrolls/minecraft/forge/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.3 ./scrolls/minecraft/forge/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.4 ./scrolls/minecraft/forge/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20 ./scrolls/minecraft/forge/1.20 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.1 ./scrolls/minecraft/forge/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.2 ./scrolls/minecraft/forge/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.3 ./scrolls/minecraft/forge/1.20.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.4 ./scrolls/minecraft/forge/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.6 ./scrolls/minecraft/forge/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.1 ./scrolls/minecraft/forge/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.3 ./scrolls/minecraft/forge/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.4 ./scrolls/minecraft/forge/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.5 ./scrolls/minecraft/forge/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.6 ./scrolls/minecraft/forge/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.7 ./scrolls/minecraft/forge/1.21.7 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-minecraft-cuberite:latest ./scrolls/minecraft/cuberite/latest -p main=25565 -p webpanel=8080 -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft - druid push artifacts.druid.gg/druid-team/scroll-rust-oxide:latest ./scrolls/rust/rust-oxide/latest -p main=/udp -p query=/udp -p rcon -p rustplus -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd --min-disk 10Gi --min-ram 6Gi --min-cpu 1 --smart --category rust - druid push artifacts.druid.gg/druid-team/scroll-rust-vanilla:latest ./scrolls/rust/rust-vanilla/latest -p main=/udp -p query=/udp -p rcon -p rustplus -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd --min-disk 10Gi --min-ram 6Gi --min-cpu 1 --smart --category rust - druid push artifacts.druid.gg/druid-team/scroll-lgsm:pwserver ./scrolls/lgsm/pwserver -p main=8211/udp -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 7Gi --min-ram 2Gi --min-cpu 0.5 --smart --category palworld - druid push artifacts.druid.gg/druid-team/scroll-lgsm:arkserver ./scrolls/lgsm/arkserver -p main=/udp -p query=/udp -p rcon -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 25Gi --min-ram 7Gi --min-cpu 0.5 --smart --category ark - druid push artifacts.druid.gg/druid-team/scroll-lgsm:untserver ./scrolls/lgsm/untserver -p main=/udp -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 7Gi --min-ram 1Gi --min-cpu 0.5 --smart --category unturned - druid push artifacts.druid.gg/druid-team/scroll-lgsm:dayzserver ./scrolls/lgsm/dayzserver -p main=/udp -p battle-eye=2304/udp -p query=27016/udp -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 7Gi --min-ram 5Gi --min-cpu 1 --category dayz - druid push artifacts.druid.gg/druid-team/scroll-lgsm:sdtdserver ./scrolls/lgsm/sdtdserver -p main=26900/udp -p main2=26902/udp -p maintcp=26900 -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 20Gi --min-ram 2Gi --min-cpu 0.5 --category 7days - druid push artifacts.druid.gg/druid-team/scroll-lgsm:gmodserver ./scrolls/lgsm/gmodserver -p query=27005/udp -p main=/udp -p sourcetv=27020/udp -p steam=27015 -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 8Gi --min-ram 512Mi --min-cpu 0.25 --smart --category gmod - druid push artifacts.druid.gg/druid-team/scroll-lgsm:cs2server ./scrolls/lgsm/cs2server -p main=/udp -p rcon=27015 -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 38Gi --min-ram 1Gi --min-cpu 0.5 --smart --category cs2 - druid push artifacts.druid.gg/druid-team/scroll-lgsm:pzserver ./scrolls/lgsm/pzserver -p main=/udp -p main2=/udp -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category zomboid + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.17 ./scrolls/minecraft/minecraft-spigot/1.17 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.17.1 ./scrolls/minecraft/minecraft-spigot/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.18 ./scrolls/minecraft/minecraft-spigot/1.18 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.18.1 ./scrolls/minecraft/minecraft-spigot/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.18.2 ./scrolls/minecraft/minecraft-spigot/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19 ./scrolls/minecraft/minecraft-spigot/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.1 ./scrolls/minecraft/minecraft-spigot/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.2 ./scrolls/minecraft/minecraft-spigot/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.3 ./scrolls/minecraft/minecraft-spigot/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.19.4 ./scrolls/minecraft/minecraft-spigot/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.1 ./scrolls/minecraft/minecraft-spigot/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.2 ./scrolls/minecraft/minecraft-spigot/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.4 ./scrolls/minecraft/minecraft-spigot/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.20.6 ./scrolls/minecraft/minecraft-spigot/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.1 ./scrolls/minecraft/minecraft-spigot/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.3 ./scrolls/minecraft/minecraft-spigot/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.4 ./scrolls/minecraft/minecraft-spigot/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.5 ./scrolls/minecraft/minecraft-spigot/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.6 ./scrolls/minecraft/minecraft-spigot/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-spigot:1.21.8 ./scrolls/minecraft/minecraft-spigot/1.21.8 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.17 ./scrolls/minecraft/minecraft-vanilla/1.17 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.17.1 ./scrolls/minecraft/minecraft-vanilla/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.18 ./scrolls/minecraft/minecraft-vanilla/1.18 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.18.1 ./scrolls/minecraft/minecraft-vanilla/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.18.2 ./scrolls/minecraft/minecraft-vanilla/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19 ./scrolls/minecraft/minecraft-vanilla/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.1 ./scrolls/minecraft/minecraft-vanilla/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.2 ./scrolls/minecraft/minecraft-vanilla/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.3 ./scrolls/minecraft/minecraft-vanilla/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.19.4 ./scrolls/minecraft/minecraft-vanilla/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.1 ./scrolls/minecraft/minecraft-vanilla/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.2 ./scrolls/minecraft/minecraft-vanilla/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.4 ./scrolls/minecraft/minecraft-vanilla/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.20.6 ./scrolls/minecraft/minecraft-vanilla/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.1 ./scrolls/minecraft/minecraft-vanilla/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.3 ./scrolls/minecraft/minecraft-vanilla/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.4 ./scrolls/minecraft/minecraft-vanilla/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.5 ./scrolls/minecraft/minecraft-vanilla/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.6 ./scrolls/minecraft/minecraft-vanilla/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-vanilla:1.21.7 ./scrolls/minecraft/minecraft-vanilla/1.21.7 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.17 ./scrolls/minecraft/papermc/1.17 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.17.1 ./scrolls/minecraft/papermc/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.18.1 ./scrolls/minecraft/papermc/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.18.2 ./scrolls/minecraft/papermc/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19 ./scrolls/minecraft/papermc/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.1 ./scrolls/minecraft/papermc/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.2 ./scrolls/minecraft/papermc/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.3 ./scrolls/minecraft/papermc/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.19.4 ./scrolls/minecraft/papermc/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.1 ./scrolls/minecraft/papermc/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.2 ./scrolls/minecraft/papermc/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.4 ./scrolls/minecraft/papermc/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.20.6 ./scrolls/minecraft/papermc/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.1 ./scrolls/minecraft/papermc/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.3 ./scrolls/minecraft/papermc/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.4 ./scrolls/minecraft/papermc/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.5 ./scrolls/minecraft/papermc/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.6 ./scrolls/minecraft/papermc/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-paper:1.21.7 ./scrolls/minecraft/papermc/1.21.7 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.17.1 ./scrolls/minecraft/forge/1.17.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.18 ./scrolls/minecraft/forge/1.18 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.18.1 ./scrolls/minecraft/forge/1.18.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.18.2 ./scrolls/minecraft/forge/1.18.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19 ./scrolls/minecraft/forge/1.19 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.1 ./scrolls/minecraft/forge/1.19.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.2 ./scrolls/minecraft/forge/1.19.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.3 ./scrolls/minecraft/forge/1.19.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.19.4 ./scrolls/minecraft/forge/1.19.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20 ./scrolls/minecraft/forge/1.20 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.1 ./scrolls/minecraft/forge/1.20.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.2 ./scrolls/minecraft/forge/1.20.2 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.3 ./scrolls/minecraft/forge/1.20.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.4 ./scrolls/minecraft/forge/1.20.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.20.6 ./scrolls/minecraft/forge/1.20.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.1 ./scrolls/minecraft/forge/1.21.1 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.3 ./scrolls/minecraft/forge/1.21.3 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.4 ./scrolls/minecraft/forge/1.21.4 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.5 ./scrolls/minecraft/forge/1.21.5 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.6 ./scrolls/minecraft/forge/1.21.6 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-forge:1.21.7 ./scrolls/minecraft/forge/1.21.7 -p main=25565 -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-minecraft-cuberite:latest ./scrolls/minecraft/cuberite/latest -p main=25565 -p webpanel=8080 -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category minecraft + druid push artifacts.druid.gg/druid-team/scroll-rust-oxide:latest ./scrolls/rust/rust-oxide/latest -p main=28015/udp -p query=28017/udp -p rcon=28016 -p rustplus=28082 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd --min-disk 10Gi --min-ram 6Gi --min-cpu 1 --smart --category rust + druid push artifacts.druid.gg/druid-team/scroll-rust-vanilla:latest ./scrolls/rust/rust-vanilla/latest -p main=28015/udp -p query=28017/udp -p rcon=28016 -p rustplus=28082 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd --min-disk 10Gi --min-ram 6Gi --min-cpu 1 --smart --category rust + druid push artifacts.druid.gg/druid-team/scroll-lgsm:pwserver ./scrolls/lgsm/pwserver -p main=8211/udp -p rcon=25575 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 7Gi --min-ram 2Gi --min-cpu 0.5 --smart --category palworld + druid push artifacts.druid.gg/druid-team/scroll-lgsm:arkserver ./scrolls/lgsm/arkserver -p main=7777/udp -p query=27015/udp -p rcon=27020 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 25Gi --min-ram 7Gi --min-cpu 0.5 --smart --category ark + druid push artifacts.druid.gg/druid-team/scroll-lgsm:untserver ./scrolls/lgsm/untserver -p main=27015/udp -p mainv6=27016 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 7Gi --min-ram 1Gi --min-cpu 0.5 --smart --category unturned + druid push artifacts.druid.gg/druid-team/scroll-lgsm:dayzserver ./scrolls/lgsm/dayzserver -p main=2302/udp -p battle-eye=2304/udp -p query=27016/udp -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 7Gi --min-ram 5Gi --min-cpu 1 --category dayz + druid push artifacts.druid.gg/druid-team/scroll-lgsm:sdtdserver ./scrolls/lgsm/sdtdserver -p main=26900/udp -p main2=26902/udp -p maintcp=26900 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 20Gi --min-ram 2Gi --min-cpu 0.5 --category 7days + druid push artifacts.druid.gg/druid-team/scroll-lgsm:gmodserver ./scrolls/lgsm/gmodserver -p query=27005/udp -p main=27015/udp -p sourcetv=27020/udp -p steam=27015 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 8Gi --min-ram 512Mi --min-cpu 0.25 --smart --category gmod + druid push artifacts.druid.gg/druid-team/scroll-lgsm:cs2server ./scrolls/lgsm/cs2server -p main=27015/udp -p rcon=27015 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 38Gi --min-ram 1Gi --min-cpu 0.5 --smart --category cs2 + druid push artifacts.druid.gg/druid-team/scroll-lgsm:pzserver ./scrolls/lgsm/pzserver -p main=16261/udp -p main2=16262/udp -p maintcp=16261 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --min-disk 3Gi --min-ram 512Mi --min-cpu 0.25 --smart --category zomboid - druid push artifacts.druid.gg/druid-team/scroll-lgsm:csgoserver ./scrolls/lgsm/csgoserver -p query=27005/udp -p main=27015/udp -p sourcetv=27020/udp -p steam=27015 -i artifacts.druid.gg/druid-team/druid:v0.1.248-steamcmd -m --smart --category csgo + druid push artifacts.druid.gg/druid-team/scroll-lgsm:csgoserver ./scrolls/lgsm/csgoserver -p query=27005/udp -p main=27015/udp -p sourcetv=27020/udp -p steam=27015 -i artifacts.druid.gg/druid-team/druid:v0.1.249-steamcmd -m --smart --category csgo - druid push artifacts.druid.gg/druid-team/scroll-hytale:standalone ./scrolls/hytale/hytale-standalone -p main=5520/udp -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 10Gi --min-ram 4Gi --min-cpu 1 -m --smart --category hytale - druid push artifacts.druid.gg/druid-team/scroll-hytale:latest ./scrolls/hytale/hytale-druid-gg -p main=5520/udp -i artifacts.druid.gg/druid-team/druid:v0.1.248 --min-disk 10Gi --min-ram 4Gi --min-cpu 1 -m --smart --category hytale + druid push artifacts.druid.gg/druid-team/scroll-hytale:standalone ./scrolls/hytale/hytale-standalone -p main=5520/udp -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 10Gi --min-ram 4Gi --min-cpu 1 -m --smart --category hytale + druid push artifacts.druid.gg/druid-team/scroll-hytale:latest ./scrolls/hytale/hytale-druid-gg -p main=5520/udp -i artifacts.druid.gg/druid-team/druid:v0.1.249 --min-disk 10Gi --min-ram 4Gi --min-cpu 1 -m --smart --category hytale diff --git a/scripts/prebuild/main.go b/scripts/prebuild/main.go index 218b4bea..9b2cdaba 100644 --- a/scripts/prebuild/main.go +++ b/scripts/prebuild/main.go @@ -646,7 +646,7 @@ func allSpecs() []prebuildSpec { {Target: "untserver", Artifact: "artifacts.druid.gg/druid-team/scroll-lgsm:untserver-prebuild", Source: "./scrolls/lgsm/untserver", Image: steamImage, Ports: []string{"main=27015/udp", "mainv6=27016"}, MinDisk: "7Gi", MinRAM: "1Gi", MinCPU: "0.5", Category: "unturned", Smart: true, PackMeta: true}, {Target: "sdtdserver", Artifact: "artifacts.druid.gg/druid-team/scroll-lgsm:sdtdserver-prebuild", Source: "./scrolls/lgsm/sdtdserver", Image: steamImage, Ports: []string{"query=26900/udp", "main=26900/udp", "main2=26902/udp", "maintcp=26900"}, MinDisk: "20Gi", MinRAM: "2Gi", MinCPU: "0.5", Category: "7days", PackMeta: true}, {Target: "gmodserver", Artifact: "artifacts.druid.gg/druid-team/scroll-lgsm:gmodserver-prebuild", Source: "./scrolls/lgsm/gmodserver", Image: steamImage, Ports: []string{"query=27005/udp", "main=27015/udp", "sourcetv=27020/udp", "steam=27015"}, MinDisk: "8Gi", MinRAM: "512Mi", MinCPU: "0.25", Category: "gmod", Smart: true, PackMeta: true}, - {Target: "cs2server", Artifact: "artifacts.druid.gg/druid-team/scroll-lgsm:cs2server-prebuild", Source: "./scrolls/lgsm/cs2server", Image: steamImage, Ports: []string{"main=27015/udp", "rcon=27015"}, MinDisk: "38Gi", BuildDisk: "95Gi", MinRAM: "1Gi", MinCPU: "0.5", Category: "cs2", Smart: true, PackMeta: true}, + {Target: "cs2server", Artifact: "artifacts.druid.gg/druid-team/scroll-lgsm:cs2server-prebuild", Source: "./scrolls/lgsm/cs2server", Image: steamImage, Ports: []string{"main=27015/udp", "rcon=27015"}, MinDisk: "70Gi", BuildDisk: "95Gi", MinRAM: "1Gi", MinCPU: "0.5", Category: "cs2", Smart: true, PackMeta: true}, {Target: "pzserver", Artifact: "artifacts.druid.gg/druid-team/scroll-lgsm:pzserver-prebuild", Source: "./scrolls/lgsm/pzserver", Image: steamImage, Ports: []string{"main=16261/udp", "main2=16262/udp", "maintcp=16261"}, MinDisk: "3Gi", MinRAM: "512Mi", MinCPU: "0.25", Category: "zomboid", Smart: true, PackMeta: true}, {Target: "csgoserver", Artifact: "artifacts.druid.gg/druid-team/scroll-lgsm:csgoserver-prebuild", Source: "./scrolls/lgsm/csgoserver", Image: steamImage, Ports: []string{"query=27005/udp", "main=27015/udp", "sourcetv=27020/udp", "steam=27015"}, BuildDisk: "45Gi", Category: "csgo", Smart: true, PackMeta: true}, {Target: "rust-vanilla", Artifact: "artifacts.druid.gg/druid-team/scroll-rust-vanilla:latest-prebuild", Source: "./scrolls/rust/rust-vanilla/latest", Image: steamImage, Ports: []string{"main=28015/udp", "query=28017/udp", "rcon=28016", "rustplus=28082"}, MinDisk: "10Gi", BuildDisk: "25Gi", MinRAM: "6Gi", MinCPU: "1", Category: "rust", Smart: true}, diff --git a/scripts/validate-release-workflow/main.go b/scripts/validate-release-workflow/main.go new file mode 100644 index 00000000..91833140 --- /dev/null +++ b/scripts/validate-release-workflow/main.go @@ -0,0 +1,129 @@ +package main + +import ( + "errors" + "fmt" + "os" + "regexp" + "strconv" + "strings" +) + +var ( + forbiddenReleaseValues = []string{ + "v0.1.248", + "highcard/druid", + "stable-nix", + "latest-nix", + "-nix-steamcmd", + } + portOverrideNamePattern = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9_-]*$`) + portOverridePattern = regexp.MustCompile(`^([A-Za-z][A-Za-z0-9_-]*)=([0-9]+)(?:/(tcp|udp|http|https))?$`) + pzserverRequiredPorts = map[string]string{ + "main": "16261/udp", + "main2": "16262/udp", + "maintcp": "16261", + } +) + +func main() { + path := ".github/workflows/release.yml" + if len(os.Args) > 1 { + path = os.Args[1] + } + if err := validateReleaseWorkflow(path); err != nil { + fmt.Fprintln(os.Stderr, "Error:", err) + os.Exit(1) + } +} + +func validateReleaseWorkflow(path string) error { + data, err := os.ReadFile(path) + if err != nil { + return err + } + lines := strings.Split(string(data), "\n") + var failures []string + foundPZServer := false + + for index, line := range lines { + lineNumber := index + 1 + for _, forbidden := range forbiddenReleaseValues { + if strings.Contains(line, forbidden) { + failures = append(failures, fmt.Sprintf("%s:%d contains forbidden value %q", path, lineNumber, forbidden)) + } + } + if !isArtifactPushLine(line) { + continue + } + fields := strings.Fields(line) + ports, err := validatePortOverrides(fields) + if err != nil { + failures = append(failures, fmt.Sprintf("%s:%d %v", path, lineNumber, err)) + } + if strings.Contains(line, "scroll-lgsm:pzserver") { + foundPZServer = true + for name, expected := range pzserverRequiredPorts { + if actual := ports[name]; actual != expected { + failures = append(failures, fmt.Sprintf("%s:%d pzserver requires -p %s=%s, got %q", path, lineNumber, name, expected, actual)) + } + } + } + } + + if !foundPZServer { + failures = append(failures, fmt.Sprintf("%s: missing pzserver release push", path)) + } + if len(failures) > 0 { + return errors.New(strings.Join(failures, "\n")) + } + return nil +} + +func isArtifactPushLine(line string) bool { + fields := strings.Fields(line) + for i := 0; i+2 < len(fields); i++ { + if fields[i] == "druid" && fields[i+1] == "push" && fields[i+2] != "category" { + return true + } + } + return false +} + +func validatePortOverrides(fields []string) (map[string]string, error) { + ports := make(map[string]string) + var failures []string + + for i, field := range fields { + if field != "-p" && field != "--port" { + continue + } + if i+1 >= len(fields) { + failures = append(failures, fmt.Sprintf("%s is missing an override", field)) + continue + } + override := fields[i+1] + matches := portOverridePattern.FindStringSubmatch(override) + if matches == nil { + failures = append(failures, fmt.Sprintf("invalid %s override %q; expected name=port or name=port/protocol", field, override)) + continue + } + name := matches[1] + portText := matches[2] + port, err := strconv.Atoi(portText) + if err != nil || port < 1 || port > 65535 { + failures = append(failures, fmt.Sprintf("invalid %s override %q; port must be 1-65535", field, override)) + continue + } + if !portOverrideNamePattern.MatchString(name) { + failures = append(failures, fmt.Sprintf("invalid %s override %q; invalid port name", field, override)) + continue + } + ports[name] = strings.TrimPrefix(override, name+"=") + } + + if len(failures) > 0 { + return ports, errors.New(strings.Join(failures, "; ")) + } + return ports, nil +} diff --git a/scripts/validate-release-workflow/main_test.go b/scripts/validate-release-workflow/main_test.go new file mode 100644 index 00000000..0abaec94 --- /dev/null +++ b/scripts/validate-release-workflow/main_test.go @@ -0,0 +1,43 @@ +package main + +import ( + "strings" + "testing" +) + +func TestValidatePortOverridesAcceptsConcretePorts(t *testing.T) { + fields := strings.Fields("druid push repo:tag ./scroll -p main=25565 -p query=27015/udp -p battle-eye=2304/udp -p webpanel=8080") + + ports, err := validatePortOverrides(fields) + if err != nil { + t.Fatal(err) + } + if ports["main"] != "25565" || ports["query"] != "27015/udp" || ports["battle-eye"] != "2304/udp" || ports["webpanel"] != "8080" { + t.Fatalf("ports = %#v", ports) + } +} + +func TestValidatePortOverridesRejectsBlankAndBarePorts(t *testing.T) { + for _, value := range []string{ + "main", + "main=", + "main=/udp", + "main=0", + "main=0/udp", + "main=65536", + } { + fields := []string{"druid", "push", "repo:tag", "./scroll", "-p", value} + if _, err := validatePortOverrides(fields); err == nil { + t.Fatalf("%s passed validation, want failure", value) + } + } +} + +func TestIsArtifactPushLineSkipsCategories(t *testing.T) { + if isArtifactPushLine("druid push category artifacts.druid.gg/foo bar ./meta") { + t.Fatal("category push should not be treated as artifact push") + } + if !isArtifactPushLine("druid push artifacts.druid.gg/foo:tag ./scroll -p main=1") { + t.Fatal("artifact push was not detected") + } +} diff --git a/scripts/validate_all_scrolls.sh b/scripts/validate_all_scrolls.sh index d7bc73da..4e5f6693 100755 --- a/scripts/validate_all_scrolls.sh +++ b/scripts/validate_all_scrolls.sh @@ -2,6 +2,8 @@ set -euo pipefail +go run ./scripts/validate-release-workflow + if command -v druid >/dev/null 2>&1 && druid validate --help >/dev/null 2>&1; then while IFS= read -r file; do dir="${file%/scroll.yaml}" diff --git a/scrolls/lgsm/.build/versions/pzserver/chunks.yaml b/scrolls/lgsm/.build/versions/pzserver/chunks.yaml new file mode 100644 index 00000000..a03e27f5 --- /dev/null +++ b/scrolls/lgsm/.build/versions/pzserver/chunks.yaml @@ -0,0 +1,24 @@ +chunks: + - name: configure-pzserver + path: configure-pzserver.sh + - name: install-lgsm + path: install-lgsm.sh + - name: lgsm + path: lgsm + - name: linuxgsm + path: linuxgsm.sh + - name: log + path: log + - name: patch-lgsm-permissions + path: patch-lgsm-permissions.sh + - name: pzserver + path: pzserver + - name: serverfiles + path: serverfiles + chunks: + - name: media + path: media + - name: steamapps + path: steamapps + - name: zombie + path: zombie diff --git a/scrolls/lgsm/pzserver/scroll.yaml b/scrolls/lgsm/pzserver/scroll.yaml index 115dec64..b2df79ed 100644 --- a/scrolls/lgsm/pzserver/scroll.yaml +++ b/scrolls/lgsm/pzserver/scroll.yaml @@ -3,6 +3,31 @@ desc: pzserver version: 0.0.2 app_version: pzserver keepAlivePPM: 5 +chunks: + - name: configure-pzserver + path: configure-pzserver.sh + - name: install-lgsm + path: install-lgsm.sh + - name: lgsm + path: lgsm + - name: linuxgsm + path: linuxgsm.sh + - name: log + path: log + - name: patch-lgsm-permissions + path: patch-lgsm-permissions.sh + - name: pzserver + path: pzserver + - name: serverfiles + path: serverfiles + chunks: + - name: media + path: media + - name: steamapps + path: steamapps + - name: zombie + path: zombie + ports: - name: main protocol: udp