update

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Oct 24, 2021 License: MIT Imports: 19 Imported by: 0

Documentation

Overview

Package update checks for an available update on GitHub. It has baked in assumptions, but is mostly portable. Makes it easy for the notifiarr client application to send a notifiation when a new version is available.

Index

Constants

View Source
const Latest = "https://api.github.com/repos/%s/releases/latest"

Latest is where we find the latest release.

View Source
const SleepTime = 5 * time.Second

SleepTime is how long we wait after updating before exiting.

Variables

View Source
var (
	ErrInvalidURL = fmt.Errorf("invalid URL provided")
	ErrNoPath     = fmt.Errorf("a path to the file being replaced must be provided")
)

Errors. Don't trigger these.

View Source
var (
	ErrNoFile = fmt.Errorf("no downloadable file found in release")
)

Custom errors.

View Source
var OSsuffixMap = map[string]string{
	"darwin":    ".dmg",
	mnd.Windows: ".exe.zip",
	"freebsd":   ".txz",
	"linux":     "",
}

OSsuffixMap is the OS to file suffix map for downloads.

Functions

func Now

func Now(u *Command) (string, error)

Now downloads the new file to a temp name in the same folder as the running file. Moves the running file to a backup name in the same folder. Moves the new file to the same location that the running file was at. Triggers another invocation of the app that sleeps 5 seconds then restarts. The running app must exit after this returns! The restart command can trigger the above Restart() procedure. And that prcoedure relaunches the app; this allows "in-place" upgrades. This also makes sure the new file works before this app exits. This is not required though, and you can totally upgrade "a different app".

func NowWithContext

func NowWithContext(ctx context.Context, u *Command) (string, error)

NowWithContext is the same as Now() except you can pass in your own context.

func Restart

func Restart(u *Command) error

Restart is meant to be called from a special flag that reloads the app after an upgrade.

Types

type Command

type Command struct {
	URL         string   // file to download.
	Path        string   // file to be updated.
	Args        []string // optional, but non-nil will crash.
	*log.Logger          // debug logs.
}

Command is the input data to perform an in-place update.

type GHasset

type GHasset struct {
	URL                string    `json:"url"`
	ID                 int64     `json:"id"`
	NodeID             string    `json:"node_id"`
	Name               string    `json:"name"`
	Label              string    `json:"label"`
	Uploader           GHuser    `json:"uploader"`
	ContentType        string    `json:"content_type"`
	State              string    `json:"state"`
	Size               int       `json:"size"`
	DownloadCount      int       `json:"download_count"`
	CreatedAt          time.Time `json:"created_at"`
	UpdatedAt          time.Time `json:"updated_at"`
	BrowserDownloadURL string    `json:"browser_download_url"`
}

GHasset is part of GitHubReleasesLatest.

type GHuser

type GHuser struct {
	Login             string `json:"login"`
	ID                int64  `json:"id"`
	NodeID            string `json:"node_id"`
	AvatarURL         string `json:"avatar_url"`
	GravatarID        string `json:"gravatar_id"`
	URL               string `json:"url"`
	HTMLURL           string `json:"html_url"`
	FollowersURL      string `json:"followers_url"`
	FollowingURL      string `json:"following_url"`
	GistsURL          string `json:"gists_url"`
	StarredURL        string `json:"starred_url"`
	SubscriptionsURL  string `json:"subscriptions_url"`
	OrganizationsURL  string `json:"organizations_url"`
	ReposURL          string `json:"repos_url"`
	EventsURL         string `json:"events_url"`
	ReceivedEventsURL string `json:"received_events_url"`
	Type              string `json:"type"`
	SiteAdmin         bool   `json:"site_admin"`
}

GHuser is part of GitHubReleasesLatest.

type GitHubReleasesLatest

type GitHubReleasesLatest struct {
	URL             string    `json:"url"`
	AssetsURL       string    `json:"assets_url"`
	UploadURL       string    `json:"upload_url"`
	HTMLURL         string    `json:"html_url"`
	ID              int64     `json:"id"`
	Author          GHuser    `json:"author"`
	NodeID          string    `json:"node_id"`
	TagName         string    `json:"tag_name"`
	TargetCommitish string    `json:"target_commitish"`
	Name            string    `json:"name"`
	Draft           bool      `json:"draft"`
	Prerelease      bool      `json:"prerelease"`
	CreatedAt       time.Time `json:"created_at"`
	PublishedAt     time.Time `json:"published_at"`
	Assets          []GHasset `json:"assets"`
	TarballURL      string    `json:"tarball_url"`
	ZipballURL      string    `json:"zipball_url"`
	Body            string    `json:"body"`
}

GitHubReleasesLatest is the output from the releases/latest API on GitHub.

func GetRelease

func GetRelease(uri string) (*GitHubReleasesLatest, error)

GetRelease returns a GitHub release. See Check for an example on how to use it.

type Signal

type Signal struct {
	Text string
}

Signal provides a fake signal to close the app when an upgrade is requested.

func (*Signal) Signal

func (s *Signal) Signal()

Signal allows you to pass this into an exit signal channel. This does not do anything, it only satisfies an interface.

func (*Signal) String

func (s *Signal) String() string

String allows you to pass this into an exit signal channel.

type Update

type Update struct {
	Outdate bool
	RelDate time.Time
	Version string
	Current string
	CurrURL string
}

Update contains running Version, Current version and Download URL for Current version. Outdate is true if the running version is older than the current version.

func Check

func Check(userRepo string, version string) (*Update, error)

Check checks if the app this library lives in has an updated version on GitHub.

func FillUpdate

func FillUpdate(release *GitHubReleasesLatest, version string) (*Update, error)

FillUpdate compares a current version with the latest GitHub release.

Jump to

Keyboard shortcuts

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