66 lines
2.3 KiB
Markdown
66 lines
2.3 KiB
Markdown
|
# go-update: Build self-updating Go programs [![godoc reference](https://godoc.org/github.com/inconshreveable/go-update?status.png)](https://godoc.org/github.com/inconshreveable/go-update)
|
||
|
|
||
|
Package update provides functionality to implement secure, self-updating Go programs (or other single-file targets)
|
||
|
A program can update itself by replacing its executable file with a new version.
|
||
|
|
||
|
It provides the flexibility to implement different updating user experiences
|
||
|
like auto-updating, or manual user-initiated updates. It also boasts
|
||
|
advanced features like binary patching and code signing verification.
|
||
|
|
||
|
Example of updating from a URL:
|
||
|
|
||
|
```go
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/inconshreveable/go-update"
|
||
|
)
|
||
|
|
||
|
func doUpdate(url string) error {
|
||
|
resp, err := http.Get(url)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
err := update.Apply(resp.Body, update.Options{})
|
||
|
if err != nil {
|
||
|
// error handling
|
||
|
}
|
||
|
return err
|
||
|
}
|
||
|
```
|
||
|
|
||
|
## Features
|
||
|
|
||
|
- Cross platform support (Windows too!)
|
||
|
- Binary patch application
|
||
|
- Checksum verification
|
||
|
- Code signing verification
|
||
|
- Support for updating arbitrary files
|
||
|
|
||
|
## [equinox.io](https://equinox.io)
|
||
|
[equinox.io](https://equinox.io) is a complete ready-to-go updating solution built on top of go-update that provides:
|
||
|
|
||
|
- Hosted updates
|
||
|
- Update channels (stable, beta, nightly, ...)
|
||
|
- Dynamically computed binary diffs
|
||
|
- Automatic key generation and code
|
||
|
- Release tooling with proper code signing
|
||
|
- Update/download metrics
|
||
|
|
||
|
## API Compatibility Promises
|
||
|
The master branch of `go-update` is *not* guaranteed to have a stable API over time. For any production application, you should vendor
|
||
|
your dependency on `go-update` with a tool like git submodules, [gb](http://getgb.io/) or [govendor](https://github.com/kardianos/govendor).
|
||
|
|
||
|
The `go-update` package makes the following promises about API compatibility:
|
||
|
1. A list of all API-breaking changes will be documented in this README.
|
||
|
1. `go-update` will strive for as few API-breaking changes as possible.
|
||
|
|
||
|
## API Breaking Changes
|
||
|
- **Sept 3, 2015**: The `Options` struct passed to `Apply` was changed to be passed by value instead of passed by pointer. Old API at `28de026`.
|
||
|
- **Aug 9, 2015**: 2.0 API. Old API at `221d034` or `gopkg.in/inconshreveable/go-update.v0`.
|
||
|
|
||
|
## License
|
||
|
Apache
|