Private/Resolve-Version.ps1

Function Resolve-Version {
    [cmdletbinding()]
    Param(
        $Config
    )

    # order of precedence for desired version:
    # .terrafun-version > $env:terraform_version > user profile > default to latest

    $ErrorActionPreference = "stop"

    $Version = [pscustomobject]@{
        DesiredVersion = $null
        Source         = $null
    }

    # check user profile
    if ($Config.DesiredVersion) {
        if ($Config.AvailableVersions -contains $Config.DesiredVersion) {
            $Version.DesiredVersion = $Config.DesiredVersion
            $Version.Source = "user profile"
        }
        else {
            Write-Error ("unable to find specified terraform version {0}" -f $Config.DesiredVersion)
        }
    }
    
    # check env variable
    if ($env:terraform_version) {
        if ($Config.AvailableVersions -contains $env:terraform_version) {
            $Version.DesiredVersion = $env:terraform_version
            $Version.Source = '$env:terraform_version'
        }
        else {
            Write-Error ("unable to find specified terraform version {0}" -f $env:terraform_version)
        }
    }
    
    # check .terraform-version file
    if (Test-Path -Path ".terraform-version") {
        $VersionFile = (Get-Content -Path ".terraform-version" -Raw).Trim()
        if ($Config.AvailableVersions -contains $VersionFile) {
            $Version.DesiredVersion = $VersionFile
            $Version.Source = ".terraform-version"
        }
        else {
            Write-Error ("unable to find specified terraform version {0}" -f $VersionFile)
        }
        
    }
    
    # default to latest
    if ($null -eq $Version.DesiredVersion) {
        $Version.DesiredVersion = [version[]]$Config.AvailableVersions | Sort-Object -Descending | Select-Object -First 1
        $Version.Source = "latest"
    }

    Return $Version

}