From 29d53e57663ca7fe2090432033173ae6446003f9 Mon Sep 17 00:00:00 2001 From: Chris ter Beke <1134120+ChrisTerBeke@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:50:34 +0100 Subject: [PATCH] Also implement --required for the command --- cmd/use.go | 32 ++++++++++++++++++++++++++------ pkg/use/use.go | 37 +++++++++++++++++++++---------------- 2 files changed, 47 insertions(+), 22 deletions(-) diff --git a/cmd/use.go b/cmd/use.go index fc0f575..5d4ce71 100644 --- a/cmd/use.go +++ b/cmd/use.go @@ -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 ( @@ -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]) }, } ) @@ -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") } diff --git a/pkg/use/use.go b/pkg/use/use.go index eea54a2..342c7ab 100644 --- a/pkg/use/use.go +++ b/pkg/use/use.go @@ -13,22 +13,7 @@ import ( ) // UseVersion activates the specified Terraform version or one of the latest versions -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))) @@ -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 + } + } +}