SHELL := /bin/bash

VERSION=$(shell git describe --tags)
BUILD=$(shell git rev-parse --short HEAD)
PROJ := $(shell basename "$(PWD)")
HUB=hub.kumoly.io
HUB_PROJECT=tools

LDFLAGS=-ldflags "-X main.Version=${VERSION} -X main.Build=${BUILD} -w"
PLATFORMS=darwin linux
ARCHITECTURES=amd64

default: build

install:
	go mod tidy
	go mod download

clean:
	rm -rf dist

build:
	go build ${LDFLAGS} -o dist/myip

build-unix:
	$(foreach GOOS, $(PLATFORMS), $(foreach GOARCH, $(ARCHITECTURES), \
	$(shell export GOOS=$(GOOS); export GOARCH=$(GOARCH); go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_$(GOOS)_$(GOARCH)/$(PROJ))))

build-win:
	$(shell export GOOS=windows; export GOARCH=amd64; go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_windows_amd64/$(PROJ).exe)

build-mac-m1:
	$(shell export GOOS=darwin; export GOARCH=arm64; go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_darwin_arm64/$(PROJ))

build-zip:
	cd dist; for f in * ;do if ! [[ $$f =~ "gz" ]] ; then tar -czf $${f}.tar.gz $${f}; fi done

binary: build-unix build-win build-mac-m1

docker:
	docker build --target builder -t $(HUB)/$(HUB_PROJECT)/$(PROJ):builder .
	docker build \
	-t $(HUB)/$(HUB_PROJECT)/$(PROJ):$(VERSION) \
	.

docker-push:
	docker tag $(HUB)/$(HUB_PROJECT)/$(PROJ):$(VERSION) $(HUB)/$(HUB_PROJECT)/$(PROJ):latest
	docker push $(HUB)/$(HUB_PROJECT)/$(PROJ):$(VERSION)
	docker push $(HUB)/$(HUB_PROJECT)/$(PROJ):latest

docker-save:
	docker save $(HUB)/$(HUB_PROJECT)/$(PROJ):$(VERSION) | gzip > dist/$(PROJ)-image-$(VERSION)-${BUILD}.tar.gz


release: clean binary build-zip docker docker-save docker-push

.PHONY: build docker release clean all binary install