|
| 1 | +#!/usr/bin/env bash |
| 2 | + |
| 3 | +set -uo pipefail; |
| 4 | + |
| 5 | +#################################### |
| 6 | +# Ensure we can execute standalone # |
| 7 | +#################################### |
| 8 | + |
| 9 | +function early_death() { |
| 10 | + echo "[FATAL] ${0}: ${1}" >&2; |
| 11 | + exit 1; |
| 12 | +}; |
| 13 | + |
| 14 | +if [ -z "${TFENV_ROOT:-""}" ]; then |
| 15 | + # http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac |
| 16 | + readlink_f() { |
| 17 | + local target_file="${1}"; |
| 18 | + local file_name; |
| 19 | + |
| 20 | + while [ "${target_file}" != "" ]; do |
| 21 | + cd "$(dirname ${target_file})" || early_death "Failed to 'cd \$(dirname ${target_file})' while trying to determine TFENV_ROOT"; |
| 22 | + file_name="$(basename "${target_file}")" || early_death "Failed to 'basename \"${target_file}\"' while trying to determine TFENV_ROOT"; |
| 23 | + target_file="$(readlink "${file_name}")"; |
| 24 | + done; |
| 25 | + |
| 26 | + echo "$(pwd -P)/${file_name}"; |
| 27 | + }; |
| 28 | + |
| 29 | + TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; |
| 30 | + [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; |
| 31 | +else |
| 32 | + TFENV_ROOT="${TFENV_ROOT%/}"; |
| 33 | +fi; |
| 34 | +export TFENV_ROOT; |
| 35 | + |
| 36 | +if [ -n "${TFENV_HELPERS:-""}" ]; then |
| 37 | + log 'debug' 'TFENV_HELPERS is set, not sourcing helpers again'; |
| 38 | +else |
| 39 | + [ "${TFENV_DEBUG:-0}" -gt 0 ] && echo "[DEBUG] Sourcing helpers from ${TFENV_ROOT}/lib/helpers.sh"; |
| 40 | + if source "${TFENV_ROOT}/lib/helpers.sh"; then |
| 41 | + log 'debug' 'Helpers sourced successfully'; |
| 42 | + else |
| 43 | + early_death "Failed to source helpers from ${TFENV_ROOT}/lib/helpers.sh"; |
| 44 | + fi; |
| 45 | +fi; |
| 46 | + |
| 47 | +##################### |
| 48 | +# Begin Script Body # |
| 49 | +##################### |
| 50 | + |
| 51 | +declare -a errors=(); |
| 52 | + |
| 53 | +cleanup || log 'error' 'Cleanup failed?!'; |
| 54 | + |
| 55 | + |
| 56 | +log 'info' '### Install required_version normal version (#.#.#)'; |
| 57 | + |
| 58 | +reqv='0.14.11'; |
| 59 | + |
| 60 | +echo "terraform { |
| 61 | + required_version = \">=${reqv}\" |
| 62 | +}" > required_version.tf; |
| 63 | + |
| 64 | +( |
| 65 | + tfenv install; |
| 66 | + tfenv use; |
| 67 | + check_active_version "${reqv}"; |
| 68 | +) || error_and_proceed 'required_version does not match'; |
| 69 | + |
| 70 | +cleanup || log 'error' 'Cleanup failed?!'; |
| 71 | + |
| 72 | + |
| 73 | +log 'info' '### Install required_version tagged version (#.#.#-tag#)' |
| 74 | + |
| 75 | +reqv='0.14.0-rc1' |
| 76 | + |
| 77 | +echo "terraform { |
| 78 | + required_version = \">=${reqv}\" |
| 79 | +}" > required_version.tf; |
| 80 | + |
| 81 | +( |
| 82 | + tfenv install; |
| 83 | + tfenv use; |
| 84 | + check_active_version "${reqv}"; |
| 85 | +) || error_and_proceed 'required_version tagged-version does not match'; |
| 86 | + |
| 87 | +cleanup || log 'error' 'Cleanup failed?!'; |
| 88 | + |
| 89 | + |
| 90 | +log 'info' '### Install required_version incomplete version (#.#.<missing>)' |
| 91 | + |
| 92 | +reqv='0.14'; |
| 93 | + |
| 94 | +echo "terraform { |
| 95 | + required_version = \">=${reqv}\" |
| 96 | +}" > required_version.tf; |
| 97 | + |
| 98 | +( |
| 99 | + tfenv install; |
| 100 | + tfenv use; |
| 101 | + check_active_version "${reqv}.0"; |
| 102 | +) || error_and_proceed 'required_version incomplete-version does not match'; |
| 103 | + |
| 104 | +cleanup || log 'error' 'Cleanup failed?!'; |
| 105 | + |
| 106 | +log 'info' '### Test auto-installing when running terraform'; |
| 107 | + |
| 108 | +reqv='0.14.11'; |
| 109 | + |
| 110 | +echo "terraform { |
| 111 | + required_version = \">=${reqv}\" |
| 112 | +}" > required_version.tf; |
| 113 | + |
| 114 | +( |
| 115 | + check_active_version "${reqv}"; |
| 116 | +) || error_and_proceed 'required_version does not match'; |
| 117 | + |
| 118 | +cleanup || log 'error' 'Cleanup failed?!'; |
| 119 | + |
| 120 | +if [ "${#errors[@]}" -gt 0 ]; then |
| 121 | + log 'warn' '===== The following required_version tests failed ====='; |
| 122 | + for error in "${errors[@]}"; do |
| 123 | + log 'warn' "\t${error}"; |
| 124 | + done; |
| 125 | + log 'error' 'required_version test failure(s)'; |
| 126 | +else |
| 127 | + log 'info' 'All required_version tests passed.'; |
| 128 | +fi; |
| 129 | + |
| 130 | +exit 0; |
0 commit comments