forked from Gitlink/gitlink-cli
58 lines
1.6 KiB
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
|