78 lines
2.6 KiB
Makefile
78 lines
2.6 KiB
Makefile
BINARY := unitdore
|
|
INSTALL_DIR := /usr/bin
|
|
CONFIG_DIR := /etc/unitdore
|
|
VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
|
|
LDFLAGS := -ldflags "-X github.com/warkanum/unitdore/cmd.version=$(VERSION)"
|
|
|
|
.PHONY: all build install uninstall test lint clean release-version pkg-checksums
|
|
|
|
all: build
|
|
|
|
## build: compile the binary
|
|
build:
|
|
go build $(LDFLAGS) -o $(BINARY) .
|
|
|
|
## install: install binary, man page, and create config dir
|
|
install: build
|
|
install -Dm755 $(BINARY) $(INSTALL_DIR)/$(BINARY)
|
|
install -Dm644 docs/unitdore.1 /usr/share/man/man1/unitdore.1
|
|
mkdir -p $(CONFIG_DIR)
|
|
@echo "Installed to $(INSTALL_DIR)/$(BINARY)"
|
|
@echo "Config dir: $(CONFIG_DIR)"
|
|
|
|
## uninstall: remove binary and man page
|
|
uninstall:
|
|
rm -f $(INSTALL_DIR)/$(BINARY)
|
|
rm -f /usr/share/man/man1/unitdore.1
|
|
@echo "Removed $(INSTALL_DIR)/$(BINARY)"
|
|
|
|
## test: run all unit tests
|
|
test:
|
|
go test ./... -v
|
|
|
|
## test-short: run tests without verbose output
|
|
test-short:
|
|
go test ./...
|
|
|
|
## lint: run go vet
|
|
lint:
|
|
go vet ./...
|
|
|
|
## clean: remove built binary
|
|
clean:
|
|
rm -f $(BINARY)
|
|
|
|
# VERSION only counts as a release version when given on the command line
|
|
# (it defaults to git describe for the build flags).
|
|
RELEASE_VERSION := $(if $(filter command line,$(origin VERSION)),$(patsubst v%,%,$(VERSION)))
|
|
|
|
## release-version: bump version (patch, or VERSION=X.Y.Z), update source and package versions, commit, tag, and push
|
|
release-version:
|
|
@if [ -n "$(RELEASE_VERSION)" ]; then \
|
|
echo "$(RELEASE_VERSION)" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$$' || { echo "usage: make release-version [VERSION=X.Y.Z]"; exit 1; }; \
|
|
PKGVER="$(RELEASE_VERSION)"; \
|
|
else \
|
|
CURRENT=$$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0"); \
|
|
MAJOR=$$(echo $$CURRENT | sed 's/v\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1/'); \
|
|
MINOR=$$(echo $$CURRENT | sed 's/v\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\2/'); \
|
|
PATCH=$$(echo $$CURRENT | sed 's/v\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\3/'); \
|
|
PKGVER="$$MAJOR.$$MINOR.$$((PATCH + 1))"; \
|
|
fi; \
|
|
NEXT="v$$PKGVER"; \
|
|
if git rev-parse -q --verify "refs/tags/$$NEXT" >/dev/null; then echo "tag $$NEXT already exists"; exit 1; fi; \
|
|
echo "Releasing $$NEXT"; \
|
|
scripts/bump-version.sh "$$PKGVER"; \
|
|
git add -A cmd/root.go pkg; \
|
|
git commit -m "chore(release): update package version to $$PKGVER"; \
|
|
git tag -a "$$NEXT" -m "Release $$NEXT"; \
|
|
git push origin HEAD "$$NEXT"; \
|
|
echo "Pushed $$NEXT — release workflow triggered"
|
|
|
|
## pkg-checksums: fill the Void checksum from the published release (run after release)
|
|
pkg-checksums:
|
|
scripts/update-checksums.sh
|
|
|
|
## help: show this help
|
|
help:
|
|
@grep -E '^## ' Makefile | sed 's/## / /'
|