bpm

package module
v0.0.0-...-480fc91 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 3, 2024 License: MIT Imports: 23 Imported by: 0

README

binary-package-manager

This is a small package manager that fetches binaries from different sources (github, gitlab, ...)

Install

To install the tool copy the binary from releases to a folder inside your PATH variable. Alternative install it from source:

make

# installs inside $GOPATH/bin
make install

Usage

First init bpm:

bpm init

To add packages create the corresponding yaml files inside ~/.config/bpm/packages. For kickstarting the file use:

bpm add <package> <repo-url>

Currently only github is supported.

See package.example.yaml for all available options.

Install a package with:

bpm install <package>

To update all packages use:

bpm update
Github rate-limits

Github has a rate-limiting in place. To get a higher limit use an access token (https://github.com/settings/tokens). The access token does not need any permissions except a private repo is fetched.

# add to config file (~/.config/bpm/config.yaml)
github:
  username: <github-username>
  token: <created-token>

Release Notes

See CHANGELOG.md.

Documentation

Index

Constants

View Source
const (
	PackageSchemaVersion = 2
)
View Source
const (
	StateFileVersion = 1
)

Variables

View Source
var (
	ErrPackageNotFound           = errors.New("package not found")
	ErrPackageLoadError          = errors.New("cannot load package")
	ErrPackageNotInstalled       = errors.New("package is not installed")
	ErrPackageRemove             = errors.New("cannot remove package")
	ErrProviderNotFound          = errors.New("package provider not found")
	ErrProviderConfig            = errors.New("provider config is not valid")
	ErrProvider                  = errors.New("provider error")
	ErrProviderFetch             = errors.New("error fetching package")
	ErrMigrateNeeded             = fmt.Errorf("migration needed. Call `%s migrate` to migrate files", os.Args[0])
	ErrUnknownStateFileVersion   = errors.New("unknown state file version")
	ErrUnknownPackageFileVersion = errors.New("unknown package file version")
	ErrConfigLoad                = errors.New("cannot load config file")
	ErrYamlDump                  = errors.New("cannot dump content as yaml")
	ErrManagerCreate             = errors.New("cannot create new manager")
)
View Source
var (
	DefaultConfigPaths = []string{
		"config.yaml",
		"~/.config/bpm/config.yaml",
	}
)
View Source
var (
	PackageProviders = make(map[string]NewPackageProviderFunc)
)

Functions

This section is empty.

Types

type Config

type Config struct {
	BinFolder      string       `yaml:"bin_folder"`
	StateFolder    string       `yaml:"state_folder"`
	PackagesFolder string       `yaml:"packages_folder"`
	Quiet          bool         `yaml:"quiet"`
	Github         GithubConfig `yaml:"github"`
}

func ReadConfig

func ReadConfig(path string) (*Config, error)

type DummyManager

type DummyManager struct {
	T *testing.T
	// contains filtered or unexported fields
}

func (*DummyManager) Add

func (manager *DummyManager) Add(name string, url string) error

func (*DummyManager) Config

func (manager *DummyManager) Config() *Config

func (*DummyManager) FetchFromDownloadURL

func (manager *DummyManager) FetchFromDownloadURL(pkg Package, version string, cacheDir string) (path string, err error)

func (*DummyManager) GetCounter

func (manager *DummyManager) GetCounter(name string) int

func (*DummyManager) Info

func (manager *DummyManager) Info(name string) error

func (*DummyManager) Init

func (manager *DummyManager) Init() error

func (*DummyManager) Install

func (manager *DummyManager) Install(name string, force bool) error

func (*DummyManager) Installed

func (manager *DummyManager) Installed() error

func (*DummyManager) List

func (manager *DummyManager) List() error

func (*DummyManager) LoadState

func (manager *DummyManager) LoadState() error

func (*DummyManager) Migrate

func (manager *DummyManager) Migrate() error

func (*DummyManager) Outdated

func (manager *DummyManager) Outdated() error

func (*DummyManager) Remove

func (manager *DummyManager) Remove(name string) error

func (*DummyManager) ResetCounters

func (manager *DummyManager) ResetCounters()

func (*DummyManager) SaveState

func (manager *DummyManager) SaveState() error

func (*DummyManager) SetT

func (manager *DummyManager) SetT(t *testing.T)

func (*DummyManager) Update

func (manager *DummyManager) Update(packageNames []string) error

type GithubConfig

type GithubConfig struct {
	Username string `yaml:"username"`
	Token    string `yaml:"token"`
}

type GithubProvider

type GithubProvider struct {
	// contains filtered or unexported fields
}

func (*GithubProvider) FetchPackage

func (provider *GithubProvider) FetchPackage(pkg Package, version string, cacheDir string) (path string, err error)

func (*GithubProvider) GetLatest

func (provider *GithubProvider) GetLatest(pkg Package) (version string, err error)

type Manager

type Manager interface {
	Config() *Config
	Init() error
	SaveState() error
	LoadState() error
	Info(name string) error
	Remove(name string) error
	List() error
	Installed() error
	Add(name string, url string) error
	Outdated() error
	Install(name string, force bool) error
	Update(packageNames []string) error
	Migrate() error
	FetchFromDownloadURL(pkg Package, version string, cacheDir string) (path string, err error)
}

func NewDummyManager

func NewDummyManager(configPath string, logger zerolog.Logger, migrate bool) (Manager, error)

func NewManager

func NewManager(configPath string, logger zerolog.Logger, migrate bool) (Manager, error)

type ManagerCreateFunc

type ManagerCreateFunc func(configPath string, logger zerolog.Logger, migrate bool) (Manager, error)

type ManagerImpl

type ManagerImpl struct {
	StateFile *StateFile
	Providers map[string]PackageProvider
	Packages  map[string]Package
	// contains filtered or unexported fields
}

func (*ManagerImpl) Add

func (manager *ManagerImpl) Add(name string, url string) error

func (*ManagerImpl) Config

func (manager *ManagerImpl) Config() *Config

func (*ManagerImpl) FetchFromDownloadURL

func (manager *ManagerImpl) FetchFromDownloadURL(pkg Package, version string, cacheDir string) (path string, err error)

func (*ManagerImpl) Info

func (manager *ManagerImpl) Info(name string) error

func (*ManagerImpl) Init

func (manager *ManagerImpl) Init() error

func (*ManagerImpl) Install

func (manager *ManagerImpl) Install(name string, force bool) (err error)

func (*ManagerImpl) Installed

func (manager *ManagerImpl) Installed() error

func (*ManagerImpl) List

func (manager *ManagerImpl) List() error

func (*ManagerImpl) LoadState

func (manager *ManagerImpl) LoadState() error

func (*ManagerImpl) Migrate

func (manager *ManagerImpl) Migrate() error

func (*ManagerImpl) Outdated

func (manager *ManagerImpl) Outdated() error

func (*ManagerImpl) Remove

func (manager *ManagerImpl) Remove(pkgname string) error

func (*ManagerImpl) SaveState

func (manager *ManagerImpl) SaveState() error

func (*ManagerImpl) Update

func (manager *ManagerImpl) Update(packageNames []string) (err error)

type NewPackageProviderFunc

type NewPackageProviderFunc = func(logger zerolog.Logger, config *Config) PackageProvider

type Package

type Package struct {
	PackageV2 `yaml:",inline"`
}

func (*Package) SetDefaults

func (pkg *Package) SetDefaults()

func (*Package) UnmarshalYAML

func (pkg *Package) UnmarshalYAML(unmarshal func(interface{}) error) error

type PackageProvider

type PackageProvider interface {
	GetLatest(pkg Package) (version string, err error)
	FetchPackage(pkg Package, version string, cacheDir string) (path string, err error)
}

func NewGithubProvider

func NewGithubProvider(logger zerolog.Logger, config *Config) PackageProvider

type PackageV1

type PackageV1 struct {
	SchemaVersion int    `yaml:"schema_version" default:"1"`
	Name          string `yaml:"name"`
	Provider      string `yaml:"provider"`
	URL           string `yaml:"url"`
	GOOS          string `yaml:"goos"`
	GOARCH        string `yaml:"goarch"`
	AssetPattern  string `yaml:"asset_pattern" default:"${goos}-${goarch}"`
	ArchiveFormat string `yaml:"archive_format" default:""`
	BinPattern    string `yaml:"bin_pattern" default:"${name}"`
	DownloadUrl   string `yaml:"download_url" default:""`
}

type PackageV2

type PackageV2 struct {
	SchemaVersion int               `yaml:"schema_version" default:"1"`
	Name          string            `yaml:"name"`
	Provider      string            `yaml:"provider"`
	URL           string            `yaml:"url"`
	GOOS          map[string]string `yaml:"goos"`
	GOARCH        map[string]string `yaml:"goarch"`
	AssetPattern  string            `yaml:"asset_pattern" default:"${goos}-${goarch}"`
	ArchiveFormat string            `yaml:"archive_format" default:""`
	BinPattern    string            `yaml:"bin_pattern" default:"${name}"`
	DownloadUrl   string            `yaml:"download_url" default:""`
	TagFilter     string            `yaml:"tag_filter" default:""`
	PreReleases   bool              `yaml:"pre_releases"`
}

type SchemaVersion

type SchemaVersion struct {
	Version int
}

type StateFile

type StateFile struct {
	Version  int
	Packages map[string]string `yaml:"packages"`
}

type TestManager

type TestManager interface {
	Manager
	SetT(t *testing.T)
}

Directories

Path Synopsis
cmd
bpm

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL