update

package module
v2.2.11+incompatible Latest Latest
Warning

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

Go to latest
Published: Apr 21, 2021 License: MIT Imports: 15 Imported by: 1

README

go-update

Package update provides tooling to auto-update binary releases from GitHub based on the user's current version and operating system. Used by command-line tools such as Up and Apex.

changes in this fork (diodechain)

  1. Added the update.FindZip() func that searches for a '.zip' file instead of '.tar' like the update.FindTarball() func

  2. Changed github.latestRelease implementation to compare version strings with dots and dashes numerically. Supported are 'v1.2.3' 'v1.2.3-22' and similiar. Examples:

    • 'v1.2.3-22' > 'v1.2.3'
    • 'v1.2.4' > 'v1.2.3'
    • 'v2' > 'v1.2.3'
    • 'v2' == '2'
    • 'v2.0' == 'v2'
    • 'v2.0.0.0.0' == 'v2'
  3. Added windows support. (update.InstallTo() used to fail there)

  4. Added update.Restart() method


GoDoc

Documentation

Overview

Package update provides tooling to auto-update binary releases from GitHub based on the user's current version and operating system.

Example
// update polls(1) from tj/gh-polls on github
p := &update.Project{
	Command: "polls",
	Owner:   "tj",
	Repo:    "gh-polls",
	Version: "0.0.3",
}

// fetch the new releases
releases, err := p.LatestReleases()
if err != nil {
	log.Fatalf("error fetching releases: %s", err)
}

// no updates
if len(releases) == 0 {
	log.Println("no updates")
	return
}

// latest release
latest := releases[0]

// find the asset for this system
a := latest.FindTarball(runtime.GOOS, runtime.GOARCH)
if a == nil {
	log.Println("no binary for your system")
	return
}

// whitespace
fmt.Println()

path, err := a.DownloadProxy(progress.Reader)
if err != nil {
	log.Fatalf("error downloading: %s", err)
}

// replace the previous
if err := p.Install(path); err != nil {
	log.Fatalf("error installing: %s", err)
}

fmt.Printf("Updated to %s\n", latest.Version)
Output:

Index

Examples

Constants

This section is empty.

Variables

View Source
var (
	// ErrNotFound is returned from GetRelease if the release is not found.
	ErrNotFound = errors.New("release not found")
)

Errors.

View Source
var NopProxy = func(size int, r io.ReadCloser) io.ReadCloser {
	return r
}

NopProxy does nothing.

Functions

func Restart

func Restart(cmd string)

Restart runs the command replacing the current running app

Types

type Asset

type Asset struct {
	Name      string // Name of the asset.
	Size      int    // Size of the asset.
	URL       string // URL of the asset.
	Downloads int    // Downloads count.
}

Asset represents a project release asset.

func (*Asset) Download

func (a *Asset) Download() (string, error)

Download the asset to a tmp directory and return its path.

func (*Asset) DownloadProxy

func (a *Asset) DownloadProxy(proxy Proxy) (string, error)

DownloadProxy the asset to a tmp directory and return its path.

type Manager

type Manager struct {
	Store          // Store for releases such as Github or a custom private store.
	Command string // Command is the executable's name.
}

Manager is the update manager.

func (*Manager) Install

func (m *Manager) Install(path string) error

Install binary to replace the current version.

func (*Manager) InstallTo

func (m *Manager) InstallTo(path, dir string) error

InstallTo binary to the given dir.

type Proxy

type Proxy func(int, io.ReadCloser) io.ReadCloser

Proxy is used to proxy a reader, for example using https://github.com/cheggaaa/pb to provide progress updates.

type Release

type Release struct {
	Version     string    // Version is the release version.
	Notes       string    // Notes is the markdown release notes.
	URL         string    // URL is the notes url.
	PublishedAt time.Time // PublishedAt is the publish time.
	Assets      []*Asset  // Assets is the release assets.
}

Release represents a project release.

func (*Release) FindTarball

func (r *Release) FindTarball(os, arch string) *Asset

FindTarball returns a tarball matching os and arch, or nil.

func (*Release) FindZip

func (r *Release) FindZip(os, arch string) *Asset

FindZip returns a zipfile matching os and arch, or nil.

type Store

type Store interface {
	GetRelease(version string) (*Release, error)
	LatestReleases() ([]*Release, error)
}

Store is the interface used for listing and fetching releases.

Directories

Path Synopsis
_example
Package progress provides a proxy for download progress.
Package progress provides a proxy for download progress.
stores
apex
Package apex provides an Apex release store.
Package apex provides an Apex release store.
github
Package github provides a GitHub release store.
Package github provides a GitHub release store.

Jump to

Keyboard shortcuts

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