diff --git a/build/release/Makefile b/build/release/Makefile index ddd892eac..a8fc9fded 100644 --- a/build/release/Makefile +++ b/build/release/Makefile @@ -79,9 +79,9 @@ MANIFEST_TOOL := $(TOOLS_HOST_DIR)/manifest-tool-$(MANIFEST_TOOL_VERSION) $(MANIFEST_TOOL): @echo === installing manifest-tool - @mkdir -p $(TOOLS_HOST_DIR) - @curl -sL https://github.com/estesp/manifest-tool/releases/download/$(MANIFEST_TOOL_VERSION)/manifest-tool-$(GOHOSTOS)-$(GOHOSTARCH) > $@ - @chmod +x $@ + mkdir -p $(TOOLS_HOST_DIR) + curl -sL https://github.com/estesp/manifest-tool/releases/download/$(MANIFEST_TOOL_VERSION)/manifest-tool-$(GOHOSTOS)-$(GOHOSTARCH) > $@ + chmod +x $@ # ==================================================================================== # Targets @@ -108,9 +108,9 @@ ifneq ($(VERSION_VALID),1) $(error invalid version $(VERSION), must be a semantic version with v[Major].[Minor].[Patch] and an optional suffix such as -alpha.0, -beta.1, or -rc.2) endif @echo === tagging commit hash $(COMMIT_HASH) with $(VERSION) and parsed v$(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_PATCH) - @git tag -f -m "release $(VERSION)" $(VERSION) $(COMMIT_HASH) - @git push $(REMOTE_NAME) $(VERSION) - @set -e; if ! git ls-remote --heads $(REMOTE_NAME) | grep -q refs/heads/release-$(VERSION_MAJOR).$(VERSION_MINOR); then \ + git tag -f -m "release $(VERSION)" $(VERSION) $(COMMIT_HASH) + git push $(REMOTE_NAME) $(VERSION) + set -e; if ! git ls-remote --heads $(REMOTE_NAME) | grep -q refs/heads/release-$(VERSION_MAJOR).$(VERSION_MINOR); then \ echo === creating new release branch release-$(VERSION_MAJOR).$(VERSION_MINOR) ;\ git branch -f release-$(VERSION_MAJOR).$(VERSION_MINOR) $(COMMIT_HASH) ;\ git push $(REMOTE_NAME) release-$(VERSION_MAJOR).$(VERSION_MINOR) ;\ @@ -138,20 +138,20 @@ HELM_URL := $(HELM_BASE_URL)/$(CHANNEL) promote.helm: $(HELM) # copy existing charts to a temp dir, then combine with new charts, reindex, and upload - @$(S3_SYNC) s3://$(HELM_S3_BUCKET)/$(CHANNEL) $(HELM_TEMP) - @$(S3_SYNC) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION)/charts $(HELM_TEMP) - @$(HELM) repo index --url $(HELM_URL) $(HELM_TEMP) - @$(S3_SYNC_DEL) $(HELM_TEMP) s3://$(HELM_S3_BUCKET)/$(CHANNEL) - @rm -fr $(HELM_TEMP) + $(S3_SYNC) s3://$(HELM_S3_BUCKET)/$(CHANNEL) $(HELM_TEMP) + $(S3_SYNC) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION)/charts $(HELM_TEMP) + $(HELM) repo index --url $(HELM_URL) $(HELM_TEMP) + $(S3_SYNC_DEL) $(HELM_TEMP) s3://$(HELM_S3_BUCKET)/$(CHANNEL) + rm -fr $(HELM_TEMP) # ==================================================================================== # output publish.output: - @$(S3_SYNC_DEL) $(OUTPUT_DIR) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION) + $(S3_SYNC_DEL) $(OUTPUT_DIR) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION) promote.output: - @$(S3_SYNC_DEL) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION) s3://$(S3_BUCKET)/$(CHANNEL)/$(VERSION) - @$(S3_SYNC_DEL) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION) s3://$(S3_BUCKET)/$(CHANNEL)/current + $(S3_SYNC_DEL) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION) s3://$(S3_BUCKET)/$(CHANNEL)/$(VERSION) + $(S3_SYNC_DEL) s3://$(S3_BUCKET)/build/$(BRANCH_NAME)/$(VERSION) s3://$(S3_BUCKET)/$(CHANNEL)/current # ==================================================================================== # images @@ -159,32 +159,32 @@ promote.output: # 1: registry 2: image, 3: arch define repo.targets build.image.$(1).$(2).$(3): - @docker tag $(BUILD_REGISTRY)/$(2)-$(3) $(1)/$(2)-$(3):$(VERSION) + docker tag $(BUILD_REGISTRY)/$(2)-$(3) $(1)/$(2)-$(3):$(VERSION) @# Save image as _output/images/linux_/.tar.gz (no builds for darwin or windows) - @mkdir -p $(OUTPUT_DIR)/images/linux_$(3) - @docker save $(BUILD_REGISTRY)/$(2)-$(3) | gzip -c > $(OUTPUT_DIR)/images/linux_$(3)/$(2).tar.gz + mkdir -p $(OUTPUT_DIR)/images/linux_$(3) + docker save $(BUILD_REGISTRY)/$(2)-$(3) | gzip -c > $(OUTPUT_DIR)/images/linux_$(3)/$(2).tar.gz build.all.images: build.image.$(1).$(2).$(3) publish.image.$(1).$(2).$(3): ; @docker push $(1)/$(2)-$(3):$(VERSION) publish.all.images: publish.image.$(1).$(2).$(3) # tag the master image, but do not tag the release image with a generic channel tag promote.image.$(1).$(2).$(3): - @docker pull $(1)/$(2)-$(3):$(VERSION) - @docker tag $(1)/$(2)-$(3):$(VERSION) $(1)/$(2)-$(3):$(CHANNEL) - @[ "$(CHANNEL)" = "release" ] || docker push $(1)/$(2)-$(3):$(CHANNEL) + docker pull $(1)/$(2)-$(3):$(VERSION) + docker tag $(1)/$(2)-$(3):$(VERSION) $(1)/$(2)-$(3):$(CHANNEL) + [ "$(CHANNEL)" = "release" ] || docker push $(1)/$(2)-$(3):$(CHANNEL) promote.all.images: promote.image.$(1).$(2).$(3) clean.image.$(1).$(2).$(3): - @[ -z "$$$$(docker images -q $(1)/$(2)-$(3):$(VERSION))" ] || docker rmi $(1)/$(2)-$(3):$(VERSION) - @[ -z "$$$$(docker images -q $(1)/$(2)-$(3):$(CHANNEL))" ] || docker rmi $(1)/$(2)-$(3):$(CHANNEL) + [ -z "$$$$(docker images -q $(1)/$(2)-$(3):$(VERSION))" ] || docker rmi $(1)/$(2)-$(3):$(VERSION) + [ -z "$$$$(docker images -q $(1)/$(2)-$(3):$(CHANNEL))" ] || docker rmi $(1)/$(2)-$(3):$(CHANNEL) clean.all.images: clean.image.$(1).$(2).$(3) endef $(foreach r,$(REGISTRIES), $(foreach i,$(IMAGES), $(foreach a,$(IMAGE_ARCHS),$(eval $(call repo.targets,$(r),$(i),$(a)))))) publish.manifest.image.%: publish.all.images $(MANIFEST_TOOL) - @$(MANIFEST_TOOL) push from-args --platforms $(IMAGE_PLATFORMS) --template $(DOCKER_REGISTRY)/$*-ARCH:$(VERSION) --target $(DOCKER_REGISTRY)/$*:$(VERSION) + $(MANIFEST_TOOL) push from-args --platforms $(IMAGE_PLATFORMS) --template $(DOCKER_REGISTRY)/$*-ARCH:$(VERSION) --target $(DOCKER_REGISTRY)/$*:$(VERSION) # add the "master" tag to the master image, but do not add the "release" tag for the release channel promote.manifest.image.%: promote.all.images $(MANIFEST_TOOL) - @[ "$(CHANNEL)" = "release" ] || $(MANIFEST_TOOL) push from-args --platforms $(IMAGE_PLATFORMS) --template $(DOCKER_REGISTRY)/$*-ARCH:$(VERSION) --target $(DOCKER_REGISTRY)/$*:$(CHANNEL) + [ "$(CHANNEL)" = "release" ] || $(MANIFEST_TOOL) push from-args --platforms $(IMAGE_PLATFORMS) --template $(DOCKER_REGISTRY)/$*-ARCH:$(VERSION) --target $(DOCKER_REGISTRY)/$*:$(CHANNEL) build.images: build.all.images publish.images: $(addprefix publish.manifest.image.,$(IMAGES)) diff --git a/build/run b/build/run index 9eb9b4a91..8c54ac271 100755 --- a/build/run +++ b/build/run @@ -1,4 +1,6 @@ #!/bin/bash -e +set -e +set -x # Copyright 2016 The Rook Authors. All rights reserved. # diff --git a/images/cross/run.sh b/images/cross/run.sh index da0997406..bf8340db1 100755 --- a/images/cross/run.sh +++ b/images/cross/run.sh @@ -1,4 +1,6 @@ #!/bin/bash -e +set -e +set -x # Copyright 2016 The Rook Authors. All rights reserved. # diff --git a/tests/scripts/build-release.sh b/tests/scripts/build-release.sh index e8553e8ce..f611d4008 100755 --- a/tests/scripts/build-release.sh +++ b/tests/scripts/build-release.sh @@ -5,24 +5,26 @@ set -ex # FUNCTIONS # ############# +MAKE='build/run make --debug=v --output-sync' + function build() { - build/run make build.all + $MAKE build.all # quick check that go modules are tidied - build/run make mod.check + $MAKE mod.check } function publish() { build - build/run make -C build/release build BRANCH_NAME=${BRANCH_NAME} TAG_WITH_SUFFIX=${TAG_WITH_SUFFIX} GIT_API_TOKEN=${GIT_API_TOKEN} + $MAKE -C build/release build BRANCH_NAME=${BRANCH_NAME} TAG_WITH_SUFFIX=${TAG_WITH_SUFFIX} GIT_API_TOKEN=${GIT_API_TOKEN} git status & git diff & - build/run make -C build/release publish BRANCH_NAME=${BRANCH_NAME} TAG_WITH_SUFFIX=${TAG_WITH_SUFFIX} AWS_ACCESS_KEY_ID=${AWS_USR} AWS_SECRET_ACCESS_KEY=${AWS_PSW} GIT_API_TOKEN=${GIT_API_TOKEN} + $MAKE -C build/release publish BRANCH_NAME=${BRANCH_NAME} TAG_WITH_SUFFIX=${TAG_WITH_SUFFIX} AWS_ACCESS_KEY_ID=${AWS_USR} AWS_SECRET_ACCESS_KEY=${AWS_PSW} GIT_API_TOKEN=${GIT_API_TOKEN} } function promote() { # automatically promote the master builds echo "Promoting from branch ${BRANCH_NAME}" - build/run make -C build/release promote BRANCH_NAME=${BRANCH_NAME} TAG_WITH_SUFFIX=${TAG_WITH_SUFFIX} CHANNEL=${CHANNEL} AWS_ACCESS_KEY_ID=${AWS_USR} AWS_SECRET_ACCESS_KEY=${AWS_PSW} + $MAKE -C build/release promote BRANCH_NAME=${BRANCH_NAME} TAG_WITH_SUFFIX=${TAG_WITH_SUFFIX} CHANNEL=${CHANNEL} AWS_ACCESS_KEY_ID=${AWS_USR} AWS_SECRET_ACCESS_KEY=${AWS_PSW} } #############