Browse Source

Add workflow that runs simple test with the engine present

sfan5 1 month ago
parent
commit
316c0c7224
5 changed files with 54 additions and 0 deletions
  1. 11 0
      .github/workflows/test.yml
  2. 16 0
      mods/default/init.lua
  3. 1 0
      utils/test/minetest.conf
  4. 19 0
      utils/test/run.sh
  5. 7 0
      utils/test/world.mt

+ 11 - 0
.github/workflows/test.yml

@@ -0,0 +1,11 @@
+name: test
+on: [push, pull_request]
+
+jobs:
+  test:
+    runs-on: ubuntu-latest
+    timeout-minutes: 5
+    steps:
+    - uses: actions/checkout@v4
+
+    - run: ./utils/test/run.sh

+ 16 - 0
mods/default/init.lua

@@ -77,3 +77,19 @@ dofile(default_path.."/crafting.lua")
 dofile(default_path.."/mapgen.lua")
 dofile(default_path.."/aliases.lua")
 dofile(default_path.."/legacy.lua")
+
+-- Smoke test that is run via ./util/test/run.sh
+if minetest.settings:get_bool("minetest_game_smoke_test") then
+	minetest.after(0, function()
+		minetest.emerge_area(vector.new(0, 0, 0), vector.new(32, 32, 32))
+		local pos = vector.new(9, 9, 9)
+		local function check()
+			if minetest.get_node(pos).name ~= "ignore" then
+				minetest.request_shutdown()
+				return
+			end
+			minetest.after(0, check)
+		end
+		check()
+	end)
+end

+ 1 - 0
utils/test/minetest.conf

@@ -0,0 +1 @@
+minetest_game_smoke_test = true

+ 19 - 0
utils/test/run.sh

@@ -0,0 +1,19 @@
+#!/bin/bash -e
+world=$(mktemp -d)
+trap 'rm -rf "$world" || :' EXIT
+
+[ -f game.conf ] || { echo "Must be run in game root folder." >&2; exit 1; }
+
+cp -v utils/test/world.mt "$world/"
+chmod -R a+rwX "$world" # needed because server runs as unprivileged user inside container
+
+vol=(
+	-v "$PWD/utils/test/minetest.conf":/etc/minetest/minetest.conf
+	--tmpfs /var/lib/minetest/.minetest
+	-v "$PWD":/var/lib/minetest/.minetest/games/minetest_game
+	-v "$world":/var/lib/minetest/.minetest/world
+)
+[ -z "$DOCKER_IMAGE" ] && DOCKER_IMAGE="ghcr.io/minetest/minetest:master"
+docker run --rm -i "${vol[@]}" "$DOCKER_IMAGE"
+
+exit 0

+ 7 - 0
utils/test/world.mt

@@ -0,0 +1,7 @@
+auth_backend = sqlite3
+backend = sqlite3
+creative_mode = false
+enable_damage = true
+gameid = minetest
+mod_storage_backend = sqlite3
+player_backend = sqlite3