BIN_DIR ?= bin BIN := $(BIN_DIR)/flex-auth PKG := ./... VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo 0.0.0-dev) LDFLAGS := -X main.version=$(VERSION) .PHONY: all build test vet lint fmt tidy sbom clean ci all: vet lint test build build: @mkdir -p $(BIN_DIR) go build -ldflags "$(LDFLAGS)" -o $(BIN) ./cmd/flex-auth test: go test -race $(PKG) vet: go vet $(PKG) fmt: gofmt -l -w . tidy: go mod tidy lint: @if command -v golangci-lint >/dev/null 2>&1; then \ golangci-lint run $(PKG); \ else \ echo "golangci-lint not installed; run: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest"; \ echo "falling back to: go vet"; \ go vet $(PKG); \ fi GOBIN_PATH := $(shell go env GOPATH)/bin sbom: @mkdir -p $(BIN_DIR) @if command -v cyclonedx-gomod >/dev/null 2>&1; then \ cyclonedx-gomod mod -json -output $(BIN_DIR)/sbom.cdx.json .; \ echo "SBOM written to $(BIN_DIR)/sbom.cdx.json (cyclonedx-gomod)"; \ elif [ -x "$(GOBIN_PATH)/cyclonedx-gomod" ]; then \ "$(GOBIN_PATH)/cyclonedx-gomod" mod -json -output $(BIN_DIR)/sbom.cdx.json .; \ echo "SBOM written to $(BIN_DIR)/sbom.cdx.json (cyclonedx-gomod via GOPATH)"; \ elif command -v syft >/dev/null 2>&1; then \ syft . -o cyclonedx-json=$(BIN_DIR)/sbom.cdx.json; \ echo "SBOM written to $(BIN_DIR)/sbom.cdx.json (syft)"; \ else \ echo "no SBOM tool found. install one:"; \ echo " go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latest"; \ echo " or syft: https://github.com/anchore/syft"; \ exit 1; \ fi clean: rm -rf $(BIN_DIR) ci: vet lint test build