From cc06b2e1a315f151734eede5c6cc0fa6ca037d2c Mon Sep 17 00:00:00 2001 From: codeskyblue Date: Tue, 30 Aug 2016 19:26:10 +0800 Subject: [PATCH] add equinox self update support --- Godeps/Godeps.json | 24 ++ equinox.pub | 5 + gosuv.go | 48 ++- res/css/style.css | 11 +- res/index.html | 6 +- res/js/index.js | 3 +- .../github.com/equinox-io/equinox/.travis.yml | 5 + .../github.com/equinox-io/equinox/README.md | 99 +++++ vendor/github.com/equinox-io/equinox/doc.go | 92 ++++ .../equinox/internal/go-update/LICENSE | 13 + .../equinox/internal/go-update/README.md | 65 +++ .../equinox/internal/go-update/apply.go | 322 ++++++++++++++ .../equinox/internal/go-update/doc.go | 172 ++++++++ .../equinox/internal/go-update/hide_noop.go | 7 + .../internal/go-update/hide_windows.go | 19 + .../go-update/internal/binarydist/License | 22 + .../go-update/internal/binarydist/Readme.md | 7 + .../go-update/internal/binarydist/bzip2.go | 40 ++ .../go-update/internal/binarydist/diff.go | 408 ++++++++++++++++++ .../go-update/internal/binarydist/doc.go | 24 ++ .../go-update/internal/binarydist/encoding.go | 53 +++ .../go-update/internal/binarydist/patch.go | 109 +++++ .../go-update/internal/binarydist/seek.go | 43 ++ .../internal/go-update/internal/osext/LICENSE | 27 ++ .../go-update/internal/osext/README.md | 16 + .../go-update/internal/osext/osext.go | 27 ++ .../go-update/internal/osext/osext_plan9.go | 20 + .../go-update/internal/osext/osext_procfs.go | 36 ++ .../go-update/internal/osext/osext_sysctl.go | 79 ++++ .../go-update/internal/osext/osext_windows.go | 34 ++ .../equinox/internal/go-update/patcher.go | 24 ++ .../equinox/internal/go-update/verifier.go | 74 ++++ .../equinox-io/equinox/internal/osext/LICENSE | 27 ++ .../equinox/internal/osext/README.md | 16 + .../equinox/internal/osext/osext.go | 27 ++ .../equinox/internal/osext/osext_plan9.go | 20 + .../equinox/internal/osext/osext_procfs.go | 36 ++ .../equinox/internal/osext/osext_sysctl.go | 79 ++++ .../equinox/internal/osext/osext_windows.go | 34 ++ .../equinox-io/equinox/proto/proto.go | 42 ++ vendor/github.com/equinox-io/equinox/sdk.go | 305 +++++++++++++ 41 files changed, 2510 insertions(+), 10 deletions(-) create mode 100644 equinox.pub create mode 100644 vendor/github.com/equinox-io/equinox/.travis.yml create mode 100644 vendor/github.com/equinox-io/equinox/README.md create mode 100644 vendor/github.com/equinox-io/equinox/doc.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/LICENSE create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/README.md create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/apply.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/doc.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/hide_noop.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/hide_windows.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/License create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/Readme.md create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/bzip2.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/diff.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/doc.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/encoding.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/patch.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/binarydist/seek.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/osext/LICENSE create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/osext/README.md create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/osext/osext.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/osext/osext_plan9.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/osext/osext_procfs.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/osext/osext_sysctl.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/internal/osext/osext_windows.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/patcher.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/go-update/verifier.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/osext/LICENSE create mode 100644 vendor/github.com/equinox-io/equinox/internal/osext/README.md create mode 100644 vendor/github.com/equinox-io/equinox/internal/osext/osext.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/osext/osext_plan9.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/osext/osext_procfs.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/osext/osext_sysctl.go create mode 100644 vendor/github.com/equinox-io/equinox/internal/osext/osext_windows.go create mode 100644 vendor/github.com/equinox-io/equinox/proto/proto.go create mode 100644 vendor/github.com/equinox-io/equinox/sdk.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index c2a1f4c..6a3329c 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -7,6 +7,30 @@ "ImportPath": "github.com/codeskyblue/kexec", "Rev": "098ccba5e5e7e676f3631983c5ea931a3592871f" }, + { + "ImportPath": "github.com/equinox-io/equinox", + "Rev": "6f97d0d3970881d3e53dd6f547a41109eb055e54" + }, + { + "ImportPath": "github.com/equinox-io/equinox/internal/go-update", + "Rev": "6f97d0d3970881d3e53dd6f547a41109eb055e54" + }, + { + "ImportPath": "github.com/equinox-io/equinox/internal/go-update/internal/binarydist", + "Rev": "6f97d0d3970881d3e53dd6f547a41109eb055e54" + }, + { + "ImportPath": "github.com/equinox-io/equinox/internal/go-update/internal/osext", + "Rev": "6f97d0d3970881d3e53dd6f547a41109eb055e54" + }, + { + "ImportPath": "github.com/equinox-io/equinox/internal/osext", + "Rev": "6f97d0d3970881d3e53dd6f547a41109eb055e54" + }, + { + "ImportPath": "github.com/equinox-io/equinox/proto", + "Rev": "6f97d0d3970881d3e53dd6f547a41109eb055e54" + }, { "ImportPath": "github.com/glycerine/rbuf", "Rev": "b8b438717ac043d5224cc7f079b866e3b9ea0599" diff --git a/equinox.pub b/equinox.pub new file mode 100644 index 0000000..d24df2c --- /dev/null +++ b/equinox.pub @@ -0,0 +1,5 @@ +-----BEGIN ECDSA PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEY8xsSkcFs8XXUicw3n7E77qN/vqKUQ/6 +/X5aBiOVF1yTIRYRXrV3aEvJRzErvQxziT9cLxQq+BFUZqn9pISnPSf9dn0wf9kU +TxI79zIvne9UT/rDsM0BxSydwtjG00MT +-----END ECDSA PUBLIC KEY----- diff --git a/gosuv.go b/gosuv.go index d280127..34e5b98 100644 --- a/gosuv.go +++ b/gosuv.go @@ -8,13 +8,50 @@ import ( "net/http" "os" + "github.com/equinox-io/equinox" "github.com/urfave/cli" ) +const appID = "app_8Gji4eEAdDx" + var ( - Version string = "dev" + Version string = "dev" + publicKey = []byte(` +-----BEGIN ECDSA PUBLIC KEY----- +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEY8xsSkcFs8XXUicw3n7E77qN/vqKUQ/6 +/X5aBiOVF1yTIRYRXrV3aEvJRzErvQxziT9cLxQq+BFUZqn9pISnPSf9dn0wf9kU +TxI79zIvne9UT/rDsM0BxSydwtjG00MT +-----END ECDSA PUBLIC KEY----- +`) ) +func equinoxUpdate() error { + var opts equinox.Options + if err := opts.SetPublicKeyPEM(publicKey); err != nil { + return err + } + + // check for the update + resp, err := equinox.Check(appID, opts) + switch { + case err == equinox.NotAvailableErr: + fmt.Println("No update available, already at the latest version!") + return nil + case err != nil: + fmt.Println("Update failed:", err) + return err + } + + // fetch the update and apply it + err = resp.Apply() + if err != nil { + return err + } + + fmt.Printf("Updated to new version: %s!\n", resp.ReleaseVersion) + return nil +} + func actionStartServer(c *cli.Context) error { if err := registerHTTPHandlers(); err != nil { return err @@ -75,6 +112,10 @@ func actionConfigTest(c *cli.Context) error { return nil } +func actionUpdateSelf(c *cli.Context) error { + return equinoxUpdate() +} + func main() { app := cli.NewApp() app.Name = "gosuv" @@ -114,6 +155,11 @@ func main() { Usage: "Test if config file is valid", Action: actionConfigTest, }, + { + Name: "update-self", + Usage: "Update gosuv itself", + Action: actionUpdateSelf, + }, } if err := app.Run(os.Args); err != nil { os.Exit(1) diff --git a/res/css/style.css b/res/css/style.css index 15b1307..38a8ec5 100644 --- a/res/css/style.css +++ b/res/css/style.css @@ -22,9 +22,10 @@ body { height: 50em; } -.status-icon { - border-radius: 1.5em; - display: inline-block; - width: 1.5em; - font-size: 0.2em; +.status { + background-color: gray; + border-radius: 0.3em; + padding-left: 0.5em; + padding-right: 0.5em; + color: white; } diff --git a/res/index.html b/res/index.html index 472a71c..fd0107c 100644 --- a/res/index.html +++ b/res/index.html @@ -85,7 +85,9 @@ gohttpserver - Running(2h) + + Running(2h) +