Skip to content

Commit

Permalink
Also implement --required for the command
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisTerBeke committed Feb 27, 2024
1 parent 06996da commit 29d53e5
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 22 deletions.
32 changes: 26 additions & 6 deletions cmd/use.go
Expand Up @@ -19,7 +19,11 @@ const (
"\n" +
"\n" +
"# Use the latest pre-release Terraform version\n" +
"tfversion use --latest --pre-release"
"tfversion use --latest --pre-release\n" +
"\n" +
"\n" +
"# Use the required Terraform version for your current directory\n" +
"tfversion use --required"
)

var (
Expand All @@ -33,21 +37,36 @@ var (
}
},
Run: func(cmd *cobra.Command, args []string) {

// use latest version
if latest {
if len(args) != 0 {
fmt.Println("error: `--latest` flag does not require specifying a Terraform version")
fmt.Printf("See %s for help and examples\n", color.BlueString("`tfversion install -h`"))
os.Exit(1)
}
use.UseVersion("", latest, preRelease)
} else {
if len(args) != 1 {
fmt.Println("error: provide a Terraform version to activate")
use.UseLatestVersion(preRelease)
os.Exit(0)
}

// use required version
if required {
if len(args) != 0 {
fmt.Println("error: `--required` flag does not require specifying a Terraform version")
fmt.Printf("See %s for help and examples\n", color.BlueString("`tfversion install -h`"))
os.Exit(1)
}
use.UseVersion(args[0], latest, preRelease)
use.UseRequiredVersion()
os.Exit(0)
}

// use specific version
if len(args) != 1 {
fmt.Println("error: provide a Terraform version to activate")
fmt.Printf("See %s for help and examples\n", color.BlueString("`tfversion install -h`"))
os.Exit(1)
}
use.UseVersion(args[0])
},
}
)
Expand All @@ -56,4 +75,5 @@ func init() {
rootCmd.AddCommand(useCmd)
useCmd.Flags().BoolVar(&latest, "latest", false, "use the latest stable Terraform version")
useCmd.Flags().BoolVar(&preRelease, "pre-release", false, "When used with --latest, use the latest pre-release version")
useCmd.Flags().BoolVar(&required, "required", false, "use the required Terraform version for your current directory")
}
37 changes: 21 additions & 16 deletions pkg/use/use.go
Expand Up @@ -13,22 +13,7 @@ import (
)

// UseVersion activates the specified Terraform version or one of the latest versions

Check failure on line 15 in pkg/use/use.go

View workflow job for this annotation

GitHub Actions / build

Comment should end in a period (godot)
func UseVersion(version string, latest bool, preRelease bool) {
// Get the available Terraform versions
versions := list.GetAvailableVersions()

// Set the version to the latest stable version if the `latest` flag is set
// or to the latest pre-release version if the `latest` and `pre-release` flags are set
if latest {
for _, v := range versions {
if !preRelease && helpers.IsPreReleaseVersion(v) {
continue
}
version = v
break
}
}

func UseVersion(version string) {
if !download.IsAlreadyDownloaded(version) {
if helpers.IsPreReleaseVersion(version) {
fmt.Printf("Terraform version %s not found, run %s to install\n", color.YellowString(version), color.BlueString(fmt.Sprintf("`tfversion install %s`", version)))
Expand Down Expand Up @@ -83,3 +68,23 @@ func UseVersion(version string, latest bool, preRelease bool) {
fmt.Printf("Activated Terraform version %s\n", color.BlueString(version))
}
}

func UseLatestVersion(preRelease bool) {
version := list.FindLatestVersion(preRelease)
UseVersion(version)
}

func UseRequiredVersion() {
terraformFiles := helpers.FindTerraformFiles()
if len(terraformFiles) == 0 {
fmt.Println("No Terraform files found in current directory")
os.Exit(1)
}
for _, file := range terraformFiles {
requiredVersion := helpers.FindRequiredVersionInFile(file)
if requiredVersion != "" {
UseVersion(requiredVersion)
break
}
}
}

0 comments on commit 29d53e5

Please sign in to comment.