diff --git a/CHANGELOG.md b/CHANGELOG.md index a61c6f3..203e489 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 2.0.0 (Unreleased) +## 2.0.0 (April 20, 2020) * New logging and debugging library * Massive testing, logging and loading refactoring diff --git a/libexec/tfenv---version b/libexec/tfenv---version index 6bc8e28..2e819ac 100755 --- a/libexec/tfenv---version +++ b/libexec/tfenv---version @@ -36,7 +36,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/libexec/tfenv-exec b/libexec/tfenv-exec index 6ebcb04..975e5b2 100755 --- a/libexec/tfenv-exec +++ b/libexec/tfenv-exec @@ -40,7 +40,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/libexec/tfenv-install b/libexec/tfenv-install index 33d39b8..664ab5f 100755 --- a/libexec/tfenv-install +++ b/libexec/tfenv-install @@ -26,7 +26,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; @@ -95,6 +95,9 @@ case "$(uname -s)" in CYGWIN_NT*) os="windows_${TFENV_ARCH}"; ;; + FreeBSD*) + os="freebsd_${TFENV_ARCH}" + ;; *) os="linux_${TFENV_ARCH}"; ;; @@ -102,6 +105,7 @@ esac; keybase_bin="$(command -v keybase 2>/dev/null)"; shasum_bin="$(command -v shasum 2>/dev/null)"; +sha256sum_bin="$(command -v sha256sum 2>/dev/null)"; TFENV_REMOTE="${TFENV_REMOTE:-https://releases.hashicorp.com}"; version_url="${TFENV_REMOTE}/terraform/${version}"; @@ -137,7 +141,7 @@ case "${TFENV_CURL_OUTPUT:-2}" in curl_progress="-s"; ;; *) - log 'error' 'TFENV_CURL_OUTPUT specified, but not with a support value ([0,1,2])'; + log 'error' 'TFENV_CURL_OUTPUT specified, but not with a supported value ([0,1,2])'; ;; esac; @@ -226,6 +230,13 @@ if [[ -n "${shasum_bin}" && -x "${shasum_bin}" ]]; then -c <(grep -F "${tarball_name}" "${shasums_name}") \ || log 'error' 'SHA256 hash does not match!'; ); +elif [[ -n "${sha256sum_bin}" && -x "${sha256sum_bin}" ]]; then + ( + cd "${download_tmp}"; + "${sha256sum_bin}" \ + -c <(grep -F "${tarball_name}" "${shasums_name}") \ + || log 'error' 'SHA256 hash does not match!'; + ); else # Lack of shasum deserves a proper warning log 'warn' 'No shasum tool available. Skipping SHA256 hash validation'; @@ -233,7 +244,8 @@ fi; mkdir -p "${dst_path}" || log 'error' "Failed to make directory ${dst_path}"; -declare unzip_output="$(unzip "${download_tmp}/${tarball_name}" -d "${dst_path}" || log 'error' 'Tarball unzip failed')"; +declare unzip_output; +unzip_output="$(unzip -o "${download_tmp}/${tarball_name}" -d "${dst_path}")" || log 'error' 'Tarball unzip failed'; while IFS= read -r unzip_line; do log 'info' "${unzip_line}"; done < <(printf '%s\n' "${unzip_output}"); diff --git a/libexec/tfenv-list b/libexec/tfenv-list index b8e232a..c3897a8 100755 --- a/libexec/tfenv-list +++ b/libexec/tfenv-list @@ -27,7 +27,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; @@ -73,7 +73,7 @@ version_name="$(tfenv-version-name)" \ || log 'error' "tfenv-version-name failed"; export version_name; -export version_file="$(tfenv-version-file)" \ +version_file="$(tfenv-version-file)" \ && log 'debug' "tfenv-version-file reported: ${version_file}" \ || log 'error' "tfenv-version-file failed"; export version_file; diff --git a/libexec/tfenv-list-remote b/libexec/tfenv-list-remote index 8b04997..ff99959 100755 --- a/libexec/tfenv-list-remote +++ b/libexec/tfenv-list-remote @@ -27,7 +27,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/libexec/tfenv-min-required b/libexec/tfenv-min-required index b886e93..1399856 100755 --- a/libexec/tfenv-min-required +++ b/libexec/tfenv-min-required @@ -29,7 +29,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/libexec/tfenv-resolve-version b/libexec/tfenv-resolve-version index d488e52..e6c54e5 100755 --- a/libexec/tfenv-resolve-version +++ b/libexec/tfenv-resolve-version @@ -29,7 +29,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/libexec/tfenv-uninstall b/libexec/tfenv-uninstall index 19a506e..715d4f2 100755 --- a/libexec/tfenv-uninstall +++ b/libexec/tfenv-uninstall @@ -27,7 +27,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; @@ -112,5 +112,9 @@ dst_path="${TFENV_ROOT}/versions/${version}"; if [ -f "${dst_path}/terraform" ]; then log 'info' "Uninstall Terraform v${version}"; rm -r "${dst_path}"; + + # If no versions remain, remove the versions directory + rmdir "${TFENV_ROOT}/versions" 2>/dev/null; + log 'info' "Terraform v${version} is successfully uninstalled"; -fi; +fi; \ No newline at end of file diff --git a/libexec/tfenv-use b/libexec/tfenv-use index 2a96a2d..33817d3 100755 --- a/libexec/tfenv-use +++ b/libexec/tfenv-use @@ -26,7 +26,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/libexec/tfenv-version-file b/libexec/tfenv-version-file index e4f0ce7..6b9697a 100755 --- a/libexec/tfenv-version-file +++ b/libexec/tfenv-version-file @@ -29,7 +29,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/libexec/tfenv-version-name b/libexec/tfenv-version-name index d9bbe5d..b8923c4 100755 --- a/libexec/tfenv-version-name +++ b/libexec/tfenv-version-name @@ -28,7 +28,7 @@ if [ -z "${TFENV_ROOT:-""}" ]; then }; TFENV_ROOT="$(cd "$(dirname "$(readlink_f "${0}")")/.." && pwd)"; - [ -n ${TFENV_ROOT} ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; + [ -n "${TFENV_ROOT}" ] || early_death "Failed to 'cd \"\$(dirname \"\$(readlink_f \"${0}\")\")/..\" && pwd' while trying to determine TFENV_ROOT"; else TFENV_ROOT="${TFENV_ROOT%/}"; fi; diff --git a/test/test_uninstall.sh b/test/test_uninstall.sh index e3dde27..988e36a 100755 --- a/test/test_uninstall.sh +++ b/test/test_uninstall.sh @@ -87,6 +87,18 @@ for ((test_num=0; test_num<${tests_count}; ++test_num )) ; do || error_and_proceed "Test uninstall of version ${version} (via ${keyword}) failed"; done; +echo "### Uninstall removes versions directory" +cleanup || error_and_die "Cleanup failed?!" +( + tfenv install 0.12.1 || exit 1 + tfenv install 0.12.2 || exit 1 + [ -d "./versions" ] || exit 1 + tfenv uninstall 0.12.1 || exit 1 + [ -d "./versions" ] || exit 1 + tfenv uninstall 0.12.2 || exit 1 + [ -d "./versions" ] && exit 1 || exit 0 +) || error_and_proceed "Removing last version deletes versions directory" + if [ "${#errors[@]}" -gt 0 ]; then log 'warn' "===== The following list tests failed ====="; for error in "${errors[@]}"; do