@@ -20,6 +20,15 @@ BIN ?= velero
2020# This repo's root import path (under GOPATH).
2121PKG := github.com/vmware-tanzu/velero
2222
23+ # docker (or podman) command.
24+ ifneq (, $(shell which docker 2>/dev/null) )
25+ DOCKER := docker
26+ else ifneq (, $(shell which podman 2>/dev/null))
27+ DOCKER := podman
28+ else
29+ $(error Neither docker nor podman found)
30+ endif
31+
2332# Where to push the docker image.
2433REGISTRY ?= velero
2534# In order to push images to an insecure registry, follow the two steps:
6372endif
6473
6574BUILDER_IMAGE := $(REGISTRY ) /build-image:$(BUILDER_IMAGE_TAG )
66- BUILDER_IMAGE_CACHED := $(shell docker images -q ${BUILDER_IMAGE} 2>/dev/null )
75+ BUILDER_IMAGE_CACHED := $(shell $( DOCKER ) images -q ${BUILDER_IMAGE} 2>/dev/null )
6776
6877HUGO_IMAGE := ghcr.io/gohugoio/hugo
6978
@@ -86,14 +95,14 @@ endif
8695# check buildx is enabled only if docker is in path
8796# macOS/Windows docker cli without Docker Desktop license: https://github.com/abiosoft/colima
8897# To add buildx to docker cli: https://github.com/abiosoft/colima/discussions/273#discussioncomment-2684502
89- ifeq ($(shell which docker 2>/dev/null 1>&2 && docker buildx inspect 2>/dev/null | awk '/Status/ { print $$2 }') , running)
98+ ifeq ($(shell which $( DOCKER ) 2>/dev/null 1>&2 && $( DOCKER ) buildx inspect 2>/dev/null | awk '/Status/ { print $$2 }') , running)
9099 BUILDX_ENABLED ?= true
91100# if emulated docker cli from podman, assume enabled
92101# emulated docker cli from podman: https://podman-desktop.io/docs/migrating-from-docker/emulating-docker-cli-with-podman
93102# podman known issues:
94103# - on remote podman, such as on macOS,
95104# --output issue: https://github.com/containers/podman/issues/15922
96- else ifeq ($(shell which docker 2>/dev/null 1>&2 && cat $(shell which docker ) | grep -c "exec podman"), 1)
105+ else ifeq ($(shell which $(DOCKER) 2>/dev/null 1>&2 && cat $(shell which $(DOCKER) ) | grep -c "exec podman"), 1)
97106 BUILDX_ENABLED ?= true
98107else
99108 BUILDX_ENABLED ?= false
@@ -200,12 +209,11 @@ shell: build-dirs build-env
200209 @# because the Kubernetes code-generator tools require the project to
201210 @# exist in a directory hierarchy ending like this (but *NOT* necessarily
202211 @# under $GOPATH).
203- @docker run \
212+ @$( DOCKER ) run \
204213 -e GOFLAGS \
205214 -e GOPROXY \
206215 -i $(TTY ) \
207216 --rm \
208- -u $$(id -u ) :$$(id -g ) \
209217 -v " $$ (pwd):/github.com/vmware-tanzu/velero:delegated" \
210218 -v " $$ (pwd)/_output/bin:/output:delegated" \
211219 -v " $$ (pwd)/.go/pkg:/go/pkg:delegated" \
@@ -224,11 +232,11 @@ endif
224232
225233ifeq ($(BUILDX_INSTANCE ) ,)
226234 @echo creating a buildx instance
227- -docker buildx rm velero-builder || true
228- @docker buildx create --use --name=velero-builder
235+ -$(DOCKER) buildx rm velero-builder || true
236+ @$(DOCKER) buildx create --use --name=velero-builder
229237else
230238 @echo using a specified buildx instance $(BUILDX_INSTANCE)
231- @docker buildx use $(BUILDX_INSTANCE)
239+ @$(DOCKER) buildx use $(BUILDX_INSTANCE)
232240endif
233241
234242 @mkdir -p _output
@@ -249,7 +257,7 @@ container-linux-%:
249257container-linux :
250258 @echo " building container: $( IMAGE) :$( VERSION) -linux-$( BUILDX_ARCH) "
251259
252- @docker buildx build --pull \
260+ @$(DOCKER) buildx build --pull \
253261 --output="type=$(BUILD_OUTPUT_TYPE)$(if $(findstring tar, $(BUILD_OUTPUT_TYPE)),$(comma)dest=_output/$(BIN)-$(VERSION)-linux-$(BUILDX_ARCH).tar,)" \
254262 --platform="linux/$(BUILDX_ARCH)" \
255263 $(addprefix -t , $(addsuffix "-linux-$(BUILDX_ARCH)",$(ALL_IMAGE_TAGS))) \
@@ -273,7 +281,7 @@ container-windows-%:
273281container-windows :
274282 @echo " building container: $( IMAGE) :$( VERSION) -windows-$( BUILDX_OSVERSION) -$( BUILDX_ARCH) "
275283
276- @docker buildx build --pull \
284+ @$(DOCKER) buildx build --pull \
277285 --output="type=$(BUILD_OUTPUT_TYPE)$(if $(findstring tar, $(BUILD_OUTPUT_TYPE)),$(comma)dest=_output/$(BIN)-$(VERSION)-windows-$(BUILDX_OSVERSION)-$(BUILDX_ARCH).tar,)" \
278286 --platform="windows/$(BUILDX_ARCH)" \
279287 $(addprefix -t , $(addsuffix "-windows-$(BUILDX_OSVERSION)-$(BUILDX_ARCH)",$(ALL_IMAGE_TAGS))) \
@@ -293,22 +301,22 @@ container-windows:
293301
294302push-manifest :
295303 @echo " building manifest: $( IMAGE_TAG) for $( foreach osarch, $( ALL_OS_ARCH) , $( IMAGE_TAG) -${osarch} ) "
296- @docker manifest create --amend --insecure=$(INSECURE_REGISTRY ) $(IMAGE_TAG ) $(foreach osarch, $(ALL_OS_ARCH ) , $(IMAGE_TAG ) -${osarch})
304+ @$( DOCKER ) manifest create --amend --insecure=$(INSECURE_REGISTRY ) $(IMAGE_TAG ) $(foreach osarch, $(ALL_OS_ARCH ) , $(IMAGE_TAG ) -${osarch})
297305
298306 @set -x; \
299307 for arch in $(ALL_ARCH.windows); do \
300308 for osversion in $(ALL_OSVERSIONS.windows); do \
301309 BASEIMAGE=mcr.microsoft.com/windows/nanoserver:$${osversion}; \
302- full_version=`docker manifest inspect --insecure=$(INSECURE_REGISTRY) $${BASEIMAGE} | jq -r '.manifests[0].platform["os.version"]'`; \
303- docker manifest annotate --os windows --arch $${arch} --os-version $${full_version} $(IMAGE_TAG) $(IMAGE_TAG)-windows-$${osversion}-$${arch}; \
310+ full_version=`$(DOCKER) manifest inspect --insecure=$(INSECURE_REGISTRY) $${BASEIMAGE} | jq -r '.manifests[0].platform["os.version"]'`; \
311+ $(DOCKER) manifest annotate --os windows --arch $${arch} --os-version $${full_version} $(IMAGE_TAG) $(IMAGE_TAG)-windows-$${osversion}-$${arch}; \
304312 done; \
305313 done
306314
307315 @echo "pushing manifest $(IMAGE_TAG)"
308- @docker manifest push --purge --insecure=$(INSECURE_REGISTRY) $(IMAGE_TAG)
316+ @$(DOCKER) manifest push --purge --insecure=$(INSECURE_REGISTRY) $(IMAGE_TAG)
309317
310318 @echo "pushed manifest $(IMAGE_TAG):"
311- @docker manifest inspect --insecure=$(INSECURE_REGISTRY) $(IMAGE_TAG)
319+ @$(DOCKER) manifest inspect --insecure=$(INSECURE_REGISTRY) $(IMAGE_TAG)
312320
313321SKIP_TESTS ?=
314322test : build-dirs
@@ -365,21 +373,21 @@ else ifneq ($(BUILDER_IMAGE_CACHED),)
365373 @echo "Using Cached Image: $(BUILDER_IMAGE)"
366374else
367375 @echo "Trying to pull build-image: $(BUILDER_IMAGE)"
368- docker pull -q $(BUILDER_IMAGE) || $(MAKE) build-image
376+ $(DOCKER) pull -q $(BUILDER_IMAGE) || $(MAKE) build-image
369377endif
370378
371379build-image :
372380 @# When we build a new image we just untag the old one.
373381 @# This makes sure we don't leave the orphaned image behind.
374- $(eval old_id=$(shell docker image inspect --format '{{ .ID }}' ${BUILDER_IMAGE} 2>/dev/null) )
382+ $(eval old_id=$(shell $( DOCKER ) image inspect --format '{{ .ID }}' ${BUILDER_IMAGE} 2>/dev/null) )
375383ifeq ($(BUILDX_ENABLED ) , true)
376- @cd hack/build-image && docker buildx build --build-arg=GOPROXY=$(GOPROXY) --output=type=docker --pull -t $(BUILDER_IMAGE) -f $(BUILDER_IMAGE_DOCKERFILE_REALPATH) .
384+ @cd hack/build-image && $(DOCKER) buildx build --build-arg=GOPROXY=$(GOPROXY) --output=type=docker --pull -t $(BUILDER_IMAGE) -f $(BUILDER_IMAGE_DOCKERFILE_REALPATH) .
377385else
378- @cd hack/build-image && docker build --build-arg=GOPROXY=$(GOPROXY) --pull -t $(BUILDER_IMAGE) -f $(BUILDER_IMAGE_DOCKERFILE_REALPATH) .
386+ @cd hack/build-image && $(DOCKER) build --build-arg=GOPROXY=$(GOPROXY) --pull -t $(BUILDER_IMAGE) -f $(BUILDER_IMAGE_DOCKERFILE_REALPATH) .
379387endif
380- $(eval new_id=$(shell docker image inspect --format '{{ .ID }}' ${BUILDER_IMAGE} 2>/dev/null))
388+ $(eval new_id=$(shell $(DOCKER) image inspect --format '{{ .ID }}' ${BUILDER_IMAGE} 2>/dev/null))
381389 @if [ "$(old_id)" != "" ] && [ "$(old_id)" != "$(new_id)" ]; then \
382- docker rmi -f $$id || true; \
390+ $(DOCKER) rmi -f $$id || true; \
383391 fi
384392
385393push-build-image :
@@ -390,21 +398,21 @@ ifneq "$(origin BUILDER_IMAGE_DOCKERFILE)" "file"
390398 @echo "Dockerfile for builder image has been overridden"
391399 @echo "Skipping push of custom image"
392400else
393- docker push $(BUILDER_IMAGE)
401+ $(DOCKER) push $(BUILDER_IMAGE)
394402endif
395403
396404build-image-hugo :
397- cd site && docker build --pull -t $(HUGO_IMAGE ) .
405+ cd site && $( DOCKER ) build --pull -t $(HUGO_IMAGE ) .
398406
399407clean :
400408# if we have a cached image then use it to run go clean --modcache
401409# this test checks if we there is an image id in the BUILDER_IMAGE_CACHED variable.
402410ifneq ($(strip $(BUILDER_IMAGE_CACHED ) ) ,)
403411 $(MAKE) shell CMD="-c 'go clean --modcache'"
404- docker rmi -f $(BUILDER_IMAGE) || true
412+ $(DOCKER) rmi -f $(BUILDER_IMAGE) || true
405413endif
406414 rm -rf .go _output
407- docker rmi $(HUGO_IMAGE)
415+ $(DOCKER) rmi $(HUGO_IMAGE)
408416
409417
410418.PHONY : modules
@@ -449,7 +457,7 @@ release:
449457 ./hack/release-tools/goreleaser.sh' "
450458
451459serve-docs : build-image-hugo
452- docker run \
460+ $( DOCKER ) run \
453461 --rm \
454462 -v " $$ (pwd)/site:/project" \
455463 -it -p 1313:1313 \
0 commit comments