diff --git a/.circleci/config.yml b/.circleci/config.yml index 57da64b..a1f1987 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -34,4 +34,4 @@ workflows: branches: ignore: /.*/ tags: - only: /^v[0-9]+(\.[0-9]+)/ \ No newline at end of file + only: /^v[0-9]+\.[0-9]+\.[0-9]+/ \ No newline at end of file diff --git a/.code-workspace b/.code-workspace new file mode 100644 index 0000000..8bd0819 --- /dev/null +++ b/.code-workspace @@ -0,0 +1,26 @@ +{ + "folders": [ + { "path": "." }, + ], + "settings": { + "go.useLanguageServer": true, + "go.alternateTools": { + "go-langserver": "gopls" + }, + "go.languageServerExperimentalFeatures": { + "format": true, + "autoComplete": true + }, + "[go]": { + "editor.snippetSuggestions": "none", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.organizeImports": true + }, + }, + "gopls": { + "usePlaceholders": true, + "enhancedHover": true + } + } +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 88bb020..6d2933d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,10 @@ .DS_Store .env zdxsv.db -bin/ local.toml dev.toml prod.toml docker-compose.prod.yml + +bin/ +dist/ diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..5a0ee2a --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,33 @@ +env: + - GO111MODULE=on +before: + hooks: + - go mod tidy +builds: +- main: ./src/zproxy + binary: zproxy + env: + - CGO_ENABLED=0 + goos: + - linux + - darwin + - windows + goarch: + - 386 + - amd64 + - arm + - arm64 + ldflags: + - -s -w -X main.releaseVersion={{.Version}} -X main.releaseCommit={{.ShortCommit}} -X main.releaseDate={{.Date}} +archives: +- format: zip +checksum: + name_template: 'checksums.txt' +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - '^test:' + - Merge pull request + - Merge branch diff --git a/go.mod b/go.mod index 165c810..a8d03f3 100644 --- a/go.mod +++ b/go.mod @@ -4,13 +4,14 @@ go 1.13 require ( github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 + github.com/blang/semver v3.5.1+incompatible github.com/caarlos0/env/v6 v6.1.0 - github.com/equinox-io/equinox v1.2.0 github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b github.com/golang/protobuf v1.3.2 github.com/huin/goupnp v1.0.0 github.com/icza/gowut v1.4.0 github.com/mattn/go-sqlite3 v1.11.0 github.com/miekg/dns v1.1.19 + github.com/rhysd/go-github-selfupdate v1.1.0 github.com/valyala/gorpc v0.0.0-20160519171614-908281bef774 ) diff --git a/go.sum b/go.sum index e8a2b74..23bc0a6 100644 --- a/go.sum +++ b/go.sum @@ -1,41 +1,76 @@ github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394 h1:OYA+5W64v3OgClL+IrOD63t4i/RW7RqrAVl9LTZ9UqQ= github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394/go.mod h1:Q8n74mJTIgjX4RBBcHnJ05h//6/k6foqmgE45jTQtxg= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/caarlos0/env/v6 v6.1.0 h1:4FbM+HmZA/Q5wdSrH2kj0KQXm7xnhuO8y3TuOTnOvqc= github.com/caarlos0/env/v6 v6.1.0/go.mod h1:iUA6X3VCAOwDhoqvgKlTGjjwJzQseIJaFYApUqQkt+8= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/equinox-io/equinox v1.2.0 h1:bBS7Ou+Y7Jwgmy8TWSYxEh85WctuFn7FPlgbUzX4DBA= -github.com/equinox-io/equinox v1.2.0/go.mod h1:6s3HJB0PYUNgs0mxmI8fHdfVl3TQ25ieA/PVfr+eyVo= +github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/google/go-github v17.0.0+incompatible h1:N0LgJ1j65A7kfXrZnUDaYCs/Sf4rEjNlfyDHW9dolSY= +github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= +github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= +github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/icza/gowut v1.4.0 h1:OwUKBXP20Iw3EgghXznRyuohMM5hG9zID9bU1n+a6+U= github.com/icza/gowut v1.4.0/go.mod h1:0bLWFdhY/FxwCx2nDrezL87kfFgPfwZn9GytsrUPM8U= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf h1:WfD7VjIE6z8dIvMsI4/s+1qr5EL+zoIGev1BQj1eoJ8= +github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf/go.mod h1:hyb9oH7vZsitZCiBt0ZvifOrB+qc8PS5IiilCIb87rg= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/miekg/dns v1.1.19 h1:0ymbfaLG1/utH2+BydNiF+dx1jSEmdr/nylOtkGHZZg= github.com/miekg/dns v1.1.19/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v1.4.2 h1:3mYCb7aPxS/RU7TI1y4rkEn1oKmPRjNJLNEXgw7MH2I= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rhysd/go-github-selfupdate v1.1.0 h1:+aMomy69YCYxJ6kr13nYIgAJWSB1kHK5M5YpbmjQkWo= +github.com/rhysd/go-github-selfupdate v1.1.0/go.mod h1:jbfShZ+Nl3IHUgr77kwQjObcWf1z961UAoD6p5LrPBU= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/tcnksm/go-gitconfig v0.1.2 h1:iiDhRitByXAEyjgBqsKi9QU4o2TNtv9kPP3RgPgXBPw= +github.com/tcnksm/go-gitconfig v0.1.2/go.mod h1:/8EhP4H7oJZdIPyT+/UIsG87kTzrzM4UsLGSItWYCpE= +github.com/ulikunitz/xz v0.5.5 h1:pFrO0lVpTBXLpYw+pnLj6TbvHuyjXMfjGeCwSqCVwok= +github.com/ulikunitz/xz v0.5.5/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/valyala/gorpc v0.0.0-20160519171614-908281bef774 h1:SUHFQHAaySqF0YHCmmm0EIFooFZpDPpi5KTom7YJ07c= github.com/valyala/gorpc v0.0.0-20160519171614-908281bef774/go.mod h1:8uNqM1i7pr0jO7gdvbNCgsSa8Ki2vMh7JCQxO9BlF90= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392 h1:ACG4HJsFiNMf47Y4PeRoebLNy/2lXT9EtprMuTFWt1M= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478 h1:l5EDrHhldLYb3ZRHDUhXF7Om7MvYXnkV9/iQNo1lX6g= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288 h1:JIqe8uIcRBHXDQVvZtHwp80ai3Lw3IJAeJEs55Dc1W0= +golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe h1:6fAMxZRR6sl1Uq8U61gxU+kPTs2tR8uOySCbBP7BN/M= @@ -46,7 +81,16 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQk= +google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/src/zproxy/main.go b/src/zproxy/main.go index 22d98d4..5dd4b68 100644 --- a/src/zproxy/main.go +++ b/src/zproxy/main.go @@ -19,7 +19,7 @@ import ( pb "github.com/golang/protobuf/proto" ) -const version = 1006 +const protocolVersion = 1006 func isSameAddr(a, b *net.UDPAddr) bool { return a.Port == b.Port && a.IP.Equal(b.IP) @@ -31,7 +31,7 @@ func isPS2FirstData(data []byte) bool { func main() { log.Println("===========================================================") - log.Printf("ガンダムvs.Zガンダム RUDP-ProxyClient ver.%d\n", version) + log.Printf("zproxy - ガンダムvs.Zガンダム RUDP-Proxy (v%v, ver.%v)\n", releaseVersion, protocolVersion) log.Println("===========================================================") log.Println("初めて使用する場合, 必ず接続テスト対戦を行ってください.") log.Println("ケネディポートの自動選抜に入ることでテスト対戦を開始します.") @@ -39,10 +39,8 @@ func main() { log.Println("対戦中はソフトを終了しないでください.") if conf.CheckUpdate { - err := equinoxUpdate() - if err != nil { - log.Println(err) - } + printReleaseInfo() + doSelfUpdate() } if conf.ProfileLevel >= 1 { @@ -274,7 +272,7 @@ func (z *Zproxy) PollLobby() error { mtx.Unlock() resp, err := registerProxy(&lobbyrpc.RegisterProxyRequest{ - CurrentVersion: version, + CurrentVersion: protocolVersion, UserId: conf.RegisterUserId, Port: conf.TCPListenPort, LocalIP: z.selfLocalIP, @@ -500,6 +498,14 @@ func (z *Zproxy) ServeBattle() error { case <-chFlush: lastSend = time.Now() pkt := proto.GetPacket() + { + data, seq, ack := svRudp.GetSendData() + pkt.Type = proto.MessageType_Battle.Enum() + pkt.BattleData = data + pkt.Seq = pb.Uint32(seq) + pkt.Ack = pb.Uint32(ack) + z.udpcl.SendPacketTo(pkt, z.svAddr) + } for _, rudpBuf := range p2pRudp { data, seq, ack := rudpBuf.GetSendData() pkt.Type = proto.MessageType_Battle.Enum() @@ -512,12 +518,6 @@ func (z *Zproxy) ServeBattle() error { } z.udpcl.SendPacketTo(pkt, addr) } - data, seq, ack := svRudp.GetSendData() - pkt.Type = proto.MessageType_Battle.Enum() - pkt.BattleData = data - pkt.Seq = pb.Uint32(seq) - pkt.Ack = pb.Uint32(ack) - z.udpcl.SendPacketTo(pkt, z.svAddr) proto.PutPacket(pkt) } } diff --git a/src/zproxy/ps2io.go b/src/zproxy/ps2io.go index a0dbbf5..609d829 100644 --- a/src/zproxy/ps2io.go +++ b/src/zproxy/ps2io.go @@ -40,7 +40,6 @@ func (sv *PS2Server) Listen(addr string) error { } sv.chNewConn <- &PS2Conn{conn} } - return nil } func (sv *PS2Server) Accept() <-chan *PS2Conn { diff --git a/src/zproxy/update.go b/src/zproxy/update.go index 6c24915..acf5621 100644 --- a/src/zproxy/update.go +++ b/src/zproxy/update.go @@ -5,50 +5,57 @@ import ( "os" "time" - "github.com/equinox-io/equinox" + "github.com/blang/semver" + "github.com/rhysd/go-github-selfupdate/selfupdate" ) -const appID = "app_4Lz3DqAf1d4" +var ( + // These variables are automatically assigned during release process. + // `-s -w -X main.releaseVersion ={{.Version}} -X main.releaseCommit={{.ShortCommit}} -X main.releaseDate={{.Date}} + releaseVersion = "local" + releaseCommit = "local" + releaseDate = "local" +) -var publicKey = []byte(` ------BEGIN ECDSA PUBLIC KEY----- -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAECnv0D106fXZ7iVzcRCSjHO15EO5sBBeY -Y1pqovBC52/yJZguNhq3U7oMmbVzpbpYwnA/iVAKUvUghdn6mfFNip7vTezhrFKx -2mVbrtlGuM/NRDsP7wpYYa5V6e31YmW7 ------END ECDSA PUBLIC KEY----- -`) +func printReleaseInfo() { + log.Println("releaseVersion", releaseVersion) + log.Println("releaseCommit", releaseCommit) + log.Println("releaseDate", releaseDate) +} -func equinoxUpdate() error { +func doSelfUpdate() { + if releaseVersion == "local" { + return + } log.Println("アップデートチェックを行います") - var opts equinox.Options - if err := opts.SetPublicKeyPEM(publicKey); err != nil { - log.Println("鍵エラー") - return err + + latest, found, err := selfupdate.DetectLatest("inada-s/zdxsv") + if err != nil { + log.Println("アップデートチェックに失敗しました", err) } - // check for the update - resp, err := equinox.Check(appID, opts) - switch { - case err == equinox.NotAvailableErr: + log.Println("最新版>", latest.Version) + + v := semver.MustParse(releaseVersion) + if !found || latest.Version.LTE(v) { log.Println("既に最新版です") - return nil - case err != nil: - log.Println("アップデートチェックに失敗しました") - return err + return } - // fetch the update and apply it - log.Println("アップデート中...") - err = resp.Apply() + exe, err := os.Executable() if err != nil { - log.Println("アップデートに失敗しました") - return err + log.Println("アップデートチェックに失敗しました", err) + return + } + + log.Println("アップデート中...") + if err := selfupdate.UpdateTo(latest.AssetURL, exe); err != nil { + log.Println("アップデートに失敗しました", err) + return } log.Println("アップデートに成功しました") log.Println("再起動してください") time.Sleep(time.Second) os.Exit(0) - return nil } -