Makefile 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. .PHONY: lint test install clean
  2. # Lua 5.1 lint + runtime test pipeline
  3. # Run: make lint test
  4. LUA_FILES := $(shell find src tests -name '*.lua' 2>/dev/null)
  5. TEST_FILES := $(shell ls tests/*.lua 2>/dev/null | grep -v test_smoke)
  6. LUA51 := lua5.1
  7. LUAC51 := luac5.1
  8. LINT_SCRIPT := $(shell find /root/.openclaw/workspace/skills/lua51-openwrt-lint/scripts -name 'lint.py' 2>/dev/null | head -1)
  9. TESTBED_SCRIPTS := $(shell find /root/.openclaw/workspace/skills/openwrt-testbed/scripts -name '*.sh' 2>/dev/null)
  10. TESTBED := $(shell echo "$$(dirname $$(dirname $(TESTBED_SCRIPTS)))" 2>/dev/null)
  11. # ------------------------------------------------------------------
  12. # Lint — parse check + feature scan (fast, no Docker)
  13. # ------------------------------------------------------------------
  14. lint:
  15. @echo "=== Lua 5.1 / OpenWrt Lint ==="
  16. @for f in $(LUA_FILES); do \
  17. echo -n " $$f ... "; \
  18. if $(LUAC51) -p "$$f" >/dev/null 2>&1; then \
  19. echo "OK"; \
  20. else \
  21. echo "FAIL"; \
  22. $(LUAC51) -p "$$f"; \
  23. exit 1; \
  24. fi; \
  25. done
  26. @echo " parse: all OK"
  27. @echo ""
  28. @echo "=== forbidden feature scan (comments stripped) ==="
  29. @bad=0; \
  30. for f in $(LUA_FILES); do \
  31. stripped=$$(perl -0777 -pe 's{--\[\[[^\]]*\]\]}{}g; s{--[^\n]*}{}g' "$$f"); \
  32. hits=$$(echo "$$stripped" | grep -nE '\bgoto\b|::[A-Za-z_]+::|<close>|utf8\.|table\.(move|pack|unpack)\b|string\.(pack|unpack|dump)\b' | head -5); \
  33. if [ -n "$$hits" ]; then echo " $$f:"; echo "$$hits" | sed 's/^/ /'; bad=1; fi; \
  34. done; \
  35. if [ $$bad -eq 0 ]; then echo " features: clean"; else exit 1; fi
  36. @echo ""
  37. @echo "lint: OK"
  38. # ------------------------------------------------------------------
  39. # Test on OpenWrt 19.07.7 testbed (Docker, ~2-5s overhead)
  40. # ------------------------------------------------------------------
  41. TEST_FILE ?= tests/smoke.lua
  42. test:
  43. @echo "=== OpenWrt Testbed runtime check ==="
  44. @if [ ! -x "$(TESTBED_SCRIPTS)/test.sh" ]; then \
  45. echo "testbed not found — skipping runtime tests"; \
  46. echo "(install openwrt-testbed skill first)"; \
  47. exit 0; \
  48. fi
  49. @echo "using testbed: $(TESTBED)"
  50. $(TESTBED_SCRIPTS)/test.sh $(TEST_FILE) --assert "OK" 2>&1 | tail -20
  51. @echo "=== done ==="
  52. # ------------------------------------------------------------------
  53. # Test a specific file
  54. # ------------------------------------------------------------------
  55. test-file:
  56. @$(TESTBED_SCRIPTS)/test.sh $(TEST_FILE) --assert "OK" 2>&1 | tail -20
  57. # ------------------------------------------------------------------
  58. # Unit tests (plain Lua, no Docker needed for logic-only tests)
  59. # ------------------------------------------------------------------
  60. unit:
  61. @echo "=== Unit tests (plain Lua) ==="
  62. @for t in $(TEST_FILES); do \
  63. echo "--- $$t ---"; \
  64. $(LUA51) $$t 2>&1 | tail -3 || exit 1; \
  65. done
  66. # ------------------------------------------------------------------
  67. # Install to local staging dir (for SDK packaging)
  68. # ------------------------------------------------------------------
  69. DESTDIR ?= /tmp/balancerlite-staging
  70. PREFIX ?= /usr
  71. install:
  72. install -d $(DESTDIR)$(PREFIX)/lib/lua/5.1/balancerlite/
  73. install -d $(DESTDIR)$(PREFIX)/bin/
  74. install -d $(DESTDIR)/etc/config/
  75. install -d $(DESTDIR)/etc/init.d/
  76. install -m 0644 src/balancerlite/*.lua $(DESTDIR)$(PREFIX)/lib/lua/5.1/balancerlite/
  77. install -m 0755 bin/balancerlite $(DESTDIR)$(PREFIX)/bin/
  78. install -m 0755 bin/balancerlite-ctl $(DESTDIR)$(PREFIX)/bin/
  79. install -m 0644 etc/config/balancerlite $(DESTDIR)/etc/config/
  80. install -m 0755 etc/init.d/balancerlite $(DESTDIR)/etc/init.d/
  81. @echo "installed to $(DESTDIR)"
  82. clean:
  83. @echo "nothing to clean (no build artifacts)"
  84. .PHONY: lint test unit install clean test-file