Documentation
¶
Index ¶
- Variables
- func EncodeYaml(w io.Writer, v any) (errOut error)
- func FileExists(path string) bool
- func MapKeys[M ~map[K]V, K comparable, V any](m M) []K
- func SortBySemverOrString(vals []string)
- func Unique[V comparable](vals, buf []V) []V
- type AddDependencyFromTemplateOpts
- type Config
- func (c *Config) AddChecksums(dependencies []string, systems []System) error
- func (c *Config) AddDependencyFromTemplate(ctx context.Context, templateName string, opts *AddDependencyFromTemplateOpts) (*Dependency, map[string][]string, error)
- func (c *Config) BinName(depName string, system System) (string, error)
- func (c *Config) BuildDependency(depName string, system System) (*Dependency, error)
- func (c *Config) ClearCache() error
- func (c *Config) CopyTemplateFromSource(ctx context.Context, src, srcTemplate, destName string) error
- func (c *Config) DependencyNames() []string
- func (c *Config) DependencySystems(depName string) ([]System, error)
- func (c *Config) DownloadDependencies(deps []string, system System, opts *ConfigDownloadDependenciesOpts) error
- func (c *Config) ExtractDependencies(deps []string, system System, opts *ConfigExtractDependenciesOpts) error
- func (c *Config) InstallDependencies(deps []string, system System, opts *ConfigInstallDependenciesOpts) error
- func (c *Config) ListTemplates(ctx context.Context, templateSource string) ([]string, error)
- func (c *Config) MissingDependencyVars(depName string) ([]string, error)
- func (c *Config) PruneChecksums() error
- func (c *Config) SetDependencyVars(depName string, vars map[string]string) error
- func (c *Config) SetTemplateVars(tmplName string, vars map[string]string) error
- func (c *Config) UnsetDependencyVars(depName string, vars []string) error
- func (c *Config) UnsetTemplateVars(tmplName string, vars []string) error
- func (c *Config) Validate(depName string, systems []System) (errOut error)
- func (c *Config) WrapDependencies(deps []string, opts *ConfigWrapDependenciesOpts) error
- func (c *Config) WriteFile(outputJSON bool) (errOut error)
- type ConfigDownloadDependenciesOpts
- type ConfigExtractDependenciesOpts
- type ConfigInstallDependenciesOpts
- type ConfigInstallDependencyOpts
- type ConfigWrapDependenciesOpts
- type Dependency
- type DependencyOverride
- type Overrideable
- type System
Constants ¶
This section is empty.
Variables ¶
CurrentSystem is the system that bindown is running on
var GoDists string
Functions ¶
func FileExists ¶ added in v4.8.0
FileExists asserts that a file exist or symlink exists. Returns false for symlinks pointing to non-existent files.
func MapKeys ¶ added in v4.6.1
func MapKeys[M ~map[K]V, K comparable, V any](m M) []K
func SortBySemverOrString ¶ added in v4.3.0
func SortBySemverOrString(vals []string)
func Unique ¶ added in v4.3.0
func Unique[V comparable](vals, buf []V) []V
Unique appends unique values from vals to buf and returns buf
Types ¶
type AddDependencyFromTemplateOpts ¶
type AddDependencyFromTemplateOpts struct {
TemplateSource string
DependencyName string
Vars map[string]string
}
AddDependencyFromTemplateOpts options for AddDependencyFromTemplate
type Config ¶
type Config struct {
// The directory where bindown will cache downloads and extracted files. This is relative to the directory where
// the configuration file resides. cache paths should always use / as a delimiter even on Windows or other
// operating systems where the native delimiter isn't /.
Cache string `json:"cache,omitempty" yaml:"cache,omitempty"`
// The directory that bindown installs files to. This is relative to the directory where the configuration file
// resides. install_directory paths should always use / as a delimiter even on Windows or other operating systems
// where the native delimiter isn't /.
InstallDir string `json:"install_dir,omitempty" yaml:"install_dir,omitempty"`
// List of systems supported by this config. Systems are in the form of os/architecture.
Systems []System `json:"systems,omitempty" yaml:"systems,omitempty"`
// Dependencies available for bindown to install.
Dependencies map[string]*Dependency `json:"dependencies,omitempty" yaml:",omitempty"`
// Templates that can be used by dependencies in this file.
Templates map[string]*Dependency `json:"templates,omitempty" yaml:",omitempty"`
// Upstream sources for templates.
TemplateSources map[string]string `json:"template_sources,omitempty" yaml:"template_sources,omitempty"`
// Checksums of downloaded files.
URLChecksums map[string]string `json:"url_checksums,omitempty" yaml:"url_checksums,omitempty"`
Filename string `json:"-" yaml:"-"`
}
func (*Config) AddChecksums ¶
AddChecksums downloads, calculates checksums and adds them to the config's URLChecksums. AddChecksums skips urls that already exist in URLChecksums.
func (*Config) AddDependencyFromTemplate ¶
func (c *Config) AddDependencyFromTemplate(ctx context.Context, templateName string, opts *AddDependencyFromTemplateOpts) (*Dependency, map[string][]string, error)
AddDependencyFromTemplate adds a dependency to the config. Returns a map of known values for template vars
func (*Config) BuildDependency ¶
func (c *Config) BuildDependency(depName string, system System) (*Dependency, error)
BuildDependency returns a dependency with templates and overrides applied and variables interpolated for the given system.
func (*Config) ClearCache ¶
func (*Config) CopyTemplateFromSource ¶
func (c *Config) CopyTemplateFromSource(ctx context.Context, src, srcTemplate, destName string) error
CopyTemplateFromSource copies a template from source
func (*Config) DependencyNames ¶ added in v4.10.0
func (*Config) DependencySystems ¶
DependencySystems returns the supported systems of either the config or the dependency if one is not empty if both are not empty, it returns the intersection of the lists
func (*Config) DownloadDependencies ¶ added in v4.10.0
func (c *Config) DownloadDependencies(deps []string, system System, opts *ConfigDownloadDependenciesOpts) error
func (*Config) ExtractDependencies ¶ added in v4.10.0
func (c *Config) ExtractDependencies(deps []string, system System, opts *ConfigExtractDependenciesOpts) error
func (*Config) InstallDependencies ¶ added in v4.8.0
func (c *Config) InstallDependencies(deps []string, system System, opts *ConfigInstallDependenciesOpts) error
func (*Config) ListTemplates ¶
ListTemplates lists templates available in this config or one of its template sources.
func (*Config) MissingDependencyVars ¶
MissingDependencyVars returns a list of vars that are required but undefined
func (*Config) PruneChecksums ¶
PruneChecksums removes checksums for dependencies that are not used by any configured system.
func (*Config) SetDependencyVars ¶
SetDependencyVars sets the value of a dependency's var. Adds or Updates the var.
func (*Config) SetTemplateVars ¶
SetTemplateVars sets the value of a template's var. Adds or Updates the var.
func (*Config) UnsetDependencyVars ¶
UnsetDependencyVars removes a dependency var. Noop if the var doesn't exist.
func (*Config) UnsetTemplateVars ¶
UnsetTemplateVars removes a template var. Noop if the var doesn't exist.
func (*Config) Validate ¶
Validate installs the downloader to a temporary directory and returns an error if it was unsuccessful.
func (*Config) WrapDependencies ¶ added in v4.10.0
func (c *Config) WrapDependencies(deps []string, opts *ConfigWrapDependenciesOpts) error
type ConfigDownloadDependenciesOpts ¶ added in v4.10.0
type ConfigExtractDependenciesOpts ¶ added in v4.10.0
type ConfigInstallDependenciesOpts ¶ added in v4.8.0
type ConfigInstallDependenciesOpts struct {
Output string
TargetDir string
Stdout io.Writer
Force bool
AllowMissingChecksum bool
ToCache bool
AllDeps bool
}
ConfigInstallDependenciesOpts provides options for Config.InstallDependencies
type ConfigInstallDependencyOpts ¶
type ConfigInstallDependencyOpts struct {
// TargetPath is the path where the executable should end up
TargetPath string
// Force - install even if it already exists
Force bool
// AllowMissingChecksum - whether to allow missing checksum
AllowMissingChecksum bool
// ToCache - if set, the dependency will be installed to a cache directory. ToCache overrides TargetPath.
ToCache bool
}
ConfigInstallDependencyOpts provides options for Config.InstallDependency
type ConfigWrapDependenciesOpts ¶ added in v4.10.0
type Dependency ¶
type Dependency struct {
// The homepage for this dependency. Informational only.
Homepage *string `json:"homepage,omitempty" yaml:",omitempty"`
// A description of the dependency. Informational only.
Description *string `json:"description,omitempty" yaml:",omitempty"`
// A template for this dependency. Value is the name of a template in the templates section of this config.
// Any unset fields in this dependency will be set by values from the template. Overrides in the dependency
// and its template are concatenated with the template's overrides coming first. Vars and substitutions
// are both combined with the dependency's value taking precedence.
Template *string `json:"template,omitempty" yaml:",omitempty"`
Overrideable `json:",inline" yaml:",inline"`
// List of systems this dependency supports. Systems are in the form of os/architecture.
Systems []System `json:"systems,omitempty" yaml:"systems,omitempty"`
// A list of variables that must be present for an install to succeed
RequiredVars []string `json:"required_vars,omitempty" yaml:"required_vars,omitempty"`
// contains filtered or unexported fields
}
type DependencyOverride ¶
type DependencyOverride struct {
// Limits the override to configurations matching all of the matchers. Keys may be "os", "arch" or any variable name.
// Values are an array of values to match. Any matching value will match. If a value can be interpreted as a
// semantic version it will be treated as such.
OverrideMatcher map[string][]string `json:"matcher" yaml:"matcher,omitempty"`
// Values to override the parent dependency
Dependency Overrideable `json:"dependency" yaml:"dependency,omitempty"`
}
type Overrideable ¶
type Overrideable struct {
// The url to download a dependency from.
URL *string `json:"url,omitempty" yaml:",omitempty"`
// The path in the downloaded archive where the binary is located. Default is ./<bin>
ArchivePath *string `json:"archive_path,omitempty" yaml:"archive_path,omitempty"`
// The name of the binary to be installed. Default is the name of the dependency.
BinName *string `json:"bin,omitempty" yaml:"bin,omitempty"`
// Whether to create a symlink to the bin instead of copying it.
Link *bool `json:"link,omitempty" yaml:",omitempty"`
// A list of variables that can be used in 'url', 'archive_path' and 'bin'.
//
// Two variables are always added based on the current environment: 'os' and 'arch'. Those are the operating
// system and architecture as defined by go's GOOS and GOARCH variables. I should document what those are
// somewhere.
//
// You can reference a variable using golang template syntax. For example, you could have a url set to
// `https://example.org/mydependency/v{{.version}}/mydependency-{{.os}}-{{.arch}}.tar.gz`. If you define the var
// 'version: 1.2.3' and run bindown on a 64-bit Linux system, it will download
// `https://example.org/mydependency/v1.2.3/mydependency-linux-amd64.tar.gz`.
Vars map[string]string `json:"vars,omitempty" yaml:",omitempty"`
// Overrides allows you to override values depending on the os and architecture of the target system.
Overrides []DependencyOverride `json:"overrides,omitempty" yaml:",omitempty"`
// Substitutions will substitute values from vars. The key is the name of the variable to substitute. The value is
// a map of substitutions. { "os": { "linux": "Linux", "darwin": "MacOS" } } is an example of a substitution that
// will update the os variable.
Substitutions map[string]map[string]string `json:"substitutions,omitempty" yaml:",omitempty"`
}