[go-github-selfupdate][] is a Go library to provide self-update mechanism to command line tools.
Go does not provide the way to install/update the specific version of tools. By default, Go command line tools are updated
- using `go get -u` (updating to HEAD)
- using system's package manager (depending on the platform)
- downloading executables from GitHub release page
By using this library, you will get 4th choice:
- from your command line tool directly
go-github-selfupdate retrieves the information of released binaries via [GitHub Releases API][] and check the current version. If newer version than itself is detected, it updates binary by downloading from GitHub and replacing itself.
Please note that this library assumes you adopt [semantic versioning][]. It is necessary for comparing versions systematically.
go-github-selfupdate assumes that released binaries are put for each combination of platforms and archs.
For example, if your command name is `foo-bar`, one of followings is expected to be put in release page on GitHub as binary for platform `linux` and arch `amd64`.
-`foo-bar-linux-amd64` (executable)
-`foo-bar-linux-amd64.zip` (zip file)
-`foo-bar-linux-amd64.tar.gz` (gzip file)
-`foo-bar_linux_amd64` (executable)
-`foo-bar_linux_amd64.zip` (zip file)
-`foo-bar_linux_amd64.tar.gz` (gzip file)
### Naming Rules of Git Tags
go-github-selfupdate searches binaries' versions via corresponding Git tag names. When your binary's version is `1.2.3`, you should use `1.2.3` or `v1.2.3` (prefixed with `v`) as Git tag name.
### Structure of Releases
In summary, structure of releases on GitHub looks like:
-`v1.2.0`
-`foo-bar-linux-amd64.zip`
-`foo-bar-linux-386.zip`
-`foo-bar-darwin-amd64.zip`
-`foo-bar-windows-amd64.zip`
- ... (Other binaries for v1.2.0)
-`v1.1.3`
-`foo-bar-linux-amd64.zip`
-`foo-bar-linux-386.zip`
-`foo-bar-darwin-amd64.zip`
-`foo-bar-windows-amd64.zip`
- ... (Other binaries for v1.1.3)
- ... (older versions)
## Dependencies
This library utilizes [go-github][] to retrieve the information of releases and [go-update][] to replace current binary and [semver][] to compare versions.
> Copyright (c) 2013 The go-github AUTHORS. All rights reserved.
> Copyright 2015 Alan Shreve
> Copyright (c) 2014 Benedikt Lang <github at benediktlang.de>