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)"
else
	GOFLAGS = -ldflags "-linkmode external -extldflags -static $(GOLDFLAGS)"
endif

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