mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-12-20 02:15:12 -07:00
5d5d04fbb7
* Replace direct `fmt.Println()` usage in a test with `t.Log()` * Rename `cmd` to `cli` * Move asdf command from module root * Fix some linter warnings, thus enabling some tests that were being skipped * Fix `Makefile` * Rename module to `github.com/asdf-vm/asdf` * Fix `TestGetAllToolsAndVersionsInContent/returns_empty_list_with_found_true_and_no_error_when_empty_content` * Rewrite `Unique()` to be a bit more straightforwards * Get workflow checks passing again toolversions.Unique is ever so slightly faster, technically. ``` goos: linux goarch: amd64 pkg: github.com/asdf-vm/asdf/internal/toolversions cpu: AMD Ryzen 9 3900X 12-Core Processor │ /tmp/old.txt │ /tmp/new.txt │ │ sec/op │ sec/op vs base │ Unique-24 346.5n ± 1% 342.4n ± 1% -1.17% (p=0.027 n=10) │ /tmp/old.txt │ /tmp/new.txt │ │ B/op │ B/op vs base │ Unique-24 160.0 ± 0% 160.0 ± 0% ~ (p=1.000 n=10) ¹ ¹ all samples are equal │ /tmp/old.txt │ /tmp/new.txt │ │ allocs/op │ allocs/op vs base │ Unique-24 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=10) ¹ ¹ all samples are equal ```
79 lines
2.2 KiB
Go
79 lines
2.2 KiB
Go
// Package installtest provides functions used by various asdf tests for
|
|
// installing versions of tools. It provides a simplified version of the
|
|
// versions.InstallOneVersion function.
|
|
package installtest
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/asdf-vm/asdf/internal/config"
|
|
"github.com/asdf-vm/asdf/internal/plugins"
|
|
)
|
|
|
|
const (
|
|
dataDirInstalls = "installs"
|
|
dataDirDownloads = "downloads"
|
|
)
|
|
|
|
// InstallOneVersion is a simplified version of versions.InstallOneVersion
|
|
// function for use in Go tests.
|
|
func InstallOneVersion(conf config.Config, plugin plugins.Plugin, versionType, version string) error {
|
|
var stdOut strings.Builder
|
|
var stdErr strings.Builder
|
|
|
|
err := plugin.Exists()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
downloadDir := DownloadPath(conf, plugin, version)
|
|
installDir := InstallPath(conf, plugin, version)
|
|
|
|
env := map[string]string{
|
|
"ASDF_INSTALL_TYPE": versionType,
|
|
"ASDF_INSTALL_VERSION": version,
|
|
"ASDF_INSTALL_PATH": installDir,
|
|
"ASDF_DOWNLOAD_PATH": downloadDir,
|
|
"ASDF_CONCURRENCY": "1",
|
|
}
|
|
|
|
err = os.MkdirAll(downloadDir, 0o777)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to create download dir: %w", err)
|
|
}
|
|
|
|
err = plugin.RunCallback("download", []string{}, env, &stdOut, &stdErr)
|
|
if _, ok := err.(plugins.NoCallbackError); err != nil && !ok {
|
|
return fmt.Errorf("failed to run download callback: %w", err)
|
|
}
|
|
|
|
err = os.MkdirAll(installDir, 0o777)
|
|
if err != nil {
|
|
return fmt.Errorf("unable to create install dir: %w", err)
|
|
}
|
|
|
|
err = plugin.RunCallback("install", []string{}, env, &stdOut, &stdErr)
|
|
if err != nil {
|
|
return fmt.Errorf("failed to run install callback: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// InstallPath returns the path to a tool installation
|
|
func InstallPath(conf config.Config, plugin plugins.Plugin, version string) string {
|
|
return filepath.Join(pluginInstallPath(conf, plugin), version)
|
|
}
|
|
|
|
// DownloadPath returns the download path for a particular plugin and version
|
|
func DownloadPath(conf config.Config, plugin plugins.Plugin, version string) string {
|
|
return filepath.Join(conf.DataDir, dataDirDownloads, plugin.Name, version)
|
|
}
|
|
|
|
func pluginInstallPath(conf config.Config, plugin plugins.Plugin) string {
|
|
return filepath.Join(conf.DataDir, dataDirInstalls, plugin.Name)
|
|
}
|