mirror of
https://github.com/coredns/coredns.git
synced 2025-10-26 15:54:16 -04:00
* Put release notes in notes subdir Verbatim copy of the current set of notes on coredns.io. Copy them here to make them authoritative. 'make sync' on the coredns.io site copies them back in. They need to be formatted in Hugo style. Signed-off-by: Miek Gieben <miek@miek.nl> * pull latest Signed-off-by: Miek Gieben <miek@miek.nl>
146 lines
5.3 KiB
Makefile
146 lines
5.3 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 in the notes/ subdirectory.
|
|
# These are published on coredns.io.
|
|
#
|
|
# For example: https://coredns.io/2016/09/18/coredns-001-release/ .
|
|
#
|
|
# 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: master VERSION
|
|
# Where VERSION is the version of the release - the release script double checks this with the
|
|
# actual CoreDNS version in coremain/version.go
|
|
# * (to test as release /release: -t master VERSION can be used.
|
|
#
|
|
# See https://github.com/coredns/release for documentation 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, these target from the this Makefile:
|
|
# * make release
|
|
# * make docker
|
|
# * make github-push
|
|
# * 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" BUILDOPTS=""
|
|
@echo Building: windows/amd64 - $(VERSION)
|
|
mkdir -p build/windows/amd64 && $(MAKE) coredns BINARY=build/windows/amd64/$(NAME).exe SYSTEM="GOOS=windows GOARCH=amd64" CHECKS="" BUILDOPTS=""
|
|
@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="" BUILDOPTS="" ;\
|
|
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).exe
|
|
for arch in $(LINUX_ARCH); do \
|
|
tar -zcf release/$(NAME)_$(VERSION)_linux_$$arch.tgz -C build/linux/$$arch $(NAME) ;\
|
|
done
|
|
|
|
.PHONY: github-push
|
|
github-push:
|
|
@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)
|
|
@( cd release; for asset in `ls -A *tgz`; do \
|
|
echo $$asset; \
|
|
curl -o /dev/null -X POST \
|
|
-H "Content-Type: application/gzip" \
|
|
--data-binary "@$$asset" \
|
|
"https://uploads.github.com/repos/$(GITHUB)/$(NAME)/releases/$(RELEASE)/assets?name=$${asset}&access_token=${GITHUB_ACCESS_TOKEN}" ; \
|
|
done )
|
|
@( cd release; for asset in `ls -A *tgz`; 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" \
|
|
--data-binary "@$$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:
|
|
@echo $(DOCKER_PASSWORD) | docker login -u $(DOCKER_LOGIN) --password-stdin
|
|
@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: version
|
|
version:
|
|
@echo $(VERSION)
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf release
|
|
rm -rf build
|