From 015ca7426f9f2ffc0a65371a18743eab9f4476d7 Mon Sep 17 00:00:00 2001 From: Patrice Ferlet Date: Thu, 31 Mar 2022 14:04:47 +0200 Subject: [PATCH] Updated build and release creation --- .gitignore | 1 + Makefile | 87 +++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 61 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index bdd2841..277cd2b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ katenary *.env docker-compose* !examples/**/docker-compose* +.credentials diff --git a/Makefile b/Makefile index af51d4d..8e9052b 100644 --- a/Makefile +++ b/Makefile @@ -5,11 +5,12 @@ CTN:=$(shell which podman 2>&1 1>/dev/null && echo "podman" || echo "docker") PREFIX=~/.local GO=container -BLD_CMD=go build -o katenary -ldflags="-X 'main.Version=$(VERSION)'" ./cmd/*.go +OUT=katenary +BLD_CMD=go build -ldflags="-X 'main.Version=$(VERSION)'" -o $(OUT) ./cmd/*.go GOOS=linux GOARCH=amd64 -BUILD_IMAGE=docker.io/golang:1.17 +BUILD_IMAGE=docker.io/golang:1.18-alpine .PHONY: help clean build @@ -46,11 +47,9 @@ help: $$ make build-all EOF - - build: pull katenary -build-all: pull dist dist/katenary-linux-amd64 dist/katenary-linux-arm64 dist/katenary.exe dist/katenary-darwin +build-all: pull dist dist/katenary-linux-amd64 dist/katenary-linux-arm64 dist/katenary.exe dist/katenary-darwin-amd64 dist/katenary-freebsd-amd64 dist/katenary-freebsd-arm64 pull: ifneq ($(GO),local) @@ -62,47 +61,54 @@ dist: mkdir -p dist dist/katenary-linux-amd64: - @echo -e "\033[1;32mBuilding katenary for linux-amd64...\033[0m" - $(MAKE) katenary GOOS=linux GOARCH=amd64 - strip katenary - mv katenary dist/katenary-linux-amd64 + @echo + @echo -e "\033[1;32mBuilding katenary $(VERSION) for linux-amd64...\033[0m" + $(MAKE) katenary GOOS=linux GOARCH=amd64 OUT=$@ dist/katenary-linux-arm64: - @echo -e "\033[1;32mBuilding katenary for linux-arm...\033[0m" - $(MAKE) katenary GOOS=linux GOARCH=arm64 - strip katenary - mv katenary dist/katenary-linux-arm64 + @echo + @echo -e "\033[1;32mBuilding katenary $(VERSION) for linux-arm...\033[0m" + $(MAKE) katenary GOOS=linux GOARCH=arm64 OUT=$@ dist/katenary.exe: - @echo -e "\033[1;32mBuilding katenary for windows...\033[0m" - $(MAKE) katenary GOOS=windows GOARCH=amd64 - strip katenary - mv katenary dist/katenary-windows.exe + @echo + @echo -e "\033[1;32mBuilding katenary $(VERSION) for windows...\033[0m" + $(MAKE) katenary GOOS=windows GOARCH=amd64 OUT=$@ -dist/katenary-darwin: - @echo -e "\033[1;32mBuilding katenary for darwin...\033[0m" - $(MAKE) katenary GOOS=darwin GOARCH=amd64 - strip katenary - mv katenary dist/katenary-darwin +dist/katenary-darwin-amd64: + @echo + @echo -e "\033[1;32mBuilding katenary $(VERSION) for darwin...\033[0m" + $(MAKE) katenary GOOS=darwin GOARCH=amd64 OUT=$@ + +dist/katenary-freebsd-amd64: + @echo + @echo -e "\033[1;32mBuilding katenary $(VERSION) for freebsd...\033[0m" + $(MAKE) katenary GOOS=freebsd GOARCH=amd64 OUT=$@ + +dist/katenary-freebsd-arm64: + @echo + @echo -e "\033[1;32mBuilding katenary $(VERSION) for freebsd-arm64...\033[0m" + $(MAKE) katenary GOOS=freebsd GOARCH=arm64 OUT=$@ katenary: $(wildcard */*.go Makefile go.mod go.sum) - @echo -e "\033[1;33mBuilding katenary $(VERSION)...\033[0m" ifeq ($(GO),local) @echo "=> Build in host using go" - @echo else @echo "=> Build in container using" $(CTN) - @echo endif echo $(BLD_CMD) ifeq ($(GO),local) $(BLD_CMD) else ifeq ($(CTN),podman) - @podman run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --userns keep-id -it docker.io/golang $(BLD_CMD) + @podman run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \ + --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --userns keep-id -it docker.io/golang $(BLD_CMD) else - @docker run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --user $(shell id -u):$(shell id -g) -e HOME=/tmp -it docker.io/golang $(BLD_CMD) + @docker run -e CGO_ENABLED=0 -e GOOS=$(GOOS) -e GOARCH=$(GOARCH) \ + --rm -v $(PWD):/go/src/katenary:z -w /go/src/katenary --user $(shell id -u):$(shell id -g) -e HOME=/tmp -it docker.io/golang $(BLD_CMD) endif + echo "=> Stripping if possible" + strip $(OUT) 2>/dev/null || echo "=> No strip available" @@ -116,6 +122,33 @@ clean: rm -f katenary rm -rf dist + +tests: test test: @echo -e "\033[1;33mTesting katenary $(VERSION)...\033[0m" go test -v ./... + + +.ONESHELL: +push-release: + @rm -f release.id + # read personal access token from .git-credentials + TOKEN=$(shell cat .credentials) + # create the body of the release from latest tag + # create a new release based on current tag and get the release id + @curl -sSL -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Authorization: token $$TOKEN" \ + -d "{\"tag_name\": \"$(VERSION)\", \"target_commitish\": \"\", \"name\": \"$(VERSION)\", \"draft\": true, \"prerelease\": true}" \ + https://api.github.com/repos/metal3d/katenary/releases | jq -r '.id' > release.id + @echo "Release id: $$(cat release.id) created" + @echo "Uploading assets..." + # push all dist binary as assets to the release + @for i in $$(find dist -type f -name "katenary*"); do + curl -sSL -H "Authorization: token $$TOKEN" \ + -H "Accept: application/vnd.github.v3+json" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @$$i \ + https://uploads.github.com/repos/metal3d/katenary/releases/$(shell cat release.id)/assets?name=$$(basename $$i) + done + @rm -f release.id