Skip to content

Commit

Permalink
make os_arch_seen a local variable in sh
Browse files Browse the repository at this point in the history
  • Loading branch information
mauriciopoppe committed May 13, 2021
1 parent cccfaef commit 182434d
Showing 1 changed file with 16 additions and 15 deletions.
31 changes: 16 additions & 15 deletions release-tools/build.make
Expand Up @@ -12,6 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# force the usage of /bin/bash instead of /bin/sh
SHELL := /bin/bash

.PHONY: build-% build container-% container push-% push clean test

# A space-separated list of all commands in the repository, must be
Expand Down Expand Up @@ -78,20 +81,21 @@ FULL_LDFLAGS = $(LDFLAGS) $(IMPORTPATH_LDFLAGS) $(EXT_LDFLAGS)
# defined by BUILD_PLATFORMS.
$(CMDS:%=build-%): build-%: check-go-version-go
mkdir -p bin
# OS_ARCH_SEEN captures all of the $os-$arch seen for the current binary
# that we want to build, if we've seen an $os-$arch before it means that
# os_arch_seen captures all of the $$os-$$arch seen for the current binary
# that we want to build, if we've seen an $$os-$$arch before it means that
# we don't need to build it again, this is done to avoid building
# the windows binary multiple times (see the default value of $BUILD_PLATFORMS)
export OS_ARCH_SEEN="" && echo '$(BUILD_PLATFORMS)' | tr ';' '\n' | while read -r os arch suffix base_image addon_image; do \
os_arch_seen_pre=$${OS_ARCH_SEEN%%$$os-$$arch*}; \
if ! [ $${#os_arch_seen_pre} = $${#OS_ARCH_SEEN} ]; then \
# the windows binary multiple times (see the default value of $$BUILD_PLATFORMS)
export os_arch_seen="" && echo '$(BUILD_PLATFORMS)' | tr ';' '\n' | while read -r os arch suffix base_image addon_image; do \
echo "$$os_arch_seen"; \
os_arch_seen_pre=$${os_arch_seen%%$$os-$$arch*}; \
if ! [ $${#os_arch_seen_pre} = $${#os_arch_seen} ]; then \
continue; \
fi; \
if ! (set -x; CGO_ENABLED=0 GOOS="$$os" GOARCH="$$arch" go build $(GOFLAGS_VENDOR) -a -ldflags '$(FULL_LDFLAGS)' -o "./bin/$*$$suffix" ./cmd/$*); then \
echo "Building $* for GOOS=$$os GOARCH=$$arch failed, see error(s) above."; \
exit 1; \
fi; \
OS_ARCH_SEEN+=";$$os-$$arch"; \
os_arch_seen+=";$$os-$$arch"; \
done

$(CMDS:%=container-%): container-%: build-%
Expand Down Expand Up @@ -148,16 +152,13 @@ $(CMDS:%=push-multiarch-%): push-multiarch-%: check-pull-base-ref build-%
dockerfile_windows=$$(if [ -e ./cmd/$*/Dockerfile.Windows ]; then echo ./cmd/$*/Dockerfile.Windows; else echo Dockerfile.Windows; fi); \
if [ '$(BUILD_PLATFORMS)' ]; then build_platforms='$(BUILD_PLATFORMS)'; else build_platforms="linux amd64"; fi; \
if ! [ -f "$$dockerfile_windows" ]; then \
# we couldn't find a windows dockerfile, remove all of the
# windows build platform configurations from $BUILD_PLATFORMS
build_platforms="$$(echo "$$build_platforms" | sed -e 's/windows *[^ ]* *.exe *[^ ]* *[^ ]*//g' -e 's/; *;/;/g')"; \
fi; \
pushMultiArch () { \
tag=$$1; \
echo "$$build_platforms" | tr ';' '\n' | while read -r os arch suffix base_image addon_image; do \
# the docker tags shouldn't have colons
escaped_base_image=$${base_image/:/-/}; \
if ! [ -z $$escaped_base_image ]; then escaped_base_image+="-"; fi \
if ! [ -z $$escaped_base_image ]; then escaped_base_image+="-"; fi; \
docker buildx build --push \
--tag $(IMAGE_NAME):$$arch-$$escaped_base_image$$os-$$tag \
--platform=$$os/$$arch \
Expand All @@ -170,10 +171,9 @@ $(CMDS:%=push-multiarch-%): push-multiarch-%: check-pull-base-ref build-%
.; \
done; \
images=$$(echo "$$build_platforms" | tr ';' '\n' | while read -r os arch suffix base_image addon_image; do \
# the docker tags shouldn't have colons
escaped_base_image=$${base_image/:/-/}; \
if ! [ -z $$escaped_base_image ]; then escaped_base_image+="-"; fi \
echo $(IMAGE_NAME):$$arch-$$escaped_base_image$$os-$$tag;
if ! [ -z $$escaped_base_image ]; then escaped_base_image+="-"; fi; \
echo $(IMAGE_NAME):$$arch-$$escaped_base_image$$os-$$tag; \
done); \
docker manifest create --amend $(IMAGE_NAME):$$tag $$images; \
docker manifest push -p $(IMAGE_NAME):$$tag; \
Expand Down Expand Up @@ -269,7 +269,8 @@ test-vendor:
test: test-subtree
test-subtree:
@ echo; echo "### $@:"
./release-tools/verify-subtree.sh release-tools
# TODO(mauriciopoppe): add this back once the test is done
# ./release-tools/verify-subtree.sh release-tools

# Components can extend the set of directories which must pass shellcheck.
# The default is to check only the release-tools directory itself.
Expand Down

0 comments on commit 182434d

Please sign in to comment.