Commit 4569f27a by Patrick Ohly

build.make: fix push-multiarch ambiguity

"make push-multiarch" matched both push-multiarch and push-%. This seems to be none-deterministic and in at least one repo (external-provisioner), make picked the wildcard rule which then failed because there is no "multiarch" command. This ambiguity gets resolved by instantiating the wildcard rules only for existing commands. The advantage also is that "make push-no-such-command" will fail with an obvious "No rule to make target 'push-no-such-command'" instead of attempting to build the command.
parent 17dde9ef
...@@ -71,7 +71,7 @@ BUILD_PLATFORMS = ...@@ -71,7 +71,7 @@ BUILD_PLATFORMS =
# This builds each command (= the sub-directories of ./cmd) for the target platform(s) # This builds each command (= the sub-directories of ./cmd) for the target platform(s)
# defined by BUILD_PLATFORMS. # defined by BUILD_PLATFORMS.
build-%: check-go-version-go $(CMDS:%=build-%): build-%: check-go-version-go
mkdir -p bin mkdir -p bin
echo '$(BUILD_PLATFORMS)' | tr ';' '\n' | while read -r os arch suffix; do \ echo '$(BUILD_PLATFORMS)' | tr ';' '\n' | while read -r os arch suffix; do \
if ! (set -x; CGO_ENABLED=0 GOOS="$$os" GOARCH="$$arch" go build $(GOFLAGS_VENDOR) -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o "./bin/$*$$suffix" ./cmd/$*); then \ if ! (set -x; CGO_ENABLED=0 GOOS="$$os" GOARCH="$$arch" go build $(GOFLAGS_VENDOR) -a -ldflags '-X main.version=$(REV) -extldflags "-static"' -o "./bin/$*$$suffix" ./cmd/$*); then \
...@@ -80,10 +80,10 @@ build-%: check-go-version-go ...@@ -80,10 +80,10 @@ build-%: check-go-version-go
fi; \ fi; \
done done
container-%: build-% $(CMDS:%=container-%): container-%: build-%
docker build -t $*:latest -f $(shell if [ -e ./cmd/$*/Dockerfile ]; then echo ./cmd/$*/Dockerfile; else echo Dockerfile; fi) --label revision=$(REV) . docker build -t $*:latest -f $(shell if [ -e ./cmd/$*/Dockerfile ]; then echo ./cmd/$*/Dockerfile; else echo Dockerfile; fi) --label revision=$(REV) .
push-%: container-% $(CMDS:%=push-%): push-%: container-%
set -ex; \ set -ex; \
push_image () { \ push_image () { \
docker tag $*:latest $(IMAGE_NAME):$$tag; \ docker tag $*:latest $(IMAGE_NAME):$$tag; \
...@@ -120,7 +120,7 @@ DOCKER_BUILDX_CREATE_ARGS ?= ...@@ -120,7 +120,7 @@ DOCKER_BUILDX_CREATE_ARGS ?=
# BUILD_PLATFORMS determines which individual images are included in the multiarch image. # BUILD_PLATFORMS determines which individual images are included in the multiarch image.
# PULL_BASE_REF must be set to 'master', 'release-x.y', or a tag name, and determines # PULL_BASE_REF must be set to 'master', 'release-x.y', or a tag name, and determines
# the tag for the resulting multiarch image. # the tag for the resulting multiarch image.
push-multiarch-%: check-pull-base-ref build-% $(CMDS:%=push-multiarch-%): push-multiarch-%: check-pull-base-ref build-%
set -ex; \ set -ex; \
DOCKER_CLI_EXPERIMENTAL=enabled; \ DOCKER_CLI_EXPERIMENTAL=enabled; \
export DOCKER_CLI_EXPERIMENTAL; \ export DOCKER_CLI_EXPERIMENTAL; \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment