@@ -12,15 +12,24 @@ arch = $(shell uname -m)
12
12
# just visit https://quay.io/repository/prometheus/busybox?tag=latest&tab=tags.
13
13
# TODO(bwplotka): Pinning is important but somehow quay kills the old images, so make sure to update regularly.
14
14
# Update at 2021.12.08
15
+ AMD64_SHA ="97a9aacc097e5dbdec33b0d671adea0785e76d26ff2b979ee28570baf6a9155d"
16
+ ARM64_SHA ="5feb736d32e5b57f4944691d00b581f1f9192b3732cab03e3b6034cf0d1c8f2c"
17
+
15
18
ifeq ($(arch ) , x86_64)
16
19
# amd64
17
- BASE_DOCKER_SHA ="97a9aacc097e5dbdec33b0d671adea0785e76d26ff2b979ee28570baf6a9155d"
20
+ BASE_DOCKER_SHA =$( AMD64_SHA )
18
21
else ifeq ($(arch), armv8)
19
22
# arm64
20
- BASE_DOCKER_SHA ="5feb736d32e5b57f4944691d00b581f1f9192b3732cab03e3b6034cf0d1c8f2c"
23
+ BASE_DOCKER_SHA =$( ARM64_SHA )
21
24
else
22
25
echo >&2 "only support amd64 or arm64 arch" && exit 1
23
26
endif
27
+ DOCKER_ARCHS ?= amd64 arm64
28
+ # Generate two target: docker-xxx-amd64, docker-xxx-arm64.
29
+ # Run make docker-xxx -n to see the result with dry run.
30
+ BUILD_DOCKER_ARCHS = $(addprefix docker-build-,$(DOCKER_ARCHS ) )
31
+ TEST_DOCKER_ARCHS = $(addprefix docker-test-,$(DOCKER_ARCHS ) )
32
+ PUSH_DOCKER_ARCHS = $(addprefix docker-push-,$(DOCKER_ARCHS ) )
24
33
25
34
# Ensure everything works even if GOPATH is not set, which is often the case.
26
35
# The `go env GOPATH` will work for all cases for Go 1.8+.
@@ -134,11 +143,20 @@ build: check-git deps $(PROMU)
134
143
@echo " >> building Thanos binary in $( PREFIX) "
135
144
@$(PROMU ) build --prefix $(PREFIX )
136
145
146
+ GIT_BRANCH =$(shell $(GIT ) rev-parse --abbrev-ref HEAD)
137
147
.PHONY : crossbuild
138
148
crossbuild : # # Builds all binaries for all platforms.
149
+ ifeq ($(GIT_BRANCH ) , main)
150
+ crossbuild : | $(PROMU )
151
+ @echo " >> crossbuilding all binaries"
152
+ # we only care about below two for the main branch
153
+ $(PROMU ) crossbuild -v -p linux/amd64 -p linux/arm64
154
+ else
139
155
crossbuild : | $(PROMU )
140
156
@echo " >> crossbuilding all binaries"
141
157
$(PROMU ) crossbuild -v
158
+ endif
159
+
142
160
143
161
.PHONY : deps
144
162
deps : # # Ensures fresh go.mod and go.sum.
@@ -164,9 +182,33 @@ docker-multi-stage:
164
182
@echo " >> building docker image 'thanos' with Dockerfile.multi-stage"
165
183
@docker build -f Dockerfile.multi-stage -t " thanos" --build-arg BASE_DOCKER_SHA=$(BASE_DOCKER_SHA ) .
166
184
167
- .PHONY : docker-push
185
+ GET_SHA = $(shell echo '$1'_SHA | tr '[:lower:]' '[:upper:]')
186
+ # docker-build builds docker images with multiple architectures.
187
+ .PHONY : docker-build $(BUILD_DOCKER_ARCHS )
188
+ docker-build : $(BUILD_DOCKER_ARCHS )
189
+ $(BUILD_DOCKER_ARCHS ) : docker-build-% :
190
+ @docker build -t " $( DOCKER_IMAGE_REPO) -linux-$* :$( DOCKER_IMAGE_TAG) " \
191
+ --build-arg BASE_DOCKER_SHA=$($(call GET_SHA,$*)) \
192
+ --build-arg ARCH="$*" \
193
+ -f Dockerfile.multi-arch .
194
+
195
+ .PHONY : docker-test $(TEST_DOCKER_ARCHS )
196
+ docker-test : $(TEST_DOCKER_ARCHS )
197
+ $(TEST_DOCKER_ARCHS ) : docker-test-% :
198
+ @echo " >> testing image"
199
+ @docker run " $( DOCKER_IMAGE_REPO) -linux-$* :$( DOCKER_IMAGE_TAG) " --help
200
+
201
+ # docker-manifest push docker manifest to support multiple architectures.
202
+ .PHONY : docker-manifest
203
+ docker-manifest :
204
+ @echo " >> creating and pushing manifest"
205
+ @DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create -a " $( DOCKER_IMAGE_REPO) :$( DOCKER_IMAGE_TAG) " $(foreach ARCH,$(DOCKER_ARCHS ) ,$(DOCKER_IMAGE_REPO ) -linux-$(ARCH ) :$(DOCKER_IMAGE_TAG ) )
206
+ @DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push " $( DOCKER_IMAGE_REPO) :$( DOCKER_IMAGE_TAG) "
207
+
208
+ .PHONY : docker-push $(PUSH_DOCKER_ARCHS )
168
209
docker-push : # # Pushes 'thanos' docker image build to "$(DOCKER_IMAGE_REPO):$(DOCKER_IMAGE_TAG)".
169
- docker-push :
210
+ docker-push : $(PUSH_DOCKER_ARCHS )
211
+ $(PUSH_DOCKER_ARCHS ) : docker-push-% :
170
212
@echo " >> pushing image"
171
213
@docker tag " thanos" " $( DOCKER_IMAGE_REPO) :$( DOCKER_IMAGE_TAG) "
172
214
@docker push " $( DOCKER_IMAGE_REPO) :$( DOCKER_IMAGE_TAG) "
0 commit comments