# Makefile for releasing CoreDNS # # The release is controlled from coremain/version.go. The version found there is # used to tag the git repo and to build the assets that are uploaded to github # (after some sanity checks). # # The release should be accompanied by release notes published on coredns.io. # For example: https://coredns.io/2016/09/18/coredns-001-release/ Also send an # email to coredns-discuss@ to announce the new version. # # We use https://github.com/progrium/gh-release to automate github stuff be sure # to have that binary in your path. # # Get a list of authors for this release with: # # git log --pretty=format:'%an' v001..master | sort -u (where v001 is the # previous release, obviously you'll need to adjust this) # # Steps: # # * Get an access token: https://help.github.com/articles/creating-an-access-token-for-command-line-use/ # * export GITHUB_ACCESS_TOKEN= # * Up the version in coremain/version.go # * Run: make -f Makefile.release release # * will *commit* your change with 'Release $VERSION' # * push to github # * build the release and do all that fluff. # # Steps for docker: # # * Login into docker: docker login (should have push creds for coredns registry) # * We use the manifest-tool from https://github.com/estesp/manifest-tool to build the manifest list # * Make sure you have the binary in your path. # # * Run: make -f Makefile.release docker # # Docker push should happen after you make the new release and uploaded it to # Github. ifeq (, $(shell which gh-release)) $(error "No gh-release in $$PATH, install with `go get github.com/progrium/gh-release`") endif ifeq (, $(shell which manifest-tool)) $(error "No manifest-tool in $$PATH, install with `go get github.com/estesp/manifest-tool") endif NAME:=coredns VERSION:=$(shell grep 'coreVersion' coremain/version.go | awk '{ print $$3 }' | tr -d '"') GITHUB:=coredns DOCKER:=coredns DOCKER_IMAGE_NAME:=$(DOCKER)/$(NAME) GITCOMMIT:=$(shell git describe --dirty --always) LINUX_ARCH=amd64 arm arm64 ppc64le s390x all: @echo Use the 'release' target to start a release release: commit push build tar upload docker: docker-build docker-upload .PHONY: push push: @echo Pushing release to master git push .PHONY: commit commit: @echo Committing git commit -am"Release $(VERSION)" .PHONY: build build: @echo Cleaning old builds rm -rf build && mkdir build @echo Building: darwin $(VERSION) mkdir -p build/darwin/amd64 && $(MAKE) coredns BINARY=build/darwin/amd64/$(NAME) SYSTEM="GOOS=darwin GOARCH=amd64" CHECKS="" for arch in $(LINUX_ARCH); do \ @echo Building: linux/$$arch $(VERSION) ;\ mkdir -p build/linux/amd64 && $(MAKE) coredns BINARY=build/linux/$$arch/$(NAME) SYSTEM="GOOS=linux GOARCH=$$arch" CHECKS="" ;\ done .PHONY: tar tar: @echo Cleaning old releases rm -rf release && mkdir release tar -zcf release/$(NAME)_$(VERSION)_darwin_amd64.tgz -C build/darwin/amd64 $(NAME) for arch in $(LINUX_ARCH); do \ tar -zcf release/$(NAME)_$(VERSION)_linux_$$arch.tgz -C build/linux/$$arch $(NAME) ;\ done .PHONY: upload upload: @echo Releasing: $(VERSION) gh-release create $(GITHUB)/$(NAME) $(VERSION) .PHONY: docker-build docker-build: tar for arch in $(LINUX_ARCH); do \ tar -xzf release/$(NAME)_$(VERSION)_linux_$$arch.tgz ;\ docker build -t coredns . ;\ docker tag coredns $(DOCKER_IMAGE_NAME):coredns-$$arch ;\ done .PHONY: docker-upload docker-upload: @echo Pushing: $(VERSION) for arch in $(LINUX_ARCH); do \ docker push $(DOCKER_IMAGE_NAME):coredns-$$arch \; done manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64,linux/s390x --template $(DOCKER_IMAGE_NAME):coredns-ARCH --target $(DOCKER_IMAGE_NAME):$(VERSION) manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64,linux/s390x --template $(DOCKER_IMAGE_NAME):coredns-ARCH --target $(DOCKER_IMAGE_NAME):latest .PHONY: clean clean: rm -rf release rm -rf build