# Makefile for release EMPTY:= SPACE:=$(EMPTY) $(EMPTY) COMMA:=$(EMPTY),$(EMPTY) ifeq (, $(shell which curl)) $(error "No curl in $$PATH, please install") endif NAME:=dns COMMANDS=ludns resolvcache resolvcheck resolvcollect VERSION=$(shell git describe --match 'v[0-9]*' --dirty='.m' --always | sed 's/^v//') LINUX_ARCH:=amd64 arm arm64 ppc64le s390x mips mips64le FREEBSD_ARCH:=amd64 OPENBSD_ARCH:=amd64 WINDOWS_ARCH:=amd64 DARWIN_ARCH:=amd64 GITHUB_ORG:=luids-io DOCKER_ORG:=luids DOCKER_PLATFORMS="linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7,linux/ppc64le,linux/s390x" all: @echo "Use the 'release' target to build and 'github-push' or 'docker-push' to publish." release: build tar installer .PHONY: build build: @echo Cleaning old builds @rm -rf build && mkdir build @echo Building: freebsd/$(FREEBSD_ARCH) - $(VERSION) ;\ for arch in $(FREEBSD_ARCH); do \ mkdir -p build/freebsd/$$arch ; \ for cmd in $(COMMANDS); do \ $(MAKE) release COMMAND=$$cmd BINARY=build/freebsd/$${arch}/$${cmd} \ SYSTEM="GOOS=freebsd GOARCH=$$arch" CHECKS="" BUILDOPTS="" ;\ done ; \ done @echo Building: openbsd/$(OPENBSD_ARCH) - $(VERSION) ;\ for arch in $(OPENBSD_ARCH); do \ mkdir -p build/openbsd/$$arch ; \ for cmd in $(COMMANDS); do \ $(MAKE) release COMMAND=$$cmd BINARY=build/openbsd/$${arch}/$${cmd} \ SYSTEM="GOOS=openbsd GOARCH=$$arch" CHECKS="" BUILDOPTS="" ;\ done ; \ done @echo Building: linux/$(LINUX_ARCH) - $(VERSION) ;\ for arch in $(LINUX_ARCH); do \ mkdir -p build/linux/$$arch ; \ for cmd in $(COMMANDS); do \ $(MAKE) release COMMAND=$$cmd BINARY=build/linux/$${arch}/$${cmd} \ SYSTEM="GOOS=linux GOARCH=$$arch" CHECKS="" BUILDOPTS="" ;\ done ; \ done @echo Building: darwin/$(DARWIN_ARCH) - $(VERSION) ;\ for arch in $(DARWIN_ARCH); do \ mkdir -p build/darwin/$$arch ; \ for cmd in $(COMMANDS); do \ $(MAKE) release COMMAND=$$cmd BINARY=build/darwin/$${arch}/$${cmd} \ SYSTEM="GOOS=darwin GOARCH=$$arch" CHECKS="" BUILDOPTS="" ;\ done ; \ done @echo Building: windows/$(WINDOWS_ARCH) - $(VERSION) ;\ for arch in $(WINDOWS_ARCH); do \ mkdir -p build/windows/$$arch ; \ for cmd in $(COMMANDS); do \ $(MAKE) release COMMAND=$$cmd BINARY=build/windows/$${arch}/$${cmd} \ SYSTEM="GOOS=windows GOARCH=$$arch" CHECKS="" BUILDOPTS="" ;\ done ; \ done .PHONY: tar tar: @echo Cleaning old releases @rm -rf release && mkdir release for arch in $(LINUX_ARCH); do \ tar -zcf release/$(NAME)_$(VERSION)_linux_$$arch.tgz -C build/linux/$$arch . ;\ done for arch in $(FREEBSD_ARCH); do \ tar -zcf release/$(NAME)_$(VERSION)_freebsd_$$arch.tgz -C build/freebsd/$$arch . ;\ done for arch in $(OPENBSD_ARCH); do \ tar -zcf release/$(NAME)_$(VERSION)_openbsd_$$arch.tgz -C build/openbsd/$$arch . ;\ done for arch in $(DARWIN_ARCH); do \ tar -zcf release/$(NAME)_$(VERSION)_darwin_$$arch.tgz -C build/darwin/$$arch . ;\ done for arch in $(WINDOWS_ARCH); do \ tar -zcf release/$(NAME)_$(VERSION)_windows_$$arch.tgz -C build/windows/$$arch . ;\ done .PHONY: installer installer: cp deployments/installer/installer_linux.sh release/installer_linux.sh sed -i 's/RELEASE="RELEASE"/RELEASE="$(VERSION)"/' release/installer_linux.sh .PHONY: docker-push docker-push: @echo Creating docker multiplatform and pushing images docker buildx build -t $(DOCKER_ORG)/ludns -t $(DOCKER_ORG)/ludns:$(VERSION) \ --platform $(DOCKER_PLATFORMS) -f Dockerfile.ludns --push . docker buildx build -t $(DOCKER_ORG)/resolvcache -t $(DOCKER_ORG)/resolvcache:$(VERSION) \ --platform $(DOCKER_PLATFORMS) -f Dockerfile.resolvcache --push . .PHONY: github-push github-push: @echo Releasing: $(VERSION) @$(eval RELEASE:=$(shell curl -s -d '{"tag_name": "v$(VERSION)", "name": "v$(VERSION)"}' -H "Authorization: token ${GITHUB_ACCESS_TOKEN}" "https://api.github.com/repos/$(GITHUB_ORG)/$(NAME)/releases" | grep -m 1 '"id"' | tr -cd '[[:digit:]]')) @echo ReleaseID: $(RELEASE) @( cd release; for asset in `ls -A *tgz installer*`; do \ echo $$asset; \ curl -o /dev/null -X POST \ -H "Content-Type: application/gzip" \ -H "Authorization: token ${GITHUB_ACCESS_TOKEN}" \ --data-binary "@$$asset" \ "https://uploads.github.com/repos/$(GITHUB_ORG)/$(NAME)/releases/$(RELEASE)/assets?name=$${asset}" ; \ done ) @( cd release; for asset in `ls -A *tgz installer*`; do \ sha256sum $$asset > $$asset.sha256; \ done ) @( cd release; for asset in `ls -A *sha256`; do \ echo $$asset; \ curl -o /dev/null -X POST \ -H "Content-Type: text/plain" \ -H "Authorization: token ${GITHUB_ACCESS_TOKEN}" \ --data-binary "@$$asset" \ "https://uploads.github.com/repos/$(GITHUB_ORG)/$(NAME)/releases/$(RELEASE)/assets?name=$${asset}" ; \ done ) .PHONY: version version: @echo $(VERSION) .PHONY: clean clean: rm -rf release rm -rf build