UNAME_S := $(shell uname -s) VERSION := $(shell git describe --always --dirty) BUILDARCH := $(shell uname -m) BINARY := netwatch-server GOLDFLAGS += -X main.Version=$(VERSION) GOLDFLAGS += -X main.Buildarch=$(BUILDARCH) ifeq ($(UNAME_S),Darwin) GOFLAGS := -ldflags "$(GOLDFLAGS)" SHA256SUM := shasum -a 256 else GOFLAGS = -ldflags "-linkmode external -extldflags -static $(GOLDFLAGS)" SHA256SUM := sha256sum endif # .golangci.yml is standardized org-wide and must never be edited here # (REPO_POLICIES.md). Its last silent drift replaced the v2 schema with # v1 keys, which left every threshold in the file inert while the build # stayed green. The lint target therefore asserts the file still matches # the canonical copy byte for byte. The check is a local hash comparison: # no network, no remote schema, nothing unpinned in the build path. GOLANGCI_CONFIG_SHA256 := 021cc83f4e6fc7c31b95b34b846723dfcf20b66b7baeea1dc40406e643346bcb .PHONY: all build test lint fmt fmt-check check docker hooks run clean all: build build: ./$(BINARY) ./$(BINARY): $(shell find . -name '*.go' -type f) go.mod go.sum go build -o $@ $(GOFLAGS) ./cmd/netwatch-server/ test: timeout 30 go test ./... lint: @actual=$$($(SHA256SUM) .golangci.yml | cut -d' ' -f1); \ if [ "$$actual" != "$(GOLANGCI_CONFIG_SHA256)" ]; then \ echo ".golangci.yml has drifted from the org standard."; \ echo " expected $(GOLANGCI_CONFIG_SHA256)"; \ echo " actual $$actual"; \ echo "Restore it verbatim from sneak/prompts; do not edit it."; \ exit 1; \ fi golangci-lint run ./... fmt: go fmt ./... fmt-check: @test -z "$$(gofmt -l .)" || \ (echo "Files not formatted:"; gofmt -l .; exit 1) check: test lint fmt-check docker: timeout 300 docker build -t netwatch-server -f ../Dockerfile.backend .. hooks: @printf '#!/bin/sh\ncd backend && make check\n' > \ $$(git rev-parse --show-toplevel)/.git/hooks/pre-commit @chmod +x \ $$(git rev-parse --show-toplevel)/.git/hooks/pre-commit @echo "Pre-commit hook installed" run: build ./$(BINARY) clean: rm -f ./$(BINARY)