mirror of
https://github.com/coredns/coredns.git
synced 2025-11-21 11:22:20 -05:00
* release: automate the release This PR aims to various pieces into place so we can automate the coredns release. It needs the script from coredns/release to be installed. Dreck is to be setup as described in coredns/release/README.md The release-coredns script can be tested and allows for other branches than master to be test. This PR also features some cleanup in the Makefile.release so we don't call the godep target for each linux release - this speeds it up for some bit. Manually running ./release-coredns -t auto-release builds the artifects for this release, but (of course) doesn't upload anything yet. Add /release to the OWNERS and allow command to be executed (this still needs to be tested). Signed-off-by: Miek Gieben <miek@miek.nl> * that makefile target doesnt exist anymore Signed-off-by: Miek Gieben <miek@miek.nl> * test release for now Signed-off-by: Miek Gieben <miek@miek.nl> * Slightly better output Signed-off-by: Miek Gieben <miek@miek.nl> * remove again Signed-off-by: Miek Gieben <miek@miek.nl>
127 lines
4.5 KiB
Makefile
127 lines
4.5 KiB
Makefile
# 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.
|
|
#
|
|
# Getting the authors for this release is done with the following command line
|
|
# git log --pretty=format:'%an' v$(VERSION)..master | sort -u
|
|
#
|
|
# Steps:
|
|
# * Up the version in coremain/version.go
|
|
# * Do a make -f Makefile.doc
|
|
# * go generate
|
|
# * Send PR to get this merged.
|
|
#
|
|
# * Open an issue for this release
|
|
# * In an issue give the command: /release
|
|
#
|
|
# See coredns/release for the README on what needs to be setup for this to be automated (can still
|
|
# be done by hand if needed). Especially what environment variables need to be set!
|
|
#
|
|
# To release we run:
|
|
# * make release
|
|
# * make github-push
|
|
# * make docker
|
|
# * make docker-push
|
|
|
|
EMPTY:=
|
|
SPACE:=$(EMPTY) $(EMPTY)
|
|
COMMA:=$(EMPTY),$(EMPTY)
|
|
|
|
ifeq (, $(shell which curl))
|
|
$(error "No curl in $$PATH, please install")
|
|
endif
|
|
|
|
DOCKER:=
|
|
NAME:=coredns
|
|
VERSION:=$(shell grep 'CoreVersion' coremain/version.go | awk '{ print $$3 }' | tr -d '"')
|
|
GITHUB:=coredns
|
|
DOCKER_IMAGE_NAME:=$(DOCKER)/$(NAME)
|
|
LINUX_ARCH:=amd64 arm arm64 ppc64le s390x
|
|
PLATFORMS:=$(subst $(SPACE),$(COMMA),$(foreach arch,$(LINUX_ARCH),linux/$(arch)))
|
|
|
|
ifeq ($(DOCKER),)
|
|
$(error "Please specify Docker registry to use. Use DOCKER=coredns for releases")
|
|
endif
|
|
|
|
all:
|
|
@echo Use the 'release' target to build a release, 'docker' for docker build.
|
|
|
|
release: pre build tar
|
|
|
|
docker: docker-build
|
|
|
|
.PHONY: pre
|
|
pre:
|
|
go get github.com/estesp/manifest-tool
|
|
|
|
.PHONY: build
|
|
build:
|
|
@echo Cleaning old builds
|
|
@rm -rf build && mkdir build
|
|
@echo Building: darwin/amd64 - $(VERSION)
|
|
mkdir -p build/darwin/amd64 && $(MAKE) coredns BINARY=build/darwin/amd64/$(NAME) SYSTEM="GOOS=darwin GOARCH=amd64" CHECKS="godeps" VERBOSE=""
|
|
@echo Building: windows/amd64 - $(VERSION)
|
|
mkdir -p build/windows/amd64 && $(MAKE) coredns BINARY=build/windows/amd64/$(NAME) SYSTEM="GOOS=windows GOARCH=amd64" CHECKS="" VERBOSE=""
|
|
@echo Building: linux/$(LINUX_ARCH) - $(VERSION) ;\
|
|
for arch in $(LINUX_ARCH); do \
|
|
mkdir -p build/linux/$$arch && $(MAKE) coredns BINARY=build/linux/$$arch/$(NAME) SYSTEM="GOOS=linux GOARCH=$$arch" CHECKS="" VERBOSE="" ;\
|
|
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)
|
|
tar -zcf release/$(NAME)_$(VERSION)_windows_amd64.tgz -C build/windows/amd64 $(NAME)
|
|
for arch in $(LINUX_ARCH); do \
|
|
tar -zcf release/$(NAME)_$(VERSION)_linux_$$arch.tgz -C build/linux/$$arch $(NAME) ;\
|
|
done
|
|
|
|
.PHONY: github-push
|
|
upload:
|
|
@echo Releasing: $(VERSION)
|
|
$(eval RELEASE:=$(shell curl -s -d '{"tag_name": "v$(VERSION)", "name": "v$(VERSION)"}' "https://api.github.com/repos/$(GITHUB)/$(NAME)/releases?access_token=${GITHUB_ACCESS_TOKEN}" | grep -m 1 '"id"' | tr -cd '[[:digit:]]'))
|
|
@echo ReleaseID: $(RELEASE)
|
|
@for asset in `ls -A release`; do \
|
|
curl -o /dev/null -X POST \
|
|
-H "Content-Type: application/gzip" \
|
|
--data-binary "@release/$$asset" \
|
|
"https://uploads.github.com/repos/$(GITHUB)/$(NAME)/releases/$(RELEASE)/assets?name=$${asset}&access_token=${GITHUB_ACCESS_TOKEN}" ; \
|
|
done
|
|
|
|
.PHONY: docker-build
|
|
docker-build: tar
|
|
# Steps:
|
|
# 1. Copy appropriate coredns binary to build/docker/linux/<arch>
|
|
# 2. Copy Dockerfile to build/docker/linux/<arch>
|
|
rm -rf build/docker
|
|
for arch in $(LINUX_ARCH); do \
|
|
mkdir -p build/docker/linux/$$arch ;\
|
|
tar -xzf release/$(NAME)_$(VERSION)_linux_$$arch.tgz -C build/docker/linux/$$arch ;\
|
|
cp Dockerfile build/docker/linux/$$arch ;\
|
|
docker build -t coredns build/docker/linux/$$arch ;\
|
|
docker tag coredns $(DOCKER_IMAGE_NAME):coredns-$$arch ;\
|
|
done
|
|
|
|
.PHONY: docker-push
|
|
docker-push:
|
|
docker -u $(DOCKER_LOGIN) -p $(DOCKER_PASSWORD) || exit 1
|
|
@echo Pushing: $(VERSION) to $(DOCKER_IMAGE_NAME)
|
|
for arch in $(LINUX_ARCH); do \
|
|
docker push $(DOCKER_IMAGE_NAME):coredns-$$arch ;\
|
|
done
|
|
manifest-tool push from-args --platforms $(PLATFORMS) --template $(DOCKER_IMAGE_NAME):coredns-ARCH --target $(DOCKER_IMAGE_NAME):$(VERSION)
|
|
manifest-tool push from-args --platforms $(PLATFORMS) --template $(DOCKER_IMAGE_NAME):coredns-ARCH --target $(DOCKER_IMAGE_NAME):latest
|
|
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf release
|
|
rm -rf build
|