* Consolidation of Makefile and Makefile.release Several changes: 1. All go specific target like `go generate`, etc. has been moved to Makefile. Now Makefile.release does not repeat go build, etc. related rules. 2. In Makefile.release, the binary build is done through `docker run` and with a fixed specific go version (currently 1.8.3). This will help making sure build process could be reproduced on any dev platform, with no dependency to the golang version installed on the platform. 3. Platform related flags (e.g., "GOOS=darwin") are passed through Makefile (not Makefile.release). Signed-off-by: Yong Tang <yong.tang.github@outlook.com> * Update to only use `make` without running inside `docker run` Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
104 lines
3.3 KiB
Text
104 lines
3.3 KiB
Text
# Makefile for releasing CoreDNS
|
|
#
|
|
# The release binaries are built through docker run like
|
|
# make coredns
|
|
#
|
|
# There advantage of the above command is that we could control reused
|
|
# the binary generation from the default `Makefile`, instread of repeating
|
|
# in `Makefile.release`.
|
|
#
|
|
# 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=<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)
|
|
GITCOMMIT:=$(shell git describe --dirty --always)
|
|
|
|
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 Building: linux $(VERSION)
|
|
mkdir -p build/Linux && $(MAKE) coredns BINARY=build/Linux/$(NAME) SYSTEM="GOOS=linux"
|
|
@echo Building: darwin $(VERSION)
|
|
mkdir -p build/Darwin && $(MAKE) coredns BINARY=build/Darwin/$(NAME) SYSTEM="GOOS=darwin"
|
|
@echo Building: arm $(VERSION)
|
|
mkdir -p build/Linux/Arm && $(MAKE) coredns BINARY=build/Linux/Arm/$(NAME) SYSTEM="GOOS=linux GOARCH=arm"
|
|
|
|
.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:
|
|
$(MAKE) coredns SYSTEM="GOOS=linux"
|
|
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
|