updater

package
v0.0.0-...-7391911 Latest Latest
Warning

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

Go to latest
Published: May 29, 2023 License: MIT Imports: 17 Imported by: 1

Documentation

Overview

Package updater is general logic for analyzing and updating a source project's dependencies

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DefaultUpdateBranchNamer

type DefaultUpdateBranchNamer struct{}

func (DefaultUpdateBranchNamer) Format

func (d DefaultUpdateBranchNamer) Format(baseBranch string, update Update) string

func (DefaultUpdateBranchNamer) FormatBatch

func (d DefaultUpdateBranchNamer) FormatBatch(baseBranch, batchName string) string

type Dependency

type Dependency struct {
	// Path is the name of the dependency.
	Path    string
	Version string
	// Indirect indicates this dependency is only required by a dependency of the target project.
	Indirect bool
}

Dependency is an updatable external artifact

type ExistingUpdate

type ExistingUpdate struct {
	// Is this update still in a proposed state?
	Open bool
	// If not open, was this update accepted?
	Merged     bool
	BaseBranch string
	LastUpdate time.Time
	Group      UpdateGroup
}

ExistingUpdate is a previously proposed update(s).

type ExistingUpdates

type ExistingUpdates []ExistingUpdate

func (ExistingUpdates) LatestGroupUpdate

func (e ExistingUpdates) LatestGroupUpdate(group string) (latest time.Time)

type Factory

type Factory interface {
	NewUpdater(root string) Updater
}

Factory provides UpdaterS for testing, masking any arguments other than the repo root.

type Group

type Group struct {
	// Identify the group and members:
	// Name labels unique groups
	Name string `yaml:"name"`
	// Pattern is a prefix for the dependency, or a regular expression enclosed by /'s
	Pattern string `yaml:"pattern"`

	// Parameters that apply to members:
	// Range is a comma separated list of allowed semver ranges
	Range      string `yaml:"range"`
	CoolDown   string `yaml:"cooldown"`
	PreScript  string `yaml:"pre-script"`
	PostScript string `yaml:"post-script"`
	// contains filtered or unexported fields
}

func (*Group) CoolDownDuration

func (g *Group) CoolDownDuration() time.Duration

func (*Group) InRange

func (g *Group) InRange(v string) bool

func (*Group) Validate

func (g *Group) Validate() error

type Groups

type Groups []*Group

Groups is an ordered list of Group with unique names. Prefer a list with .Name to map[string]Group for clear iteration order.

func ParseGroups

func ParseGroups(s string) (Groups, error)

func (Groups) ByName

func (g Groups) ByName(name string) *Group

func (Groups) GroupDependencies

func (g Groups) GroupDependencies(deps []Dependency) (byGroupName map[string][]Dependency, ungrouped []Dependency)

GroupDependencies groups dependencies according to this configuration.

func (Groups) Validate

func (g Groups) Validate() error

type Repo

type Repo interface {
	// Root returns the working tree root.
	// This should minimally contain go.{mod,sum}. Vendoring or major updates require the full tree.
	Root() string
	// SetBranch changes to an existing branch.
	SetBranch(branch string) error
	// NewBranch creates and changes to a new branch.
	NewBranch(base, branch string) error
	// Branch returns the current branch.
	Branch() string
	// Push snapshots the working tree after an update has been applied, and "publishes".
	// This is branch to commit. Publishing may mean push, create a PR, tweet the maintainer, whatever.
	Push(context.Context, UpdateGroup) error
	// Fetch loads a remote ref without updating the working copy.
	Fetch(ctx context.Context, branch string) error
	// ExistingUpdates returns the state of recent updates
	ExistingUpdates(ctx context.Context, baseBranch string) (ExistingUpdates, error)
}

Repo interfaces with an SCM repository, probably Git.

type RepoUpdater

type RepoUpdater struct {
	Updater Updater
	// contains filtered or unexported fields
}

RepoUpdater creates branches proposing all available updates for a Go module.

func NewRepoUpdater

func NewRepoUpdater(repo Repo, updater Updater, opts ...RepoUpdaterOpt) *RepoUpdater

NewRepoUpdater creates RepoUpdater.

func (*RepoUpdater) Update

func (u *RepoUpdater) Update(ctx context.Context, baseBranch, branchName string, updates UpdateGroup) error

Update creates a single update branch included the Repo.

func (*RepoUpdater) UpdateAll

func (u *RepoUpdater) UpdateAll(ctx context.Context, branches ...string) error

UpdateAll creates updates from a base branch included the Repo.

type RepoUpdaterOpt

type RepoUpdaterOpt func(*RepoUpdater)

func WithBranchNamer

func WithBranchNamer(branchNamer UpdateBranchNamer) RepoUpdaterOpt

func WithGroups

func WithGroups(groups ...*Group) RepoUpdaterOpt

type SignedUpdateGroup

type SignedUpdateGroup struct {
	Updates   UpdateGroup `json:"signed"`
	Signature []byte      `json:"signature"`
}

func NewSignedUpdateGroup

func NewSignedUpdateGroup(key []byte, updates UpdateGroup) (SignedUpdateGroup, error)

type Update

type Update struct {
	// Path of module being updated
	Path string `json:"path"`
	// Previous module version
	Previous string `json:"previous"`
	// Next module version
	Next string `json:"next"`
}

Update specifies changes to the version of a specific module path

type UpdateBranchNamer

type UpdateBranchNamer interface {
	// Format generates branch name for an update
	Format(baseBranch string, update Update) string
	// Format generates branch name for batch of updates
	FormatBatch(baseBranch, batchName string) string
}

UpdateBranchNamer names branches for proposed updates.

type UpdateGroup

type UpdateGroup struct {
	Name    string   `json:"name,omitempty"`
	Updates []Update `json:"updates"`
}

func NewUpdateGroup

func NewUpdateGroup(name string, updates ...Update) UpdateGroup

func VerifySignedUpdateGroup

func VerifySignedUpdateGroup(key []byte, signed SignedUpdateGroup) (*UpdateGroup, error)

type Updater

type Updater interface {
	Name() string
	Dependencies(context.Context) ([]Dependency, error)
	Check(ctx context.Context, dep Dependency, filter func(string) bool) (*Update, error)
	ApplyUpdate(context.Context, Update) error
}

Jump to

Keyboard shortcuts

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