gitlink-cli/Makefile

58 lines
1.6 KiB
Makefile

MODULE := github.com/gitlink-org/gitlink-cli
BINARY := gitlink-cli
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
LDFLAGS := -s -w -X '$(MODULE)/cmd.Version=$(VERSION)'
PLATFORMS := darwin/amd64 darwin/arm64 linux/amd64 linux/arm64 windows/amd64 windows/arm64
.PHONY: build install clean test lint cross-build dist checksums
build:
go build -ldflags "$(LDFLAGS)" -o $(BINARY) .
install:
go install -ldflags "$(LDFLAGS)" .
clean:
rm -f $(BINARY)
rm -rf dist/
test:
go test ./...
lint:
go vet ./...
# Cross-compile for all supported platforms
cross-build:
@mkdir -p dist
@for pair in $(PLATFORMS); do \
GOOS=$${pair%/*}; \
GOARCH=$${pair#*/}; \
OUT=$(BINARY); \
if [ "$$GOOS" = "windows" ]; then OUT=$(BINARY).exe; fi; \
echo "Building $$GOOS/$$GOARCH..."; \
BUILD_DIR="dist/$(BINARY)_$(VERSION)_$${GOOS}_$${GOARCH}"; \
mkdir -p "$$BUILD_DIR"; \
CGO_ENABLED=0 GOOS=$$GOOS GOARCH=$$GOARCH \
go build -ldflags "$(LDFLAGS)" -o "$$BUILD_DIR/$$OUT" .; \
if [ "$$GOOS" = "windows" ]; then \
(cd "$$BUILD_DIR" && zip -q "../$(BINARY)_$(VERSION)_$${GOOS}_$${GOARCH}.zip" "$$OUT"); \
else \
tar -czf "dist/$(BINARY)_$(VERSION)_$${GOOS}_$${GOARCH}.tar.gz" -C "$$BUILD_DIR" "$$OUT"; \
fi; \
rm -rf "$$BUILD_DIR"; \
done
@echo "Build complete:"
@ls -lh dist/*.tar.gz dist/*.zip 2>/dev/null
# Generate SHA256 checksums for all archives in dist/
checksums: cross-build
@cd dist && \
sha256sum *.tar.gz *.zip 2>/dev/null > checksums-sha256.txt && \
echo "Checksums written to dist/checksums-sha256.txt" && \
cat checksums-sha256.txt
# Full distribution build: cross-compile + checksums
dist: checksums