From 4dc0c687d56aae2922b611bd38a3acbdfab36a3c Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 16:16:01 +0100 Subject: [PATCH 01/14] fix lint Signed-off-by: Denis Vaumoron --- cmd/tenv/tenv.go | 2 +- pkg/download/download.go | 4 ++-- pkg/download/download_test.go | 8 ++++---- pkg/htmlquery/html.go | 2 +- pkg/lockfile/lockfile_test.go | 4 +++- versionmanager/builder/builder.go | 2 +- versionmanager/lastuse/last.go | 8 ++++++-- versionmanager/manager.go | 5 ++++- versionmanager/retriever/atmos/atmosretriever.go | 10 ++++++---- versionmanager/retriever/html/htmlretriever.go | 2 +- .../retriever/terraform/terraformretriever.go | 10 +++++----- .../retriever/terragrunt/terragruntretriever.go | 4 ++-- versionmanager/retriever/tofu/tofuretriever.go | 6 +++--- 13 files changed, 39 insertions(+), 28 deletions(-) diff --git a/cmd/tenv/tenv.go b/cmd/tenv/tenv.go index 13ea6a8c..d93e745a 100644 --- a/cmd/tenv/tenv.go +++ b/cmd/tenv/tenv.go @@ -159,7 +159,7 @@ func manageNoArgsCmd(conf *config.Config, hclParser *hclparse.Parser) { ctx := context.Background() if err := toolUI(ctx, conf, hclParser); err != nil { - fmt.Println(err.Error()) + fmt.Println(err.Error()) //nolint os.Exit(1) } diff --git a/pkg/download/download.go b/pkg/download/download.go index 48831f8c..5c6fd3a4 100644 --- a/pkg/download/download.go +++ b/pkg/download/download.go @@ -28,7 +28,7 @@ import ( type RequestOption = func(*http.Request) -func ApplyUrlTranformer(urlTransformer func(string) (string, error), baseURLs ...string) ([]string, error) { +func ApplyURLTranformer(urlTransformer func(string) (string, error), baseURLs ...string) ([]string, error) { transformedURLs := make([]string, 0, len(baseURLs)) for _, baseURL := range baseURLs { transformedURL, err := urlTransformer(baseURL) @@ -77,7 +77,7 @@ func JSON(ctx context.Context, url string, display func(string), requestOptions func NoDisplay(string) {} -func UrlTranformer(rewriteRule []string) func(string) (string, error) { +func URLTranformer(rewriteRule []string) func(string) (string, error) { if len(rewriteRule) < 2 { return noTransform } diff --git a/pkg/download/download_test.go b/pkg/download/download_test.go index b8b64cd5..3ae47bee 100644 --- a/pkg/download/download_test.go +++ b/pkg/download/download_test.go @@ -25,7 +25,7 @@ import ( ) func TestUrlTransformer(t *testing.T) { - urlTransformer := download.UrlTranformer([]string{"https://releases.hashicorp.com", "http://localhost:8080"}) + urlTransformer := download.URLTranformer([]string{"https://releases.hashicorp.com", "http://localhost:8080"}) value, err := urlTransformer("https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_linux_386.zip") if err != nil { @@ -38,7 +38,7 @@ func TestUrlTransformer(t *testing.T) { } func TestUrlTransformerDisabled(t *testing.T) { - urlTransformer := download.UrlTranformer(nil) + urlTransformer := download.URLTranformer(nil) value, err := urlTransformer("test_value") if err != nil { @@ -51,7 +51,7 @@ func TestUrlTransformerDisabled(t *testing.T) { } func TestUrlTransformerPrefix(t *testing.T) { - urlTransformer := download.UrlTranformer([]string{"https://github.com", "https://go.dev"}) + urlTransformer := download.URLTranformer([]string{"https://github.com", "https://go.dev"}) initialValue := "https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_darwin_amd64.zip" value, err := urlTransformer(initialValue) @@ -65,7 +65,7 @@ func TestUrlTransformerPrefix(t *testing.T) { } func TestUrlTransformerSlash(t *testing.T) { - urlTransformer := download.UrlTranformer([]string{"https://releases.hashicorp.com/", "http://localhost"}) + urlTransformer := download.URLTranformer([]string{"https://releases.hashicorp.com/", "http://localhost"}) value, err := urlTransformer("https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_darwin_amd64.zip") if err != nil { diff --git a/pkg/htmlquery/html.go b/pkg/htmlquery/html.go index ee4edec0..dd595beb 100644 --- a/pkg/htmlquery/html.go +++ b/pkg/htmlquery/html.go @@ -57,7 +57,7 @@ func extractList(data []byte, selector string, extractor func(*goquery.Selection } var extracteds []string - doc.Find(selector).Each(func(i int, s *goquery.Selection) { + doc.Find(selector).Each(func(_ int, s *goquery.Selection) { if extracted := extractor(s); extracted != "" { extracteds = append(extracteds, extracted) } diff --git a/pkg/lockfile/lockfile_test.go b/pkg/lockfile/lockfile_test.go index c8be2f80..ee07b6ae 100644 --- a/pkg/lockfile/lockfile_test.go +++ b/pkg/lockfile/lockfile_test.go @@ -30,6 +30,8 @@ import ( "github.com/tofuutils/tenv/v3/pkg/loghelper" ) +const rwPerm = 0o600 + //go:embed testdata/data1.txt var data1 []byte @@ -95,7 +97,7 @@ func writeReadFile(dirPath string, filePath string, data []byte, displayer loghe deleteLock := lockfile.Write(dirPath, displayer) defer deleteLock() - if err := os.WriteFile(filePath, data, 0o644); err != nil { + if err := os.WriteFile(filePath, data, rwPerm); err != nil { return nil, err } diff --git a/versionmanager/builder/builder.go b/versionmanager/builder/builder.go index 8e846e4e..d5e4ae77 100644 --- a/versionmanager/builder/builder.go +++ b/versionmanager/builder/builder.go @@ -44,7 +44,7 @@ var Builders = map[string]BuilderFunc{ type BuilderFunc = func(*config.Config, *hclparse.Parser) versionmanager.VersionManager -func BuildAtmosManager(conf *config.Config, hclParser *hclparse.Parser) versionmanager.VersionManager { +func BuildAtmosManager(conf *config.Config, _ *hclparse.Parser) versionmanager.VersionManager { atmosRetriever := atmosretriever.Make(conf) versionFiles := []types.VersionFile{ {Name: ".atmos-version", Parser: flatparser.RetrieveVersion}, diff --git a/versionmanager/lastuse/last.go b/versionmanager/lastuse/last.go index 41c8ae65..cb00e6dd 100644 --- a/versionmanager/lastuse/last.go +++ b/versionmanager/lastuse/last.go @@ -30,7 +30,11 @@ import ( "github.com/tofuutils/tenv/v3/pkg/loghelper" ) -const fileName = "last-use.txt" +const ( + fileName = "last-use.txt" + + rwPerm = 0o600 +) func Read(dirPath string, displayer loghelper.Displayer) time.Time { data, err := os.ReadFile(filepath.Join(dirPath, fileName)) @@ -54,7 +58,7 @@ func WriteNow(dirPath string, displayer loghelper.Displayer) { lastUsePath := filepath.Join(dirPath, fileName) nowData := time.Now().AppendFormat(nil, time.DateOnly) //nolint - if err := os.WriteFile(lastUsePath, nowData, 0o644); err != nil { + if err := os.WriteFile(lastUsePath, nowData, rwPerm); err != nil { displayer.Log(hclog.Warn, "Unable to write date in file", loghelper.Error, err) } } diff --git a/versionmanager/manager.go b/versionmanager/manager.go index 5dbcb5a8..2f1a1df0 100644 --- a/versionmanager/manager.go +++ b/versionmanager/manager.go @@ -353,7 +353,10 @@ func (m VersionManager) Uninstall(requestedVersion string) error { m.conf.Displayer.Display("Uninstall ? [y/N]") buffer := make([]byte, 1) - os.Stdin.Read(buffer) + if _, err = os.Stdin.Read(buffer); err != nil { + return err + } + read := buffer[0] if doUninstall := read == 'y' || read == 'Y'; !doUninstall { diff --git a/versionmanager/retriever/atmos/atmosretriever.go b/versionmanager/retriever/atmos/atmosretriever.go index fecc52a2..5abbd7b6 100644 --- a/versionmanager/retriever/atmos/atmosretriever.go +++ b/versionmanager/retriever/atmos/atmosretriever.go @@ -41,6 +41,8 @@ import ( const ( baseFileName = "atmos_" cloudposseName = "cloudposse" + + rwePerm = 0o755 ) type AtmosRetriever struct { @@ -89,8 +91,8 @@ func (r AtmosRetriever) InstallRelease(ctx context.Context, versionStr string, t return err } - urlTranformer := download.UrlTranformer(r.conf.Atmos.GetRewriteRule()) - assetURLs, err = download.ApplyUrlTranformer(urlTranformer, assetURLs...) + urlTranformer := download.URLTranformer(r.conf.Atmos.GetRewriteRule()) + assetURLs, err = download.ApplyURLTranformer(urlTranformer, assetURLs...) if err != nil { return err } @@ -110,12 +112,12 @@ func (r AtmosRetriever) InstallRelease(ctx context.Context, versionStr string, t return err } - err = os.MkdirAll(targetPath, 0o755) + err = os.MkdirAll(targetPath, rwePerm) if err != nil { return err } - return os.WriteFile(filepath.Join(targetPath, winbin.GetBinaryName(cmdconst.AtmosName)), data, 0o755) + return os.WriteFile(filepath.Join(targetPath, winbin.GetBinaryName(cmdconst.AtmosName)), data, rwePerm) } func (r AtmosRetriever) ListReleases(ctx context.Context) ([]string, error) { diff --git a/versionmanager/retriever/html/htmlretriever.go b/versionmanager/retriever/html/htmlretriever.go index ee733761..e6f24490 100644 --- a/versionmanager/retriever/html/htmlretriever.go +++ b/versionmanager/retriever/html/htmlretriever.go @@ -35,7 +35,7 @@ func BuildAssetURLs(baseAssetURL string, assetNames ...string) ([]string, error) return url.JoinPath(baseAssetURL, assetName) //nolint } - return download.ApplyUrlTranformer(joinTransformer, assetNames...) + return download.ApplyURLTranformer(joinTransformer, assetNames...) } func ListReleases(ctx context.Context, baseURL string, remoteConf map[string]string, ro []download.RequestOption) ([]string, error) { diff --git a/versionmanager/retriever/terraform/terraformretriever.go b/versionmanager/retriever/terraform/terraformretriever.go index c7d4acbd..39ecda65 100644 --- a/versionmanager/retriever/terraform/terraformretriever.go +++ b/versionmanager/retriever/terraform/terraformretriever.go @@ -44,7 +44,7 @@ const ( publicKeyURL = "https://www.hashicorp.com/.well-known/pgp-key.txt" baseFileName = "terraform_" - indexJson = "index.json" + indexJSON = "index.json" ) type TerraformRetriever struct { @@ -88,7 +88,7 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, downloadURL, downloadSumsURL, downloadSumsSigURL = assetURLs[0], assetURLs[1], assetURLs[2] case config.ModeAPI: - versionUrl, err := url.JoinPath(baseVersionURL, indexJson) //nolint + versionUrl, err := url.JoinPath(baseVersionURL, indexJSON) //nolint if err != nil { return err } @@ -119,8 +119,8 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, return config.ErrInstallMode } - urlTranformer := download.UrlTranformer(r.conf.Tf.GetRewriteRule()) - assetURLs, err := download.ApplyUrlTranformer(urlTranformer, downloadURL, downloadSumsURL, downloadSumsSigURL) + urlTranformer := download.URLTranformer(r.conf.Tf.GetRewriteRule()) + assetURLs, err := download.ApplyURLTranformer(urlTranformer, downloadURL, downloadSumsURL, downloadSumsSigURL) if err != nil { return err } @@ -156,7 +156,7 @@ func (r TerraformRetriever) ListReleases(ctx context.Context) ([]string, error) return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tf.Data, ro) case config.ModeAPI: - releasesURL, err := url.JoinPath(baseURL, indexJson) //nolint + releasesURL, err := url.JoinPath(baseURL, indexJSON) //nolint if err != nil { return nil, err } diff --git a/versionmanager/retriever/terragrunt/terragruntretriever.go b/versionmanager/retriever/terragrunt/terragruntretriever.go index 95a26a3f..75b8bf99 100644 --- a/versionmanager/retriever/terragrunt/terragruntretriever.go +++ b/versionmanager/retriever/terragrunt/terragruntretriever.go @@ -86,8 +86,8 @@ func (r TerragruntRetriever) InstallRelease(ctx context.Context, versionStr stri return err } - urlTranformer := download.UrlTranformer(r.conf.Tg.GetRewriteRule()) - assetURLs, err = download.ApplyUrlTranformer(urlTranformer, assetURLs...) + urlTranformer := download.URLTranformer(r.conf.Tg.GetRewriteRule()) + assetURLs, err = download.ApplyURLTranformer(urlTranformer, assetURLs...) if err != nil { return err } diff --git a/versionmanager/retriever/tofu/tofuretriever.go b/versionmanager/retriever/tofu/tofuretriever.go index 64e5243e..196e5f01 100644 --- a/versionmanager/retriever/tofu/tofuretriever.go +++ b/versionmanager/retriever/tofu/tofuretriever.go @@ -116,7 +116,7 @@ func (r TofuRetriever) InstallRelease(ctx context.Context, versionStr string, ta return err2 } - assetURLs, err = download.ApplyUrlTranformer(builder.Build, assetNames...) + assetURLs, err = download.ApplyURLTranformer(builder.Build, assetNames...) default: return config.ErrInstallMode } @@ -124,8 +124,8 @@ func (r TofuRetriever) InstallRelease(ctx context.Context, versionStr string, ta return err } - urlTranformer := download.UrlTranformer(r.conf.Tofu.GetRewriteRule()) - assetURLs, err = download.ApplyUrlTranformer(urlTranformer, assetURLs...) + urlTranformer := download.URLTranformer(r.conf.Tofu.GetRewriteRule()) + assetURLs, err = download.ApplyURLTranformer(urlTranformer, assetURLs...) if err != nil { return err } From 2e605ac7416b743ab876991bf9e451c46694703c Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 16:36:21 +0100 Subject: [PATCH 02/14] fix lint Signed-off-by: Denis Vaumoron --- pkg/check/cosign/check.go | 4 ++- pkg/check/sha256/check_test.go | 5 +-- pkg/lockfile/lockfile.go | 31 ++++++++++--------- pkg/zip/zip.go | 6 ++-- versionmanager/builder/builder.go | 4 +-- versionmanager/manager.go | 9 ++++-- versionmanager/proxy/proxy.go | 2 +- .../terragrunt/terragruntretriever.go | 6 ++-- versionmanager/tenvlib/lib.go | 8 ++--- 9 files changed, 45 insertions(+), 30 deletions(-) diff --git a/pkg/check/cosign/check.go b/pkg/check/cosign/check.go index c168be78..f30f27ac 100644 --- a/pkg/check/cosign/check.go +++ b/pkg/check/cosign/check.go @@ -32,6 +32,8 @@ import ( const ( cosignExecName = "cosign" verified = "Verified OK" + + rwPerm = 0o600 ) var ( @@ -93,7 +95,7 @@ func tempFile(name string, data []byte) (string, func(), error) { } tmpFileName := tmpFile.Name() - if err = os.WriteFile(tmpFileName, data, 0o600); err != nil { + if err = os.WriteFile(tmpFileName, data, rwPerm); err != nil { return "", nil, err } diff --git a/pkg/check/sha256/check_test.go b/pkg/check/sha256/check_test.go index 075936ad..7f2c811a 100644 --- a/pkg/check/sha256/check_test.go +++ b/pkg/check/sha256/check_test.go @@ -20,6 +20,7 @@ package sha256check_test import ( _ "embed" + "errors" "testing" sha256check "github.com/tofuutils/tenv/v3/pkg/check/sha256" @@ -44,7 +45,7 @@ func TestSha256CheckError(t *testing.T) { if err := sha256check.Check(data, dataSums, "hello2.txt"); err == nil { t.Error("Should fail on non corresponding file and fileName") - } else if err != sha256check.ErrCheck { + } else if !errors.Is(err, sha256check.ErrCheck) { t.Error("Incorrect error reported, get :", err) } } @@ -54,7 +55,7 @@ func TestSha256Extract(t *testing.T) { if err := sha256check.Check(data, dataSums, "any_name.txt"); err == nil { t.Error("Should fail on non exiting fileName") - } else if err != sha256check.ErrNoSum { + } else if !errors.Is(err, sha256check.ErrNoSum) { t.Error("Incorrect error reported, get :", err) } } diff --git a/pkg/lockfile/lockfile.go b/pkg/lockfile/lockfile.go index 214ba00e..c5d3bc53 100644 --- a/pkg/lockfile/lockfile.go +++ b/pkg/lockfile/lockfile.go @@ -43,6 +43,7 @@ func Write(dirPath string, displayer loghelper.Displayer) func() { f, err := os.OpenFile(lockPath, os.O_CREATE|os.O_EXCL, 0o644) //nolint if err == nil { f.Close() + break } @@ -60,24 +61,26 @@ func Write(dirPath string, displayer loghelper.Displayer) func() { // the returned function may be used to avoid goroutine leak // (also avoid conflicting behavior with versionmanager/proxy.transmitIncreasingSignal). func CleanAndExitOnInterrupt(clean func()) func() { - signalChan := make(chan os.Signal) + signalChan := make(chan os.Signal, 1) endChan := make(chan struct{}) + go listenToClean(signalChan, endChan, clean) signal.Notify(signalChan, os.Interrupt) - go func() { - for { - select { - case <-signalChan: - clean() - os.Exit(1) - case <-endChan: - signal.Stop(signalChan) - - break - } - } - }() return sync.OnceFunc(func() { //nolint endChan <- struct{}{} }) } + +func listenToClean(signalChan chan os.Signal, endChan <-chan struct{}, clean func()) { + for { + select { + case <-signalChan: + clean() + os.Exit(1) + case <-endChan: + signal.Stop(signalChan) + + break + } + } +} diff --git a/pkg/zip/zip.go b/pkg/zip/zip.go index 109beb6a..1cc9102d 100644 --- a/pkg/zip/zip.go +++ b/pkg/zip/zip.go @@ -28,9 +28,11 @@ import ( "strings" ) +const rwePerm = 0o755 + // ensure the directory exists with a MkdirAll call. func UnzipToDir(dataZip []byte, dirPath string, filter func(string) bool) error { - err := os.MkdirAll(dirPath, 0o755) + err := os.MkdirAll(dirPath, rwePerm) if err != nil { return err } @@ -59,7 +61,7 @@ func copyZipFileToDir(zipFile *zip.File, dirPath string, filter func(string) boo if destPath[len(destPath)-1] == '/' { // trailing slash indicates a directory - return os.MkdirAll(destPath, 0o755) + return os.MkdirAll(destPath, rwePerm) } reader, err := zipFile.Open() diff --git a/versionmanager/builder/builder.go b/versionmanager/builder/builder.go index d5e4ae77..57a96db8 100644 --- a/versionmanager/builder/builder.go +++ b/versionmanager/builder/builder.go @@ -35,14 +35,14 @@ import ( "github.com/tofuutils/tenv/v3/versionmanager/semantic/types" ) -var Builders = map[string]BuilderFunc{ +var Builders = map[string]Func{ cmdconst.TofuName: BuildTofuManager, cmdconst.TerraformName: BuildTfManager, cmdconst.TerragruntName: BuildTgManager, cmdconst.AtmosName: BuildAtmosManager, } -type BuilderFunc = func(*config.Config, *hclparse.Parser) versionmanager.VersionManager +type Func = func(*config.Config, *hclparse.Parser) versionmanager.VersionManager func BuildAtmosManager(conf *config.Config, _ *hclparse.Parser) versionmanager.VersionManager { atmosRetriever := atmosretriever.Make(conf) diff --git a/versionmanager/manager.go b/versionmanager/manager.go index 2f1a1df0..334ed720 100644 --- a/versionmanager/manager.go +++ b/versionmanager/manager.go @@ -42,6 +42,11 @@ import ( "github.com/tofuutils/tenv/v3/versionmanager/semantic/types" ) +const ( + rwePerm = 0o755 + rwPerm = 0o600 +) + var ( errEmptyVersion = errors.New("empty version") errNoCompatible = errors.New("no compatible version found") @@ -186,7 +191,7 @@ func (m VersionManager) InstallMultiple(ctx context.Context, versions []string) func (m VersionManager) InstallPath() (string, error) { dirPath := filepath.Join(m.conf.RootPath, m.FolderName) - return dirPath, os.MkdirAll(dirPath, 0o755) + return dirPath, os.MkdirAll(dirPath, rwePerm) } func (m VersionManager) ListLocal(reverseOrder bool) ([]DatedVersion, error) { @@ -559,7 +564,7 @@ func removeFile(filePath string, conf *config.Config) error { } func writeFile(filePath string, content string, conf *config.Config) error { - err := os.WriteFile(filePath, []byte(content), 0o644) + err := os.WriteFile(filePath, []byte(content), rwPerm) if err == nil { conf.Displayer.Display(loghelper.Concat("Written ", content, " in ", filePath)) } diff --git a/versionmanager/proxy/proxy.go b/versionmanager/proxy/proxy.go index c0bb8ce1..6b2fcd10 100644 --- a/versionmanager/proxy/proxy.go +++ b/versionmanager/proxy/proxy.go @@ -41,7 +41,7 @@ const chdirFlagPrefix = "-chdir=" var errDelimiter = errors.New("key and value should not contains delimiter") // Always call os.Exit. -func Exec(conf *config.Config, builderFunc builder.BuilderFunc, hclParser *hclparse.Parser, execName string, cmdArgs []string) { +func Exec(conf *config.Config, builderFunc builder.Func, hclParser *hclparse.Parser, execName string, cmdArgs []string) { conf.InitDisplayer(true) versionManager := builderFunc(conf, hclParser) diff --git a/versionmanager/retriever/terragrunt/terragruntretriever.go b/versionmanager/retriever/terragrunt/terragruntretriever.go index 75b8bf99..c63a15f4 100644 --- a/versionmanager/retriever/terragrunt/terragruntretriever.go +++ b/versionmanager/retriever/terragrunt/terragruntretriever.go @@ -41,6 +41,8 @@ import ( const ( baseFileName = "terragrunt_" gruntworkName = "gruntwork-io" + + rwePerm = 0o755 ) type TerragruntRetriever struct { @@ -107,12 +109,12 @@ func (r TerragruntRetriever) InstallRelease(ctx context.Context, versionStr stri return err } - err = os.MkdirAll(targetPath, 0o755) + err = os.MkdirAll(targetPath, rwePerm) if err != nil { return err } - return os.WriteFile(filepath.Join(targetPath, winbin.GetBinaryName(cmdconst.TerragruntName)), data, 0o755) + return os.WriteFile(filepath.Join(targetPath, winbin.GetBinaryName(cmdconst.TerragruntName)), data, rwePerm) } func (r TerragruntRetriever) ListReleases(ctx context.Context) ([]string, error) { diff --git a/versionmanager/tenvlib/lib.go b/versionmanager/tenvlib/lib.go index 6620a70a..d5eb3f43 100644 --- a/versionmanager/tenvlib/lib.go +++ b/versionmanager/tenvlib/lib.go @@ -39,7 +39,7 @@ var errNoBuilder = errors.New("no builder for this tool") type tenvConfig struct { autoInstall bool - builders map[string]builder.BuilderFunc + builders map[string]builder.Func conf *config.Config displayer loghelper.Displayer hclParser *hclparse.Parser @@ -50,7 +50,7 @@ type tenvConfig struct { type TenvOption func(*tenvConfig) // add builder or override default builder (see builder.Builders). -func AddTool(toolName string, builderFunc builder.BuilderFunc) TenvOption { +func AddTool(toolName string, builderFunc builder.Func) TenvOption { return func(tc *tenvConfig) { tc.builders[toolName] = builderFunc } @@ -88,7 +88,7 @@ func WithHCLParser(hclParser *hclparse.Parser) TenvOption { // Not concurrent safe. type Tenv struct { - builders map[string]builder.BuilderFunc + builders map[string]builder.Func conf *config.Config hclParser *hclparse.Parser ignoreEnv bool @@ -97,7 +97,7 @@ type Tenv struct { // The returned wrapper is not concurrent safe. func Make(options ...TenvOption) (Tenv, error) { - builders := map[string]builder.BuilderFunc{} + builders := map[string]builder.Func{} for toolName, builderFunc := range builder.Builders { builders[toolName] = builderFunc } From 682a1e9da79011dfe9abfbb2431693ad19fc27c9 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 16:56:42 +0100 Subject: [PATCH 03/14] fix lint Signed-off-by: Denis Vaumoron --- cmd/tenv/subcmd.go | 11 +++-- pkg/check/sha256/check.go | 2 +- pkg/github/github.go | 4 +- pkg/github/github_test.go | 28 ++++++------ versionmanager/lastuse/last.go | 4 +- versionmanager/manager.go | 2 +- versionmanager/proxy/proxy.go | 3 -- .../retriever/tofu/tofuretriever.go | 3 +- versionmanager/tenvlib/lib.go | 44 +++++++++---------- 9 files changed, 49 insertions(+), 52 deletions(-) diff --git a/cmd/tenv/subcmd.go b/cmd/tenv/subcmd.go index 0a3d601a..1ffcfe54 100644 --- a/cmd/tenv/subcmd.go +++ b/cmd/tenv/subcmd.go @@ -21,6 +21,7 @@ package main import ( "bytes" "context" + "errors" "os" "strconv" "strings" @@ -87,11 +88,10 @@ func newDetectCmd(conf *config.Config, versionManager versionmanager.VersionMana detectedVersion, err := versionManager.Detect(context.Background(), false) if err != nil { - if err == versionmanager.ErrNoCompatibleLocally { - loghelper.StdDisplay(err.Error()) - } else { + if !errors.Is(err, versionmanager.ErrNoCompatibleLocally) { return err } + loghelper.StdDisplay(err.Error()) } loghelper.StdDisplay(loghelper.Concat(versionManager.FolderName, " ", detectedVersion, " will be run from this directory.")) @@ -135,7 +135,7 @@ If a parameter is passed, available options: Long: descBuilder.String(), Args: cobra.MaximumNArgs(1), SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, args []string) error { conf.InitDisplayer(false) ctx := context.Background() @@ -329,9 +329,8 @@ If a parameter is passed, available parameter options: if len(args) == 0 { return uninstallUI(versionManager) - } else { - return versionManager.Uninstall(args[0]) } + return versionManager.Uninstall(args[0]) }, } diff --git a/pkg/check/sha256/check.go b/pkg/check/sha256/check.go index 08115087..0482b75d 100644 --- a/pkg/check/sha256/check.go +++ b/pkg/check/sha256/check.go @@ -48,7 +48,7 @@ func Check(data []byte, dataSums []byte, fileName string) error { func extract(dataSums []byte, fileName string) ([]byte, error) { dataSumsStr := string(dataSums) for _, dataSumStr := range strings.Split(dataSumsStr, "\n") { - dataSumStr, ok := strings.CutSuffix(dataSumStr, fileName) //nolint + dataSumStr, ok := strings.CutSuffix(dataSumStr, fileName) if ok { dataSumStr = strings.TrimSpace(dataSumStr) diff --git a/pkg/github/github.go b/pkg/github/github.go index 354d9043..2f0a0d69 100644 --- a/pkg/github/github.go +++ b/pkg/github/github.go @@ -82,7 +82,7 @@ func AssetDownloadURL(ctx context.Context, tag string, searchedAssetNames []stri } return assetURLs, nil - } else if err != errContinue { + } else if !errors.Is(err, errContinue) { return nil, err } page++ @@ -118,7 +118,7 @@ func apiGetRequest(ctx context.Context, callURL string, authorizationHeader stri if authorizationHeader != "" { request.Header.Set("Authorization", authorizationHeader) } - request.Header.Set("X-GitHub-Api-Version", "2022-11-28") + request.Header.Set("X-GitHub-Api-Version", "2022-11-28") //nolint }) } diff --git a/pkg/github/github_test.go b/pkg/github/github_test.go index 9b7c893c..9a9c0489 100644 --- a/pkg/github/github_test.go +++ b/pkg/github/github_test.go @@ -36,7 +36,7 @@ var assetsData []byte var ( assetsValue any - assetsErr error + errAssets error ) //go:embed testdata/release.json @@ -44,7 +44,7 @@ var releaseData []byte var ( releaseValue any - releaseErr error + errRelease error ) //go:embed testdata/releases.json @@ -52,13 +52,13 @@ var releasesData []byte var ( releasesValue any - releasesErr error + errReleases error ) func init() { - assetsErr = json.Unmarshal(assetsData, &assetsValue) - releaseErr = json.Unmarshal(releaseData, &releaseValue) - releasesErr = json.Unmarshal(releasesData, &releasesValue) + errAssets = json.Unmarshal(assetsData, &assetsValue) + errRelease = json.Unmarshal(releaseData, &releaseValue) + errReleases = json.Unmarshal(releasesData, &releasesValue) } func TestExtractAssetsEmpty(t *testing.T) { @@ -77,8 +77,8 @@ func TestExtractAssetsEmpty(t *testing.T) { func TestExtractAssetsMissing(t *testing.T) { t.Parallel() - if assetsErr != nil { - t.Fatal("Unexpected parsing error : ", assetsErr) + if errAssets != nil { + t.Fatal("Unexpected parsing error : ", errAssets) } assets := map[string]string{} @@ -94,8 +94,8 @@ func TestExtractAssetsMissing(t *testing.T) { func TestExtractAssetsPresent(t *testing.T) { t.Parallel() - if assetsErr != nil { - t.Fatal("Unexpected parsing error : ", assetsErr) + if errAssets != nil { + t.Fatal("Unexpected parsing error : ", errAssets) } assets := map[string]string{} @@ -134,8 +134,8 @@ func TestExtractReleasesEmpty(t *testing.T) { func TestExtractReleasesPresent(t *testing.T) { t.Parallel() - if releasesErr != nil { - t.Fatal("Unexpected parsing error : ", releasesErr) + if errReleases != nil { + t.Fatal("Unexpected parsing error : ", errReleases) } var releases []string @@ -155,8 +155,8 @@ func TestExtractReleasesPresent(t *testing.T) { func TestExtractVersion(t *testing.T) { t.Parallel() - if releaseErr != nil { - t.Fatal("Unexpected parsing error : ", releaseErr) + if errRelease != nil { + t.Fatal("Unexpected parsing error : ", errRelease) } version := extractVersion(releaseValue) diff --git a/versionmanager/lastuse/last.go b/versionmanager/lastuse/last.go index cb00e6dd..e65739e1 100644 --- a/versionmanager/lastuse/last.go +++ b/versionmanager/lastuse/last.go @@ -44,7 +44,7 @@ func Read(dirPath string, displayer loghelper.Displayer) time.Time { return time.Time{} } - parsed, err := time.Parse(time.DateOnly, string(data)) //nolint + parsed, err := time.Parse(time.DateOnly, string(data)) if err != nil { displayer.Log(hclog.Warn, "Unable to parse date in file", loghelper.Error, err) @@ -56,7 +56,7 @@ func Read(dirPath string, displayer loghelper.Displayer) time.Time { func WriteNow(dirPath string, displayer loghelper.Displayer) { lastUsePath := filepath.Join(dirPath, fileName) - nowData := time.Now().AppendFormat(nil, time.DateOnly) //nolint + nowData := time.Now().AppendFormat(nil, time.DateOnly) if err := os.WriteFile(lastUsePath, nowData, rwPerm); err != nil { displayer.Log(hclog.Warn, "Unable to write date in file", loghelper.Error, err) diff --git a/versionmanager/manager.go b/versionmanager/manager.go index 334ed720..d6a85802 100644 --- a/versionmanager/manager.go +++ b/versionmanager/manager.go @@ -396,7 +396,7 @@ func (m VersionManager) UninstallMultiple(versions []string) error { func (m VersionManager) Use(ctx context.Context, requestedVersion string, workingDir bool) error { detectedVersion, err := m.Evaluate(ctx, requestedVersion, false) if err != nil { - if err != ErrNoCompatibleLocally { + if !errors.Is(err, ErrNoCompatibleLocally) { return err } diff --git a/versionmanager/proxy/proxy.go b/versionmanager/proxy/proxy.go index 6b2fcd10..d39a1701 100644 --- a/versionmanager/proxy/proxy.go +++ b/versionmanager/proxy/proxy.go @@ -20,7 +20,6 @@ package proxy import ( "context" - "errors" "fmt" "os" "os/exec" @@ -38,8 +37,6 @@ import ( const chdirFlagPrefix = "-chdir=" -var errDelimiter = errors.New("key and value should not contains delimiter") - // Always call os.Exit. func Exec(conf *config.Config, builderFunc builder.Func, hclParser *hclparse.Parser, execName string, cmdArgs []string) { conf.InitDisplayer(true) diff --git a/versionmanager/retriever/tofu/tofuretriever.go b/versionmanager/retriever/tofu/tofuretriever.go index 196e5f01..d1c979c8 100644 --- a/versionmanager/retriever/tofu/tofuretriever.go +++ b/versionmanager/retriever/tofu/tofuretriever.go @@ -20,6 +20,7 @@ package tofuretriever import ( "context" + "errors" "net/url" "os" "runtime" @@ -210,7 +211,7 @@ func (r TofuRetriever) checkSumAndSig(ctx context.Context, version *version.Vers identity := buildIdentity(version, stable) err = cosigncheck.Check(dataSums, dataSumsSig, dataSumsCert, identity, issuer, r.conf.Displayer) - if err == nil || err != cosigncheck.ErrNotInstalled { + if err == nil || !errors.Is(err, cosigncheck.ErrNotInstalled) { return err } diff --git a/versionmanager/tenvlib/lib.go b/versionmanager/tenvlib/lib.go index d5eb3f43..fcde8ca5 100644 --- a/versionmanager/tenvlib/lib.go +++ b/versionmanager/tenvlib/lib.go @@ -102,47 +102,47 @@ func Make(options ...TenvOption) (Tenv, error) { builders[toolName] = builderFunc } - tc := tenvConfig{ + wrapperConf := tenvConfig{ builders: builders, initConfigFunc: config.InitConfigFromEnv, } for _, option := range options { - option(&tc) + option(&wrapperConf) } - if tc.ignoreEnv { - tc.initConfigFunc = config.DefaultConfig + if wrapperConf.ignoreEnv { + wrapperConf.initConfigFunc = config.DefaultConfig } - if tc.conf == nil { - conf, err := tc.initConfigFunc() + if wrapperConf.conf == nil { + innerConf, err := wrapperConf.initConfigFunc() if err != nil { return Tenv{}, err } - tc.conf = &conf + wrapperConf.conf = &innerConf } - if tc.autoInstall { - tc.conf.SkipInstall = false + if wrapperConf.autoInstall { + wrapperConf.conf.SkipInstall = false } - if tc.displayer == nil { - tc.conf.InitDisplayer(false) + if wrapperConf.displayer == nil { + wrapperConf.conf.InitDisplayer(false) } else { - tc.conf.Displayer = tc.displayer + wrapperConf.conf.Displayer = wrapperConf.displayer } - if tc.hclParser == nil { - tc.hclParser = hclparse.NewParser() + if wrapperConf.hclParser == nil { + wrapperConf.hclParser = hclparse.NewParser() } return Tenv{ builders: builders, - conf: tc.conf, - hclParser: tc.hclParser, - ignoreEnv: tc.ignoreEnv, + conf: wrapperConf.conf, + hclParser: wrapperConf.hclParser, + ignoreEnv: wrapperConf.ignoreEnv, managers: map[string]versionmanager.VersionManager{}, }, nil } @@ -264,7 +264,7 @@ func (t Tenv) InstallMultiple(ctx context.Context, toolName string, versions []s return t.managers[toolName].InstallMultiple(ctx, versions) } -func (t Tenv) ListLocal(ctx context.Context, toolName string, reverseOrder bool) ([]versionmanager.DatedVersion, error) { +func (t Tenv) ListLocal(_ context.Context, toolName string, reverseOrder bool) ([]versionmanager.DatedVersion, error) { if err := t.init(toolName); err != nil { return nil, err } @@ -280,7 +280,7 @@ func (t Tenv) ListRemote(ctx context.Context, toolName string, reverseOrder bool return t.managers[toolName].ListRemote(ctx, reverseOrder) } -func (t Tenv) LocallyInstalled(ctx context.Context, toolName string) (map[string]struct{}, error) { +func (t Tenv) LocallyInstalled(_ context.Context, toolName string) (map[string]struct{}, error) { if err := t.init(toolName); err != nil { return nil, err } @@ -288,7 +288,7 @@ func (t Tenv) LocallyInstalled(ctx context.Context, toolName string) (map[string return t.managers[toolName].LocalSet(), nil } -func (t Tenv) ResetDefaultConstraint(ctx context.Context, toolName string) error { +func (t Tenv) ResetDefaultConstraint(_ context.Context, toolName string) error { if err := t.init(toolName); err != nil { return err } @@ -296,7 +296,7 @@ func (t Tenv) ResetDefaultConstraint(ctx context.Context, toolName string) error return t.managers[toolName].ResetConstraint() } -func (t Tenv) ResetDefaultVersion(ctx context.Context, toolName string) error { +func (t Tenv) ResetDefaultVersion(_ context.Context, toolName string) error { if err := t.init(toolName); err != nil { return err } @@ -304,7 +304,7 @@ func (t Tenv) ResetDefaultVersion(ctx context.Context, toolName string) error { return t.managers[toolName].ResetVersion() } -func (t Tenv) SetDefaultConstraint(ctx context.Context, toolName string, constraint string) error { +func (t Tenv) SetDefaultConstraint(_ context.Context, toolName string, constraint string) error { if err := t.init(toolName); err != nil { return err } From 5942df05ded486b6fee9bc34d8cc3ad78952e340 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 17:08:15 +0100 Subject: [PATCH 04/14] fix lint Signed-off-by: Denis Vaumoron --- cmd/tenv/subcmd.go | 1 + cmd/tenv/tenv.go | 4 +++- cmd/tenv/textui.go | 10 +++++----- pkg/github/github.go | 2 +- pkg/github/github_test.go | 5 +++-- versionmanager/builder/builder.go | 2 +- .../retriever/terraform/api/releaseapi_test.go | 16 ++++++++-------- versionmanager/tenvlib/lib.go | 4 ++-- 8 files changed, 24 insertions(+), 20 deletions(-) diff --git a/cmd/tenv/subcmd.go b/cmd/tenv/subcmd.go index 1ffcfe54..4b9b745a 100644 --- a/cmd/tenv/subcmd.go +++ b/cmd/tenv/subcmd.go @@ -330,6 +330,7 @@ If a parameter is passed, available parameter options: if len(args) == 0 { return uninstallUI(versionManager) } + return versionManager.Uninstall(args[0]) }, } diff --git a/cmd/tenv/tenv.go b/cmd/tenv/tenv.go index d93e745a..983f6c6e 100644 --- a/cmd/tenv/tenv.go +++ b/cmd/tenv/tenv.go @@ -48,6 +48,8 @@ const ( tofuHelp = helpPrefix + "OpenTofu (https://opentofu.org)." pathEnvName = "PATH" + + rwPerm = 0o600 ) // can be overridden with ldflags. @@ -210,7 +212,7 @@ func newUpdatePathCmd(gha bool) *cobra.Command { if gha { pathfilePath := os.Getenv("GITHUB_PATH") if pathfilePath != "" { - pathfile, err := os.OpenFile(pathfilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644) + pathfile, err := os.OpenFile(pathfilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, rwPerm) if err != nil { return err } diff --git a/cmd/tenv/textui.go b/cmd/tenv/textui.go index e4ee54a2..19f17b72 100644 --- a/cmd/tenv/textui.go +++ b/cmd/tenv/textui.go @@ -44,13 +44,13 @@ const ( selectedColorCode = "170" ) -var tools = []list.Item{item(cmdconst.TofuName), item(cmdconst.TerraformName), item(cmdconst.TerragruntName), item(cmdconst.AtmosName)} +var tools = []list.Item{item(cmdconst.TofuName), item(cmdconst.TerraformName), item(cmdconst.TerragruntName), item(cmdconst.AtmosName)} //nolint var ( - helpStyle = list.DefaultStyles().HelpStyle - paginationStyle = list.DefaultStyles().PaginationStyle - selectedItemStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(selectedColorCode)) - titleStyle = lipgloss.NewStyle() + helpStyle = list.DefaultStyles().HelpStyle //nolint + paginationStyle = list.DefaultStyles().PaginationStyle //nolint + selectedItemStyle = lipgloss.NewStyle().Foreground(lipgloss.Color(selectedColorCode)) //nolint + titleStyle = lipgloss.NewStyle() //nolint ) type item string diff --git a/pkg/github/github.go b/pkg/github/github.go index 2f0a0d69..8aed568f 100644 --- a/pkg/github/github.go +++ b/pkg/github/github.go @@ -105,7 +105,7 @@ func ListReleases(ctx context.Context, githubReleaseURL string, githubToken stri releases, err = extractReleases(releases, value) if err == nil { return releases, nil - } else if err != errContinue { + } else if !errors.Is(err, errContinue) { return nil, err } page++ diff --git a/pkg/github/github_test.go b/pkg/github/github_test.go index 9a9c0489..f5448ce8 100644 --- a/pkg/github/github_test.go +++ b/pkg/github/github_test.go @@ -21,6 +21,7 @@ package github import ( _ "embed" "encoding/json" + "errors" "slices" "testing" @@ -69,7 +70,7 @@ func TestExtractAssetsEmpty(t *testing.T) { err := extractAssets(assets, searchedAssetNames, 2, []any{}) if err == nil { t.Error("Should fail on empty data") - } else if err != apimsg.ErrAsset { + } else if !errors.Is(err, apimsg.ErrAsset) { t.Error("Unexpected extract error : ", err) } } @@ -86,7 +87,7 @@ func TestExtractAssetsMissing(t *testing.T) { err := extractAssets(assets, searchedAssetNames, 2, assetsValue) if err == nil { t.Error("Should fail on non exiting fileName") - } else if err != errContinue { + } else if !errors.Is(err, errContinue) { t.Error("Unexpected extract error : ", err) } } diff --git a/versionmanager/builder/builder.go b/versionmanager/builder/builder.go index 57a96db8..6034ccc8 100644 --- a/versionmanager/builder/builder.go +++ b/versionmanager/builder/builder.go @@ -35,7 +35,7 @@ import ( "github.com/tofuutils/tenv/v3/versionmanager/semantic/types" ) -var Builders = map[string]Func{ +var Builders = map[string]Func{ //nolint cmdconst.TofuName: BuildTofuManager, cmdconst.TerraformName: BuildTfManager, cmdconst.TerragruntName: BuildTgManager, diff --git a/versionmanager/retriever/terraform/api/releaseapi_test.go b/versionmanager/retriever/terraform/api/releaseapi_test.go index 6c6f04de..4e7017e6 100644 --- a/versionmanager/retriever/terraform/api/releaseapi_test.go +++ b/versionmanager/retriever/terraform/api/releaseapi_test.go @@ -33,7 +33,7 @@ var releaseData []byte var ( releaseValue any - releaseErr error + errRelease error ) //go:embed testdata/releases.json @@ -41,19 +41,19 @@ var releasesData []byte var ( releasesValue any - releasesErr error + errReleases error ) func init() { - releaseErr = json.Unmarshal(releaseData, &releaseValue) - releasesErr = json.Unmarshal(releasesData, &releasesValue) + errRelease = json.Unmarshal(releaseData, &releaseValue) + errReleases = json.Unmarshal(releasesData, &releasesValue) } func TestExtractAssetUrls(t *testing.T) { t.Parallel() - if releaseErr != nil { - t.Fatal("Unexpected parsing error : ", releaseErr) + if errRelease != nil { + t.Fatal("Unexpected parsing error : ", errRelease) } fileName, downloadURL, shaFileName, shaSigFileName, err := releaseapi.ExtractAssetUrls("linux", "386", releaseValue) @@ -78,8 +78,8 @@ func TestExtractAssetUrls(t *testing.T) { func TestExtractReleases(t *testing.T) { t.Parallel() - if releasesErr != nil { - t.Fatal("Unexpected parsing error : ", releasesErr) + if errReleases != nil { + t.Fatal("Unexpected parsing error : ", errReleases) } releases, err := releaseapi.ExtractReleases(releasesValue) diff --git a/versionmanager/tenvlib/lib.go b/versionmanager/tenvlib/lib.go index fcde8ca5..899aed91 100644 --- a/versionmanager/tenvlib/lib.go +++ b/versionmanager/tenvlib/lib.go @@ -321,7 +321,7 @@ func (t Tenv) SetDefaultVersion(ctx context.Context, toolName string, requestedV } // Does not handle special behavior. -func (t Tenv) Uninstall(ctx context.Context, toolName string, requestedVersion string) error { +func (t Tenv) Uninstall(_ context.Context, toolName string, requestedVersion string) error { if err := t.init(toolName); err != nil { return err } @@ -329,7 +329,7 @@ func (t Tenv) Uninstall(ctx context.Context, toolName string, requestedVersion s return t.managers[toolName].UninstallMultiple([]string{requestedVersion}) } -func (t Tenv) UninstallMultiple(ctx context.Context, toolName string, versions []string) error { +func (t Tenv) UninstallMultiple(_ context.Context, toolName string, versions []string) error { if err := t.init(toolName); err != nil { return err } From 5660adf5b380d7c3118b28431df8c14fb46cceb8 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 17:33:05 +0100 Subject: [PATCH 05/14] refactor github_test.go Signed-off-by: Denis Vaumoron --- pkg/github/github_test.go | 190 +++++++++++++++++--------------------- 1 file changed, 83 insertions(+), 107 deletions(-) diff --git a/pkg/github/github_test.go b/pkg/github/github_test.go index f5448ce8..f402818e 100644 --- a/pkg/github/github_test.go +++ b/pkg/github/github_test.go @@ -29,135 +29,111 @@ import ( "github.com/tofuutils/tenv/v3/versionmanager/semantic" ) -// empty marker. -var e = struct{}{} - //go:embed testdata/assets.json var assetsData []byte -var ( - assetsValue any - errAssets error -) - //go:embed testdata/release.json var releaseData []byte -var ( - releaseValue any - errRelease error -) - //go:embed testdata/releases.json var releasesData []byte -var ( - releasesValue any - errReleases error -) - -func init() { - errAssets = json.Unmarshal(assetsData, &assetsValue) - errRelease = json.Unmarshal(releaseData, &releaseValue) - errReleases = json.Unmarshal(releasesData, &releasesValue) -} - -func TestExtractAssetsEmpty(t *testing.T) { - t.Parallel() - - assets := map[string]string{} - searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": e, "tofu_1.6.0_amd64.apk.gpgsig": e} - err := extractAssets(assets, searchedAssetNames, 2, []any{}) - if err == nil { - t.Error("Should fail on empty data") - } else if !errors.Is(err, apimsg.ErrAsset) { - t.Error("Unexpected extract error : ", err) - } -} - -func TestExtractAssetsMissing(t *testing.T) { - t.Parallel() - - if errAssets != nil { - t.Fatal("Unexpected parsing error : ", errAssets) - } - - assets := map[string]string{} - searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": e, "any_name.zip": e} - err := extractAssets(assets, searchedAssetNames, 2, assetsValue) - if err == nil { - t.Error("Should fail on non exiting fileName") - } else if !errors.Is(err, errContinue) { - t.Error("Unexpected extract error : ", err) - } -} - -func TestExtractAssetsPresent(t *testing.T) { +func TestExtractAssets(t *testing.T) { t.Parallel() - if errAssets != nil { - t.Fatal("Unexpected parsing error : ", errAssets) - } - - assets := map[string]string{} - searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": e, "tofu_1.6.0_amd64.apk.gpgsig": e} - err := extractAssets(assets, searchedAssetNames, 2, assetsValue) + var assetsValue any + err := json.Unmarshal(assetsData, &assetsValue) if err != nil { - t.Fatal("Unexpected extract error : ", err) - } - - if res1 := assets["tofu_1.6.0_386.deb"]; res1 != "https://github.com/opentofu/opentofu/releases/download/v1.6.0/tofu_1.6.0_386.deb" { - t.Error("Unmatching result 1, get :", res1) - } - if res2 := assets["tofu_1.6.0_amd64.apk.gpgsig"]; res2 != "https://github.com/opentofu/opentofu/releases/download/v1.6.0/tofu_1.6.0_amd64.apk.gpgsig" { - t.Error("Unmatching result 2, get :", res2) - } + t.Fatal("Unexpected parsing error : ", err) + } + + t.Run("Empty", func(t *testing.T) { + assets := map[string]string{} + searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": {}, "tofu_1.6.0_amd64.apk.gpgsig": {}} + err = extractAssets(assets, searchedAssetNames, 2, []any{}) + if err == nil { + t.Error("Should fail on empty data") + } else if !errors.Is(err, apimsg.ErrAsset) { + t.Error("Unexpected extract error : ", err) + } + }) + + t.Run("Missing", func(t *testing.T) { + assets := map[string]string{} + searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": {}, "any_name.zip": {}} + err = extractAssets(assets, searchedAssetNames, 2, assetsValue) + if err == nil { + t.Error("Should fail on non exiting fileName") + } else if !errors.Is(err, errContinue) { + t.Error("Unexpected extract error : ", err) + } + }) + + t.Run("Present", func(t *testing.T) { + assets := map[string]string{} + searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": {}, "tofu_1.6.0_amd64.apk.gpgsig": {}} + err = extractAssets(assets, searchedAssetNames, 2, assetsValue) + if err != nil { + t.Fatal("Unexpected extract error : ", err) + } + + if res1 := assets["tofu_1.6.0_386.deb"]; res1 != "https://github.com/opentofu/opentofu/releases/download/v1.6.0/tofu_1.6.0_386.deb" { + t.Error("Unmatching result 1, get :", res1) + } + if res2 := assets["tofu_1.6.0_amd64.apk.gpgsig"]; res2 != "https://github.com/opentofu/opentofu/releases/download/v1.6.0/tofu_1.6.0_amd64.apk.gpgsig" { + t.Error("Unmatching result 2, get :", res2) + } + }) } -func TestExtractReleasesEmpty(t *testing.T) { +func TestExtractReleases(t *testing.T) { t.Parallel() - releases, err := extractReleases([]string{"value"}, []any{}) + var releasesValue any + err := json.Unmarshal(releasesData, &releasesValue) if err != nil { - t.Fatal("Unexpected extract error : ", err) - } - - size := len(releases) - if size == 0 { - t.Fatal("Unexpected empty results") - } - - if releases[0] != "value" || size > 1 { - t.Error("Unexpected result :", releases) - } -} - -func TestExtractReleasesPresent(t *testing.T) { - t.Parallel() - - if errReleases != nil { - t.Fatal("Unexpected parsing error : ", errReleases) - } - - var releases []string - releases, err := extractReleases(releases, releasesValue) - if err == nil { - t.Fatal("Should return a errContinue marker") - } else if err != errContinue { - t.Fatal("Unexpected extract error : ", err) - } - - slices.SortFunc(releases, semantic.CmpVersion) - if !slices.Equal(releases, []string{"1.6.0-alpha5", "1.6.0-beta5", "1.6.0-rc1", "1.6.0"}) { - t.Error("Unmatching results, get :", releases) - } + t.Fatal("Unexpected parsing error : ", err) + } + + t.Run("Empty", func(t *testing.T) { + releases, err := extractReleases([]string{"value"}, []any{}) + if err != nil { + t.Fatal("Unexpected extract error : ", err) + } + + size := len(releases) + if size == 0 { + t.Fatal("Unexpected empty results") + } + + if releases[0] != "value" || size > 1 { + t.Error("Unexpected result :", releases) + } + }) + + t.Run("Present", func(t *testing.T) { + var releases []string + releases, err = extractReleases(releases, releasesValue) + if err == nil { + t.Fatal("Should return a errContinue marker") + } else if !errors.Is(err, errContinue) { + t.Fatal("Unexpected extract error : ", err) + } + + slices.SortFunc(releases, semantic.CmpVersion) + if !slices.Equal(releases, []string{"1.6.0-alpha5", "1.6.0-beta5", "1.6.0-rc1", "1.6.0"}) { + t.Error("Unmatching results, get :", releases) + } + }) } func TestExtractVersion(t *testing.T) { t.Parallel() - if errRelease != nil { - t.Fatal("Unexpected parsing error : ", errRelease) + var releaseValue any + err := json.Unmarshal(releaseData, &releaseValue) + if err != nil { + t.Fatal("Unexpected parsing error : ", err) } version := extractVersion(releaseValue) From ad1b30d2dd02e1891147032b4b59c49f65b4e5b5 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 17:39:26 +0100 Subject: [PATCH 06/14] refactor releaseapi_test.go Signed-off-by: Denis Vaumoron --- .../terraform/api/releaseapi_test.go | 23 +++++-------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/versionmanager/retriever/terraform/api/releaseapi_test.go b/versionmanager/retriever/terraform/api/releaseapi_test.go index 4e7017e6..478a5862 100644 --- a/versionmanager/retriever/terraform/api/releaseapi_test.go +++ b/versionmanager/retriever/terraform/api/releaseapi_test.go @@ -31,27 +31,14 @@ import ( //go:embed testdata/release.json var releaseData []byte -var ( - releaseValue any - errRelease error -) - //go:embed testdata/releases.json var releasesData []byte -var ( - releasesValue any - errReleases error -) - -func init() { - errRelease = json.Unmarshal(releaseData, &releaseValue) - errReleases = json.Unmarshal(releasesData, &releasesValue) -} - func TestExtractAssetUrls(t *testing.T) { t.Parallel() + var releaseValue any + errRelease := json.Unmarshal(releaseData, &releaseValue) if errRelease != nil { t.Fatal("Unexpected parsing error : ", errRelease) } @@ -78,8 +65,10 @@ func TestExtractAssetUrls(t *testing.T) { func TestExtractReleases(t *testing.T) { t.Parallel() - if errReleases != nil { - t.Fatal("Unexpected parsing error : ", errReleases) + var releasesValue any + err := json.Unmarshal(releasesData, &releasesValue) + if err != nil { + t.Fatal("Unexpected parsing error : ", err) } releases, err := releaseapi.ExtractReleases(releasesValue) From aa5b783f43364119304b4a8097c1f838fb7c6bf7 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 17:44:38 +0100 Subject: [PATCH 07/14] fix lint Signed-off-by: Denis Vaumoron --- cmd/tenv/textui.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/tenv/textui.go b/cmd/tenv/textui.go index 19f17b72..d91a2a5b 100644 --- a/cmd/tenv/textui.go +++ b/cmd/tenv/textui.go @@ -124,7 +124,7 @@ func (m itemModel) Init() tea.Cmd { return nil } -func (m itemModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { +func (m itemModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { //nolint switch msg := msg.(type) { case tea.WindowSizeMsg: m.list.SetWidth(msg.Width) From d7914014683bfd4d7e5b2ec472ba441213fd7769 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 17:56:22 +0100 Subject: [PATCH 08/14] fix lint Signed-off-by: Denis Vaumoron --- pkg/download/download.go | 4 +++- pkg/download/download_test.go | 16 ++++++++++++---- pkg/github/github_test.go | 10 ++++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/pkg/download/download.go b/pkg/download/download.go index 5c6fd3a4..008cf97b 100644 --- a/pkg/download/download.go +++ b/pkg/download/download.go @@ -26,6 +26,8 @@ import ( "net/url" ) +const ruleSize = 2 + type RequestOption = func(*http.Request) func ApplyURLTranformer(urlTransformer func(string) (string, error), baseURLs ...string) ([]string, error) { @@ -78,7 +80,7 @@ func JSON(ctx context.Context, url string, display func(string), requestOptions func NoDisplay(string) {} func URLTranformer(rewriteRule []string) func(string) (string, error) { - if len(rewriteRule) < 2 { + if len(rewriteRule) < ruleSize { return noTransform } diff --git a/pkg/download/download_test.go b/pkg/download/download_test.go index 3ae47bee..e4ca3986 100644 --- a/pkg/download/download_test.go +++ b/pkg/download/download_test.go @@ -24,7 +24,9 @@ import ( "github.com/tofuutils/tenv/v3/pkg/download" ) -func TestUrlTransformer(t *testing.T) { +func TestURLTransformer(t *testing.T) { + t.Parallel() + urlTransformer := download.URLTranformer([]string{"https://releases.hashicorp.com", "http://localhost:8080"}) value, err := urlTransformer("https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_linux_386.zip") @@ -37,7 +39,9 @@ func TestUrlTransformer(t *testing.T) { } } -func TestUrlTransformerDisabled(t *testing.T) { +func TestURLTransformerDisabled(t *testing.T) { + t.Parallel() + urlTransformer := download.URLTranformer(nil) value, err := urlTransformer("test_value") @@ -50,7 +54,9 @@ func TestUrlTransformerDisabled(t *testing.T) { } } -func TestUrlTransformerPrefix(t *testing.T) { +func TestURLTransformerPrefix(t *testing.T) { + t.Parallel() + urlTransformer := download.URLTranformer([]string{"https://github.com", "https://go.dev"}) initialValue := "https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_darwin_amd64.zip" @@ -64,7 +70,9 @@ func TestUrlTransformerPrefix(t *testing.T) { } } -func TestUrlTransformerSlash(t *testing.T) { +func TestURLTransformerSlash(t *testing.T) { + t.Parallel() + urlTransformer := download.URLTranformer([]string{"https://releases.hashicorp.com/", "http://localhost"}) value, err := urlTransformer("https://releases.hashicorp.com/terraform/1.7.0/terraform_1.7.0_darwin_amd64.zip") diff --git a/pkg/github/github_test.go b/pkg/github/github_test.go index f402818e..62f670dc 100644 --- a/pkg/github/github_test.go +++ b/pkg/github/github_test.go @@ -48,6 +48,8 @@ func TestExtractAssets(t *testing.T) { } t.Run("Empty", func(t *testing.T) { + t.Parallel() + assets := map[string]string{} searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": {}, "tofu_1.6.0_amd64.apk.gpgsig": {}} err = extractAssets(assets, searchedAssetNames, 2, []any{}) @@ -59,6 +61,8 @@ func TestExtractAssets(t *testing.T) { }) t.Run("Missing", func(t *testing.T) { + t.Parallel() + assets := map[string]string{} searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": {}, "any_name.zip": {}} err = extractAssets(assets, searchedAssetNames, 2, assetsValue) @@ -70,6 +74,8 @@ func TestExtractAssets(t *testing.T) { }) t.Run("Present", func(t *testing.T) { + t.Parallel() + assets := map[string]string{} searchedAssetNames := map[string]struct{}{"tofu_1.6.0_386.deb": {}, "tofu_1.6.0_amd64.apk.gpgsig": {}} err = extractAssets(assets, searchedAssetNames, 2, assetsValue) @@ -96,6 +102,8 @@ func TestExtractReleases(t *testing.T) { } t.Run("Empty", func(t *testing.T) { + t.Parallel() + releases, err := extractReleases([]string{"value"}, []any{}) if err != nil { t.Fatal("Unexpected extract error : ", err) @@ -112,6 +120,8 @@ func TestExtractReleases(t *testing.T) { }) t.Run("Present", func(t *testing.T) { + t.Parallel() + var releases []string releases, err = extractReleases(releases, releasesValue) if err == nil { From 4d2cdc43306e0a22e86c5b192a9e8bc5eb95a841 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 18:11:30 +0100 Subject: [PATCH 09/14] fix lint Signed-off-by: Denis Vaumoron --- cmd/tenv/textui.go | 96 +++++++++---------- pkg/lockfile/lockfile_test.go | 2 + .../retriever/atmos/atmosretriever.go | 10 +- .../retriever/html/htmlretriever.go | 4 +- .../retriever/terraform/terraformretriever.go | 14 +-- .../retriever/tofu/tofuretriever.go | 22 ++--- 6 files changed, 75 insertions(+), 73 deletions(-) diff --git a/cmd/tenv/textui.go b/cmd/tenv/textui.go index d91a2a5b..298b6a13 100644 --- a/cmd/tenv/textui.go +++ b/cmd/tenv/textui.go @@ -114,17 +114,17 @@ func (d manageItemDelegate) Render(w io.Writer, m list.Model, index int, listIte fmt.Fprint(w, line) } -type itemModel struct { +type itemSelector struct { choices map[string]struct{} list list.Model quitting bool } -func (m itemModel) Init() tea.Cmd { +func (m itemSelector) Init() tea.Cmd { return nil } -func (m itemModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { //nolint +func (m itemSelector) Update(msg tea.Msg) (tea.Model, tea.Cmd) { //nolint switch msg := msg.(type) { case tea.WindowSizeMsg: m.list.SetWidth(msg.Width) @@ -165,7 +165,7 @@ func (m itemModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { //nolint return m, cmd } -func (m itemModel) View() string { +func (m itemSelector) View() string { if m.quitting { return "" } @@ -183,28 +183,28 @@ func toolUI(ctx context.Context, conf *config.Config, hclParser *hclparse.Parser choices: selection, } - l := list.New(tools, delegate, defaultWidth, listHeight) - l.Title = "Which tool do you want to manage ?" - l.SetShowStatusBar(false) - l.SetFilteringEnabled(false) - l.Styles.Title = titleStyle - l.Styles.PaginationStyle = paginationStyle - l.Styles.HelpStyle = helpStyle + displayList := list.New(tools, delegate, defaultWidth, listHeight) + displayList.Title = "Which tool do you want to manage ?" + displayList.SetShowStatusBar(false) + displayList.SetFilteringEnabled(false) + displayList.Styles.Title = titleStyle + displayList.Styles.PaginationStyle = paginationStyle + displayList.Styles.HelpStyle = helpStyle - l.AdditionalFullHelpKeys = additionalFullHelpKeys - l.AdditionalShortHelpKeys = additionalShortHelpKeys + displayList.AdditionalFullHelpKeys = additionalFullHelpKeys + displayList.AdditionalShortHelpKeys = additionalShortHelpKeys - m := itemModel{ + selector := itemSelector{ choices: selection, - list: l, + list: displayList, } - _, err := tea.NewProgram(m).Run() + _, err := tea.NewProgram(selector).Run() if err != nil { return err } - if len(m.choices) == 0 { + if len(selector.choices) == 0 { loghelper.StdDisplay("No selected tool") return nil @@ -243,36 +243,36 @@ func manageUI(ctx context.Context, versionManager versionmanager.VersionManager) installed: installed, } - l := list.New(items, delegate, defaultWidth, listHeight) - l.Title = loghelper.Concat("Which ", versionManager.FolderName, " version(s) do you want to install(I) or uninstall(U) ? (X mark already installed)") - l.SetShowStatusBar(false) - l.SetFilteringEnabled(false) - l.Styles.Title = titleStyle - l.Styles.PaginationStyle = paginationStyle - l.Styles.HelpStyle = helpStyle + displayList := list.New(items, delegate, defaultWidth, listHeight) + displayList.Title = loghelper.Concat("Which ", versionManager.FolderName, " version(s) do you want to install(I) or uninstall(U) ? (X mark already installed)") + displayList.SetShowStatusBar(false) + displayList.SetFilteringEnabled(false) + displayList.Styles.Title = titleStyle + displayList.Styles.PaginationStyle = paginationStyle + displayList.Styles.HelpStyle = helpStyle - l.AdditionalFullHelpKeys = additionalFullHelpKeys - l.AdditionalShortHelpKeys = additionalShortHelpKeys + displayList.AdditionalFullHelpKeys = additionalFullHelpKeys + displayList.AdditionalShortHelpKeys = additionalShortHelpKeys - m := itemModel{ + selector := itemSelector{ choices: selection, - list: l, + list: displayList, } - _, err = tea.NewProgram(m).Run() + _, err = tea.NewProgram(selector).Run() if err != nil { return err } - if len(m.choices) == 0 { + if len(selector.choices) == 0 { loghelper.StdDisplay(loghelper.Concat("No selected ", versionManager.FolderName, " versions")) return nil } - toInstall := make([]string, 0, len(m.choices)) - toUninstall := make([]string, 0, len(m.choices)) - for version := range m.choices { + toInstall := make([]string, 0, len(selector.choices)) + toUninstall := make([]string, 0, len(selector.choices)) + for version := range selector.choices { if _, installed := installed[version]; installed { toUninstall = append(toUninstall, version) } else { @@ -307,35 +307,35 @@ func uninstallUI(versionManager versionmanager.VersionManager) error { choices: selection, } - l := list.New(items, delegate, defaultWidth, listHeight) - l.Title = loghelper.Concat("Which ", versionManager.FolderName, " version(s) do you want to uninstall ?") - l.SetShowStatusBar(false) - l.SetFilteringEnabled(false) - l.Styles.Title = titleStyle - l.Styles.PaginationStyle = paginationStyle - l.Styles.HelpStyle = helpStyle + displayList := list.New(items, delegate, defaultWidth, listHeight) + displayList.Title = loghelper.Concat("Which ", versionManager.FolderName, " version(s) do you want to uninstall ?") + displayList.SetShowStatusBar(false) + displayList.SetFilteringEnabled(false) + displayList.Styles.Title = titleStyle + displayList.Styles.PaginationStyle = paginationStyle + displayList.Styles.HelpStyle = helpStyle - l.AdditionalFullHelpKeys = additionalFullHelpKeys - l.AdditionalShortHelpKeys = additionalShortHelpKeys + displayList.AdditionalFullHelpKeys = additionalFullHelpKeys + displayList.AdditionalShortHelpKeys = additionalShortHelpKeys - m := itemModel{ + selector := itemSelector{ choices: selection, - list: l, + list: displayList, } - _, err = tea.NewProgram(m).Run() + _, err = tea.NewProgram(selector).Run() if err != nil { return err } - if len(m.choices) == 0 { + if len(selector.choices) == 0 { loghelper.StdDisplay(loghelper.Concat("No selected ", versionManager.FolderName, " versions")) return nil } - selected := make([]string, 0, len(m.choices)) - for version := range m.choices { + selected := make([]string, 0, len(selector.choices)) + for version := range selector.choices { selected = append(selected, version) } slices.SortFunc(selected, semantic.CmpVersion) diff --git a/pkg/lockfile/lockfile_test.go b/pkg/lockfile/lockfile_test.go index ee07b6ae..0ed02487 100644 --- a/pkg/lockfile/lockfile_test.go +++ b/pkg/lockfile/lockfile_test.go @@ -42,6 +42,8 @@ var data2 []byte var data3 []byte func TestParallelWriteRead(t *testing.T) { + t.Parallel() + parallelDirPath := filepath.Join(os.TempDir(), "parallel") parallelFilePath := filepath.Join(parallelDirPath, "rw_test") diff --git a/versionmanager/retriever/atmos/atmosretriever.go b/versionmanager/retriever/atmos/atmosretriever.go index 5abbd7b6..39d452d5 100644 --- a/versionmanager/retriever/atmos/atmosretriever.go +++ b/versionmanager/retriever/atmos/atmosretriever.go @@ -97,13 +97,13 @@ func (r AtmosRetriever) InstallRelease(ctx context.Context, versionStr string, t return err } - ro := config.GetBasicAuthOption(config.AtmosRemoteUserEnvName, config.AtmosRemotePassEnvName) - data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, ro...) + requestOptions := config.GetBasicAuthOption(config.AtmosRemoteUserEnvName, config.AtmosRemotePassEnvName) + data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, requestOptions...) if err != nil { return err } - dataSums, err := download.Bytes(ctx, assetURLs[1], r.conf.Displayer.Display, ro...) + dataSums, err := download.Bytes(ctx, assetURLs[1], r.conf.Displayer.Display, requestOptions...) if err != nil { return err } @@ -126,7 +126,7 @@ func (r AtmosRetriever) ListReleases(ctx context.Context) ([]string, error) { return nil, err } - ro := config.GetBasicAuthOption(config.AtmosRemoteUserEnvName, config.AtmosRemotePassEnvName) + requestOptions := config.GetBasicAuthOption(config.AtmosRemoteUserEnvName, config.AtmosRemotePassEnvName) listURL := r.conf.Atmos.GetListURL() switch r.conf.Atmos.GetListMode() { @@ -138,7 +138,7 @@ func (r AtmosRetriever) ListReleases(ctx context.Context) ([]string, error) { r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + baseURL) - return htmlretriever.ListReleases(ctx, baseURL, r.conf.Atmos.Data, ro) + return htmlretriever.ListReleases(ctx, baseURL, r.conf.Atmos.Data, requestOptions) case config.ModeAPI: r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + listURL) diff --git a/versionmanager/retriever/html/htmlretriever.go b/versionmanager/retriever/html/htmlretriever.go index e6f24490..4fefafc2 100644 --- a/versionmanager/retriever/html/htmlretriever.go +++ b/versionmanager/retriever/html/htmlretriever.go @@ -38,12 +38,12 @@ func BuildAssetURLs(baseAssetURL string, assetNames ...string) ([]string, error) return download.ApplyURLTranformer(joinTransformer, assetNames...) } -func ListReleases(ctx context.Context, baseURL string, remoteConf map[string]string, ro []download.RequestOption) ([]string, error) { +func ListReleases(ctx context.Context, baseURL string, remoteConf map[string]string, options []download.RequestOption) ([]string, error) { selector := config.MapGetDefault(remoteConf, "selector", "a") extractor := htmlquery.SelectionExtractor(config.MapGetDefault(remoteConf, "part", "href")) versionExtractor := func(s *goquery.Selection) string { return versionfinder.Find(extractor(s)) } - return htmlquery.Request(ctx, baseURL, selector, versionExtractor, ro...) + return htmlquery.Request(ctx, baseURL, selector, versionExtractor, options...) } diff --git a/versionmanager/retriever/terraform/terraformretriever.go b/versionmanager/retriever/terraform/terraformretriever.go index 39ecda65..70a73b72 100644 --- a/versionmanager/retriever/terraform/terraformretriever.go +++ b/versionmanager/retriever/terraform/terraformretriever.go @@ -71,7 +71,7 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, return err } - ro := config.GetBasicAuthOption(config.TfRemoteUserEnvName, config.TfRemotePassEnvName) + requestOptions := config.GetBasicAuthOption(config.TfRemoteUserEnvName, config.TfRemotePassEnvName) var fileName, shaFileName, shaSigFileName, downloadURL, downloadSumsURL, downloadSumsSigURL string switch r.conf.Tf.GetInstallMode() { @@ -95,7 +95,7 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, r.conf.Displayer.Display(apimsg.MsgFetchRelease + versionUrl) - value, err := download.JSON(ctx, versionUrl, download.NoDisplay, ro...) + value, err := download.JSON(ctx, versionUrl, download.NoDisplay, requestOptions...) if err != nil { return err } @@ -125,12 +125,12 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, return err } - data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, ro...) + data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, requestOptions...) if err != nil { return err } - if err = r.checkSumAndSig(ctx, fileName, data, assetURLs[1], assetURLs[2], ro); err != nil { + if err = r.checkSumAndSig(ctx, fileName, data, assetURLs[1], assetURLs[2], requestOptions); err != nil { return err } @@ -174,8 +174,8 @@ func (r TerraformRetriever) ListReleases(ctx context.Context) ([]string, error) } } -func (r TerraformRetriever) checkSumAndSig(ctx context.Context, fileName string, data []byte, downloadSumsURL string, downloadSumsSigURL string, ro []download.RequestOption) error { - dataSums, err := download.Bytes(ctx, downloadSumsURL, r.conf.Displayer.Display, ro...) +func (r TerraformRetriever) checkSumAndSig(ctx context.Context, fileName string, data []byte, downloadSumsURL string, downloadSumsSigURL string, options []download.RequestOption) error { + dataSums, err := download.Bytes(ctx, downloadSumsURL, r.conf.Displayer.Display, options...) if err != nil { return err } @@ -188,7 +188,7 @@ func (r TerraformRetriever) checkSumAndSig(ctx context.Context, fileName string, return nil } - dataSumsSig, err := download.Bytes(ctx, downloadSumsSigURL, r.conf.Displayer.Display, ro...) + dataSumsSig, err := download.Bytes(ctx, downloadSumsSigURL, r.conf.Displayer.Display, options...) if err != nil { return err } diff --git a/versionmanager/retriever/tofu/tofuretriever.go b/versionmanager/retriever/tofu/tofuretriever.go index d1c979c8..7ff127bc 100644 --- a/versionmanager/retriever/tofu/tofuretriever.go +++ b/versionmanager/retriever/tofu/tofuretriever.go @@ -131,13 +131,13 @@ func (r TofuRetriever) InstallRelease(ctx context.Context, versionStr string, ta return err } - ro := config.GetBasicAuthOption(config.TofuRemoteUserEnvName, config.TofuRemotePassEnvName) - data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, ro...) + requestOptions := config.GetBasicAuthOption(config.TofuRemoteUserEnvName, config.TofuRemotePassEnvName) + data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, requestOptions...) if err != nil { return err } - if err = r.checkSumAndSig(ctx, v, stable, data, assetNames[0], assetURLs, ro); err != nil { + if err = r.checkSumAndSig(ctx, v, stable, data, assetNames[0], assetURLs, requestOptions); err != nil { return err } @@ -150,7 +150,7 @@ func (r TofuRetriever) ListReleases(ctx context.Context) ([]string, error) { return nil, err } - ro := config.GetBasicAuthOption(config.TofuRemoteUserEnvName, config.TofuRemotePassEnvName) + requestOptions := config.GetBasicAuthOption(config.TofuRemoteUserEnvName, config.TofuRemotePassEnvName) listURL := r.conf.Tofu.GetListURL() switch r.conf.Tofu.GetListMode() { @@ -162,7 +162,7 @@ func (r TofuRetriever) ListReleases(ctx context.Context) ([]string, error) { r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + baseURL) - return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tofu.Data, ro) + return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tofu.Data, requestOptions) case config.ModeAPI: r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + listURL) @@ -174,7 +174,7 @@ func (r TofuRetriever) ListReleases(ctx context.Context) ([]string, error) { r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + listURL) - value, err := download.JSON(ctx, listURL, download.NoDisplay, ro...) + value, err := download.JSON(ctx, listURL, download.NoDisplay, requestOptions...) if err != nil { return nil, err } @@ -185,8 +185,8 @@ func (r TofuRetriever) ListReleases(ctx context.Context) ([]string, error) { } } -func (r TofuRetriever) checkSumAndSig(ctx context.Context, version *version.Version, stable bool, data []byte, fileName string, assetURLs []string, ro []download.RequestOption) error { - dataSums, err := download.Bytes(ctx, assetURLs[1], r.conf.Displayer.Display, ro...) +func (r TofuRetriever) checkSumAndSig(ctx context.Context, version *version.Version, stable bool, data []byte, fileName string, assetURLs []string, options []download.RequestOption) error { + dataSums, err := download.Bytes(ctx, assetURLs[1], r.conf.Displayer.Display, options...) if err != nil { return err } @@ -199,12 +199,12 @@ func (r TofuRetriever) checkSumAndSig(ctx context.Context, version *version.Vers return nil } - dataSumsSig, err := download.Bytes(ctx, assetURLs[3], r.conf.Displayer.Display, ro...) + dataSumsSig, err := download.Bytes(ctx, assetURLs[3], r.conf.Displayer.Display, options...) if err != nil { return err } - dataSumsCert, err := download.Bytes(ctx, assetURLs[2], r.conf.Displayer.Display, ro...) + dataSumsCert, err := download.Bytes(ctx, assetURLs[2], r.conf.Displayer.Display, options...) if err != nil { return err } @@ -223,7 +223,7 @@ func (r TofuRetriever) checkSumAndSig(ctx context.Context, version *version.Vers r.conf.Displayer.Display("cosign executable not found, fallback to pgp check") - dataSumsSig, err = download.Bytes(ctx, assetURLs[4], r.conf.Displayer.Display, ro...) + dataSumsSig, err = download.Bytes(ctx, assetURLs[4], r.conf.Displayer.Display, options...) if err != nil { return err } From 435613def8206bc65ea11f8a3c15b2d9abcfa121 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 18:18:24 +0100 Subject: [PATCH 10/14] fix lint Signed-off-by: Denis Vaumoron --- cmd/tenv/textui.go | 12 ++++++------ pkg/download/download.go | 2 +- pkg/lockfile/lockfile.go | 4 ++-- .../retriever/terraform/terraformretriever.go | 6 +++--- .../retriever/terragrunt/terragruntretriever.go | 10 +++++----- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/cmd/tenv/textui.go b/cmd/tenv/textui.go index 298b6a13..2860a2e2 100644 --- a/cmd/tenv/textui.go +++ b/cmd/tenv/textui.go @@ -66,18 +66,18 @@ type itemDelegate struct { func (d itemDelegate) Height() int { return 1 } func (d itemDelegate) Spacing() int { return 0 } func (d itemDelegate) Update(_ tea.Msg, _ *list.Model) tea.Cmd { return nil } -func (d itemDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) { +func (d itemDelegate) Render(writer io.Writer, displayList list.Model, index int, listItem list.Item) { version, selected := listItem.FilterValue(), " " if _, ok := d.choices[version]; ok { selected = "X" } line := loghelper.Concat("[", selected, "] ", version) - if index == m.Index() { + if index == displayList.Index() { line = selectedItemStyle.Render(line) } - fmt.Fprint(w, line) + fmt.Fprint(writer, line) } type manageItemDelegate struct { @@ -88,7 +88,7 @@ type manageItemDelegate struct { func (d manageItemDelegate) Height() int { return 1 } func (d manageItemDelegate) Spacing() int { return 0 } func (d manageItemDelegate) Update(_ tea.Msg, _ *list.Model) tea.Cmd { return nil } -func (d manageItemDelegate) Render(w io.Writer, m list.Model, index int, listItem list.Item) { +func (d manageItemDelegate) Render(writer io.Writer, displayList list.Model, index int, listItem list.Item) { version, selectedStr := listItem.FilterValue(), " " _, selected := d.choices[version] _, installed := d.installed[version] @@ -107,11 +107,11 @@ func (d manageItemDelegate) Render(w io.Writer, m list.Model, index int, listIte line := loghelper.Concat("[", selectedStr, "] ", version) - if index == m.Index() { + if index == displayList.Index() { line = selectedItemStyle.Render(line) } - fmt.Fprint(w, line) + fmt.Fprint(writer, line) } type itemSelector struct { diff --git a/pkg/download/download.go b/pkg/download/download.go index 008cf97b..6d988a49 100644 --- a/pkg/download/download.go +++ b/pkg/download/download.go @@ -96,7 +96,7 @@ func URLTranformer(rewriteRule []string) func(string) (string, error) { return urlValue, nil } - return url.JoinPath(baseURL, urlValue[prevLen:]) //nolint + return url.JoinPath(baseURL, urlValue[prevLen:]) } } diff --git a/pkg/lockfile/lockfile.go b/pkg/lockfile/lockfile.go index c5d3bc53..0d7ff377 100644 --- a/pkg/lockfile/lockfile.go +++ b/pkg/lockfile/lockfile.go @@ -51,7 +51,7 @@ func Write(dirPath string, displayer loghelper.Displayer) func() { time.Sleep(time.Second) } - return sync.OnceFunc(func() { //nolint + return sync.OnceFunc(func() { if err := os.RemoveAll(lockPath); err != nil { displayer.Log(hclog.Warn, msgDelete, loghelper.Error, err) } @@ -66,7 +66,7 @@ func CleanAndExitOnInterrupt(clean func()) func() { go listenToClean(signalChan, endChan, clean) signal.Notify(signalChan, os.Interrupt) - return sync.OnceFunc(func() { //nolint + return sync.OnceFunc(func() { endChan <- struct{}{} }) } diff --git a/versionmanager/retriever/terraform/terraformretriever.go b/versionmanager/retriever/terraform/terraformretriever.go index 70a73b72..0a12d078 100644 --- a/versionmanager/retriever/terraform/terraformretriever.go +++ b/versionmanager/retriever/terraform/terraformretriever.go @@ -148,13 +148,13 @@ func (r TerraformRetriever) ListReleases(ctx context.Context) ([]string, error) return nil, err } - ro := config.GetBasicAuthOption(config.TfRemoteUserEnvName, config.TfRemotePassEnvName) + requestOptions := config.GetBasicAuthOption(config.TfRemoteUserEnvName, config.TfRemotePassEnvName) switch r.conf.Tf.GetListMode() { case config.ListModeHTML: r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + baseURL) - return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tf.Data, ro) + return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tf.Data, requestOptions) case config.ModeAPI: releasesURL, err := url.JoinPath(baseURL, indexJSON) //nolint if err != nil { @@ -163,7 +163,7 @@ func (r TerraformRetriever) ListReleases(ctx context.Context) ([]string, error) r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + releasesURL) - value, err := download.JSON(ctx, releasesURL, download.NoDisplay, ro...) + value, err := download.JSON(ctx, releasesURL, download.NoDisplay, requestOptions...) if err != nil { return nil, err } diff --git a/versionmanager/retriever/terragrunt/terragruntretriever.go b/versionmanager/retriever/terragrunt/terragruntretriever.go index c63a15f4..8948d2c9 100644 --- a/versionmanager/retriever/terragrunt/terragruntretriever.go +++ b/versionmanager/retriever/terragrunt/terragruntretriever.go @@ -94,13 +94,13 @@ func (r TerragruntRetriever) InstallRelease(ctx context.Context, versionStr stri return err } - ro := config.GetBasicAuthOption(config.TgRemoteUserEnvName, config.TgRemotePassEnvName) - data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, ro...) + requestOptions := config.GetBasicAuthOption(config.TgRemoteUserEnvName, config.TgRemotePassEnvName) + data, err := download.Bytes(ctx, assetURLs[0], r.conf.Displayer.Display, requestOptions...) if err != nil { return err } - dataSums, err := download.Bytes(ctx, assetURLs[1], r.conf.Displayer.Display, ro...) + dataSums, err := download.Bytes(ctx, assetURLs[1], r.conf.Displayer.Display, requestOptions...) if err != nil { return err } @@ -123,7 +123,7 @@ func (r TerragruntRetriever) ListReleases(ctx context.Context) ([]string, error) return nil, err } - ro := config.GetBasicAuthOption(config.TgRemoteUserEnvName, config.TgRemotePassEnvName) + requestOptions := config.GetBasicAuthOption(config.TgRemoteUserEnvName, config.TgRemotePassEnvName) listURL := r.conf.Tg.GetListURL() switch r.conf.Tg.GetListMode() { @@ -135,7 +135,7 @@ func (r TerragruntRetriever) ListReleases(ctx context.Context) ([]string, error) r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + baseURL) - return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tg.Data, ro) + return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tg.Data, requestOptions) case config.ModeAPI: r.conf.Displayer.Display(apimsg.MsgFetchAllReleases + listURL) From 6f3409b7b323633c79fdcd60853e7c55c66454bc Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 18:30:46 +0100 Subject: [PATCH 11/14] fix lint Signed-off-by: Denis Vaumoron --- pkg/cmdproxy/proxy.go | 4 +++- pkg/github/github.go | 2 +- pkg/lockfile/lockfile.go | 4 +++- versionmanager/proxy/proxy.go | 2 +- versionmanager/retriever/atmos/atmosretriever.go | 4 ++-- versionmanager/retriever/html/htmlretriever.go | 2 +- versionmanager/semantic/finder/finder.go | 6 +----- versionmanager/semantic/parser/iac/iacparser.go | 2 +- versionmanager/semantic/uninstall.go | 2 +- 9 files changed, 14 insertions(+), 14 deletions(-) diff --git a/pkg/cmdproxy/proxy.go b/pkg/cmdproxy/proxy.go index c6fc4301..bf4c6201 100644 --- a/pkg/cmdproxy/proxy.go +++ b/pkg/cmdproxy/proxy.go @@ -30,6 +30,8 @@ import ( "strings" ) +const rwPerm = 0o600 + var errDelimiter = errors.New("key and value should not contains delimiter") // Always call os.Exit. @@ -81,7 +83,7 @@ func initIO(cmd *exec.Cmd, pExitCode *int, gha bool) func() { } outputPath := os.Getenv("GITHUB_OUTPUT") - outputFile, err := os.OpenFile(outputPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0o644) //nolint + outputFile, err := os.OpenFile(outputPath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, rwPerm) if err != nil { fmt.Println("Ignore GITHUB_ACTIONS, fail to open GITHUB_OUTPUT :", err) //nolint diff --git a/pkg/github/github.go b/pkg/github/github.go index 8aed568f..7e1cd78e 100644 --- a/pkg/github/github.go +++ b/pkg/github/github.go @@ -40,7 +40,7 @@ const ( var errContinue = errors.New("continue") func AssetDownloadURL(ctx context.Context, tag string, searchedAssetNames []string, githubReleaseURL string, githubToken string, display func(string)) ([]string, error) { - releaseUrl, err := url.JoinPath(githubReleaseURL, "tags", tag) //nolint + releaseUrl, err := url.JoinPath(githubReleaseURL, "tags", tag) if err != nil { return nil, err } diff --git a/pkg/lockfile/lockfile.go b/pkg/lockfile/lockfile.go index 0d7ff377..efe71109 100644 --- a/pkg/lockfile/lockfile.go +++ b/pkg/lockfile/lockfile.go @@ -33,6 +33,8 @@ import ( const ( msgWrite = "can not write .lock file, will retry" msgDelete = "can not remove .lock file" + + rwPerm = 0o600 ) // ! dirPath must already exist (no mkdir here). @@ -40,7 +42,7 @@ const ( func Write(dirPath string, displayer loghelper.Displayer) func() { lockPath := filepath.Join(dirPath, ".lock") for logLevel := hclog.Warn; true; logLevel = hclog.Info { - f, err := os.OpenFile(lockPath, os.O_CREATE|os.O_EXCL, 0o644) //nolint + f, err := os.OpenFile(lockPath, os.O_CREATE|os.O_EXCL, rwPerm) if err == nil { f.Close() diff --git a/versionmanager/proxy/proxy.go b/versionmanager/proxy/proxy.go index d39a1701..98c9bb11 100644 --- a/versionmanager/proxy/proxy.go +++ b/versionmanager/proxy/proxy.go @@ -74,7 +74,7 @@ func ExecPath(installPath string, version string, execName string, displayer log func updateWorkPath(conf *config.Config, cmdArgs []string) { for _, arg := range cmdArgs { - if chdirPath, ok := strings.CutPrefix(arg, chdirFlagPrefix); ok { //nolint + if chdirPath, ok := strings.CutPrefix(arg, chdirFlagPrefix); ok { conf.WorkPath = chdirPath return diff --git a/versionmanager/retriever/atmos/atmosretriever.go b/versionmanager/retriever/atmos/atmosretriever.go index 39d452d5..1188ad6b 100644 --- a/versionmanager/retriever/atmos/atmosretriever.go +++ b/versionmanager/retriever/atmos/atmosretriever.go @@ -76,7 +76,7 @@ func (r AtmosRetriever) InstallRelease(ctx context.Context, versionStr string, t switch r.conf.Atmos.GetInstallMode() { case config.InstallModeDirect: - baseAssetURL, err2 := url.JoinPath(r.conf.Atmos.GetRemoteURL(), cloudposseName, cmdconst.AtmosName, github.Releases, github.Download, tag) //nolint + baseAssetURL, err2 := url.JoinPath(r.conf.Atmos.GetRemoteURL(), cloudposseName, cmdconst.AtmosName, github.Releases, github.Download, tag) if err2 != nil { return err2 } @@ -131,7 +131,7 @@ func (r AtmosRetriever) ListReleases(ctx context.Context) ([]string, error) { listURL := r.conf.Atmos.GetListURL() switch r.conf.Atmos.GetListMode() { case config.ListModeHTML: - baseURL, err := url.JoinPath(listURL, cloudposseName, cmdconst.AtmosName, github.Releases, github.Download) //nolint + baseURL, err := url.JoinPath(listURL, cloudposseName, cmdconst.AtmosName, github.Releases, github.Download) if err != nil { return nil, err } diff --git a/versionmanager/retriever/html/htmlretriever.go b/versionmanager/retriever/html/htmlretriever.go index 4fefafc2..39f31720 100644 --- a/versionmanager/retriever/html/htmlretriever.go +++ b/versionmanager/retriever/html/htmlretriever.go @@ -32,7 +32,7 @@ import ( func BuildAssetURLs(baseAssetURL string, assetNames ...string) ([]string, error) { joinTransformer := func(assetName string) (string, error) { - return url.JoinPath(baseAssetURL, assetName) //nolint + return url.JoinPath(baseAssetURL, assetName) } return download.ApplyURLTranformer(joinTransformer, assetNames...) diff --git a/versionmanager/semantic/finder/finder.go b/versionmanager/semantic/finder/finder.go index db025a80..4d18e20b 100644 --- a/versionmanager/semantic/finder/finder.go +++ b/versionmanager/semantic/finder/finder.go @@ -24,11 +24,7 @@ import ( "github.com/hashicorp/go-version" ) -var versionRegexp *regexp.Regexp //nolint - -func init() { - versionRegexp = regexp.MustCompilePOSIX(version.VersionRegexpRaw) -} +var versionRegexp = regexp.MustCompilePOSIX(version.VersionRegexpRaw) //nolint // return a version without starting 'v'. func Find(versionStr string) string { diff --git a/versionmanager/semantic/parser/iac/iacparser.go b/versionmanager/semantic/parser/iac/iacparser.go index 4ccca24f..a1d1fa2f 100644 --- a/versionmanager/semantic/parser/iac/iacparser.go +++ b/versionmanager/semantic/parser/iac/iacparser.go @@ -79,7 +79,7 @@ func GatherRequiredVersion(conf *config.Config, exts []ExtDescription) ([]string name := entry.Name() for _, extDesc := range exts { - if cleanedName, found := strings.CutSuffix(name, extDesc.Value); found { //nolint + if cleanedName, found := strings.CutSuffix(name, extDesc.Value); found { similar[cleanedName] = append(similar[cleanedName], extDesc.Value) break diff --git a/versionmanager/semantic/uninstall.go b/versionmanager/semantic/uninstall.go index f18a0644..1fb0700e 100644 --- a/versionmanager/semantic/uninstall.go +++ b/versionmanager/semantic/uninstall.go @@ -82,7 +82,7 @@ func SelectVersionsToUninstall(behaviourOrConstraint string, installPath string, case strings.HasPrefix(behaviourOrConstraint, notUsedSincePrefix): dateStr := behaviourOrConstraint[notUsedSincePrefixLen:] - beforeDate, err := time.Parse(time.DateOnly, dateStr) //nolint + beforeDate, err := time.Parse(time.DateOnly, dateStr) if err != nil { return nil, err } From 4bb219681c051f75640f0f67b7c5b6cece8bf4a6 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 18:34:30 +0100 Subject: [PATCH 12/14] fix lint Signed-off-by: Denis Vaumoron --- pkg/github/github.go | 6 +++--- versionmanager/retriever/terragrunt/terragruntretriever.go | 4 ++-- versionmanager/retriever/tofu/tofuretriever.go | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/pkg/github/github.go b/pkg/github/github.go index 7e1cd78e..668242d7 100644 --- a/pkg/github/github.go +++ b/pkg/github/github.go @@ -40,15 +40,15 @@ const ( var errContinue = errors.New("continue") func AssetDownloadURL(ctx context.Context, tag string, searchedAssetNames []string, githubReleaseURL string, githubToken string, display func(string)) ([]string, error) { - releaseUrl, err := url.JoinPath(githubReleaseURL, "tags", tag) + releaseURL, err := url.JoinPath(githubReleaseURL, "tags", tag) if err != nil { return nil, err } - display(apimsg.MsgFetchRelease + releaseUrl) + display(apimsg.MsgFetchRelease + releaseURL) authorizationHeader := buildAuthorizationHeader(githubToken) - value, err := apiGetRequest(ctx, releaseUrl, authorizationHeader) + value, err := apiGetRequest(ctx, releaseURL, authorizationHeader) if err != nil { return nil, err } diff --git a/versionmanager/retriever/terragrunt/terragruntretriever.go b/versionmanager/retriever/terragrunt/terragruntretriever.go index 8948d2c9..0d2feec8 100644 --- a/versionmanager/retriever/terragrunt/terragruntretriever.go +++ b/versionmanager/retriever/terragrunt/terragruntretriever.go @@ -73,7 +73,7 @@ func (r TerragruntRetriever) InstallRelease(ctx context.Context, versionStr stri switch r.conf.Tg.GetInstallMode() { case config.InstallModeDirect: - baseAssetURL, err2 := url.JoinPath(r.conf.Tg.GetRemoteURL(), gruntworkName, cmdconst.TerragruntName, github.Releases, github.Download, tag) //nolint + baseAssetURL, err2 := url.JoinPath(r.conf.Tg.GetRemoteURL(), gruntworkName, cmdconst.TerragruntName, github.Releases, github.Download, tag) if err2 != nil { return err2 } @@ -128,7 +128,7 @@ func (r TerragruntRetriever) ListReleases(ctx context.Context) ([]string, error) listURL := r.conf.Tg.GetListURL() switch r.conf.Tg.GetListMode() { case config.ListModeHTML: - baseURL, err := url.JoinPath(listURL, gruntworkName, cmdconst.TerragruntName, github.Releases, github.Download) //nolint + baseURL, err := url.JoinPath(listURL, gruntworkName, cmdconst.TerragruntName, github.Releases, github.Download) if err != nil { return nil, err } diff --git a/versionmanager/retriever/tofu/tofuretriever.go b/versionmanager/retriever/tofu/tofuretriever.go index 7ff127bc..940ce824 100644 --- a/versionmanager/retriever/tofu/tofuretriever.go +++ b/versionmanager/retriever/tofu/tofuretriever.go @@ -98,7 +98,7 @@ func (r TofuRetriever) InstallRelease(ctx context.Context, versionStr string, ta switch r.conf.Tofu.GetInstallMode() { case config.InstallModeDirect: - baseAssetURL, err2 := url.JoinPath(r.conf.Tofu.GetRemoteURL(), opentofu, opentofu, github.Releases, github.Download, tag) //nolint + baseAssetURL, err2 := url.JoinPath(r.conf.Tofu.GetRemoteURL(), opentofu, opentofu, github.Releases, github.Download, tag) if err2 != nil { return err2 } @@ -155,7 +155,7 @@ func (r TofuRetriever) ListReleases(ctx context.Context) ([]string, error) { listURL := r.conf.Tofu.GetListURL() switch r.conf.Tofu.GetListMode() { case config.ListModeHTML: - baseURL, err := url.JoinPath(listURL, opentofu, opentofu, github.Releases, github.Download) //nolint + baseURL, err := url.JoinPath(listURL, opentofu, opentofu, github.Releases, github.Download) if err != nil { return nil, err } From b640ff3971498a1270c6e7953e65c60a5f44311f Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 18:37:52 +0100 Subject: [PATCH 13/14] fix lint Signed-off-by: Denis Vaumoron --- versionmanager/retriever/terraform/terraformretriever.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/versionmanager/retriever/terraform/terraformretriever.go b/versionmanager/retriever/terraform/terraformretriever.go index 0a12d078..002bf1b0 100644 --- a/versionmanager/retriever/terraform/terraformretriever.go +++ b/versionmanager/retriever/terraform/terraformretriever.go @@ -66,7 +66,7 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, version = version[1:] } - baseVersionURL, err := url.JoinPath(r.conf.Tf.GetRemoteURL(), cmdconst.TerraformName, version) //nolint + baseVersionURL, err := url.JoinPath(r.conf.Tf.GetRemoteURL(), cmdconst.TerraformName, version) if err != nil { return err } @@ -88,7 +88,7 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, downloadURL, downloadSumsURL, downloadSumsSigURL = assetURLs[0], assetURLs[1], assetURLs[2] case config.ModeAPI: - versionUrl, err := url.JoinPath(baseVersionURL, indexJSON) //nolint + versionUrl, err := url.JoinPath(baseVersionURL, indexJSON) if err != nil { return err } @@ -143,7 +143,7 @@ func (r TerraformRetriever) ListReleases(ctx context.Context) ([]string, error) return nil, err } - baseURL, err := url.JoinPath(r.conf.Tf.GetListURL(), cmdconst.TerraformName) //nolint + baseURL, err := url.JoinPath(r.conf.Tf.GetListURL(), cmdconst.TerraformName) if err != nil { return nil, err } @@ -156,7 +156,7 @@ func (r TerraformRetriever) ListReleases(ctx context.Context) ([]string, error) return htmlretriever.ListReleases(ctx, baseURL, r.conf.Tf.Data, requestOptions) case config.ModeAPI: - releasesURL, err := url.JoinPath(baseURL, indexJSON) //nolint + releasesURL, err := url.JoinPath(baseURL, indexJSON) if err != nil { return nil, err } From 58eabcc200c6ee80ecd3a30ef4b6871db1a8de80 Mon Sep 17 00:00:00 2001 From: Denis Vaumoron Date: Sun, 27 Oct 2024 18:52:22 +0100 Subject: [PATCH 14/14] fix lint Signed-off-by: Denis Vaumoron --- cmd/tenv/subcmd.go | 4 ++-- versionmanager/retriever/terraform/api/releaseapi.go | 2 +- versionmanager/retriever/terraform/api/releaseapi_test.go | 2 +- versionmanager/retriever/terraform/terraformretriever.go | 8 ++++---- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cmd/tenv/subcmd.go b/cmd/tenv/subcmd.go index 4b9b745a..94d2768f 100644 --- a/cmd/tenv/subcmd.go +++ b/cmd/tenv/subcmd.go @@ -198,12 +198,12 @@ func newListCmd(conf *config.Config, versionManager versionmanager.VersionManage if noUseDate { loghelper.StdDisplay(loghelper.Concat("* ", version, " (never used, set by ", filePath, ")")) } else { - loghelper.StdDisplay(loghelper.Concat("* ", version, " (used ", useDate.Format(time.DateOnly), ", set by ", filePath, ")")) //nolint + loghelper.StdDisplay(loghelper.Concat("* ", version, " (used ", useDate.Format(time.DateOnly), ", set by ", filePath, ")")) } case noUseDate: loghelper.StdDisplay(loghelper.Concat(" ", version, " (never used)")) default: - loghelper.StdDisplay(loghelper.Concat(" ", version, " (used ", useDate.Format(time.DateOnly), ")")) //nolint + loghelper.StdDisplay(loghelper.Concat(" ", version, " (used ", useDate.Format(time.DateOnly), ")")) } } if conf.DisplayVerbose { diff --git a/versionmanager/retriever/terraform/api/releaseapi.go b/versionmanager/retriever/terraform/api/releaseapi.go index 75ac94f8..356d55ca 100644 --- a/versionmanager/retriever/terraform/api/releaseapi.go +++ b/versionmanager/retriever/terraform/api/releaseapi.go @@ -20,7 +20,7 @@ package releaseapi import "github.com/tofuutils/tenv/v3/pkg/apimsg" -func ExtractAssetUrls(searchedOs string, searchedArch string, value any) (string, string, string, string, error) { +func ExtractAssetURLs(searchedOs string, searchedArch string, value any) (string, string, string, string, error) { object, _ := value.(map[string]any) builds, ok := object["builds"].([]any) shaFileName, ok2 := object["shasums"].(string) diff --git a/versionmanager/retriever/terraform/api/releaseapi_test.go b/versionmanager/retriever/terraform/api/releaseapi_test.go index 478a5862..6dba72af 100644 --- a/versionmanager/retriever/terraform/api/releaseapi_test.go +++ b/versionmanager/retriever/terraform/api/releaseapi_test.go @@ -43,7 +43,7 @@ func TestExtractAssetUrls(t *testing.T) { t.Fatal("Unexpected parsing error : ", errRelease) } - fileName, downloadURL, shaFileName, shaSigFileName, err := releaseapi.ExtractAssetUrls("linux", "386", releaseValue) + fileName, downloadURL, shaFileName, shaSigFileName, err := releaseapi.ExtractAssetURLs("linux", "386", releaseValue) if err != nil { t.Fatal("Unexpected extract error : ", err) } diff --git a/versionmanager/retriever/terraform/terraformretriever.go b/versionmanager/retriever/terraform/terraformretriever.go index 002bf1b0..b0d33d9a 100644 --- a/versionmanager/retriever/terraform/terraformretriever.go +++ b/versionmanager/retriever/terraform/terraformretriever.go @@ -88,19 +88,19 @@ func (r TerraformRetriever) InstallRelease(ctx context.Context, version string, downloadURL, downloadSumsURL, downloadSumsSigURL = assetURLs[0], assetURLs[1], assetURLs[2] case config.ModeAPI: - versionUrl, err := url.JoinPath(baseVersionURL, indexJSON) + versionURL, err := url.JoinPath(baseVersionURL, indexJSON) if err != nil { return err } - r.conf.Displayer.Display(apimsg.MsgFetchRelease + versionUrl) + r.conf.Displayer.Display(apimsg.MsgFetchRelease + versionURL) - value, err := download.JSON(ctx, versionUrl, download.NoDisplay, requestOptions...) + value, err := download.JSON(ctx, versionURL, download.NoDisplay, requestOptions...) if err != nil { return err } - fileName, downloadURL, shaFileName, shaSigFileName, err = releaseapi.ExtractAssetUrls(runtime.GOOS, r.conf.Arch, value) + fileName, downloadURL, shaFileName, shaSigFileName, err = releaseapi.ExtractAssetURLs(runtime.GOOS, r.conf.Arch, value) if err != nil { return err }