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.
This commit is contained in:
Patrick Ohly
2020-06-03 11:03:47 +02:00
parent 17dde9ef00
commit 4569f27a8c

View File

@@ -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
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 ?=
# 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; \