.PHONY: build test vet lint proto-lint clean docker push all devserver metacrypt metacrypt-web proto binaries

MCR     := mcr.svc.mcp.metacircular.net:8443
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
LDFLAGS := -trimpath -ldflags="-s -w -X main.version=$(VERSION)"

binaries: metacrypt metacrypt-web

proto:
	protoc --go_out=. --go_opt=module=git.wntrmute.dev/mc/metacrypt \
		--go-grpc_out=. --go-grpc_opt=module=git.wntrmute.dev/mc/metacrypt \
		proto/metacrypt/v1/*.proto
	protoc --go_out=. --go_opt=module=git.wntrmute.dev/mc/metacrypt \
		--go-grpc_out=. --go-grpc_opt=module=git.wntrmute.dev/mc/metacrypt \
		proto/metacrypt/v2/*.proto

metacrypt:
	go build $(LDFLAGS) -o metacrypt ./cmd/metacrypt

metacrypt-web:
	go build $(LDFLAGS) -o metacrypt-web ./cmd/metacrypt-web

build:
	go build ./...

test:
	go test ./...

vet:
	go vet ./...

lint:
	golangci-lint run ./...

proto-lint:
	buf lint
	buf breaking --against '.git#branch=master,subdir=proto'

clean:
	rm -f metacrypt metacrypt-web

docker:
	docker build --build-arg VERSION=$(VERSION) -t $(MCR)/metacrypt:$(VERSION) -f Dockerfile.api .
	docker build --build-arg VERSION=$(VERSION) -t $(MCR)/metacrypt-web:$(VERSION) -f Dockerfile.web .

push: docker
	docker push $(MCR)/metacrypt:$(VERSION)
	docker push $(MCR)/metacrypt-web:$(VERSION)

docker-compose:
	docker compose -f deploy/docker/docker-compose.yml up --build

devserver: metacrypt metacrypt-web
	./metacrypt server --config srv/metacrypt.toml &
	./metacrypt-web --config srv/metacrypt.toml

all: vet lint test metacrypt metacrypt-web
