From 693c099b405f13d7996cab991f98c5fd56ee8237 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 29 Oct 2020 16:46:27 -0400 Subject: [PATCH 01/24] .cicd/build.sh: Remove dead Travis CI code --- .cicd/build.sh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.cicd/build.sh b/.cicd/build.sh index 7c727cf8331..230898411e8 100755 --- a/.cicd/build.sh +++ b/.cicd/build.sh @@ -10,14 +10,7 @@ if [[ "$(uname)" == 'Darwin' && $FORCE_LINUX != true ]]; then fi [[ ! "$PINNED" == 'false' ]] && CMAKE_EXTRAS="$CMAKE_EXTRAS -DCMAKE_TOOLCHAIN_FILE=$HELPERS_DIR/clang.make" cd $BUILD_DIR - if [[ $TRAVIS == true ]]; then - ccache -s - brew link --overwrite python - # Support ship_test - export NVM_DIR="$HOME/.nvm" - . "/usr/local/opt/nvm/nvm.sh" - nvm install --lts=dubnium - else + if [[ "$CI" == 'true' ]]; then source ~/.bash_profile # Make sure node is available for ship_test fi echo "cmake $CMAKE_EXTRAS .." From 247ebe3b987bec871fd9895c04e1de0cfb4501b1 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 29 Oct 2020 16:54:23 -0400 Subject: [PATCH 02/24] .cicd/build.sh: Print command before running; de-duplication --- .cicd/build.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.cicd/build.sh b/.cicd/build.sh index 230898411e8..50fec769675 100755 --- a/.cicd/build.sh +++ b/.cicd/build.sh @@ -13,10 +13,12 @@ if [[ "$(uname)" == 'Darwin' && $FORCE_LINUX != true ]]; then if [[ "$CI" == 'true' ]]; then source ~/.bash_profile # Make sure node is available for ship_test fi - echo "cmake $CMAKE_EXTRAS .." - cmake $CMAKE_EXTRAS .. - echo "make -j$JOBS" - make -j$JOBS + CMAKE_COMMAND="cmake $CMAKE_EXTRAS .." + echo "$ $CMAKE_COMMAND" + eval $CMAKE_COMMAND + MAKE_COMMAND="make -j $JOBS" + echo "$ $MAKE_COMMAND" + eval $MAKE_COMMAND else # Linux ARGS=${ARGS:-"--rm --init -v $(pwd):$MOUNTED_DIR"} PRE_COMMANDS="cd $MOUNTED_DIR/build" @@ -50,6 +52,7 @@ else # Linux fi . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile COMMANDS="$PRE_COMMANDS && $COMMANDS" - echo "$ docker run $ARGS $(buildkite-intrinsics) $FULL_TAG bash -c \"$COMMANDS\"" - eval docker run $ARGS $(buildkite-intrinsics) $FULL_TAG bash -c \"$COMMANDS\" + DOCKER_RUN="docker run $ARGS $(buildkite-intrinsics) $FULL_TAG bash -c \"$COMMANDS\"" + echo "$ $DOCKER_RUN" + eval $DOCKER_RUN fi \ No newline at end of file From 4acb2f1704c97cc78c439a97c84e5a3d0e29fce7 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Fri, 30 Oct 2020 12:54:51 -0400 Subject: [PATCH 03/24] generate-base-images.sh: Print docker commands before running them --- .cicd/generate-base-images.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 2c150359c92..e3f330a136e 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -9,9 +9,13 @@ TAG=$(echo $FULL_TAG | cut -d: -f2) EXISTS=$(curl -S -s -H "Authorization: Bearer $(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${ORG_REPO}:pull" | jq --raw-output .token)" "https://registry.hub.docker.com/v2/${ORG_REPO}/manifests/$TAG") # build, if neccessary if [[ $EXISTS =~ '404 page not found' || $EXISTS =~ 'manifest unknown' || $FORCE_BASE_IMAGE == true ]]; then # if we cannot pull the image, we build and push it first - docker build --no-cache -t $FULL_TAG -f $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile . + DOCKER_BUILD_COMMAND="docker build --no-cache -t '$FULL_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." + echo "$ $DOCKER_BUILD_COMMAND" + eval $DOCKER_BUILD_COMMAND if [[ $FORCE_BASE_IMAGE != true ]]; then - docker push $FULL_TAG + DOCKER_PUSH_COMMAND="docker push '$FULL_TAG'" + echo "$ $DOCKER_PUSH_COMMAND" + eval $DOCKER_PUSH_COMMAND else echo "Base image creation successful. Not pushing...". exit 0 From 86dad1635ed83116c56444551d140f6e77e98ca9 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Sat, 31 Oct 2020 19:53:06 -0400 Subject: [PATCH 04/24] Use full docker URI --- .cicd/helpers/file-hash.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cicd/helpers/file-hash.sh b/.cicd/helpers/file-hash.sh index de6d81b10f8..10072baa406 100755 --- a/.cicd/helpers/file-hash.sh +++ b/.cicd/helpers/file-hash.sh @@ -4,4 +4,4 @@ set -eo pipefail FILE_NAME=$(basename $1 | awk '{split($0,a,/\.(d|s)/); print a[1] }') export DETERMINED_HASH=$(sha1sum $1 | awk '{ print $1 }') export HASHED_IMAGE_TAG="eos-${FILE_NAME}-${DETERMINED_HASH}" -export FULL_TAG="${IMAGE_NAME:-"eosio/ci"}:$HASHED_IMAGE_TAG" +export FULL_TAG="${IMAGE_NAME:-"docker.io/eosio/ci"}:$HASHED_IMAGE_TAG" From 6e4476ac518f7a15a1debd8dc985a2bd56070042 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Sat, 31 Oct 2020 20:42:27 -0400 Subject: [PATCH 05/24] Use vendor-neutral manifest query --- .cicd/generate-base-images.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index e3f330a136e..0af9686c1ba 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -4,11 +4,15 @@ set -eo pipefail . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile # look for Docker image echo "+++ :mag_right: Looking for $FULL_TAG" +DOCKER_CLI_EXPERIMENTAL='enabled' ORG_REPO=$(echo $FULL_TAG | cut -d: -f1) TAG=$(echo $FULL_TAG | cut -d: -f2) -EXISTS=$(curl -S -s -H "Authorization: Bearer $(curl -sSL "https://auth.docker.io/token?service=registry.docker.io&scope=repository:${ORG_REPO}:pull" | jq --raw-output .token)" "https://registry.hub.docker.com/v2/${ORG_REPO}/manifests/$TAG") +MANIFEST_COMMAND="docker manifest inspect '$ORG_REPO:$TAG'" +echo "$ $MANIFEST_COMMAND" +eval $MANIFEST_COMMAND +EXISTS="$?" # build, if neccessary -if [[ $EXISTS =~ '404 page not found' || $EXISTS =~ 'manifest unknown' || $FORCE_BASE_IMAGE == true ]]; then # if we cannot pull the image, we build and push it first +if [[ "$EXISTS" != '0' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first DOCKER_BUILD_COMMAND="docker build --no-cache -t '$FULL_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." echo "$ $DOCKER_BUILD_COMMAND" eval $DOCKER_BUILD_COMMAND From 20039c81b91a74ab533c2527a2f5414df6e34128 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Sat, 31 Oct 2020 21:40:53 -0400 Subject: [PATCH 06/24] Use export --- .cicd/generate-base-images.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 0af9686c1ba..d35481af684 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -4,20 +4,20 @@ set -eo pipefail . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile # look for Docker image echo "+++ :mag_right: Looking for $FULL_TAG" -DOCKER_CLI_EXPERIMENTAL='enabled' -ORG_REPO=$(echo $FULL_TAG | cut -d: -f1) -TAG=$(echo $FULL_TAG | cut -d: -f2) -MANIFEST_COMMAND="docker manifest inspect '$ORG_REPO:$TAG'" +export DOCKER_CLI_EXPERIMENTAL='enabled' +export ORG_REPO=$(echo $FULL_TAG | cut -d: -f1) +export TAG=$(echo $FULL_TAG | cut -d: -f2) +export MANIFEST_COMMAND="docker manifest inspect '$ORG_REPO:$TAG'" echo "$ $MANIFEST_COMMAND" eval $MANIFEST_COMMAND EXISTS="$?" # build, if neccessary if [[ "$EXISTS" != '0' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first - DOCKER_BUILD_COMMAND="docker build --no-cache -t '$FULL_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." + export DOCKER_BUILD_COMMAND="docker build --no-cache -t '$FULL_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." echo "$ $DOCKER_BUILD_COMMAND" eval $DOCKER_BUILD_COMMAND if [[ $FORCE_BASE_IMAGE != true ]]; then - DOCKER_PUSH_COMMAND="docker push '$FULL_TAG'" + export DOCKER_PUSH_COMMAND="docker push '$FULL_TAG'" echo "$ $DOCKER_PUSH_COMMAND" eval $DOCKER_PUSH_COMMAND else From 4f6f6c4d625ce18090eb8cb772987470cc6d9193 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Mon, 2 Nov 2020 18:58:43 -0500 Subject: [PATCH 07/24] Excuse the manifest command exit status --- .cicd/generate-base-images.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index d35481af684..29065058e31 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -8,9 +8,11 @@ export DOCKER_CLI_EXPERIMENTAL='enabled' export ORG_REPO=$(echo $FULL_TAG | cut -d: -f1) export TAG=$(echo $FULL_TAG | cut -d: -f2) export MANIFEST_COMMAND="docker manifest inspect '$ORG_REPO:$TAG'" +set +e # manifest query can return a non-zero exit status echo "$ $MANIFEST_COMMAND" eval $MANIFEST_COMMAND EXISTS="$?" +set -eo pipefail # build, if neccessary if [[ "$EXISTS" != '0' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first export DOCKER_BUILD_COMMAND="docker build --no-cache -t '$FULL_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." From cd31a81d0a46d95277e0ff7ede94942597159f5c Mon Sep 17 00:00:00 2001 From: Scott Arnette Date: Wed, 4 Nov 2020 16:30:41 -0500 Subject: [PATCH 08/24] Add support for multiple registries while trying not to break supporting only dockerhub. --- .cicd/generate-base-images.sh | 51 ++++++++++++++++++----------------- .cicd/helpers/file-hash.sh | 2 +- .cicd/helpers/general.sh | 5 ++++ .cicd/installation-build.sh | 20 ++++++++------ 4 files changed, 45 insertions(+), 33 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 29065058e31..c8adda2edb2 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -2,30 +2,33 @@ set -eo pipefail . ./.cicd/helpers/general.sh . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile -# look for Docker image -echo "+++ :mag_right: Looking for $FULL_TAG" -export DOCKER_CLI_EXPERIMENTAL='enabled' -export ORG_REPO=$(echo $FULL_TAG | cut -d: -f1) -export TAG=$(echo $FULL_TAG | cut -d: -f2) -export MANIFEST_COMMAND="docker manifest inspect '$ORG_REPO:$TAG'" -set +e # manifest query can return a non-zero exit status -echo "$ $MANIFEST_COMMAND" -eval $MANIFEST_COMMAND -EXISTS="$?" -set -eo pipefail -# build, if neccessary -if [[ "$EXISTS" != '0' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first - export DOCKER_BUILD_COMMAND="docker build --no-cache -t '$FULL_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." - echo "$ $DOCKER_BUILD_COMMAND" - eval $DOCKER_BUILD_COMMAND - if [[ $FORCE_BASE_IMAGE != true ]]; then - export DOCKER_PUSH_COMMAND="docker push '$FULL_TAG'" - echo "$ $DOCKER_PUSH_COMMAND" - eval $DOCKER_PUSH_COMMAND - else - echo "Base image creation successful. Not pushing...". - exit 0 + +echo "+++ :mag_right: Looking for $HASHED_IMAGE_TAG" +for REGISTRY in "${CI_REGISTRIES[@]}"; do + if [[ ! -z $REGISTRY ]]; then + if [[ ! $(docker manifest inspect "$REGISTRY:$HASHED_IMAGE_TAG") ]]; then + EXISTS='false' fi + fi +done + +# build, if neccessary +if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first + export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'eosio/ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." + echo "$ $DOCKER_BUILD_COMMAND" + eval $DOCKER_BUILD_COMMAND + if [[ $FORCE_BASE_IMAGE != true ]]; then + for REGISTRY in "${CI_REGISTRIES[@]}"; do + if [[ ! -z $REGISTRY ]]; then + docker tag eosio/ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG + docker push $REGISTRY:$HASHED_IMAGE_TAG + docker rmi $REGISTRY:$HASHED_IMAGE_TAG + fi + done + else + echo "Base image creation successful. Not pushing...". + exit 0 + fi else - echo "$FULL_TAG already exists." + echo "$FULL_TAG already exists." fi \ No newline at end of file diff --git a/.cicd/helpers/file-hash.sh b/.cicd/helpers/file-hash.sh index 10072baa406..a11f2ef1849 100755 --- a/.cicd/helpers/file-hash.sh +++ b/.cicd/helpers/file-hash.sh @@ -4,4 +4,4 @@ set -eo pipefail FILE_NAME=$(basename $1 | awk '{split($0,a,/\.(d|s)/); print a[1] }') export DETERMINED_HASH=$(sha1sum $1 | awk '{ print $1 }') export HASHED_IMAGE_TAG="eos-${FILE_NAME}-${DETERMINED_HASH}" -export FULL_TAG="${IMAGE_NAME:-"docker.io/eosio/ci"}:$HASHED_IMAGE_TAG" +export FULL_TAG="${MIRROR_REGISTRY:-$DOCKERHUB_CI_REGISTRY}:$HASHED_IMAGE_TAG" diff --git a/.cicd/helpers/general.sh b/.cicd/helpers/general.sh index f971bb73622..97f3c54f6d3 100644 --- a/.cicd/helpers/general.sh +++ b/.cicd/helpers/general.sh @@ -4,6 +4,11 @@ export CICD_DIR=$ROOT_DIR/.cicd export HELPERS_DIR=$CICD_DIR/helpers export JOBS=${JOBS:-"$(getconf _NPROCESSORS_ONLN)"} export MOUNTED_DIR='/workdir' +export DOCKER_CLI_EXPERIMENTAL='enabled' +export DOCKERHUB_CI_REGISTRY="docker.io/eosio/ci" +export DOCKERHUB_CONTRACTS_REGISTRY="docker.io/eosio/ci-contracts-builder" +export CI_REGISTRIES=("$DOCKERHUB_CI_REGISTRY" "$MIRROR_REGISTRY") +export CONTRACT_REGISTRIES=("$DOCKERHUB_CONTRACTS_REGISTRY" "$MIRROR_REGISTRY") # capitalize each word in a string function capitalize() diff --git a/.cicd/installation-build.sh b/.cicd/installation-build.sh index 23febe79fce..77a59252c86 100755 --- a/.cicd/installation-build.sh +++ b/.cicd/installation-build.sh @@ -6,11 +6,15 @@ export BRANCH=$(echo $BUILDKITE_BRANCH | sed 's.^/..' | sed 's/[:/]/_/g') export CONTRACTS_BUILDER_TAG="eosio/ci-contracts-builder:base-ubuntu-18.04" export ARGS="--name ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER --init -v $(pwd):$MOUNTED_DIR" $CICD_DIR/build.sh -docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $CONTRACTS_BUILDER_TAG-$BUILDKITE_COMMIT -docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $CONTRACTS_BUILDER_TAG-$BUILDKITE_COMMIT-$PLATFORM_TYPE -docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $CONTRACTS_BUILDER_TAG-$BRANCH-$BUILDKITE_COMMIT -docker push $CONTRACTS_BUILDER_TAG-$BUILDKITE_COMMIT -docker push $CONTRACTS_BUILDER_TAG-$BUILDKITE_COMMIT-$PLATFORM_TYPE -docker push $CONTRACTS_BUILDER_TAG-$BRANCH-$BUILDKITE_COMMIT -docker stop ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER -docker rm ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER \ No newline at end of file +for REGISTRY in "${CONTRACT_REGISTRIES[@]}"; do + if [[ ! -z $REGISTRY ]]; then + docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT + docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE + docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $REGISTRY-base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT + docker push $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT + docker push $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE + docker push $REGISTRY-base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT + docker stop ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER + docker rm ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER + fi +done \ No newline at end of file From c816097b653baea7dc34586551e0fd8fbcb15642 Mon Sep 17 00:00:00 2001 From: Scott Arnette Date: Wed, 4 Nov 2020 16:56:42 -0500 Subject: [PATCH 09/24] Log commands to be executed for debugging. Make installation-build script smarter. --- .cicd/generate-base-images.sh | 12 +++++++++--- .cicd/installation-build.sh | 21 ++++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index c8adda2edb2..92a20478cf2 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -20,9 +20,15 @@ if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we can if [[ $FORCE_BASE_IMAGE != true ]]; then for REGISTRY in "${CI_REGISTRIES[@]}"; do if [[ ! -z $REGISTRY ]]; then - docker tag eosio/ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG - docker push $REGISTRY:$HASHED_IMAGE_TAG - docker rmi $REGISTRY:$HASHED_IMAGE_TAG + DOCKER_TAG_COMMAND="docker tag eosio/ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG" + DOCKER_PUSH_COMMAND="docker push $REGISTRY:$HASHED_IMAGE_TAG" + DOCKER_RMI_COMMAND="docker rmi $REGISTRY:$HASHED_IMAGE_TAG" + echo "$ $DOCKER_TAG_COMMAND" + echo "$ $DOCKER_PUSH_COMMAND" + echo "$ $DOCKER_RMI_COMMAND" + eval $DOCKER_TAG_COMMAND + eval $DOCKER_PUSH_COMMAND + eval $DOCKER_RMI_COMMAND fi done else diff --git a/.cicd/installation-build.sh b/.cicd/installation-build.sh index 77a59252c86..03199ae8715 100755 --- a/.cicd/installation-build.sh +++ b/.cicd/installation-build.sh @@ -8,13 +8,16 @@ export ARGS="--name ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUI $CICD_DIR/build.sh for REGISTRY in "${CONTRACT_REGISTRIES[@]}"; do if [[ ! -z $REGISTRY ]]; then - docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT - docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE - docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $REGISTRY-base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT - docker push $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT - docker push $REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE - docker push $REGISTRY-base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT - docker stop ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER - docker rm ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER + COMMITS=("$REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT" "$REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE" "$REGISTRY-base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT") + for COMMIT in "${COMMITS[@]}"; do + COMMIT_COMMAND="docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $COMMIT" + echo "$ $COMMIT_COMMAND" + eval $COMMIT_COMMAND + PUSH_COMMAND="docker push $COMMIT" + echo "$ $PUSH_COMMAND" + eval $PUSH_COMMAND + done fi -done \ No newline at end of file +done +docker stop ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER +docker rm ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER \ No newline at end of file From 8a170092f231c9e63c924db12854bc1dc5b6d57f Mon Sep 17 00:00:00 2001 From: Scott Arnette Date: Wed, 4 Nov 2020 17:04:18 -0500 Subject: [PATCH 10/24] Fix contract builder commits. --- .cicd/installation-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cicd/installation-build.sh b/.cicd/installation-build.sh index 03199ae8715..be409e07099 100755 --- a/.cicd/installation-build.sh +++ b/.cicd/installation-build.sh @@ -8,7 +8,7 @@ export ARGS="--name ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUI $CICD_DIR/build.sh for REGISTRY in "${CONTRACT_REGISTRIES[@]}"; do if [[ ! -z $REGISTRY ]]; then - COMMITS=("$REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT" "$REGISTRY-base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE" "$REGISTRY-base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT") + COMMITS=("$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT" "$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE" "$REGISTRY:base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT") for COMMIT in "${COMMITS[@]}"; do COMMIT_COMMAND="docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $COMMIT" echo "$ $COMMIT_COMMAND" From 6cfb902dc1418e3ba5ddc13923a94b0ba3f5abd6 Mon Sep 17 00:00:00 2001 From: Scott Arnette Date: Wed, 4 Nov 2020 17:29:22 -0500 Subject: [PATCH 11/24] Start with a tag different than what gets pushed. --- .cicd/generate-base-images.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 92a20478cf2..19d3045056c 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -14,13 +14,13 @@ done # build, if neccessary if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first - export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'eosio/ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." + export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." echo "$ $DOCKER_BUILD_COMMAND" eval $DOCKER_BUILD_COMMAND if [[ $FORCE_BASE_IMAGE != true ]]; then for REGISTRY in "${CI_REGISTRIES[@]}"; do if [[ ! -z $REGISTRY ]]; then - DOCKER_TAG_COMMAND="docker tag eosio/ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG" + DOCKER_TAG_COMMAND="docker tag ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG" DOCKER_PUSH_COMMAND="docker push $REGISTRY:$HASHED_IMAGE_TAG" DOCKER_RMI_COMMAND="docker rmi $REGISTRY:$HASHED_IMAGE_TAG" echo "$ $DOCKER_TAG_COMMAND" @@ -31,6 +31,9 @@ if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we can eval $DOCKER_RMI_COMMAND fi done + DOCKER_RMI_COMMAND="docker rmi ci:$HASHED_IMAGE_TAG" + echo "$ $DOCKER_RMI_COMMAND" + eval $DOCKER_RMI_COMMAND else echo "Base image creation successful. Not pushing...". exit 0 From d6dced50e39d318cdd2ba281d6baf7867f0019d1 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Wed, 4 Nov 2020 18:10:56 -0500 Subject: [PATCH 12/24] Add support to docker-tag.sh for multiple docker registries --- .cicd/docker-tag.sh | 82 ++++++++++++++++++++++++++++++++++++--------- 1 file changed, 67 insertions(+), 15 deletions(-) diff --git a/.cicd/docker-tag.sh b/.cicd/docker-tag.sh index 6a61ec9350c..f85c284f4e5 100755 --- a/.cicd/docker-tag.sh +++ b/.cicd/docker-tag.sh @@ -1,22 +1,74 @@ #!/bin/bash set -eo pipefail echo '+++ :evergreen_tree: Configuring Environment' -REPO='eosio/ci-contracts-builder' PREFIX='base-ubuntu-18.04' -IMAGE="$REPO:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" SANITIZED_BRANCH=$(echo "$BUILDKITE_BRANCH" | sed 's.^/..' | sed 's/[:/]/_/g') SANITIZED_TAG=$(echo "$BUILDKITE_TAG" | sed 's.^/..' | tr '/' '_') -echo '+++ :arrow_down: Pulling Container' -echo "Pulling \"$IMAGE\"" -docker pull "$IMAGE" -echo '+++ :label: Tagging Container' -docker tag "$IMAGE" "$REPO:$PREFIX-$SANITIZED_BRANCH" -echo "Tagged \"$REPO:$PREFIX-$SANITIZED_BRANCH\"." -[[ -z "$BUILDKITE_TAG" ]] || docker tag "$IMAGE" "$REPO:$PREFIX-$SANITIZED_TAG" && echo "Tagged \"$REPO:$PREFIX-$SANITIZED_TAG\"." -echo '+++ :arrow_up: Pushing Container' -docker push "$REPO:$PREFIX-$SANITIZED_BRANCH" -[[ -z "$BUILDKITE_TAG" ]] || docker push "$REPO:$PREFIX-$SANITIZED_TAG" +echo '$ echo ${#CI_REGISTRIES[*]} # array length' +echo ${#CI_REGISTRIES[*]} +echo '$ echo ${CI_REGISTRIES[*]} # array' +echo ${CI_REGISTRIES[*]} +echo '$ echo ${#CONTRACT_REGISTRIES[*]} # array length' +echo ${#CONTRACT_REGISTRIES[*]} +echo '$ echo ${CONTRACT_REGISTRIES[*]} # array' +echo ${CONTRACT_REGISTRIES[*]} +# pull +echo '+++ :arrow_down: Pulling Container(s)' +for REGISTRY in "${CI_REGISTRIES[*]}"; do + if [[ ! -z "$REGISTRY" ]]; then + echo "Pulling from '$REGISTRY'." + IMAGE="$REGISTRY:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" + DOCKER_PULL_COMMAND="docker pull '$IMAGE'" + echo "$ $DOCKER_PULL_COMMAND" + eval $DOCKER_PULL_COMMAND + fi +done +# tag +echo '+++ :label: Tagging Container(s)' +for INDEX in "${!CI_REGISTRIES[*]}"; do + if [[ ! -z "${CI_REGISTRIES[$INDEX]}" ]]; then + echo "Tagging for index $INDEX." + IMAGE="${CI_REGISTRIES[$INDEX]}:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" + DOCKER_TAG_COMMAND="docker tag '$IMAGE' '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_BRANCH'" + echo "$ $DOCKER_TAG_COMMAND" + eval $DOCKER_TAG_COMMAND + if [[ ! -z "$BUILDKITE_TAG" && "$SANITIZED_BRANCH" != "$SANITIZED_TAG" ]]; then + DOCKER_TAG_COMMAND="docker tag '$IMAGE' '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_TAG'" + echo "$ $DOCKER_TAG_COMMAND" + eval $DOCKER_TAG_COMMAND + fi + fi +done +# push +echo '+++ :arrow_up: Pushing Container(s)' +for REGISTRY in "${CONTRACT_REGISTRIES[*]}"; do + if [[ ! -z "$REGISTRY" ]]; then + echo "Pushing to '$REGISTRY'." + DOCKER_PUSH_COMMAND="docker push '$REGISTRY:$PREFIX-$SANITIZED_BRANCH'" + echo "$ $DOCKER_PUSH_COMMAND" + eval $DOCKER_PUSH_COMMAND + if [[ ! -z "$BUILDKITE_TAG" && "$SANITIZED_BRANCH" != "$SANITIZED_TAG" ]]; then + DOCKER_PUSH_COMMAND="docker push '$REGISTRY:$PREFIX-$SANITIZED_TAG'" + echo "$ $DOCKER_PUSH_COMMAND" + eval $DOCKER_PUSH_COMMAND + fi + fi +done +# cleanup echo '+++ :put_litter_in_its_place: Cleaning Up' -docker rmi "$REPO:$PREFIX-$SANITIZED_BRANCH" -[[ -z "$BUILDKITE_TAG" || "$SANITIZED_BRANCH" == "$SANITIZED_TAG" ]] || docker rmi "$REPO:$PREFIX-$SANITIZED_TAG" -docker rmi "$IMAGE" \ No newline at end of file +for INDEX in "${!CI_REGISTRIES[*]}"; do + if [[ ! -z "${CI_REGISTRIES[$INDEX]}" ]]; then + echo "Cleaning up from index $INDEX." + DOCKER_RMI_COMMAND="docker rmi '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_BRANCH'" + echo "$ $DOCKER_RMI_COMMAND" + eval $DOCKER_RMI_COMMAND + if [[ ! -z "$BUILDKITE_TAG" && "$SANITIZED_BRANCH" != "$SANITIZED_TAG" ]]; then + DOCKER_RMI_COMMAND="docker rmi '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_TAG'" + echo "$ $DOCKER_RMI_COMMAND" + eval $DOCKER_RMI_COMMAND + fi + DOCKER_RMI_COMMAND="docker rmi '${CI_REGISTRIES[$INDEX]}:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE'" + echo "$ $DOCKER_RMI_COMMAND" + eval $DOCKER_RMI_COMMAND + fi +done From 8d78aa6d4a6d5f778fc13eb248c2693422eb6f70 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 19:25:13 -0500 Subject: [PATCH 13/24] Source general.sh -_- --- .cicd/docker-tag.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/.cicd/docker-tag.sh b/.cicd/docker-tag.sh index f85c284f4e5..f83107537ec 100755 --- a/.cicd/docker-tag.sh +++ b/.cicd/docker-tag.sh @@ -1,6 +1,7 @@ #!/bin/bash set -eo pipefail echo '+++ :evergreen_tree: Configuring Environment' +. ./.cicd/helpers/general.sh PREFIX='base-ubuntu-18.04' SANITIZED_BRANCH=$(echo "$BUILDKITE_BRANCH" | sed 's.^/..' | sed 's/[:/]/_/g') SANITIZED_TAG=$(echo "$BUILDKITE_TAG" | sed 's.^/..' | tr '/' '_') From d476c9985e5061cbd1e3943a860dc2d703d29961 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 19:56:07 -0500 Subject: [PATCH 14/24] Spacing (conform to repo/POSIX standards) --- .cicd/build.sh | 2 +- .cicd/generate-base-images.sh | 58 +++++++++++++++++------------------ .cicd/helpers/general.sh | 2 +- .cicd/installation-build.sh | 24 +++++++-------- .cicd/multiversion.sh | 2 +- .cicd/package.sh | 2 +- .cicd/test.sh | 2 +- 7 files changed, 46 insertions(+), 46 deletions(-) diff --git a/.cicd/build.sh b/.cicd/build.sh index 50fec769675..104c009e3be 100755 --- a/.cicd/build.sh +++ b/.cicd/build.sh @@ -55,4 +55,4 @@ else # Linux DOCKER_RUN="docker run $ARGS $(buildkite-intrinsics) $FULL_TAG bash -c \"$COMMANDS\"" echo "$ $DOCKER_RUN" eval $DOCKER_RUN -fi \ No newline at end of file +fi diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 19d3045056c..17819b35232 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -4,40 +4,40 @@ set -eo pipefail . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile echo "+++ :mag_right: Looking for $HASHED_IMAGE_TAG" -for REGISTRY in "${CI_REGISTRIES[@]}"; do - if [[ ! -z $REGISTRY ]]; then - if [[ ! $(docker manifest inspect "$REGISTRY:$HASHED_IMAGE_TAG") ]]; then - EXISTS='false' +for REGISTRY in "${CI_REGISTRIES[*]}"; do + if [[ ! -z "$REGISTRY" ]]; then + if [[ ! $(docker manifest inspect "$REGISTRY:$HASHED_IMAGE_TAG") ]]; then + EXISTS='false' + fi fi - fi done # build, if neccessary if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first - export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." - echo "$ $DOCKER_BUILD_COMMAND" - eval $DOCKER_BUILD_COMMAND - if [[ $FORCE_BASE_IMAGE != true ]]; then - for REGISTRY in "${CI_REGISTRIES[@]}"; do - if [[ ! -z $REGISTRY ]]; then - DOCKER_TAG_COMMAND="docker tag ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG" - DOCKER_PUSH_COMMAND="docker push $REGISTRY:$HASHED_IMAGE_TAG" - DOCKER_RMI_COMMAND="docker rmi $REGISTRY:$HASHED_IMAGE_TAG" - echo "$ $DOCKER_TAG_COMMAND" - echo "$ $DOCKER_PUSH_COMMAND" + export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." + echo "$ $DOCKER_BUILD_COMMAND" + eval $DOCKER_BUILD_COMMAND + if [[ "$FORCE_BASE_IMAGE" != 'true' ]]; then + for REGISTRY in "${CI_REGISTRIES[*]}"; do + if [[ ! -z "$REGISTRY" ]]; then + DOCKER_TAG_COMMAND="docker tag ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG" + DOCKER_PUSH_COMMAND="docker push $REGISTRY:$HASHED_IMAGE_TAG" + DOCKER_RMI_COMMAND="docker rmi $REGISTRY:$HASHED_IMAGE_TAG" + echo "$ $DOCKER_TAG_COMMAND" + echo "$ $DOCKER_PUSH_COMMAND" + echo "$ $DOCKER_RMI_COMMAND" + eval $DOCKER_TAG_COMMAND + eval $DOCKER_PUSH_COMMAND + eval $DOCKER_RMI_COMMAND + fi + done + DOCKER_RMI_COMMAND="docker rmi ci:$HASHED_IMAGE_TAG" echo "$ $DOCKER_RMI_COMMAND" - eval $DOCKER_TAG_COMMAND - eval $DOCKER_PUSH_COMMAND eval $DOCKER_RMI_COMMAND - fi - done - DOCKER_RMI_COMMAND="docker rmi ci:$HASHED_IMAGE_TAG" - echo "$ $DOCKER_RMI_COMMAND" - eval $DOCKER_RMI_COMMAND - else - echo "Base image creation successful. Not pushing...". - exit 0 - fi + else + echo "Base image creation successful. Not pushing...". + exit 0 + fi else - echo "$FULL_TAG already exists." -fi \ No newline at end of file + echo "$FULL_TAG already exists." +fi diff --git a/.cicd/helpers/general.sh b/.cicd/helpers/general.sh index 97f3c54f6d3..1fb327fc3e6 100644 --- a/.cicd/helpers/general.sh +++ b/.cicd/helpers/general.sh @@ -30,4 +30,4 @@ function buildkite-intrinsics() done < "$BUILDKITE_ENV_FILE" fi echo "$BK_ENV" -} \ No newline at end of file +} diff --git a/.cicd/installation-build.sh b/.cicd/installation-build.sh index be409e07099..23ea810e979 100755 --- a/.cicd/installation-build.sh +++ b/.cicd/installation-build.sh @@ -7,17 +7,17 @@ export CONTRACTS_BUILDER_TAG="eosio/ci-contracts-builder:base-ubuntu-18.04" export ARGS="--name ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER --init -v $(pwd):$MOUNTED_DIR" $CICD_DIR/build.sh for REGISTRY in "${CONTRACT_REGISTRIES[@]}"; do - if [[ ! -z $REGISTRY ]]; then - COMMITS=("$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT" "$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE" "$REGISTRY:base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT") - for COMMIT in "${COMMITS[@]}"; do - COMMIT_COMMAND="docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $COMMIT" - echo "$ $COMMIT_COMMAND" - eval $COMMIT_COMMAND - PUSH_COMMAND="docker push $COMMIT" - echo "$ $PUSH_COMMAND" - eval $PUSH_COMMAND - done - fi + if [[ ! -z $REGISTRY ]]; then + COMMITS=("$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT" "$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE" "$REGISTRY:base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT") + for COMMIT in "${COMMITS[@]}"; do + COMMIT_COMMAND="docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $COMMIT" + echo "$ $COMMIT_COMMAND" + eval $COMMIT_COMMAND + PUSH_COMMAND="docker push $COMMIT" + echo "$ $PUSH_COMMAND" + eval $PUSH_COMMAND + done + fi done docker stop ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER -docker rm ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER \ No newline at end of file +docker rm ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER diff --git a/.cicd/multiversion.sh b/.cicd/multiversion.sh index 87891168dc2..5142fcc3cba 100755 --- a/.cicd/multiversion.sh +++ b/.cicd/multiversion.sh @@ -58,4 +58,4 @@ echo "$ ctest -L mixed_version_tests --output-on-failure -T Test" ctest -L mixed_version_tests --output-on-failure -T Test EXIT_STATUS=$? echo 'Done running multiversion test.' -exit $EXIT_STATUS \ No newline at end of file +exit $EXIT_STATUS diff --git a/.cicd/package.sh b/.cicd/package.sh index 9e4afd2f9c3..8160d463cc6 100755 --- a/.cicd/package.sh +++ b/.cicd/package.sh @@ -47,4 +47,4 @@ else # Linux exit 1 fi done -fi \ No newline at end of file +fi diff --git a/.cicd/test.sh b/.cicd/test.sh index 117b58ae285..30d1c035af9 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -45,4 +45,4 @@ fi if [[ "$EXIT_STATUS" != 0 ]]; then echo "Failing due to non-zero exit status from ctest: $EXIT_STATUS" exit $EXIT_STATUS -fi \ No newline at end of file +fi From 0fe0f077e5974322f7826e8d9257a03ee395a77e Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 20:12:50 -0500 Subject: [PATCH 15/24] Safer strings: support paths with spaces and reduce the chance of BASH code injection --- .cicd/build.sh | 20 ++++++++++---------- .cicd/generate-base-images.sh | 2 +- .cicd/generate-pipeline.sh | 6 +++--- .cicd/helpers/file-hash.sh | 6 +++--- .cicd/helpers/general.sh | 14 +++++++------- .cicd/installation-build.sh | 6 +++--- .cicd/multiversion.sh | 16 ++++++++-------- .cicd/package.sh | 18 +++++++++--------- .cicd/test.sh | 8 ++++---- 9 files changed, 48 insertions(+), 48 deletions(-) diff --git a/.cicd/build.sh b/.cicd/build.sh index 104c009e3be..2d3c05b968d 100755 --- a/.cicd/build.sh +++ b/.cicd/build.sh @@ -1,30 +1,30 @@ #!/bin/bash set -eo pipefail . ./.cicd/helpers/general.sh -mkdir -p $BUILD_DIR +mkdir -p "$BUILD_DIR" CMAKE_EXTRAS="-DCMAKE_BUILD_TYPE='Release' -DENABLE_MULTIVERSION_PROTOCOL_TEST=true" -if [[ "$(uname)" == 'Darwin' && $FORCE_LINUX != true ]]; then +if [[ "$(uname)" == 'Darwin' && "$FORCE_LINUX" != 'true' ]]; then # You can't use chained commands in execute if [[ "$GITHUB_ACTIONS" == 'true' ]]; then export PINNED=false fi [[ ! "$PINNED" == 'false' ]] && CMAKE_EXTRAS="$CMAKE_EXTRAS -DCMAKE_TOOLCHAIN_FILE=$HELPERS_DIR/clang.make" - cd $BUILD_DIR + cd "$BUILD_DIR" if [[ "$CI" == 'true' ]]; then source ~/.bash_profile # Make sure node is available for ship_test fi CMAKE_COMMAND="cmake $CMAKE_EXTRAS .." echo "$ $CMAKE_COMMAND" eval $CMAKE_COMMAND - MAKE_COMMAND="make -j $JOBS" + MAKE_COMMAND="make -j '$JOBS'" echo "$ $MAKE_COMMAND" eval $MAKE_COMMAND else # Linux ARGS=${ARGS:-"--rm --init -v $(pwd):$MOUNTED_DIR"} - PRE_COMMANDS="cd $MOUNTED_DIR/build" + PRE_COMMANDS="cd '$MOUNTED_DIR/build'" # PRE_COMMANDS: Executed pre-cmake # CMAKE_EXTRAS: Executed within and right before the cmake path (cmake CMAKE_EXTRAS ..) - [[ ! "$IMAGE_TAG" =~ 'unpinned' ]] && CMAKE_EXTRAS="$CMAKE_EXTRAS -DCMAKE_TOOLCHAIN_FILE=$MOUNTED_DIR/.cicd/helpers/clang.make" + [[ ! "$IMAGE_TAG" =~ 'unpinned' ]] && CMAKE_EXTRAS="$CMAKE_EXTRAS -DCMAKE_TOOLCHAIN_FILE='$MOUNTED_DIR/.cicd/helpers/clang.make'" if [[ "$IMAGE_TAG" == 'amazon_linux-2-unpinned' ]]; then CMAKE_EXTRAS="$CMAKE_EXTRAS -DCMAKE_CXX_COMPILER='clang++' -DCMAKE_C_COMPILER='clang'" elif [[ "$IMAGE_TAG" == 'centos-7.7-unpinned' ]]; then @@ -36,11 +36,11 @@ else # Linux if [[ "$IMAGE_TAG" == centos-7.* ]]; then PRE_COMMANDS="$PRE_COMMANDS && source /opt/rh/rh-python36/enable" fi - BUILD_COMMANDS="cmake $CMAKE_EXTRAS .. && make -j$JOBS" + BUILD_COMMANDS="cmake $CMAKE_EXTRAS .. && make -j '$JOBS'" # Docker Commands if [[ "$BUILDKITE" == 'true' ]]; then # Generate Base Images - $CICD_DIR/generate-base-images.sh + "$CICD_DIR/generate-base-images.sh" [[ "$ENABLE_INSTALL" == 'true' ]] && COMMANDS="cp -r $MOUNTED_DIR /root/eosio && cd /root/eosio/build &&" COMMANDS="$COMMANDS $BUILD_COMMANDS" [[ "$ENABLE_INSTALL" == 'true' ]] && COMMANDS="$COMMANDS && make install" @@ -50,9 +50,9 @@ else # Linux else COMMANDS="$BUILD_COMMANDS" fi - . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile + . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" COMMANDS="$PRE_COMMANDS && $COMMANDS" - DOCKER_RUN="docker run $ARGS $(buildkite-intrinsics) $FULL_TAG bash -c \"$COMMANDS\"" + DOCKER_RUN="docker run $ARGS $(buildkite-intrinsics) '$FULL_TAG' bash -c \"$COMMANDS\"" echo "$ $DOCKER_RUN" eval $DOCKER_RUN fi diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 17819b35232..64b2b0d2732 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -1,7 +1,7 @@ #!/bin/bash set -eo pipefail . ./.cicd/helpers/general.sh -. $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile +. "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" echo "+++ :mag_right: Looking for $HASHED_IMAGE_TAG" for REGISTRY in "${CI_REGISTRIES[*]}"; do diff --git a/.cicd/generate-pipeline.sh b/.cicd/generate-pipeline.sh index b9432095702..794f78cb78e 100755 --- a/.cicd/generate-pipeline.sh +++ b/.cicd/generate-pipeline.sh @@ -18,7 +18,7 @@ if [[ $PINNED == false ]]; then else export PLATFORM_TYPE="pinned" fi -for FILE in $(ls $CICD_DIR/platforms/$PLATFORM_TYPE); do +for FILE in $(ls "$CICD_DIR/platforms/$PLATFORM_TYPE"); do # skip mac or linux by not even creating the json block ( [[ $SKIP_MAC == true ]] && [[ $FILE =~ 'macos' ]] ) && continue ( [[ $SKIP_LINUX == true ]] && [[ ! $FILE =~ 'macos' ]] ) && continue @@ -27,7 +27,7 @@ for FILE in $(ls $CICD_DIR/platforms/$PLATFORM_TYPE); do export SKIP_CONTRACT_BUILDER=${SKIP_CONTRACT_BUILDER:-true} export SKIP_PACKAGE_BUILDER=${SKIP_PACKAGE_BUILDER:-true} fi - export FILE_NAME="$(echo $FILE | awk '{split($0,a,/\.(d|s)/); print a[1] }')" + export FILE_NAME="$(echo "$FILE" | awk '{split($0,a,/\.(d|s)/); print a[1] }')" # macos-10.14 # ubuntu-16.04 # skip Mojave if it's anything but the post-merge build @@ -59,7 +59,7 @@ for FILE in $(ls $CICD_DIR/platforms/$PLATFORM_TYPE); do [[ $FILE_NAME =~ 'ubuntu' ]] && export ICON=':ubuntu:' [[ $FILE_NAME =~ 'centos' ]] && export ICON=':centos:' [[ $FILE_NAME =~ 'macos' ]] && export ICON=':darwin:' - . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$FILE # returns HASHED_IMAGE_TAG, etc + . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$FILE" # returns HASHED_IMAGE_TAG, etc # Anka Template and Tags export ANKA_TAG_BASE='clean::cicd::git-ssh::nas::brew::buildkite-agent' if [[ $FILE_NAME =~ 'macos-10.14' ]]; then diff --git a/.cicd/helpers/file-hash.sh b/.cicd/helpers/file-hash.sh index a11f2ef1849..4768e86aa12 100755 --- a/.cicd/helpers/file-hash.sh +++ b/.cicd/helpers/file-hash.sh @@ -1,7 +1,7 @@ #!/bin/bash set -eo pipefail -[[ -z $1 ]] && echo "Please provide the file to be hashed" && exit 1 -FILE_NAME=$(basename $1 | awk '{split($0,a,/\.(d|s)/); print a[1] }') -export DETERMINED_HASH=$(sha1sum $1 | awk '{ print $1 }') +[[ -z "$1" ]] && echo 'Please provide the file to be hashed as first argument.' && exit 1 +FILE_NAME="$(basename "$1" | awk '{split($0,a,/\.(d|s)/); print a[1] }')" +export DETERMINED_HASH=$(sha1sum "$1" | awk '{ print $1 }') export HASHED_IMAGE_TAG="eos-${FILE_NAME}-${DETERMINED_HASH}" export FULL_TAG="${MIRROR_REGISTRY:-$DOCKERHUB_CI_REGISTRY}:$HASHED_IMAGE_TAG" diff --git a/.cicd/helpers/general.sh b/.cicd/helpers/general.sh index 1fb327fc3e6..22819d02ea3 100644 --- a/.cicd/helpers/general.sh +++ b/.cicd/helpers/general.sh @@ -1,7 +1,7 @@ export ROOT_DIR=$( dirname "${BASH_SOURCE[0]}" )/../.. -export BUILD_DIR=$ROOT_DIR/build -export CICD_DIR=$ROOT_DIR/.cicd -export HELPERS_DIR=$CICD_DIR/helpers +export BUILD_DIR="$ROOT_DIR/build" +export CICD_DIR="$ROOT_DIR/.cicd" +export HELPERS_DIR="$CICD_DIR/helpers" export JOBS=${JOBS:-"$(getconf _NPROCESSORS_ONLN)"} export MOUNTED_DIR='/workdir' export DOCKER_CLI_EXPERIMENTAL='enabled' @@ -13,10 +13,10 @@ export CONTRACT_REGISTRIES=("$DOCKERHUB_CONTRACTS_REGISTRY" "$MIRROR_REGISTRY") # capitalize each word in a string function capitalize() { - if [[ ! $1 =~ 'mac' ]]; then # Don't capitalize mac - echo $1 | awk '{$1=toupper(substr($1,1,1))substr($1,2)}1' + if [[ ! "$1" =~ 'mac' ]]; then # Don't capitalize mac + echo "$1" | awk '{$1=toupper(substr($1,1,1))substr($1,2)}1' else - echo $1 + echo "$1" fi } @@ -24,7 +24,7 @@ function capitalize() function buildkite-intrinsics() { BK_ENV='' - if [[ -f $BUILDKITE_ENV_FILE ]]; then + if [[ -f "$BUILDKITE_ENV_FILE" ]]; then while read -r var; do BK_ENV="$BK_ENV --env ${var%%=*}" done < "$BUILDKITE_ENV_FILE" diff --git a/.cicd/installation-build.sh b/.cicd/installation-build.sh index 23ea810e979..5b812ff153e 100755 --- a/.cicd/installation-build.sh +++ b/.cicd/installation-build.sh @@ -5,15 +5,15 @@ export ENABLE_INSTALL=true export BRANCH=$(echo $BUILDKITE_BRANCH | sed 's.^/..' | sed 's/[:/]/_/g') export CONTRACTS_BUILDER_TAG="eosio/ci-contracts-builder:base-ubuntu-18.04" export ARGS="--name ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER --init -v $(pwd):$MOUNTED_DIR" -$CICD_DIR/build.sh +"$CICD_DIR/build.sh" for REGISTRY in "${CONTRACT_REGISTRIES[@]}"; do if [[ ! -z $REGISTRY ]]; then COMMITS=("$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT" "$REGISTRY:base-ubuntu-18.04-$BUILDKITE_COMMIT-$PLATFORM_TYPE" "$REGISTRY:base-ubuntu-18.04-$BRANCH-$BUILDKITE_COMMIT") for COMMIT in "${COMMITS[@]}"; do - COMMIT_COMMAND="docker commit ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER $COMMIT" + COMMIT_COMMAND="docker commit 'ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER' '$COMMIT'" echo "$ $COMMIT_COMMAND" eval $COMMIT_COMMAND - PUSH_COMMAND="docker push $COMMIT" + PUSH_COMMAND="docker push '$COMMIT'" echo "$ $PUSH_COMMAND" eval $PUSH_COMMAND done diff --git a/.cicd/multiversion.sh b/.cicd/multiversion.sh index 5142fcc3cba..5c1e9842138 100755 --- a/.cicd/multiversion.sh +++ b/.cicd/multiversion.sh @@ -2,11 +2,11 @@ set -eo pipefail # exit on failure of any "simple" command (excludes &&, ||, or | chains) # variables GIT_ROOT="$(dirname $BASH_SOURCE[0])/.." -cd $GIT_ROOT +cd "$GIT_ROOT" echo "+++ $([[ "$BUILDKITE" == 'true' ]] && echo ':evergreen_tree: ')Configuring Environment" [[ "$PIPELINE_CONFIG" == '' ]] && export PIPELINE_CONFIG='pipeline.json' [[ "$RAW_PIPELINE_CONFIG" == '' ]] && export RAW_PIPELINE_CONFIG='pipeline.jsonc' -[[ ! -d $GIT_ROOT/eos_multiversion_builder ]] && mkdir $GIT_ROOT/eos_multiversion_builder +[[ ! -d "$GIT_ROOT/eos_multiversion_builder" ]] && mkdir "$GIT_ROOT/eos_multiversion_builder" # pipeline config echo 'Reading pipeline configuration file...' [[ -f "$RAW_PIPELINE_CONFIG" ]] && cat "$RAW_PIPELINE_CONFIG" | grep -Po '^[^"/]*("((?<=\\).|[^"])*"[^"/]*)*' | jq -c .\"eos-multiversion-tests\" > "$PIPELINE_CONFIG" @@ -25,7 +25,7 @@ if [[ -f "$PIPELINE_CONFIG" ]]; then for OBJECT in $(cat "$PIPELINE_CONFIG" | jq -r '.configuration | .[] | @base64'); do echo "$(echo $OBJECT | base64 --decode)" >> multiversion.conf # outer echo adds '\n' done - mv -f $GIT_ROOT/multiversion.conf $GIT_ROOT/tests + mv -f "$GIT_ROOT/multiversion.conf" "$GIT_ROOT/tests" elif [[ "$DEBUG" == 'true' ]]; then echo 'Pipeline configuration file not found!' echo "PIPELINE_CONFIG = \"$PIPELINE_CONFIG\"" @@ -37,12 +37,12 @@ elif [[ "$DEBUG" == 'true' ]]; then echo 'Skipping that step...' fi # multiversion -cd $GIT_ROOT/eos_multiversion_builder +cd "$GIT_ROOT/eos_multiversion_builder" echo 'Downloading other versions of nodeos...' -python2.7 $GIT_ROOT/.cicd/helpers/multi_eos_docker.py -cd $GIT_ROOT -cp $GIT_ROOT/tests/multiversion_paths.conf $GIT_ROOT/build/tests -cd $GIT_ROOT/build +python2.7 "$GIT_ROOT/.cicd/helpers/multi_eos_docker.py" +cd "$GIT_ROOT" +cp "$GIT_ROOT/tests/multiversion_paths.conf" "$GIT_ROOT/build/tests" +cd "$GIT_ROOT/build" # count tests echo "+++ $([[ "$BUILDKITE" == 'true' ]] && echo ':microscope: ')Running Multiversion Test" TEST_COUNT=$(ctest -N -L mixed_version_tests | grep -i 'Total Tests: ' | cut -d ':' -f 2 | awk '{print $1}') diff --git a/.cicd/package.sh b/.cicd/package.sh index 8160d463cc6..52e397c17a7 100755 --- a/.cicd/package.sh +++ b/.cicd/package.sh @@ -1,7 +1,7 @@ #!/bin/bash set -eo pipefail . ./.cicd/helpers/general.sh -mkdir -p $BUILD_DIR +mkdir -p "$BUILD_DIR" if [[ $(uname) == 'Darwin' && $FORCE_LINUX != true ]]; then bash -c "cd build/packages && chmod 755 ./*.sh && ./generate_package.sh brew" ARTIFACT='*.rb;*.tar.gz' @@ -19,28 +19,28 @@ if [[ $(uname) == 'Darwin' && $FORCE_LINUX != true ]]; then fi done else # Linux - ARGS=${ARGS:-"--rm --init -v $(pwd):$MOUNTED_DIR"} - . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile - PRE_COMMANDS="cd $MOUNTED_DIR/build/packages && chmod 755 \"./*.sh\"" + ARGS="${ARGS:-"--rm --init -v $(pwd):$MOUNTED_DIR"}" + . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" + PRE_COMMANDS="cd '$MOUNTED_DIR/build/packages' && chmod 755 \"./*.sh\"" if [[ "$IMAGE_TAG" =~ "ubuntu" ]]; then ARTIFACT='*.deb' PACKAGE_TYPE='deb' - PACKAGE_COMMANDS="./generate_package.sh $PACKAGE_TYPE" + PACKAGE_COMMANDS="./generate_package.sh '$PACKAGE_TYPE'" elif [[ "$IMAGE_TAG" =~ "centos" ]]; then ARTIFACT='*.rpm' PACKAGE_TYPE='rpm' - PACKAGE_COMMANDS="mkdir -p ~/rpmbuild/BUILD && mkdir -p ~/rpmbuild/BUILDROOT && mkdir -p ~/rpmbuild/RPMS && mkdir -p ~/rpmbuild/SOURCES && mkdir -p ~/rpmbuild/SPECS && mkdir -p ~/rpmbuild/SRPMS && yum install -y rpm-build && ./generate_package.sh $PACKAGE_TYPE" + PACKAGE_COMMANDS="mkdir -p ~/rpmbuild/BUILD && mkdir -p ~/rpmbuild/BUILDROOT && mkdir -p ~/rpmbuild/RPMS && mkdir -p ~/rpmbuild/SOURCES && mkdir -p ~/rpmbuild/SPECS && mkdir -p ~/rpmbuild/SRPMS && yum install -y rpm-build && ./generate_package.sh '$PACKAGE_TYPE'" fi COMMANDS="$PRE_COMMANDS && $PACKAGE_COMMANDS" - echo "docker run $ARGS $(buildkite-intrinsics) $FULL_TAG bash -c \"$COMMANDS\"" - eval docker run $ARGS $(buildkite-intrinsics) $FULL_TAG bash -c \"$COMMANDS\" + echo "docker run $ARGS $(buildkite-intrinsics) \"$FULL_TAG\" bash -c \"$COMMANDS\"" + eval docker run $ARGS $(buildkite-intrinsics) "$FULL_TAG" bash -c \"$COMMANDS\" cd build/packages [[ -d x86_64 ]] && cd 'x86_64' # backwards-compatibility with release/1.6.x if [[ "$BUILDKITE" == 'true' ]]; then buildkite-agent artifact upload "./$ARTIFACT" --agent-access-token $BUILDKITE_AGENT_ACCESS_TOKEN fi for A in $(echo $ARTIFACT | tr ';' ' '); do - if [[ $(ls $A | grep -c '') == 0 ]]; then + if [[ $(ls "$A" | grep -c '') == 0 ]]; then echo "+++ :no_entry: ERROR: Expected artifact \"$A\" not found!" pwd ls -la diff --git a/.cicd/test.sh b/.cicd/test.sh index 30d1c035af9..d682de79242 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -5,14 +5,14 @@ set -eo pipefail # tests if [[ $(uname) == 'Darwin' ]]; then # macOS set +e # defer error handling to end - source ~/.bash_profile && ./"$@" + source ~/.bash_profile && "./$@" EXIT_STATUS=$? else # Linux COMMANDS="$MOUNTED_DIR/$@" - . $HELPERS_DIR/file-hash.sh $CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile - echo "$ docker run --rm --init -v $(pwd):$MOUNTED_DIR $(buildkite-intrinsics) -e JOBS -e BUILDKITE_API_KEY $FULL_TAG bash -c \"$COMMANDS\"" + . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" + echo "$ docker run --rm --init -v \"$(pwd):$MOUNTED_DIR\" $(buildkite-intrinsics) -e JOBS -e BUILDKITE_API_KEY \"$FULL_TAG\" bash -c \"$COMMANDS\"" set +e # defer error handling to end - eval docker run --rm --init -v $(pwd):$MOUNTED_DIR $(buildkite-intrinsics) -e JOBS -e BUILDKITE_API_KEY $FULL_TAG bash -c \"$COMMANDS\" + eval docker run --rm --init -v "$(pwd):$MOUNTED_DIR" $(buildkite-intrinsics) -e JOBS -e BUILDKITE_API_KEY "$FULL_TAG" bash -c \"$COMMANDS\" EXIT_STATUS=$? fi # buildkite From 1bcc5a47cb35e53bb8680ac58ce6316b362e9961 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 20:43:45 -0500 Subject: [PATCH 16/24] Print significant commands before running them, to make the pipelines easier to debug --- .cicd/build.sh | 2 +- .cicd/generate-base-images.sh | 20 +++++++++++++------- .cicd/installation-build.sh | 8 ++++++-- .cicd/multiversion.sh | 9 ++++++--- .cicd/package.sh | 9 ++++++--- .cicd/test.sh | 4 +++- 6 files changed, 35 insertions(+), 17 deletions(-) diff --git a/.cicd/build.sh b/.cicd/build.sh index 2d3c05b968d..149ac971b83 100755 --- a/.cicd/build.sh +++ b/.cicd/build.sh @@ -52,7 +52,7 @@ else # Linux fi . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" COMMANDS="$PRE_COMMANDS && $COMMANDS" - DOCKER_RUN="docker run $ARGS $(buildkite-intrinsics) '$FULL_TAG' bash -c \"$COMMANDS\"" + DOCKER_RUN="docker run $ARGS $(buildkite-intrinsics) '$FULL_TAG' bash -c '$COMMANDS'" echo "$ $DOCKER_RUN" eval $DOCKER_RUN fi diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 64b2b0d2732..175afdb6201 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -6,7 +6,10 @@ set -eo pipefail echo "+++ :mag_right: Looking for $HASHED_IMAGE_TAG" for REGISTRY in "${CI_REGISTRIES[*]}"; do if [[ ! -z "$REGISTRY" ]]; then - if [[ ! $(docker manifest inspect "$REGISTRY:$HASHED_IMAGE_TAG") ]]; then + MANIFEST_COMMAND="docker manifest inspect '$REGISTRY:$HASHED_IMAGE_TAG'" + echo "$ $MANIFEST_COMMAND" + eval $MANIFEST_COMMAND + if [[ "$?" != '0' ]]; then EXISTS='false' fi fi @@ -20,18 +23,21 @@ if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we can if [[ "$FORCE_BASE_IMAGE" != 'true' ]]; then for REGISTRY in "${CI_REGISTRIES[*]}"; do if [[ ! -z "$REGISTRY" ]]; then - DOCKER_TAG_COMMAND="docker tag ci:$HASHED_IMAGE_TAG $REGISTRY:$HASHED_IMAGE_TAG" - DOCKER_PUSH_COMMAND="docker push $REGISTRY:$HASHED_IMAGE_TAG" - DOCKER_RMI_COMMAND="docker rmi $REGISTRY:$HASHED_IMAGE_TAG" + # tag + DOCKER_TAG_COMMAND="docker tag 'ci:$HASHED_IMAGE_TAG' '$REGISTRY:$HASHED_IMAGE_TAG'" echo "$ $DOCKER_TAG_COMMAND" - echo "$ $DOCKER_PUSH_COMMAND" - echo "$ $DOCKER_RMI_COMMAND" eval $DOCKER_TAG_COMMAND + # push + DOCKER_PUSH_COMMAND="docker push '$REGISTRY:$HASHED_IMAGE_TAG'" + echo "$ $DOCKER_PUSH_COMMAND" eval $DOCKER_PUSH_COMMAND + # clean up + DOCKER_RMI_COMMAND="docker rmi '$REGISTRY:$HASHED_IMAGE_TAG'" + echo "$ $DOCKER_RMI_COMMAND" eval $DOCKER_RMI_COMMAND fi done - DOCKER_RMI_COMMAND="docker rmi ci:$HASHED_IMAGE_TAG" + DOCKER_RMI_COMMAND="docker rmi 'ci:$HASHED_IMAGE_TAG'" echo "$ $DOCKER_RMI_COMMAND" eval $DOCKER_RMI_COMMAND else diff --git a/.cicd/installation-build.sh b/.cicd/installation-build.sh index 5b812ff153e..754c2103b98 100755 --- a/.cicd/installation-build.sh +++ b/.cicd/installation-build.sh @@ -19,5 +19,9 @@ for REGISTRY in "${CONTRACT_REGISTRIES[@]}"; do done fi done -docker stop ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER -docker rm ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER +DOCKER_STOP_COMMAND="docker stop 'ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER'" +echo "$ $DOCKER_STOP_COMMAND" +eval $DOCKER_STOP_COMMAND +DOCKER_RM_COMMAND="docker rm 'ci-contracts-builder-$BUILDKITE_PIPELINE_SLUG-$BUILDKITE_BUILD_NUMBER'" +echo "$ $DOCKER_RM_COMMAND" +eval $DOCKER_RM_COMMAND diff --git a/.cicd/multiversion.sh b/.cicd/multiversion.sh index 5c1e9842138..4539fb675ca 100755 --- a/.cicd/multiversion.sh +++ b/.cicd/multiversion.sh @@ -39,7 +39,9 @@ fi # multiversion cd "$GIT_ROOT/eos_multiversion_builder" echo 'Downloading other versions of nodeos...' -python2.7 "$GIT_ROOT/.cicd/helpers/multi_eos_docker.py" +DOWNLOAD_COMMAND="python2.7 '$GIT_ROOT/.cicd/helpers/multi_eos_docker.py'" +echo "$ $DOWNLOAD_COMMAND" +eval $DOWNLOAD_COMMAND cd "$GIT_ROOT" cp "$GIT_ROOT/tests/multiversion_paths.conf" "$GIT_ROOT/build/tests" cd "$GIT_ROOT/build" @@ -54,8 +56,9 @@ else fi # run tests set +e # defer ctest error handling to end -echo "$ ctest -L mixed_version_tests --output-on-failure -T Test" -ctest -L mixed_version_tests --output-on-failure -T Test +TEST_COMMAND='ctest -L mixed_version_tests --output-on-failure -T Test' +echo "$ $TEST_COMMAND" +eval $TEST_COMMAND EXIT_STATUS=$? echo 'Done running multiversion test.' exit $EXIT_STATUS diff --git a/.cicd/package.sh b/.cicd/package.sh index 52e397c17a7..6896547c511 100755 --- a/.cicd/package.sh +++ b/.cicd/package.sh @@ -3,7 +3,9 @@ set -eo pipefail . ./.cicd/helpers/general.sh mkdir -p "$BUILD_DIR" if [[ $(uname) == 'Darwin' && $FORCE_LINUX != true ]]; then - bash -c "cd build/packages && chmod 755 ./*.sh && ./generate_package.sh brew" + PACKAGE_COMMANDS="bash -c 'cd build/packages && chmod 755 ./*.sh && ./generate_package.sh brew'" + echo "$ $PACKAGE_COMMANDS" + eval $PACKAGE_COMMANDS ARTIFACT='*.rb;*.tar.gz' cd build/packages [[ -d x86_64 ]] && cd 'x86_64' # backwards-compatibility with release/1.6.x @@ -32,8 +34,9 @@ else # Linux PACKAGE_COMMANDS="mkdir -p ~/rpmbuild/BUILD && mkdir -p ~/rpmbuild/BUILDROOT && mkdir -p ~/rpmbuild/RPMS && mkdir -p ~/rpmbuild/SOURCES && mkdir -p ~/rpmbuild/SPECS && mkdir -p ~/rpmbuild/SRPMS && yum install -y rpm-build && ./generate_package.sh '$PACKAGE_TYPE'" fi COMMANDS="$PRE_COMMANDS && $PACKAGE_COMMANDS" - echo "docker run $ARGS $(buildkite-intrinsics) \"$FULL_TAG\" bash -c \"$COMMANDS\"" - eval docker run $ARGS $(buildkite-intrinsics) "$FULL_TAG" bash -c \"$COMMANDS\" + DOCKER_RUN_COMMAND="docker run $ARGS $(buildkite-intrinsics) '$FULL_TAG' bash -c '$COMMANDS'" + echo "$ $DOCKER_RUN_COMMAND" + eval $DOCKER_RUN_COMMAND cd build/packages [[ -d x86_64 ]] && cd 'x86_64' # backwards-compatibility with release/1.6.x if [[ "$BUILDKITE" == 'true' ]]; then diff --git a/.cicd/test.sh b/.cicd/test.sh index d682de79242..c267442db47 100755 --- a/.cicd/test.sh +++ b/.cicd/test.sh @@ -11,8 +11,10 @@ else # Linux COMMANDS="$MOUNTED_DIR/$@" . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" echo "$ docker run --rm --init -v \"$(pwd):$MOUNTED_DIR\" $(buildkite-intrinsics) -e JOBS -e BUILDKITE_API_KEY \"$FULL_TAG\" bash -c \"$COMMANDS\"" + DOCKER_RUN_COMMAND="docker run --rm --init -v '$(pwd):$MOUNTED_DIR' $(buildkite-intrinsics) -e JOBS -e BUILDKITE_API_KEY '$FULL_TAG' bash -c '$COMMANDS'" set +e # defer error handling to end - eval docker run --rm --init -v "$(pwd):$MOUNTED_DIR" $(buildkite-intrinsics) -e JOBS -e BUILDKITE_API_KEY "$FULL_TAG" bash -c \"$COMMANDS\" + echo "$ $DOCKER_RUN_COMMAND" + eval $DOCKER_RUN_COMMAND EXIT_STATUS=$? fi # buildkite From efb0513a9d55e40728376c0ed267d46e720cd7bf Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 20:50:44 -0500 Subject: [PATCH 17/24] Fix BASH iteration --- .cicd/docker-tag.sh | 8 ++++---- .cicd/generate-base-images.sh | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.cicd/docker-tag.sh b/.cicd/docker-tag.sh index f83107537ec..aa8d0f19c65 100755 --- a/.cicd/docker-tag.sh +++ b/.cicd/docker-tag.sh @@ -15,7 +15,7 @@ echo '$ echo ${CONTRACT_REGISTRIES[*]} # array' echo ${CONTRACT_REGISTRIES[*]} # pull echo '+++ :arrow_down: Pulling Container(s)' -for REGISTRY in "${CI_REGISTRIES[*]}"; do +for REGISTRY in ${CI_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then echo "Pulling from '$REGISTRY'." IMAGE="$REGISTRY:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" @@ -26,7 +26,7 @@ for REGISTRY in "${CI_REGISTRIES[*]}"; do done # tag echo '+++ :label: Tagging Container(s)' -for INDEX in "${!CI_REGISTRIES[*]}"; do +for INDEX in ${!CI_REGISTRIES[*]}; do if [[ ! -z "${CI_REGISTRIES[$INDEX]}" ]]; then echo "Tagging for index $INDEX." IMAGE="${CI_REGISTRIES[$INDEX]}:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" @@ -42,7 +42,7 @@ for INDEX in "${!CI_REGISTRIES[*]}"; do done # push echo '+++ :arrow_up: Pushing Container(s)' -for REGISTRY in "${CONTRACT_REGISTRIES[*]}"; do +for REGISTRY in ${CONTRACT_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then echo "Pushing to '$REGISTRY'." DOCKER_PUSH_COMMAND="docker push '$REGISTRY:$PREFIX-$SANITIZED_BRANCH'" @@ -57,7 +57,7 @@ for REGISTRY in "${CONTRACT_REGISTRIES[*]}"; do done # cleanup echo '+++ :put_litter_in_its_place: Cleaning Up' -for INDEX in "${!CI_REGISTRIES[*]}"; do +for INDEX in ${!CI_REGISTRIES[*]}; do if [[ ! -z "${CI_REGISTRIES[$INDEX]}" ]]; then echo "Cleaning up from index $INDEX." DOCKER_RMI_COMMAND="docker rmi '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_BRANCH'" diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 175afdb6201..98be7a059af 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -4,7 +4,7 @@ set -eo pipefail . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" echo "+++ :mag_right: Looking for $HASHED_IMAGE_TAG" -for REGISTRY in "${CI_REGISTRIES[*]}"; do +for REGISTRY in ${CI_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then MANIFEST_COMMAND="docker manifest inspect '$REGISTRY:$HASHED_IMAGE_TAG'" echo "$ $MANIFEST_COMMAND" @@ -21,7 +21,7 @@ if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we can echo "$ $DOCKER_BUILD_COMMAND" eval $DOCKER_BUILD_COMMAND if [[ "$FORCE_BASE_IMAGE" != 'true' ]]; then - for REGISTRY in "${CI_REGISTRIES[*]}"; do + for REGISTRY in ${CI_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then # tag DOCKER_TAG_COMMAND="docker tag 'ci:$HASHED_IMAGE_TAG' '$REGISTRY:$HASHED_IMAGE_TAG'" From c8a251f0af83995ae941dd3b1d028bc5923c4287 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 21:07:01 -0500 Subject: [PATCH 18/24] Add OVERWRITE_BASE_IMAGE flag to support pushing new images, similar to FORCE_BASE_IMAGE='true' --- .cicd/generate-base-images.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 98be7a059af..bddf9ca077a 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -16,11 +16,11 @@ for REGISTRY in ${CI_REGISTRIES[*]}; do done # build, if neccessary -if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first +if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' || "$OVERWRITE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." echo "$ $DOCKER_BUILD_COMMAND" eval $DOCKER_BUILD_COMMAND - if [[ "$FORCE_BASE_IMAGE" != 'true' ]]; then + if [[ "$FORCE_BASE_IMAGE" != 'true' || "$OVERWRITE_BASE_IMAGE" == 'true' ]]; then for REGISTRY in ${CI_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then # tag From a4803cab3c482b93566bf8866964225de2f8e8f0 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 21:13:14 -0500 Subject: [PATCH 19/24] esplain yerself --- .cicd/generate-base-images.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index bddf9ca077a..0e7ba645f0e 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -2,7 +2,7 @@ set -eo pipefail . ./.cicd/helpers/general.sh . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" - +# search for base image in docker registries echo "+++ :mag_right: Looking for $HASHED_IMAGE_TAG" for REGISTRY in ${CI_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then @@ -14,7 +14,14 @@ for REGISTRY in ${CI_REGISTRIES[*]}; do fi fi done - +# esplain yerself +if [[ "$EXISTS" == 'false' ]]; then + echo 'Base image does not exist in any docker registry, building from scratch.' +elif [[ "$OVERWRITE_BASE_IMAGE" == 'true' ]]; then + echo "OVERWRITE_BASE_IMAGE is set to 'true', building from scratch and pushing to docker registries." +elif [[ "$FORCE_BASE_IMAGE" == 'true' ]]; then + echo "FORCE_BASE_IMAGE is set to 'true', building from scratch and NOT pushing to docker registries." +fi # build, if neccessary if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' || "$OVERWRITE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." From cd35ecc4f36ebd3ff5f5026f747c31dbd3889db9 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 21:39:53 -0500 Subject: [PATCH 20/24] Excuse the manifest command exit status (yes, again) --- .cicd/generate-base-images.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 0e7ba645f0e..8b9d7db6c07 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -8,8 +8,11 @@ for REGISTRY in ${CI_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then MANIFEST_COMMAND="docker manifest inspect '$REGISTRY:$HASHED_IMAGE_TAG'" echo "$ $MANIFEST_COMMAND" + set +e eval $MANIFEST_COMMAND - if [[ "$?" != '0' ]]; then + MANIFEST_INSPECT_EXIT_STATUS="$?" + set -eo pipefail + if [[ "$MANIFEST_INSPECT_EXIT_STATUS" != '0' ]]; then EXISTS='false' fi fi From b719067db5b7cedd15399d5daf0565824e95dc4a Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 21:54:17 -0500 Subject: [PATCH 21/24] Save ourselves one docker pull for the EOSIO build itself --- .cicd/generate-base-images.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 8b9d7db6c07..264272eff1e 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -42,9 +42,11 @@ if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' || "$OVERWRITE_BASE_ echo "$ $DOCKER_PUSH_COMMAND" eval $DOCKER_PUSH_COMMAND # clean up - DOCKER_RMI_COMMAND="docker rmi '$REGISTRY:$HASHED_IMAGE_TAG'" - echo "$ $DOCKER_RMI_COMMAND" - eval $DOCKER_RMI_COMMAND + if [[ "$FULL_TAG" != "$REGISTRY:$HASHED_IMAGE_TAG" ]]; then + DOCKER_RMI_COMMAND="docker rmi '$REGISTRY:$HASHED_IMAGE_TAG'" + echo "$ $DOCKER_RMI_COMMAND" + eval $DOCKER_RMI_COMMAND + fi fi done DOCKER_RMI_COMMAND="docker rmi 'ci:$HASHED_IMAGE_TAG'" From d1a96ec3b6c7e54c40f637f4045ee5c836989484 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 22:11:30 -0500 Subject: [PATCH 22/24] Support copying base images from Docker Hub to ECR to save an hour --- .cicd/generate-base-images.sh | 44 +++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/.cicd/generate-base-images.sh b/.cicd/generate-base-images.sh index 264272eff1e..1661a2a79db 100755 --- a/.cicd/generate-base-images.sh +++ b/.cicd/generate-base-images.sh @@ -4,6 +4,9 @@ set -eo pipefail . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" # search for base image in docker registries echo "+++ :mag_right: Looking for $HASHED_IMAGE_TAG" +EXISTS_ALL='true' +EXISTS_DOCKER_HUB='false' +EXISTS_ECR='false' for REGISTRY in ${CI_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then MANIFEST_COMMAND="docker manifest inspect '$REGISTRY:$HASHED_IMAGE_TAG'" @@ -12,21 +15,52 @@ for REGISTRY in ${CI_REGISTRIES[*]}; do eval $MANIFEST_COMMAND MANIFEST_INSPECT_EXIT_STATUS="$?" set -eo pipefail - if [[ "$MANIFEST_INSPECT_EXIT_STATUS" != '0' ]]; then - EXISTS='false' + if [[ "$MANIFEST_INSPECT_EXIT_STATUS" == '0' ]]; then + if [[ "$(echo "$REGISTRY" | grep -icP '[.]amazonaws[.]com/')" != '0' ]]; then + EXISTS_ECR='true' + elif [[ "$(echo "$REGISTRY" | grep -icP 'docker[.]io/')" != '0' ]]; then + EXISTS_DOCKER_HUB='true' + fi + else + EXISTS_ALL='false' fi fi done +# copy, if possible, since it is so much faster +if [[ "$EXISTS_ECR" == 'false' && "$EXISTS_DOCKER_HUB" == 'true' && "$OVERWRITE_BASE_IMAGE" != 'true' && ! -z "$MIRROR_REGISTRY" ]]; then + echo 'Attempting copy from Docker Hub to the mirror instead of a new base image build.' + DOCKER_PULL_COMMAND="docker pull '$DOCKERHUB_CI_REGISTRY:$HASHED_IMAGE_TAG'" + echo "$ $DOCKER_PULL_COMMAND" + set +e + eval $DOCKER_PULL_COMMAND + DOCKER_PULL_EXIT_STATUS="$?" + set -eo pipefail + if [[ "$DOCKER_PULL_EXIT_STATUS" == '0' ]]; then + echo 'Pull from Docker Hub worked! Pushing to mirror.' + # tag + DOCKER_TAG_COMMAND="docker tag '$DOCKERHUB_CI_REGISTRY:$HASHED_IMAGE_TAG' '$MIRROR_REGISTRY:$HASHED_IMAGE_TAG'" + echo "$ $DOCKER_TAG_COMMAND" + eval $DOCKER_TAG_COMMAND + # push + DOCKER_PUSH_COMMAND="docker push '$MIRROR_REGISTRY:$HASHED_IMAGE_TAG'" + echo "$ $DOCKER_PUSH_COMMAND" + eval $DOCKER_PUSH_COMMAND + EXISTS_ALL='true' + EXISTS_ECR='true' + else + echo 'Pull from Docker Hub failed, rebuilding base image from scratch.' + fi +fi # esplain yerself -if [[ "$EXISTS" == 'false' ]]; then - echo 'Base image does not exist in any docker registry, building from scratch.' +if [[ "$EXISTS_ALL" == 'false' ]]; then + echo 'Building base image from scratch.' elif [[ "$OVERWRITE_BASE_IMAGE" == 'true' ]]; then echo "OVERWRITE_BASE_IMAGE is set to 'true', building from scratch and pushing to docker registries." elif [[ "$FORCE_BASE_IMAGE" == 'true' ]]; then echo "FORCE_BASE_IMAGE is set to 'true', building from scratch and NOT pushing to docker registries." fi # build, if neccessary -if [[ "$EXISTS" == 'false' || "$FORCE_BASE_IMAGE" == 'true' || "$OVERWRITE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first +if [[ "$EXISTS_ALL" == 'false' || "$FORCE_BASE_IMAGE" == 'true' || "$OVERWRITE_BASE_IMAGE" == 'true' ]]; then # if we cannot pull the image, we build and push it first export DOCKER_BUILD_COMMAND="docker build --no-cache -t 'ci:$HASHED_IMAGE_TAG' -f '$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile' ." echo "$ $DOCKER_BUILD_COMMAND" eval $DOCKER_BUILD_COMMAND From 1a70672252d9feba5b290c828df566f7f0d3e8f7 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 23:17:03 -0500 Subject: [PATCH 23/24] docker-tag.sh does NOT use the CI registry, it only uses the Contracts registry --- .cicd/docker-tag.sh | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/.cicd/docker-tag.sh b/.cicd/docker-tag.sh index aa8d0f19c65..01542a18724 100755 --- a/.cicd/docker-tag.sh +++ b/.cicd/docker-tag.sh @@ -5,17 +5,13 @@ echo '+++ :evergreen_tree: Configuring Environment' PREFIX='base-ubuntu-18.04' SANITIZED_BRANCH=$(echo "$BUILDKITE_BRANCH" | sed 's.^/..' | sed 's/[:/]/_/g') SANITIZED_TAG=$(echo "$BUILDKITE_TAG" | sed 's.^/..' | tr '/' '_') -echo '$ echo ${#CI_REGISTRIES[*]} # array length' -echo ${#CI_REGISTRIES[*]} -echo '$ echo ${CI_REGISTRIES[*]} # array' -echo ${CI_REGISTRIES[*]} echo '$ echo ${#CONTRACT_REGISTRIES[*]} # array length' echo ${#CONTRACT_REGISTRIES[*]} echo '$ echo ${CONTRACT_REGISTRIES[*]} # array' echo ${CONTRACT_REGISTRIES[*]} # pull echo '+++ :arrow_down: Pulling Container(s)' -for REGISTRY in ${CI_REGISTRIES[*]}; do +for REGISTRY in ${CONTRACT_REGISTRIES[*]}; do if [[ ! -z "$REGISTRY" ]]; then echo "Pulling from '$REGISTRY'." IMAGE="$REGISTRY:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" @@ -26,15 +22,15 @@ for REGISTRY in ${CI_REGISTRIES[*]}; do done # tag echo '+++ :label: Tagging Container(s)' -for INDEX in ${!CI_REGISTRIES[*]}; do - if [[ ! -z "${CI_REGISTRIES[$INDEX]}" ]]; then - echo "Tagging for index $INDEX." - IMAGE="${CI_REGISTRIES[$INDEX]}:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" - DOCKER_TAG_COMMAND="docker tag '$IMAGE' '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_BRANCH'" +for REGISTRY in ${CONTRACT_REGISTRIES[*]}; do + if [[ ! -z "$REGISTRY" ]]; then + echo "Tagging for registry $REGISTRY." + IMAGE="$REGISTRY:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE" + DOCKER_TAG_COMMAND="docker tag '$IMAGE' '$REGISTRY:$PREFIX-$SANITIZED_BRANCH'" echo "$ $DOCKER_TAG_COMMAND" eval $DOCKER_TAG_COMMAND if [[ ! -z "$BUILDKITE_TAG" && "$SANITIZED_BRANCH" != "$SANITIZED_TAG" ]]; then - DOCKER_TAG_COMMAND="docker tag '$IMAGE' '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_TAG'" + DOCKER_TAG_COMMAND="docker tag '$IMAGE' '$REGISTRY:$PREFIX-$SANITIZED_TAG'" echo "$ $DOCKER_TAG_COMMAND" eval $DOCKER_TAG_COMMAND fi @@ -57,18 +53,18 @@ for REGISTRY in ${CONTRACT_REGISTRIES[*]}; do done # cleanup echo '+++ :put_litter_in_its_place: Cleaning Up' -for INDEX in ${!CI_REGISTRIES[*]}; do - if [[ ! -z "${CI_REGISTRIES[$INDEX]}" ]]; then - echo "Cleaning up from index $INDEX." - DOCKER_RMI_COMMAND="docker rmi '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_BRANCH'" +for REGISTRY in ${CONTRACT_REGISTRIES[*]}; do + if [[ ! -z "$REGISTRY" ]]; then + echo "Cleaning up from $REGISTRY." + DOCKER_RMI_COMMAND="docker rmi '$REGISTRY:$PREFIX-$SANITIZED_BRANCH'" echo "$ $DOCKER_RMI_COMMAND" eval $DOCKER_RMI_COMMAND if [[ ! -z "$BUILDKITE_TAG" && "$SANITIZED_BRANCH" != "$SANITIZED_TAG" ]]; then - DOCKER_RMI_COMMAND="docker rmi '${CONTRACT_REGISTRIES[$INDEX]}:$PREFIX-$SANITIZED_TAG'" + DOCKER_RMI_COMMAND="docker rmi '$REGISTRY:$PREFIX-$SANITIZED_TAG'" echo "$ $DOCKER_RMI_COMMAND" eval $DOCKER_RMI_COMMAND fi - DOCKER_RMI_COMMAND="docker rmi '${CI_REGISTRIES[$INDEX]}:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE'" + DOCKER_RMI_COMMAND="docker rmi '$REGISTRY:$PREFIX-$BUILDKITE_COMMIT-$PLATFORM_TYPE'" echo "$ $DOCKER_RMI_COMMAND" eval $DOCKER_RMI_COMMAND fi From b7b8d93562c3f525d4ec246016f474d46506b708 Mon Sep 17 00:00:00 2001 From: Zach Butler Date: Thu, 5 Nov 2020 23:39:23 -0500 Subject: [PATCH 24/24] Remove quotes where shell expansion is needed --- .cicd/package.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cicd/package.sh b/.cicd/package.sh index 6896547c511..6f87774b94e 100755 --- a/.cicd/package.sh +++ b/.cicd/package.sh @@ -23,7 +23,7 @@ if [[ $(uname) == 'Darwin' && $FORCE_LINUX != true ]]; then else # Linux ARGS="${ARGS:-"--rm --init -v $(pwd):$MOUNTED_DIR"}" . "$HELPERS_DIR/file-hash.sh" "$CICD_DIR/platforms/$PLATFORM_TYPE/$IMAGE_TAG.dockerfile" - PRE_COMMANDS="cd '$MOUNTED_DIR/build/packages' && chmod 755 \"./*.sh\"" + PRE_COMMANDS="cd '$MOUNTED_DIR/build/packages' && chmod 755 ./*.sh" if [[ "$IMAGE_TAG" =~ "ubuntu" ]]; then ARTIFACT='*.deb' PACKAGE_TYPE='deb'