BINARY := ssm MODULE := gitea.epss.net.cn/klesh/ss VERSION ?= dev DIST := dist LDFLAGS := -s -w -X $(MODULE)/internal/cli.Version=$(VERSION) # os/arch pairs matching the 3 major platforms this project ships for. PLATFORMS := linux/amd64 darwin/arm64 windows/amd64 .DEFAULT_GOAL := build .PHONY: build build-all test vet fmt clean release package help build: ## Build the ssm binary for the current platform go build -trimpath -ldflags "$(LDFLAGS)" -o $(BINARY) ./cmd/$(BINARY) build-all: clean ## Cross-compile ssm for linux/amd64, darwin/arm64, windows/amd64 into dist/-/, unpackaged @for platform in $(PLATFORMS); do \ os=$${platform%/*}; arch=$${platform#*/}; \ ext=""; [ "$$os" = "windows" ] && ext=".exe"; \ echo "==> building $$os/$$arch"; \ mkdir -p $(DIST)/$$os-$$arch; \ GOOS=$$os GOARCH=$$arch go build -trimpath -ldflags "$(LDFLAGS)" -o $(DIST)/$$os-$$arch/$(BINARY)$$ext ./cmd/$(BINARY) || exit 1; \ done test: ## Run the test suite go test ./... vet: ## Run go vet go vet ./... fmt: ## Check formatting (gofmt -l) gofmt -l . clean: ## Remove build/release artifacts rm -rf $(DIST) $(BINARY) $(BINARY).exe release: build-all ## Cross-compile for linux/amd64, darwin/arm64, windows/amd64 and package into dist/ @$(MAKE) --no-print-directory package package: ## Archive dist/-/ directories into per-platform tar.gz/zip + checksums.txt @cd $(DIST) && \ for platform in $(PLATFORMS); do \ os=$${platform%/*}; arch=$${platform#*/}; \ name=$(BINARY)-$(VERSION)-$$os-$$arch; \ if [ "$$os" = "windows" ]; then \ (cd $$os-$$arch && zip -q ../$$name.zip $(BINARY).exe); \ else \ tar -C $$os-$$arch -czf $$name.tar.gz $(BINARY); \ fi; \ rm -rf $$os-$$arch; \ done; \ sha256sum *.tar.gz *.zip > checksums.txt; \ ls -la help: ## Show this help @grep -E '^[a-zA-Z_-]+:.*## ' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*## "}; {printf " %-10s %s\n", $$1, $$2}'