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' ;
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
7979if [[ " ${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=" $( \f ind " ${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=" $( \f ind " ${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-
106122else
107123 log ' debug' ' TFENV_VERSION does not use "latest" keyword' ;
108124
@@ -113,10 +129,11 @@ else
113129 fi ;
114130fi ;
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} )" ;
121138fi ;
122139
0 commit comments