46 lines
1.6 KiB
Makefile
46 lines
1.6 KiB
Makefile
SHELL := /bin/sh
|
|
|
|
GO ?= go
|
|
TEA ?= tea
|
|
GOARCH ?= amd64
|
|
REMOTE ?= origin
|
|
|
|
VERSION := $(shell sed -n 's/^const version = "\([^"]*\)".*/\1/p' cmd/fancywin/main.go)
|
|
HOST_GOOS := $(shell $(GO) env GOHOSTOS)
|
|
HOST_GOARCH := $(shell $(GO) env GOHOSTARCH)
|
|
TAG := v$(VERSION)
|
|
BINARY := dist/fancywin.exe
|
|
CONFIG := dist/fancywin.yaml
|
|
CHECKSUM := $(BINARY).sha256
|
|
|
|
.PHONY: build release
|
|
|
|
build:
|
|
@test -n "$(VERSION)" || { echo "Could not read the FancyWin version" >&2; exit 1; }
|
|
mkdir -p dist
|
|
GOOS=$(HOST_GOOS) GOARCH=$(HOST_GOARCH) $(GO) test -buildvcs=false ./...
|
|
CGO_ENABLED=0 GOOS=windows GOARCH=$(GOARCH) $(GO) build \
|
|
-buildvcs=false \
|
|
-trimpath \
|
|
-ldflags='-s -w' \
|
|
-o $(BINARY) \
|
|
./cmd/fancywin
|
|
cp fancywin.example.yaml $(CONFIG)
|
|
@echo "Built $(BINARY) for windows/$(GOARCH) (FancyWin $(VERSION))"
|
|
|
|
release: build
|
|
@command -v $(TEA) >/dev/null 2>&1 || { echo "The Gitea tea CLI is required for releases" >&2; exit 1; }
|
|
@test -z "$$(git status --porcelain)" || { echo "Refusing to release from a dirty working tree" >&2; exit 1; }
|
|
@test "$$(git rev-parse HEAD)" = "$$(git rev-parse '@{upstream}')" || { echo "Refusing to release: HEAD has not been pushed to its upstream branch" >&2; exit 1; }
|
|
@! git rev-parse --verify --quiet "refs/tags/$(TAG)" >/dev/null || { echo "Tag $(TAG) already exists locally" >&2; exit 1; }
|
|
sha256sum $(BINARY) > $(CHECKSUM)
|
|
$(TEA) releases create \
|
|
--remote $(REMOTE) \
|
|
--tag $(TAG) \
|
|
--target "$$(git rev-parse HEAD)" \
|
|
--title "FancyWin $(VERSION)" \
|
|
--note "Portable FancyWin $(VERSION) build for Windows $(GOARCH)." \
|
|
--asset $(BINARY) \
|
|
--asset $(CHECKSUM)
|
|
@echo "Released FancyWin $(VERSION) as $(TAG)"
|