Add workflow that runs simple test with the engine present

This commit is contained in:
sfan5 2024-03-25 20:45:31 +01:00
parent ef788d0307
commit 316c0c7224
5 changed files with 54 additions and 0 deletions

11
.github/workflows/test.yml vendored Normal file
View File

@ -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

View File

@ -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
utils/test/minetest.conf Normal file
View File

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

19
utils/test/run.sh Executable file
View File

@ -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
utils/test/world.mt Normal file
View File

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