go-selfupdate: github.com/sanbornm/go-selfupdate/selfupdate Index | Files

package selfupdate

import "github.com/sanbornm/go-selfupdate/selfupdate"

Update protocol:

GET hk.heroku.com/hk/linux-amd64.json

200 ok
    "Version": "2",
    "Sha256": "..." // base64


GET hkpatch.s3.amazonaws.com/hk/1/2/linux-amd64

200 ok
[bsdiff data]


GET hkdist.s3.amazonaws.com/hk/2/linux-amd64.gz

200 ok
[gzipped executable data]


Package Files

requester.go selfupdate.go


var ErrHashMismatch = errors.New("new file hash mismatch after patch")

type HTTPRequester Uses

type HTTPRequester struct {

HTTPRequester is the normal requester that is used and does an HTTP to the url location requested to retrieve the specified data.

func (*HTTPRequester) Fetch Uses

func (httpRequester *HTTPRequester) Fetch(url string) (io.ReadCloser, error)

Fetch will return an HTTP request to the specified url and return the body of the result. An error will occur for a non 200 status code.

type Requester Uses

type Requester interface {
    Fetch(url string) (io.ReadCloser, error)

Requester interface allows developers to customize the method in which requests are made to retrieve the version and binary

type Updater Uses

type Updater struct {
    CurrentVersion string    // Currently running version.
    ApiURL         string    // Base URL for API requests (json files).
    CmdName        string    // Command name is appended to the ApiURL like http://apiurl/CmdName/. This represents one binary.
    BinURL         string    // Base URL for full binary downloads.
    DiffURL        string    // Base URL for diff downloads.
    Dir            string    // Directory to store selfupdate state.
    ForceCheck     bool      // Check for update regardless of cktime timestamp
    Requester      Requester //Optional parameter to override existing http request handler
    Info           struct {
        Version string
        Sha256  []byte

Updater is the configuration and runtime data for doing an update.

Note that ApiURL, BinURL and DiffURL should have the same value if all files are available at the same location.


updater := &selfupdate.Updater{
	CurrentVersion: version,
	ApiURL:         "http://updates.yourdomain.com/",
	BinURL:         "http://updates.yourdownmain.com/",
	DiffURL:        "http://updates.yourdomain.com/",
	Dir:            "update/",
	CmdName:        "myapp", // app name
if updater != nil {
	go updater.BackgroundRun()

func (*Updater) BackgroundRun Uses

func (u *Updater) BackgroundRun() error

BackgroundRun starts the update check and apply cycle.

Package selfupdate imports 19 packages (graph) and is imported by 1 packages. Updated 2019-08-28. Refresh now. Tools for package owners.