diff --git a/.gitignore b/.gitignore index ab8b69c..5045c84 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -config.toml \ No newline at end of file +dist +config.toml diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e8f0bbf --- /dev/null +++ b/Makefile @@ -0,0 +1,73 @@ +.PHONY: build clean push release help + +VERSION ?= 1.0.0 +S3_BUCKET ?= +BINARY_NAME ?= installer +BUILD_DIR := ./dist + +ARCHS := linux/amd64 linux/arm64 darwin/amd64 darwin/arm64 windows/amd64 + +build: $(addprefix $(BUILD_DIR)/$(BINARY_NAME)-, $(subst /,-,$(ARCHS))) + +$(BUILD_DIR)/$(BINARY_NAME)-linux-amd64: + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GOAMD64=v3 go build -ldflags="-extldflags -static" -o $@ ./cmd + +$(BUILD_DIR)/$(BINARY_NAME)-linux-arm64: + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-extldflags -static" -o $@ ./cmd + +$(BUILD_DIR)/$(BINARY_NAME)-darwin-amd64: + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -o $@ ./cmd + +$(BUILD_DIR)/$(BINARY_NAME)-darwin-arm64: + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build -o $@ ./cmd + +$(BUILD_DIR)/$(BINARY_NAME)-windows-amd64: + @mkdir -p $(BUILD_DIR) + CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -o $@ ./cmd + +clean: + rm -rf $(BUILD_DIR) + +push: build +ifndef S3_BUCKET + $(error S3_BUCKET is not set) +endif + aws s3 sync $(BUILD_DIR)/ s3://$(S3_BUCKET)/installer/$(VERSION)/ --exclude '*' --include '$(BINARY_NAME)-*' + aws s3 sync $(BUILD_DIR)/ s3://$(S3_BUCKET)/installer/latest/ --exclude '*' --include '$(BINARY_NAME)-*' + +release: build +ifndef S3_BUCKET + $(error S3_BUCKET is not set) +endif + @for arch in $(ARCHS); do \ + os=$$(echo $$arch | cut -d/ -f1); \ + arch_name=$$(echo $$arch | cut -d/ -f2); \ + ext=$$(if [ $$os = windows ]; then .exe; else ''; fi); \ + src="$(BUILD_DIR)/$(BINARY_NAME)-$$arch"; \ + dest="s3://$(S3_BUCKET)/installer/$(VERSION)/$(BINARY_NAME)-$$os-$$arch_name$$ext"; \ + aws s3 cp $$src $$dest; \ + aws s3 cp $$src "s3://$(S3_BUCKET)/installer/latest/$(BINARY_NAME)-$$os-$$arch_name$$ext"; \ + done + +help: + @echo "Variables:" + @echo " VERSION - Version tag (default: 1.0.0)" + @echo " S3_BUCKET - S3 bucket name (required for push/release)" + @echo " BINARY_NAME - Binary name (default: installer)" + @echo "" + @echo "Targets:" + @echo " build - Build binaries for all architectures" + @echo " push - Sync dist/ to S3 (version + latest)" + @echo " release - Copy each binary to S3 with proper naming" + @echo " clean - Remove dist/" + @echo " help - Show this help" + @echo "" + @echo "Examples:" + @echo " make build" + @echo " make build VERSION=2.0.0" + @echo " make push S3_BUCKET=my-bucket VERSION=1.0.0" + @echo " make release S3_BUCKET=my-bucket VERSION=2.0.0" \ No newline at end of file