# VERSION is overridable (the Dockerfile passes its ARG VERSION in) and
# degrades to "dev" when git is unavailable or there is no .git — the
# build must not depend on the repository history being in the build
# context.
VERSION ?= $(shell { git describe --always --dirty; } 2>/dev/null || echo dev)
BUILDARCH := $(shell uname -m)
BINARY := netwatch-server

GOLDFLAGS += -s -w
GOLDFLAGS += -X main.Version=$(VERSION)
GOLDFLAGS += -X main.Buildarch=$(BUILDARCH)

.PHONY: all build test lint fmt fmt-check check docker hooks run clean

all: build

build:
	CGO_ENABLED=0 go build -trimpath -ldflags "$(GOLDFLAGS)" \
		-o ./$(BINARY) ./cmd/netwatch-server/

test:
	timeout 30 go test ./...

lint:
	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)
