build: add Make and Gitea release targets
This commit is contained in:
@@ -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)"
|
||||
Reference in New Issue
Block a user