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 Latest = "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")
)
Custom errors.
var OSsuffixMap = map[string]string{ "darwin": "Notifiarr.dmg", mnd.Windows: ".exe.zip", "freebsd": ".txz", "linux": "", }
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".
func NowWithContext ¶
NowWithContext is the same as Now() except you can pass in your own context.
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(ctx context.Context, 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.
type Update ¶
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 FillUpdate ¶
func FillUpdate(release *GitHubReleasesLatest, version string) (*Update, error)
FillUpdate compares a current version with the latest GitHub release.