| 
									
										
										
										
											2021-09-14 13:54:22 +02:00
										 |  |  | # Makefile for creating and uploading CoreDNS docker image.
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # First you should do a release and then call this Makefile to create and upload
 | 
					
						
							|  |  |  | # the image.
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # 1. Reuse the issue for this release
 | 
					
						
							|  |  |  | # 2. In an issue give the command: /docker VERSION
 | 
					
						
							|  |  |  | #    Where VERSION is the version of the release.
 | 
					
						
							|  |  |  | # 3. (to test as release /docker -t VERSION can be used.
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # To release we run, these target from the this Makefile.docker ordered like:
 | 
					
						
							|  |  |  | # * make release
 | 
					
						
							|  |  |  | # * make docker-push
 | 
					
						
							|  |  |  | #
 | 
					
						
							|  |  |  | # Testing docker is done e.g. via:
 | 
					
						
							|  |  |  | #
 | 
					
						
							| 
									
										
										
										
											2021-09-16 15:51:51 -04:00
										 |  |  | # export DOCKER_PASSWORD=<pass>
 | 
					
						
							| 
									
										
										
										
											2021-09-14 13:54:22 +02:00
										 |  |  | # export DOCKER_LOGIN=miek
 | 
					
						
							| 
									
										
										
										
											2021-09-16 15:51:51 -04:00
										 |  |  | # make VERSION=x.y.z DOCKER=miek -f Makefile.docker release docker-push
 | 
					
						
							| 
									
										
										
										
											2021-09-14 13:54:22 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ifeq (, $(shell which curl))
 | 
					
						
							|  |  |  |     $(error "No curl in $$PATH, please install")
 | 
					
						
							|  |  |  | endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # VERSION is the version we should download and use.
 | 
					
						
							|  |  |  | VERSION:=
 | 
					
						
							|  |  |  | # DOCKER is the docker image repo we need to push to.
 | 
					
						
							|  |  |  | DOCKER:=
 | 
					
						
							|  |  |  | NAME:=coredns
 | 
					
						
							|  |  |  | GITHUB:=https://github.com/coredns/coredns/releases/download
 | 
					
						
							|  |  |  | # mips is not in LINUX_ARCH because it's not supported by docker manifest. Keep this list in sync with the one in Makefile.release
 | 
					
						
							|  |  |  | LINUX_ARCH:=amd64 arm arm64 mips64le ppc64le s390x
 | 
					
						
							|  |  |  | DOCKER_IMAGE_NAME:=$(DOCKER)/$(NAME)
 | 
					
						
							|  |  |  | DOCKER_IMAGE_LIST_VERSIONED:=$(shell echo $(LINUX_ARCH) | sed -e "s~[^ ]*~$(DOCKER_IMAGE_NAME)\-&:$(VERSION)~g")
 | 
					
						
							|  |  |  | DOCKER_IMAGE_LIST_LATEST:=$(shell echo $(LINUX_ARCH) | sed -e "s~[^ ]*~$(DOCKER_IMAGE_NAME)\-&:latest~g")
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | all:
 | 
					
						
							| 
									
										
										
										
											2021-09-14 09:31:16 -04:00
										 |  |  | 	@echo Use the 'release' target to download released binaries and build containers per arch, 'docker-push' to build and push a multi arch manifest.
 | 
					
						
							| 
									
										
										
										
											2021-09-14 13:54:22 +02:00
										 |  |  | 	echo $(DOCKER_IMAGE_LIST_VERSIONED)
 | 
					
						
							|  |  |  | 	echo $(DOCKER_IMAGE_LIST_LATEST)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | release: image-download docker-build
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PHONY: image-download
 | 
					
						
							|  |  |  | image-download:
 | 
					
						
							|  |  |  | ifeq ($(VERSION),)
 | 
					
						
							|  |  |  | 	$(error "Please specify a version use. Use VERSION=<version>")
 | 
					
						
							|  |  |  | endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	@rm -rf build/docker
 | 
					
						
							|  |  |  | 	@mkdir -p build/docker
 | 
					
						
							|  |  |  | 	@# 1. Copy appropriate coredns binary to build/docker/<arch>
 | 
					
						
							|  |  |  | 	@# 2. Copy Dockerfile into the correct dir as well.
 | 
					
						
							|  |  |  | 	@# 3. Unpack the tgz from github into 'coredns' binary.
 | 
					
						
							|  |  |  | 	for arch in $(LINUX_ARCH); do \
 | 
					
						
							|  |  |  | 		mkdir build/docker/$${arch}; \
 | 
					
						
							|  |  |  | 		curl -L $(GITHUB)/v$(VERSION)/coredns_$(VERSION)_linux_$${arch}.tgz > build/docker/$${arch}/coredns.tgz && \
 | 
					
						
							|  |  |  | 			( cd build/docker/$${arch}; tar xf coredns.tgz && rm coredns.tgz ); \
 | 
					
						
							|  |  |  | 			cp Dockerfile build/docker/$${arch} ; \
 | 
					
						
							|  |  |  | 	done
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PHONY: docker-build
 | 
					
						
							|  |  |  | docker-build:
 | 
					
						
							|  |  |  | ifeq ($(DOCKER),)
 | 
					
						
							|  |  |  | 	$(error "Please specify Docker registry to use. Use DOCKER=coredns for releases")
 | 
					
						
							|  |  |  | else
 | 
					
						
							| 
									
										
										
										
											2021-09-14 08:34:04 -04:00
										 |  |  | 	docker version
 | 
					
						
							| 
									
										
										
										
											2021-09-14 13:54:22 +02:00
										 |  |  | 	for arch in $(LINUX_ARCH); do \
 | 
					
						
							| 
									
										
										
										
											2021-09-16 21:51:10 +02:00
										 |  |  | 	    docker build -t $(DOCKER_IMAGE_NAME)-$${arch}:$(VERSION) build/docker/$${arch}  && \
 | 
					
						
							| 
									
										
										
										
											2021-09-14 13:54:22 +02:00
										 |  |  | 	    docker tag $(DOCKER_IMAGE_NAME)-$${arch}:$(VERSION) $(DOCKER_IMAGE_NAME)-$${arch}:latest ;\
 | 
					
						
							|  |  |  | 	done
 | 
					
						
							|  |  |  | endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .PHONY: docker-push
 | 
					
						
							|  |  |  | docker-push:
 | 
					
						
							|  |  |  | ifeq ($(DOCKER),)
 | 
					
						
							|  |  |  | 	$(error "Please specify Docker registry to use. Use DOCKER=coredns for releases")
 | 
					
						
							|  |  |  | else
 | 
					
						
							|  |  |  | 	@# Pushes coredns/coredns-$arch:$version images
 | 
					
						
							|  |  |  | 	@# Creates manifest for multi-arch image
 | 
					
						
							|  |  |  | 	@# Pushes multi-arch image to coredns/coredns:$version
 | 
					
						
							|  |  |  | 	@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)-$${arch}:$(VERSION) ;\
 | 
					
						
							|  |  |  | 		docker push $(DOCKER_IMAGE_NAME)-$${arch}:latest ;\
 | 
					
						
							|  |  |  | 	done
 | 
					
						
							|  |  |  | 	docker manifest create --amend $(DOCKER_IMAGE_NAME):$(VERSION) $(DOCKER_IMAGE_LIST_VERSIONED)
 | 
					
						
							|  |  |  | 	docker manifest create --amend $(DOCKER_IMAGE_NAME):latest $(DOCKER_IMAGE_LIST_LATEST)
 | 
					
						
							|  |  |  | 	for arch in $(LINUX_ARCH); do \
 | 
					
						
							|  |  |  | 		docker manifest annotate --arch $${arch} $(DOCKER_IMAGE_NAME):$(VERSION) $(DOCKER_IMAGE_NAME)-$${arch}:$(VERSION) ;\
 | 
					
						
							|  |  |  | 		docker manifest annotate --arch $${arch} $(DOCKER_IMAGE_NAME):latest $(DOCKER_IMAGE_NAME)-$${arch}:latest ;\
 | 
					
						
							|  |  |  | 	done
 | 
					
						
							|  |  |  | 	docker manifest push --purge $(DOCKER_IMAGE_NAME):$(VERSION)
 | 
					
						
							|  |  |  | 	docker manifest push --purge $(DOCKER_IMAGE_NAME):latest
 | 
					
						
							|  |  |  | endif
 |