1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
# 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 -f Makefile.release docker
#
# Docker push should happen after you make the new release and uploaded it to
# Github.
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
NAME:=coredns
VERSION:=$(shell grep 'coreVersion' coremain/version.go | awk '{ print $$3 }' | tr -d '"')
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 Cleaning old builds
rm -rf build && mkdir build
@echo Building: linux $(VERSION)
mkdir -p build/linux/amd64 && $(MAKE) coredns BINARY=build/linux/amd64/$(NAME) SYSTEM="GOOS=linux GOARCH=amd64" CHECKS=""
@echo Building: darwin $(VERSION)
mkdir -p build/darwin/amd64 && $(MAKE) coredns BINARY=build/darwin/amd64/$(NAME) SYSTEM="GOOS=darwin GOARCH=amd64" CHECKS=""
@echo Building: arm $(VERSION)
mkdir -p build/linux/arm && $(MAKE) coredns BINARY=build/linux/arm/$(NAME) SYSTEM="GOOS=linux GOARCH=arm" CHECKS=""
@echo Building: arm64 $(VERSION)
mkdir -p build/linux/arm64 && $(MAKE) coredns BINARY=build/linux/arm64/$(NAME) SYSTEM="GOOS=linux GOARCH=arm64" CHECKS=""
@echo Building: ppc64 $(VERSION)
mkdir -p build/linux/ppc64 && $(MAKE) coredns BINARY=build/linux/ppc64/$(NAME) SYSTEM="GOOS=linux GOARCH=ppc64le" CHECKS=""
@echo Building: s390x $(VERSION)
mkdir -p build/linux/s390 && $(MAKE) coredns BINARY=build/linux/s390/$(NAME) SYSTEM="GOOS=linux GOARCH=s390x" CHECKS=""
.PHONY: tar
tar:
@echo Cleaning old releases
rm -rf release && mkdir release
tar -zcf release/$(NAME)_$(VERSION)_linux_amd64.tgz -C build/linux/amd64 $(NAME)
tar -zcf release/$(NAME)_$(VERSION)_darwin_amd64.tgz -C build/darwin/amd64 $(NAME)
tar -zcf release/$(NAME)_$(VERSION)_linux_arm.tgz -C build/linux/arm $(NAME)
tar -zcf release/$(NAME)_$(VERSION)_linux_arm64.tgz -C build/linux/arm64 $(NAME)
tar -zcf release/$(NAME)_$(VERSION)_linux_ppc64le.tgz -C build/linux/ppc64 $(NAME)
tar -zcf release/$(NAME)_$(VERSION)_linux_s390x.tgz -C build/linux/s390 $(NAME)
.PHONY: upload
upload:
@echo Releasing: $(VERSION)
gh-release create $(GITHUB)/$(NAME) $(VERSION)
.PHONY: docker-build
docker-build:
tar -xzf release/$(NAME)_$(VERSION)_linux_amd64.tgz
docker build -t coredns .
docker tag coredns $(DOCKER_IMAGE_NAME):coredns-amd64
tar -xzf release/$(NAME)_$(VERSION)_linux_arm.tgz
docker build -t coredns .
docker tag coredns $(DOCKER_IMAGE_NAME):coredns-arm
tar -xzf release/$(NAME)_$(VERSION)_linux_arm64.tgz
docker build -t coredns .
docker tag coredns $(DOCKER_IMAGE_NAME):coredns-arm64
tar -xzf release/$(NAME)_$(VERSION)_linux_ppc64le.tgz
docker build -t coredns .
docker tag coredns $(DOCKER_IMAGE_NAME):coredns-ppc64le
tar -xzf release/$(NAME)_$(VERSION)_linux_s390x.tgz
docker build -t coredns .
docker tag coredns $(DOCKER_IMAGE_NAME):coredns-s390x
.PHONY: docker-upload
docker-upload:
@echo Pushing: $(VERSION)
docker push $(DOCKER_IMAGE_NAME):coredns-amd64
docker push $(DOCKER_IMAGE_NAME):coredns-arm
docker push $(DOCKER_IMAGE_NAME):coredns-arm64
docker push $(DOCKER_IMAGE_NAME):coredns-ppc64le
docker push $(DOCKER_IMAGE_NAME):coredns-s390x
manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64,linux/s390x --template $(DOCKER_IMAGE_NAME):coredns-ARCH --target $(DOCKER_IMAGE_NAME):$(VERSION)
manifest-tool push from-args --platforms linux/amd64,linux/arm,linux/arm64,linux/ppc64,linux/s390x --template $(DOCKER_IMAGE_NAME):coredns-ARCH --target $(DOCKER_IMAGE_NAME):latest
.PHONY: clean
clean:
rm -rf release
rm -rf build
|