.PHONY: build test unit integration clean dist release

VERSION ?= $(shell git describe --tags --always --dirty)
LDFLAGS := -ldflags "-s -w -X main.version=$(VERSION)"
GITEA_URL := https://git.nose.space
REPO := defunkt/go-shout

build:
	go build $(LDFLAGS) -o shout .

test: unit integration

unit:
	go test ./...

integration: build
	./shout test

clean:
	rm -f shout
	rm -rf dist

dist: clean
	GOOS=darwin GOARCH=arm64 go build $(LDFLAGS) -o dist/shout-darwin-arm64 .
	GOOS=linux GOARCH=amd64 go build $(LDFLAGS) -o dist/shout-linux-amd64 .

release: dist
	@test -n "$(TAG)" || (echo "usage: make release TAG=v0.1.0" && exit 1)
	git tag $(TAG)
	git push origin $(TAG)
	@echo "Creating release $(TAG)..."
	@RELEASE_ID=$$(curl -sf \
		-X POST \
		-H "Authorization: token $${GITEA_TOKEN}" \
		-H "Content-Type: application/json" \
		-d '{"tag_name":"$(TAG)","name":"$(TAG)"}' \
		"$(GITEA_URL)/api/v1/repos/$(REPO)/releases" | \
		python3 -c "import sys,json; print(json.load(sys.stdin)['id'])") && \
	for f in dist/shout-*; do \
		echo "Uploading $$f..."; \
		curl -sf \
			-X POST \
			-H "Authorization: token $${GITEA_TOKEN}" \
			-F "attachment=@$$f" \
			"$(GITEA_URL)/api/v1/repos/$(REPO)/releases/$$RELEASE_ID/assets?name=$$(basename $$f)" > /dev/null; \
	done
	@echo "Released $(TAG): $(GITEA_URL)/$(REPO)/releases/tag/$(TAG)"

install: build
	sudo cp ./shout /usr/local/bin

uninstall:
	sudo rm /usr/local/bin/shout
