luadata 0.1.7

Parse Lua data files and convert to JSON
Documentation
GOLANGCI_LINT_VERSION := v2.11.3
GOFUMPT_VERSION := v0.9.0
BUMP ?= patch

UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
	SHARED_EXT := .dylib
	SHARED_PREFIX := lib
else ifeq ($(UNAME_S),Linux)
	SHARED_EXT := .so
	SHARED_PREFIX := lib
else
	SHARED_EXT := .dll
	SHARED_PREFIX :=
endif

UNAME_M := $(shell uname -m)
ifeq ($(UNAME_M),x86_64)
	GO_PLATFORM := $(shell echo $(UNAME_S) | tr A-Z a-z)_amd64
else ifeq ($(UNAME_M),arm64)
	GO_PLATFORM := $(shell echo $(UNAME_S) | tr A-Z a-z)_arm64
else ifeq ($(UNAME_M),aarch64)
	GO_PLATFORM := $(shell echo $(UNAME_S) | tr A-Z a-z)_arm64
endif

.PHONY: build build-clib build-wasm build-npm build-docs build-site serve clean \
	test test-rust test-go test-python \
	lint fmt fmt-check check setup release validate validate-testdata

# ── Rust targets ──────────────────────────────────────────────────

build:
	cargo build -p luadata_cli --release
	mkdir -p bin/cli
	cp target/release/luadata bin/cli/

build-clib:
	cargo build -p luadata_clib --release
	mkdir -p bin/clib
	cp target/release/$(SHARED_PREFIX)luadata_clib$(SHARED_EXT) bin/clib/$(SHARED_PREFIX)luadata$(SHARED_EXT)

build-clib-go: build-clib
	mkdir -p go/internal/ffi/lib/$(GO_PLATFORM)
	cp bin/clib/$(SHARED_PREFIX)luadata$(SHARED_EXT) go/internal/ffi/lib/$(GO_PLATFORM)/

SITE_VERSION ?= dev

build-wasm:
	cargo install wasm-pack 2>/dev/null || true
	wasm-pack build wasm --target web --out-dir ../bin/web/pkg
	cp web/luadata.js web/app.js bin/web/
	sed 's/__VERSION__/$(SITE_VERSION)/' web/index.html > bin/web/index.html

build-npm:
	cargo install wasm-pack 2>/dev/null || true
	wasm-pack build wasm --target bundler --out-dir ../npm/wasm
	rm -f npm/wasm/package.json npm/wasm/.gitignore

build-docs:
	cd web/docs/gen && go run . -out ../../../bin/web/docs

build-site: build-wasm build-docs

serve: build-site
	@echo "Serving at http://localhost:8080"
	@echo "Docs at http://localhost:8080/docs/"
	cd bin/web && python3 -m http.server 8080

clean:
	rm -rf bin target npm/wasm

# ── Test targets ──────────────────────────────────────────────────

test: test-rust test-go

test-rust:
	cargo test -p luadata

test-go: build-clib
	LUADATA_LIB_PATH=$(CURDIR)/bin/clib/$(SHARED_PREFIX)luadata$(SHARED_EXT) \
		go test -C go -v ./...

test-python:
	cd python && uv run --extra test maturin develop
	cd python && uv run --extra test pytest tests -v

# ── Lint / format ─────────────────────────────────────────────────

lint:
	cargo clippy --workspace -- -D warnings

fmt:
	cargo fmt --all
	gofumpt -w go/

fmt-check:
	@cargo fmt --all -- --check
	@test -z "$$(gofumpt -d go/)" || (echo "files need formatting — run 'make fmt'" && gofumpt -d go/ && exit 1)

check: build test-rust lint fmt-check validate-testdata
	cargo check -p luadata_python
	cargo check -p luadata-wasm

# ── Setup ─────────────────────────────────────────────────────────

setup:
	go install mvdan.cc/gofumpt@$(GOFUMPT_VERSION)
	rustup component add clippy rustfmt

# ── Validate ──────────────────────────────────────────────────────

validate: build
	@PATH="$(CURDIR)/bin/cli:$(PATH)" bash scripts/validate-folder.sh $(VALIDATE_FLAGS) $(DIR)

validate-testdata: build
	@PATH="$(CURDIR)/bin/cli:$(PATH)" bash scripts/validate-folder.sh testdata/valid
	@PATH="$(CURDIR)/bin/cli:$(PATH)" bash scripts/validate-folder.sh --expect-fail testdata/invalid

# ── Release ───────────────────────────────────────────────────────

release:
	@bash scripts/release.sh $(BUMP)