.PHONY: all build-frontend build-go build-wasm clean release run lint scan check format tidy test test-wasm dev docker-build BINARY_NAME=software-station FRONTEND_DIR=frontend BUILD_DIR=build VERIFIER_DIR=software-verifier WASM_OUT=frontend/static/verifier VERSION=$(shell grep '"version":' $(FRONTEND_DIR)/package.json | cut -d'"' -f4) BUILD_DATE=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ') VCS_REF=$(shell git rev-parse --short HEAD 2>/dev/null || echo "unknown") all: build-wasm build-frontend build-go dev: @echo "Starting development environment..." @pnpm --prefix $(FRONTEND_DIR) dev & go run main.go build-wasm: @echo "Building WASM verifier..." mkdir -p $(WASM_OUT) cp "$(shell go env GOROOT)/lib/wasm/wasm_exec.js" $(WASM_OUT)/wasm_exec.js cd $(VERIFIER_DIR) && GOOS=js GOARCH=wasm go build -o ../$(WASM_OUT)/verifier.wasm . build-frontend: build-wasm cd $(FRONTEND_DIR) && pnpm install && pnpm build @echo "Injecting SRI hashes..." go run scripts/sri-gen/main.go build-go: go build -o $(BINARY_NAME) main.go release: build-frontend CGO_ENABLED=0 go build -ldflags="-s -w" -o $(BINARY_NAME) main.go @echo "Release build complete: $(BINARY_NAME)" run: all ./$(BINARY_NAME) format: go fmt ./... cd $(FRONTEND_DIR) && pnpm run format lint: go vet ./... cd $(FRONTEND_DIR) && pnpm run lint scan: gosec ./... check: cd $(FRONTEND_DIR) && pnpm run check tidy: format lint check test: test-wasm go test -v -coverpkg=./... ./... test-wasm: cd $(VERIFIER_DIR) && go test -v ./... clean: rm -rf $(FRONTEND_DIR)/build rm -rf $(WASM_OUT) rm -f $(BINARY_NAME) rm -f coverage.out docker-build: docker build \ --build-arg VERSION=$(VERSION) \ --build-arg BUILD_DATE=$(BUILD_DATE) \ --build-arg VCS_REF=$(VCS_REF) \ -t $(BINARY_NAME):latest \ -t $(BINARY_NAME):$(VERSION) .