mirror of
https://github.com/coredns/coredns.git
synced 2025-10-26 15:54:16 -04:00
Default to empty DOCKER var so you wont accidently push to the
production dockerhub. But allow to be overriden to you can push
to your registry. This allows you to re-use the CoreDNS makefiles for
your internal CI/CD.
Hacked Makefile with echos:
make DOCKER=bla -f Makefile.release docker-push
Pushing: 1.0.1
for arch in amd64 arm arm64 ppc64le s390x; do \
echo docker push bla/coredns:coredns-$arch ;\
done
docker push bla/coredns:coredns-amd64
docker push bla/coredns:coredns-arm
docker push bla/coredns:coredns-arm64
docker push bla/coredns:coredns-ppc64le
docker push bla/coredns:coredns-s390x
echo manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x --template bla/coredns:coredns-ARCH --target bla/coredns:1.0.1
manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x --template bla/coredns:coredns-ARCH --target bla/coredns:1.0.1
echo manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x --template bla/coredns:coredns-ARCH --target bla/coredns:latest
manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x --template bla/coredns:coredns-ARCH --target bla/coredns:latest
159 lines
5.4 KiB
Makefile
159 lines
5.4 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.
|
|
#
|
|
# 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)
|
|
# * 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 DOKCKER=coredns -f Makefile.release docker
|
|
#
|
|
# Docker push should happen after you make the new release and uploaded it to Github.
|
|
#
|
|
# If you want to push to a personal registry, point DOCKER to something else, i.e.
|
|
#
|
|
# * make DOCKER=miek -f Makefile.release docker
|
|
EMPTY:=
|
|
SPACE:=$(EMPTY) $(EMPTY)
|
|
COMMA:=$(EMPTY),$(EMPTY)
|
|
|
|
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
|
|
|
|
DOCKER:=
|
|
NAME:=coredns
|
|
VERSION:=$(shell grep 'coreVersion' coremain/version.go | awk '{ print $$3 }' | tr -d '"')
|
|
GITHUB:=coredns
|
|
DOCKER_IMAGE_NAME:=$(DOCKER)/$(NAME)
|
|
GITCOMMIT:=$(shell git describe --dirty --always)
|
|
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 \"coredns\" for releases")
|
|
endif
|
|
|
|
all:
|
|
@echo Use the 'release' target to start a release
|
|
|
|
release: commit push build tar upload
|
|
|
|
docker: docker-build docker-push
|
|
|
|
.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="" VERBOSE=""
|
|
@echo Building: windows $(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: upload
|
|
upload:
|
|
@echo Releasing: $(VERSION)
|
|
gh-release create $(GITHUB)/$(NAME) $(VERSION)
|
|
|
|
.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>
|
|
# 3. Replace base image from alpine:latest to <arch>/alpine:latest
|
|
# 4. Comment RUN in Dockerfile
|
|
# <arch>:
|
|
# arm: arm32v6
|
|
# arm64: arm64v8
|
|
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 ;\
|
|
if [ $$arch != amd64 ]; then \
|
|
case $$arch in \
|
|
arm) \
|
|
BASEIMAGE=arm32v6 ;\
|
|
;; \
|
|
arm64) \
|
|
BASEIMAGE=arm64v8 ;\
|
|
;; \
|
|
*) \
|
|
BASEIMAGE=$$arch ;\
|
|
;; \
|
|
esac ;\
|
|
sed -e "s/alpine:latest/$$BASEIMAGE\\/alpine:latest/" -i build/docker/linux/$$arch/Dockerfile ;\
|
|
sed -e "s/^\\s*RUN/#RUN/" -i build/docker/linux/$$arch/Dockerfile ;\
|
|
fi ;\
|
|
docker build -t coredns build/docker/linux/$$arch ;\
|
|
docker tag coredns $(DOCKER_IMAGE_NAME):coredns-$$arch ;\
|
|
done
|
|
|
|
.PHONY: docker-push
|
|
docker-push:
|
|
@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
|