File: docker.mk

package info (click to toggle)
golang-github-smallstep-cli 0.15.16%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,404 kB
  • sloc: sh: 512; makefile: 99
file content (75 lines) | stat: -rw-r--r-- 2,675 bytes parent folder | download | duplicates (2)
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
#########################################
# Building Docker Image
#
# This uses a multi-stage build file. The first stage is a builder (that might
# be large in size). After the build has succeeded, the statically linked
# binary is copied to a new image that is optimized for size.
#########################################

ifeq (, $(shell which docker))
	DOCKER_CLIENT_OS := linux
else
	DOCKER_CLIENT_OS := $(strip $(shell docker version -f '{{.Client.Os}}' 2>/dev/null))
endif

DOCKER_PLATFORMS = linux/amd64,linux/386,linux/arm,linux/arm64
DOCKER_IMAGE_NAME = smallstep/step-cli

docker-prepare:
	# Ensure, we can build for ARM architecture
ifeq (linux,$(DOCKER_CLIENT_OS))
	[ -f /proc/sys/fs/binfmt_misc/qemu-arm ] || docker run --rm --privileged linuxkit/binfmt:v0.8-amd64
endif

	# Register buildx builder
	mkdir -p $$HOME/.docker/cli-plugins

	test -f $$HOME/.docker/cli-plugins/docker-buildx || \
		(wget -q -O $$HOME/.docker/cli-plugins/docker-buildx https://github.com/docker/buildx/releases/download/v0.4.1/buildx-v0.4.1.$(DOCKER_CLIENT_OS)-amd64 && \
		chmod +x $$HOME/.docker/cli-plugins/docker-buildx)

	docker buildx create --use --name mybuilder --platform="$(DOCKER_PLATFORMS)" || true

.PHONY: docker-prepare

#################################################
# Releasing Docker Images
#
# Using the docker build infrastructure, this section is responsible for
# logging into docker hub.
#################################################

# Rely on DOCKER_USERNAME and DOCKER_PASSWORD being set inside the CI or
# equivalent environment
docker-login:
	$Q echo "$(DOCKER_PASSWORD)" | docker login -u="$(DOCKER_USERNAME)" --password-stdin

.PHONY: docker-login

#################################################
# Targets for different type of builds
#################################################


define DOCKER_BUILDX
	# $(1) -- Image Tag
	# $(2) -- Push (empty is no push | --push will push to dockerhub)
	docker buildx build . --progress plain -t $(DOCKER_IMAGE_NAME):$(1) -f docker/Dockerfile --platform="$(DOCKER_PLATFORMS)" $(2)
endef

# For non-master builds don't build the docker containers.
docker-branch:

# For master builds don't build the docker containers. Only build for releases.
docker-master:

# For all builds with a release candidate tag build and push the containers.
docker-release-candidate: docker-prepare docker-login
	$(call DOCKER_BUILDX,$(VERSION),--push)

# For all builds with a release tag build and push the containers.
docker-release: docker-prepare docker-login
	$(call DOCKER_BUILDX,latest,--push)
	$(call DOCKER_BUILDX,$(VERSION),--push)

.PHONY: docker-branch docker-master docker-release-candidate docker-release