### CI vars
CI_LOGIN_COMMAND = @echo "Not a CI, skip login"
CI_REGISTRY_IMAGE ?= registry.gitlab.com/etke.cc/postmoogle
CI_COMMIT_TAG ?= latest
# for main branch it must be set explicitly
ifeq ($(CI_COMMIT_TAG), main)
CI_COMMIT_TAG = latest
endif
# login command
ifdef CI_JOB_TOKEN
CI_LOGIN_COMMAND = @docker login -u gitlab-ci-token -p $(CI_JOB_TOKEN) $(CI_REGISTRY)
endif

# update go dependencies
update:
	go get ./cmd
	go mod tidy
	go mod verify
	go mod vendor

mock:
	-@rm -rf mocks
	@mockery --all

# run linter
lint:
	golangci-lint run ./...

# run linter and fix issues if possible
lintfix:
	golangci-lint run --fix ./...

# run unit tests
test:
	@go test -coverprofile=cover.out ./...
	@go tool cover -func=cover.out
	-@rm -f cover.out

# note: make doesn't understand exit code 130 and sets it == 1
run:
	@go run ./cmd || exit 0

build:
	go build -v -o postmoogle ./cmd

# CI: docker login
login:
	@echo "trying to login to docker registry..."
	$(CI_LOGIN_COMMAND)

# docker build
docker:
	docker buildx create --use
	docker buildx build --platform linux/arm64/v8,linux/amd64 --push -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_TAG} .
