Skip to content

Commit 82fe3ce

Browse files
authored
Merge pull request #272 from aston-r/download-latest-version-if-regex-is-used
Download latest version if user uses regex and TFENV_AUTO_INSTALL is true
2 parents 7508248 + 8625424 commit 82fe3ce

1 file changed

Lines changed: 34 additions & 17 deletions

File tree

libexec/tfenv-version-name

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ done;
6060
# Begin Script Body #
6161
#####################
6262

63-
if [ -z "${TFENV_TERRAFORM_VERSION:-""}" ]; then
63+
if [[ -z "${TFENV_TERRAFORM_VERSION:-""}" ]]; then
6464
TFENV_VERSION_FILE="$(tfenv-version-file)" \
6565
&& log 'debug' "TFENV_VERSION_FILE retrieved from tfenv-version-file: ${TFENV_VERSION_FILE}" \
6666
|| log 'error' 'Failed to retrieve TFENV_VERSION_FILE from tfenv-version-file';
@@ -74,7 +74,7 @@ else
7474
&& log 'debug' "TFENV_VERSION specified in TFENV_TERRAFORM_VERSION: ${TFENV_VERSION}";
7575

7676
TFENV_VERSION_SOURCE='TFENV_TERRAFORM_VERSION';
77-
fi
77+
fi;
7878

7979
if [[ "${TFENV_VERSION}" =~ ^latest.*$ ]]; then
8080
log 'debug' "TFENV_VERSION uses 'latest' keyword: ${TFENV_VERSION}";
@@ -86,23 +86,39 @@ if [[ "${TFENV_VERSION}" =~ ^latest.*$ ]]; then
8686
regex="${TFENV_VERSION##*\:}";
8787
log 'debug' "'latest' keyword uses regex: ${regex}";
8888
else
89-
regex='.*'; # Just saves a seperate command below without the grep
90-
log 'debug' "'latest' keyword does not use regex";
89+
regex="^[0-9]\+\.[0-9]\+\.[0-9]\+$";
90+
log 'debug' "Version uses latest keyword alone. Forcing regex to match stable versions only: ${regex}";
9191
fi;
9292

93-
version="$(\find "${TFENV_CONFIG_DIR}/versions/" -type d -exec basename {} \; \
94-
| tail -n +2 \
95-
| sort -t'.' -k 1nr,1 -k 2nr,2 -k 3nr,3 \
96-
| grep -e "${regex}" \
97-
| head -n 1)";
93+
declare local_version='';
94+
if [[ -d "${TFENV_CONFIG_DIR}/versions" ]]; then
95+
local_version="$(\find "${TFENV_CONFIG_DIR}/versions/" -type d -exec basename {} \; \
96+
| tail -n +2 \
97+
| sort -t'.' -k 1nr,1 -k 2nr,2 -k 3nr,3 \
98+
| grep -e "${regex}" \
99+
| head -n 1)";
100+
fi;
98101

99-
if [ -n "${version}" ]; then
100-
log 'debug' "Version selected: ${version}";
101-
TFENV_VERSION="${version}"
102+
if [[ "${TFENV_AUTO_INSTALL:-true}" == "true" ]]; then
103+
log 'debug' "Trying to find the remote version using the regex: ${regex}";
104+
remote_version="$(tfenv-list-remote | grep -e "${regex}" | head -n 1)";
105+
if [[ -n "${remote_version}" ]]; then
106+
if [[ "${local_version}" != "${remote_version}" ]]; then
107+
log 'debug' "The installed version '${local_version}' does not much the remote version '${remote_version}'";
108+
TFENV_VERSION="${remote_version}";
109+
else
110+
TFENV_VERSION="${local_version}";
111+
fi;
112+
else
113+
log 'error' "No versions matching '${requested}' found in remote";
114+
fi;
102115
else
103-
log 'error' "No installed versions of terraform matched '${TFENV_VERSION}'";
116+
if [[ -n "${local_version}" ]]; then
117+
TFENV_VERSION="${local_version}";
118+
else
119+
log 'error' "No installed versions of terraform matched '${TFENV_VERSION}'";
120+
fi;
104121
fi;
105-
106122
else
107123
log 'debug' 'TFENV_VERSION does not use "latest" keyword';
108124

@@ -113,10 +129,11 @@ else
113129
fi;
114130
fi;
115131

116-
[ -z "${TFENV_VERSION}" ] \
117-
&& log 'error' "Version could not be resolved (set by ${TFENV_VERSION_SOURCE} or tfenv use <version>)";
132+
if [[ -z "${TFENV_VERSION}" ]]; then
133+
log 'error' "Version could not be resolved (set by ${TFENV_VERSION_SOURCE} or tfenv use <version>)";
134+
fi;
118135

119-
if [ ! -d "${TFENV_CONFIG_DIR}/versions/${TFENV_VERSION}" ]; then
136+
if [[ ! -d "${TFENV_CONFIG_DIR}/versions/${TFENV_VERSION}" ]]; then
120137
log 'debug' "version '${TFENV_VERSION}' is not installed (set by ${TFENV_VERSION_SOURCE})";
121138
fi;
122139

0 commit comments

Comments
 (0)