# 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 # blog.coredns.io. For example: # https://blog.coredns.io/2016/09/18/coredns-001-release/ # # 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) # # Side note: check if MAINTAINERS need an update with `git shortlog -s -n` and see if # someone has more than 5 (arbitrary number). # # 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) # * Run: make -f Makefile.release docker # # Docker push should happen after you make the new release and uploaded it to Github. NAME:=coredns VERSION:=$(shell grep 'coreVersion' coremain/version.go | awk '{ print $$3 }' | tr -d '"') ARCH:=$(shell uname -m) GITHUB:=coredns DOCKER:=coredns DOCKER_IMAGE_NAME:=$(DOCKER)/$(NAME) 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: build-arm build-darwin build-linux .PHONY: build-linux build-linux: @echo Building: linux $(VERSION) mkdir -p build/Linux && CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" -o build/Linux/$(NAME) .PHONY: build-darwin build-darwin: @echo Building: darwin $(VERSION) mkdir -p build/Darwin && CGO_ENABLED=0 GOOS=darwin go build -ldflags="-s -w" -o build/Darwin/$(NAME) .PHONY: build-arm build-arm: @echo Building: arm $(VERSION) mkdir -p build/Linux/Arm && CGO_ENABLED=0 GOOS=linux GOARCH=arm go build -ldflags="-s -w" -o build/Linux/Arm/$(NAME) .PHONY: tar tar: rm -rf release && mkdir release tar -zcf release/$(NAME)_$(VERSION)_linux_$(ARCH).tgz -C build/Linux $(NAME) tar -zcf release/$(NAME)_$(VERSION)_linux_armv6l.tgz -C build/Linux/Arm $(NAME) tar -zcf release/$(NAME)_$(VERSION)_darwin_$(ARCH).tgz -C build/Darwin $(NAME) .PHONY: upload upload: @echo Releasing: $(VERSION) gh-release create $(GITHUB)/$(NAME) $(VERSION) .PHONY: docker-build docker-build: CGO_ENABLED=0 GOOS=linux go build -ldflags="-s -w" docker build -t $(DOCKER_IMAGE_NAME) . docker tag $(DOCKER_IMAGE_NAME):latest $(DOCKER_IMAGE_NAME):$(VERSION) .PHONY: docker-upload docker-upload: @echo Pushing: $(VERSION) docker tag $(DOCKER_IMAGE_NAME):latest $(DOCKER_IMAGE_NAME):$(VERSION) docker push $(DOCKER_IMAGE_NAME):latest docker push $(DOCKER_IMAGE_NAME):$(VERSION) .PHONY: clean clean: rm -rf release rm -rf build