Skip to content

Commit e2524e3

Browse files
committed
chore: add podman support to Makefile
1 parent c29ed91 commit e2524e3

File tree

1 file changed

+34
-26
lines changed

1 file changed

+34
-26
lines changed

Makefile

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,15 @@ BIN ?= velero
2020
# This repo's root import path (under GOPATH).
2121
PKG := 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.
2433
REGISTRY ?= velero
2534
# In order to push images to an insecure registry, follow the two steps:
@@ -63,7 +72,7 @@ else
6372
endif
6473

6574
BUILDER_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

6877
HUGO_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
98107
else
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

225233
ifeq ($(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
229237
else
230238
@echo using a specified buildx instance $(BUILDX_INSTANCE)
231-
@docker buildx use $(BUILDX_INSTANCE)
239+
@$(DOCKER) buildx use $(BUILDX_INSTANCE)
232240
endif
233241

234242
@mkdir -p _output
@@ -249,7 +257,7 @@ container-linux-%:
249257
container-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-%:
273281
container-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

294302
push-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

313321
SKIP_TESTS ?=
314322
test: build-dirs
@@ -365,21 +373,21 @@ else ifneq ($(BUILDER_IMAGE_CACHED),)
365373
@echo "Using Cached Image: $(BUILDER_IMAGE)"
366374
else
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
369377
endif
370378

371379
build-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))
375383
ifeq ($(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) .
377385
else
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) .
379387
endif
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

385393
push-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"
392400
else
393-
docker push $(BUILDER_IMAGE)
401+
$(DOCKER) push $(BUILDER_IMAGE)
394402
endif
395403

396404
build-image-hugo:
397-
cd site && docker build --pull -t $(HUGO_IMAGE) .
405+
cd site && $(DOCKER) build --pull -t $(HUGO_IMAGE) .
398406

399407
clean:
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.
402410
ifneq ($(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
405413
endif
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

451459
serve-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

Comments
 (0)