github.com/jameswoolfenden/terraform@v0.11.12-beta1/scripts/docker-release/release.sh (about) 1 #!/usr/bin/env bash 2 3 # This script is an interactive wrapper around the scripts build.sh, tag.sh 4 # and push.sh intended for use during official Terraform releases. 5 # 6 # This script should be used only when git HEAD is pointing at the release tag 7 # for what will become the new latest *stable* release, since it will update 8 # the "latest", "light", and "full" tags to refer to what was built. 9 # 10 # To release a specific version without updating the various symbolic tags, 11 # use build.sh directly and then manually push the single release tag it 12 # creates. This is appropriate both when publishing a beta version and if, 13 # for some reason, it's necessary to (re-)publish and older version. 14 15 set -eu 16 17 BASE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" 18 cd "$BASE" 19 20 # We assume that this is always running while git HEAD is pointed at a release 21 # tag or a branch that is pointed at the same commit as a release tag. If not, 22 # this will fail since we can't build a release image for a commit that hasn't 23 # actually been released. 24 VERSION="$(git describe)" 25 VERSION_SLUG="${VERSION#v}" 26 27 # Verify that the version is already deployed to releases.hashicorp.com. 28 if curl --output /dev/null --silent --head --fail "https://releases.hashicorp.com/terraform/${VERSION_SLUG}/terraform_${VERSION_SLUG}_SHA256SUMS"; then 29 echo "===== Docker image release for Terraform $VERSION =====" 30 echo "" 31 else 32 cat >&2 <<EOT 33 34 There is no $VERSION release of Terraform on releases.hashicorp.com. 35 36 release.sh can only create docker images for released versions. Use 37 "git checkout {version}" to switch to a release tag before running this 38 script. 39 40 To create an untagged docker image for any arbitrary commit, use 'docker build' 41 directly in the root of the Terraform repository. 42 43 EOT 44 exit 1 45 fi 46 47 # Build the two images tagged with the version number 48 ./build.sh "$VERSION" 49 50 # Verify that they were built correctly. 51 echo "-- Testing $VERSION Images --" 52 echo "" 53 54 echo -n "light image version: " 55 docker run --rm -e "CHECKPOINT_DISABLE=1" "hashicorp/terraform:${VERSION_SLUG}" version 56 echo -n "full image version: " 57 docker run --rm -e "CHECKPOINT_DISABLE=1" "hashicorp/terraform:${VERSION_SLUG}-full" version 58 59 echo "" 60 61 read -p "Did both images produce suitable version output for $VERSION? " -n 1 -r 62 echo "" 63 if ! [[ $REPLY =~ ^[Yy]$ ]]; then 64 echo >&2 Aborting due to inconsistent version output. 65 exit 1 66 fi 67 echo "" 68 69 # Update the latest, light and full tags to point to the images we just built. 70 ./tag.sh "$VERSION" 71 72 # Last chance to bail out 73 echo "-- Prepare to Push --" 74 echo "" 75 echo "The following Terraform images are available locally:" 76 docker images --format "{{.ID}}\t{{.Tag}}" hashicorp/terraform 77 echo "" 78 read -p "Ready to push the tags $VERSION_SLUG, light, full, and latest up to dockerhub? " -n 1 -r 79 echo "" 80 if ! [[ $REPLY =~ ^[Yy]$ ]]; then 81 echo >&2 "Aborting because reply wasn't positive." 82 exit 1 83 fi 84 echo "" 85 86 # Actually upload the images 87 ./push.sh "$VERSION" 88 89 echo "" 90 echo "-- All done! --" 91 echo "" 92 echo "Confirm the release at https://hub.docker.com/r/hashicorp/terraform/tags/" 93 echo ""