From f81cb10f20875e32849182c47a10933c0d7fc689 Mon Sep 17 00:00:00 2001 From: BuckarooBanzay Date: Thu, 13 Feb 2020 12:26:32 +0100 Subject: [PATCH] add luacheck and integration test workflows / fix luacheck errors partially attends to https://github.com/pandorabox-io/pandorabox.io/issues/444 (the ObjectRef issue) --- .github/workflows/integration-test.yml | 14 ++++++++ .github/workflows/luacheck.yml | 17 +++++++++ .luacheckrc | 34 ++++++++++++++++++ 3d_armor/api.lua | 7 ++-- 3d_armor/init.lua | 49 ++++++++++++++++---------- 3d_armor/integration_test.lua | 25 +++++++++++++ README.md | 3 ++ integration-test.sh | 20 +++++++++++ shields/init.lua | 1 - wieldview/init.lua | 10 +++--- 10 files changed, 152 insertions(+), 28 deletions(-) create mode 100644 .github/workflows/integration-test.yml create mode 100644 .github/workflows/luacheck.yml create mode 100644 .luacheckrc create mode 100644 3d_armor/integration_test.lua create mode 100755 integration-test.sh diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml new file mode 100644 index 0000000..1eeaa6a --- /dev/null +++ b/.github/workflows/integration-test.yml @@ -0,0 +1,14 @@ +name: integration-test + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + + - name: integration-test + run: ./integration-test.sh diff --git a/.github/workflows/luacheck.yml b/.github/workflows/luacheck.yml new file mode 100644 index 0000000..a03fe92 --- /dev/null +++ b/.github/workflows/luacheck.yml @@ -0,0 +1,17 @@ +name: luacheck + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + - name: apt + run: sudo apt-get install -y luarocks + - name: luacheck install + run: luarocks install --local luacheck + - name: luacheck run + run: $HOME/.luarocks/bin/luacheck ./ diff --git a/.luacheckrc b/.luacheckrc new file mode 100644 index 0000000..b01ed8e --- /dev/null +++ b/.luacheckrc @@ -0,0 +1,34 @@ + +unused_args = false + +globals = { + "wieldview", + "armor", + "armor_i18n", + "inventory_plus" +} + +read_globals = { + -- Stdlib + string = {fields = {"split"}}, + table = {fields = {"copy", "getn"}}, + + -- Minetest + "vector", "ItemStack", + "dump", "VoxelArea", + + -- deps + "default", + "minetest", + "unified_inventory", + "intllib", + "wardrobe", + "player_monoids", + "armor_monoid", + "sfinv", + "ARMOR_MATERIALS", + "ARMOR_FIRE_NODES", + "pova", + "skins", + "u_skins" +} diff --git a/3d_armor/api.lua b/3d_armor/api.lua index 5b43d04..ed944b4 100644 --- a/3d_armor/api.lua +++ b/3d_armor/api.lua @@ -185,7 +185,6 @@ armor.set_player_armor = function(self, player) local material = {count=1} local preview = armor:get_preview(name) local texture = "3d_armor_trans.png" - local textures = {} local physics = {} local attributes = {} local levels = {} @@ -324,8 +323,8 @@ armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabili local list = armor_inv:get_list("armor") for i, stack in pairs(list) do if stack:get_count() == 1 then - local name = stack:get_name() - local use = minetest.get_item_group(name, "armor_use") or 0 + local itemname = stack:get_name() + local use = minetest.get_item_group(itemname, "armor_use") or 0 local damage = use > 0 local def = stack:get_definition() or {} if type(def.on_punched) == "function" then @@ -373,7 +372,7 @@ armor.punch = function(self, player, hitter, time_from_last_punch, tool_capabili end end if damage == true and hitter == "fire" then - damage = minetest.get_item_group(name, "flammable") > 0 + damage = minetest.get_item_group(itemname, "flammable") > 0 end if damage == true then self:damage(player, i, stack, use) diff --git a/3d_armor/init.lua b/3d_armor/init.lua index 3e9d2f9..3c4a70f 100644 --- a/3d_armor/init.lua +++ b/3d_armor/init.lua @@ -15,19 +15,23 @@ local F = minetest.formspec_escape dofile(modpath.."/api.lua") +-- integration test +if minetest.settings:get_bool("enable_3d_armor_integration_test") then + dofile(modpath.."/integration_test.lua") +end + + -- Legacy Config Support local input = io.open(modpath.."/armor.conf", "r") if input then dofile(modpath.."/armor.conf") input:close() - input = nil end input = io.open(worldpath.."/armor.conf", "r") if input then dofile(worldpath.."/armor.conf") input:close() - input = nil end for name, _ in pairs(armor.config) do local global = "ARMOR_"..name:upper() @@ -169,9 +173,9 @@ local function validate_armor_inventory(player) end end -local function init_player_armor(player) - local name = player:get_player_name() - local pos = player:get_pos() +local function init_player_armor(initplayer) + local name = initplayer:get_player_name() + local pos = initplayer:get_pos() if not name or not pos then return false end @@ -214,20 +218,20 @@ local function init_player_armor(player) end, }, name) armor_inv:set_size("armor", 6) - if not armor:load_armor_inventory(player) and armor.migrate_old_inventory then - local player_inv = player:get_inventory() + if not armor:load_armor_inventory(initplayer) and armor.migrate_old_inventory then + local player_inv = initplayer:get_inventory() player_inv:set_size("armor", 6) for i=1, 6 do local stack = player_inv:get_stack("armor", i) armor_inv:set_stack("armor", i, stack) end - armor:save_armor_inventory(player) + armor:save_armor_inventory(initplayer) player_inv:set_size("armor", 0) end for i=1, 6 do local stack = armor_inv:get_stack("armor", i) if stack:get_count() > 0 then - armor:run_callbacks("on_equip", player, i, stack) + armor:run_callbacks("on_equip", initplayer, i, stack) end end armor.def[name] = { @@ -263,7 +267,7 @@ local function init_player_armor(player) end end end - armor:set_player_armor(player) + armor:set_player_armor(initplayer) return true end @@ -291,24 +295,31 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) if not name then return end + local player_name = player:get_player_name() for field, _ in pairs(fields) do if string.find(field, "skins_set") then - minetest.after(0, function(player) - local skin = armor:get_player_skin(name) - armor.textures[name].skin = skin - armor:set_player_armor(player) - end, player) + minetest.after(0, function() + local pplayer = minetest.get_player_by_name(player_name) + if player then + local skin = armor:get_player_skin(name) + armor.textures[name].skin = skin + armor:set_player_armor(pplayer) + end + end) end end end) minetest.register_on_joinplayer(function(player) default.player_set_model(player, "3d_armor_character.b3d") - minetest.after(0, function(player) - if init_player_armor(player) == false then - pending_players[player] = 0 + local player_name = player:get_player_name() + + minetest.after(0, function() + local pplayer = minetest.get_player_by_name(player_name) + if pplayer and init_player_armor(pplayer) == false then + pending_players[pplayer] = 0 end - end, player) + end) end) minetest.register_on_leaveplayer(function(player) diff --git a/3d_armor/integration_test.lua b/3d_armor/integration_test.lua new file mode 100644 index 0000000..65e9dfd --- /dev/null +++ b/3d_armor/integration_test.lua @@ -0,0 +1,25 @@ + +minetest.log("warning", "[TEST] integration-test enabled!") + +minetest.register_on_mods_loaded(function() + minetest.after(1, function() + + local data = minetest.write_json({ success = true }, true); + local file = io.open(minetest.get_worldpath().."/integration_test.json", "w" ); + if file then + file:write(data) + file:close() + end + + file = io.open(minetest.get_worldpath().."/registered_nodes.txt", "w" ); + if file then + for name in pairs(minetest.registered_nodes) do + file:write(name .. '\n') + end + file:close() + end + + minetest.log("warning", "[TEST] integration tests done!") + minetest.request_shutdown("success") + end) +end) diff --git a/README.md b/README.md index 204bf9d..c93745d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ Modpack - 3d Armor [0.4.13] =========================== +![](https://github.com/mt-mods/3d_armor/workflows/luacheck/badge.svg) +![](https://github.com/mt-mods/3d_armor/workflows/integration-test/badge.svg) + ### Table of Contents diff --git a/integration-test.sh b/integration-test.sh new file mode 100755 index 0000000..9032da1 --- /dev/null +++ b/integration-test.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# simple integration test + +CFG=/tmp/minetest.conf +MTDIR=/tmp/mt +WORLDDIR=${MTDIR}/worlds/world + +cat < ${CFG} + enable_3d_armor_integration_test = true +EOF + +mkdir -p ${WORLDDIR} +chmod 777 ${MTDIR} -R +docker run --rm -i \ + -v ${CFG}:/etc/minetest/minetest.conf:ro \ + -v ${MTDIR}:/var/lib/minetest/.minetest \ + -v $(pwd):/var/lib/minetest/.minetest/worlds/world/worldmods/3d_armor \ + registry.gitlab.com/minetest/minetest/server:5.0.1 + +test -f ${WORLDDIR}/integration_test.json && exit 0 || exit 1 diff --git a/shields/init.lua b/shields/init.lua index 5c49384..ada503e 100644 --- a/shields/init.lua +++ b/shields/init.lua @@ -2,7 +2,6 @@ local S = armor_i18n.gettext local disable_sounds = minetest.settings:get_bool("shields_disable_sounds") -local use_moreores = minetest.get_modpath("moreores") local function play_sound_effect(player, name) if not disable_sounds and player then local pos = player:get_pos() diff --git a/wieldview/init.lua b/wieldview/init.lua index 45f9fca..7f68732 100644 --- a/wieldview/init.lua +++ b/wieldview/init.lua @@ -66,9 +66,12 @@ end minetest.register_on_joinplayer(function(player) local name = player:get_player_name() wieldview.wielded_item[name] = "" - minetest.after(0, function(player) - wieldview:update_wielded_item(player) - end, player) + minetest.after(0, function() + local pplayer = minetest.get_player_by_name(name) + if player then + wieldview:update_wielded_item(pplayer) + end + end) end) minetest.register_globalstep(function(dtime) @@ -80,4 +83,3 @@ minetest.register_globalstep(function(dtime) time = 0 end end) -