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 notification when a new version is available.
Index ¶
Constants ¶
const LatestGH = "https://api.github.com/repos/%s/releases/latest"
Latest is where we find the latest release.
const SleepTime = 5 * time.Second
SleepTime is how long we wait after updating before exiting.
Variables ¶
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.
var ErrNoFile = fmt.Errorf("no downloadable file found in release")
var OSsuffixMap = map[string]string{ "darwin": ".dmg", "windows": runtime.GOARCH + ".installer.exe", "linux": runtime.GOARCH + ".gz", }
OSsuffixMap is the OS to file suffix map for downloads.
Functions ¶
func Now ¶
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".
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 int64 `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(ctx context.Context, uri string) (*GitHubReleasesLatest, error)
GetRelease returns a GitHub release. See Check for an example on how to use it.
type Progress ¶
type Progress struct {
// contains filtered or unexported fields
}
func DownloadURL ¶
type UnstableFile ¶
type UnstableFile struct {
Time time.Time `json:"time"`
File string `json:"file"`
Ver string `json:"version"`
Rev int `json:"revision"`
Size int64 `json:"size"`
}
func GetUnstable ¶
func GetUnstable(ctx context.Context, uri string) (*UnstableFile, error)
GetUnstable returns an unstable release. See CheckUnstable for an example on how to use it.
type Update ¶
type Update struct {
Outdate bool // True if we're outdated, update available.
Version string // Version passed in externally.
Current string // Current release available on GH or US.
CurrURL string // URL of current release on GH or US.
RelDate time.Time // Current version release date.
RelSize int64 // Current release file size.
}
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 CheckGitHub ¶
CheckGitHub checks if the provided repo has an updated version on GitHub.
func CheckUnstable ¶
CheckUnstable checks if the provided app has an updated version on GitHub. Pass in revision only, no version.
func FillUpdate ¶
func FillUpdate(release *GitHubReleasesLatest, version string) (*Update, error)
FillUpdate compares a current version with the latest GitHub release.