.PHONY: lint test install clean # Lua 5.1 lint + runtime test pipeline # Run: make lint test LUA_FILES := $(shell find src tests -name '*.lua' 2>/dev/null) TEST_FILES := $(shell ls tests/*.lua 2>/dev/null | grep -v test_smoke) LUA51 := lua5.1 LUAC51 := luac5.1 LINT_SCRIPT := $(shell find /root/.openclaw/workspace/skills/lua51-openwrt-lint/scripts -name 'lint.py' 2>/dev/null | head -1) TESTBED_SCRIPTS := $(shell find /root/.openclaw/workspace/skills/openwrt-testbed/scripts -name '*.sh' 2>/dev/null) TESTBED := $(shell echo "$$(dirname $$(dirname $(TESTBED_SCRIPTS)))" 2>/dev/null) # ------------------------------------------------------------------ # Lint — parse check + feature scan (fast, no Docker) # ------------------------------------------------------------------ lint: @echo "=== Lua 5.1 / OpenWrt Lint ===" @for f in $(LUA_FILES); do \ echo -n " $$f ... "; \ if $(LUAC51) -p "$$f" >/dev/null 2>&1; then \ echo "OK"; \ else \ echo "FAIL"; \ $(LUAC51) -p "$$f"; \ exit 1; \ fi; \ done @echo " parse: all OK" @echo "" @echo "=== forbidden feature scan (comments stripped) ===" @bad=0; \ for f in $(LUA_FILES); do \ stripped=$$(perl -0777 -pe 's{--\[\[[^\]]*\]\]}{}g; s{--[^\n]*}{}g' "$$f"); \ hits=$$(echo "$$stripped" | grep -nE '\bgoto\b|::[A-Za-z_]+::||utf8\.|table\.(move|pack|unpack)\b|string\.(pack|unpack|dump)\b' | head -5); \ if [ -n "$$hits" ]; then echo " $$f:"; echo "$$hits" | sed 's/^/ /'; bad=1; fi; \ done; \ if [ $$bad -eq 0 ]; then echo " features: clean"; else exit 1; fi @echo "" @echo "lint: OK" # ------------------------------------------------------------------ # Test on OpenWrt 19.07.7 testbed (Docker, ~2-5s overhead) # ------------------------------------------------------------------ TEST_FILE ?= tests/smoke.lua test: @echo "=== OpenWrt Testbed runtime check ===" @if [ ! -x "$(TESTBED_SCRIPTS)/test.sh" ]; then \ echo "testbed not found — skipping runtime tests"; \ echo "(install openwrt-testbed skill first)"; \ exit 0; \ fi @echo "using testbed: $(TESTBED)" $(TESTBED_SCRIPTS)/test.sh $(TEST_FILE) --assert "OK" 2>&1 | tail -20 @echo "=== done ===" # ------------------------------------------------------------------ # Test a specific file # ------------------------------------------------------------------ test-file: @$(TESTBED_SCRIPTS)/test.sh $(TEST_FILE) --assert "OK" 2>&1 | tail -20 # ------------------------------------------------------------------ # Unit tests (plain Lua, no Docker needed for logic-only tests) # ------------------------------------------------------------------ unit: @echo "=== Unit tests (plain Lua) ===" @for t in $(TEST_FILES); do \ echo "--- $$t ---"; \ $(LUA51) $$t 2>&1 | tail -3 || exit 1; \ done # ------------------------------------------------------------------ # Install to local staging dir (for SDK packaging) # ------------------------------------------------------------------ DESTDIR ?= /tmp/balancerlite-staging PREFIX ?= /usr install: install -d $(DESTDIR)$(PREFIX)/lib/lua/5.1/balancerlite/ install -d $(DESTDIR)$(PREFIX)/bin/ install -d $(DESTDIR)/etc/config/ install -d $(DESTDIR)/etc/init.d/ install -m 0644 src/balancerlite/*.lua $(DESTDIR)$(PREFIX)/lib/lua/5.1/balancerlite/ install -m 0755 bin/balancerlite $(DESTDIR)$(PREFIX)/bin/ install -m 0755 bin/balancerlite-ctl $(DESTDIR)$(PREFIX)/bin/ install -m 0644 etc/config/balancerlite $(DESTDIR)/etc/config/ install -m 0755 etc/init.d/balancerlite $(DESTDIR)/etc/init.d/ @echo "installed to $(DESTDIR)" clean: @echo "nothing to clean (no build artifacts)" .PHONY: lint test unit install clean test-file