build: add Make and Gitea release targets

This commit is contained in:
Steve Cliff
2026-08-20 09:50:30 +01:00
parent c90b6d085e
commit 4dc85f5d60
2 changed files with 81 additions and 8 deletions
+45
View File
@@ -0,0 +1,45 @@
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)"