diff --git a/Makefile b/Makefile index d1345c460..8fed1bc95 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: default clean install lint test assets build binaries publish-images test-release release -TAG_NAME := $(shell git tag -l --contains HEAD) +TAG_NAME := $(shell git describe --abbrev=0 --tags) SHA := $(shell git rev-parse --short HEAD) VERSION := $(if $(TAG_NAME),$(TAG_NAME),$(SHA)) diff --git a/assets/index.html b/assets/index.html index 91988400b..4f4cc6c30 100644 --- a/assets/index.html +++ b/assets/index.html @@ -46,6 +46,8 @@
+ +
+ + + diff --git a/assets/js/app.js b/assets/js/app.js index 097923a87..699cd27aa 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -81,6 +81,7 @@ let formatter = { let store = { state: { + availableVersion: null, loadpoints: [], }, update: function(msg) { @@ -163,8 +164,8 @@ const toasts = new Vue({ }); Vue.component('message-toast', { - props: ['item'], template: '#message-template', + props: ['item'], mounted: function () { const id = "#message-id-" + this.item.id; $(id).toast('show'); @@ -174,6 +175,24 @@ Vue.component('message-toast', { }, }); +Vue.component('version', { + template: '#version-template', + props: ['installed'], + data: function () { + return { + state: store.state, + }; + }, + watch: { + "state.availableVersion": function () { + if (this.installed != "<<.Version>>" && // go template parsed? + this.state.availableVersion != this.installed) { + $(this.$refs.bar).collapse("show"); + } + } + } +}); + Vue.component('modeswitch', { template: '#mode-template', data: function() { diff --git a/cmd/root.go b/cmd/root.go index 7eaabe18a..bbdc92fac 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -7,11 +7,11 @@ import ( "github.com/andig/evcc/provider" "github.com/andig/evcc/server" + "github.com/andig/evcc/server/updater" "github.com/andig/evcc/util" "github.com/spf13/cobra" "github.com/spf13/viper" - latest "github.com/tcnksm/go-latest" ) var ( @@ -114,20 +114,6 @@ func Execute() { } } -// checkVersion validates if updates are available -func checkVersion() { - githubTag := &latest.GithubTag{ - Owner: "andig", - Repository: "evcc", - } - - if res, err := latest.Check(githubTag, server.Version); err == nil { - if res.Outdated { - log.INFO.Printf("updates available - please upgrade to %s", res.Current) - } - } -} - func run(cmd *cobra.Command, args []string) { util.LogLevel(viper.GetString("log"), viper.GetStringMapString("levels")) log.INFO.Printf("evcc %s (%s)", server.Version, server.Commit) @@ -136,8 +122,6 @@ func run(cmd *cobra.Command, args []string) { conf := loadConfigFile(cfgFile) util.LogLevel(viper.GetString("log"), viper.GetStringMapString("levels")) - go checkVersion() - uri := viper.GetString("uri") log.INFO.Println("listening at", uri) @@ -172,6 +156,9 @@ func run(cmd *cobra.Command, args []string) { valueChan := make(chan util.Param) go tee.Run(valueChan) + // version check + go updater.Run(log, valueChan) + // capture log messages for UI util.CaptureLogs(valueChan) diff --git a/server/assets.go b/server/assets.go index 35a2db259..f89b4b5d0 100644 --- a/server/assets.go +++ b/server/assets.go @@ -3561,110 +3561,115 @@ oJE6K0E084u3ea7ne0X73qsc2P2KOB+ngKecxITsMAgTVJfqMwAA//+21HeD5gEAAA== "/index.html": { name: "index.html", local: "../assets/index.html", - size: 13624, + size: 14298, modtime: 1566640112, compressed: ` -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 `, }, "/js/app.js": { name: "app.js", local: "../assets/js/app.js", - size: 6792, + size: 7225, modtime: 1566640112, compressed: ` -H4sIAAAAAAAC/7xY747jthH/7qeY6NJYzuokb4ImgPaUoE1SpMWlB9wl7YfFAqGlscVYIgWSWu9iz0Af -ok/YJymGlKg/tu8ubdNPksiZ4cxv/lJJAuyBSw0aTdvAgZsSDGoDW1ZVG5bvF7kU2kAlc8jgwEUhD3El -c2a4FHGpcBtzUeDDq20YlMY0aZLQblVKbRK8z/OEaY1GJ8EKsiyDNXwNTwuARkkjc1ml4NiCaAFATILV -mELghdiNRiqTQvDl+st1EC2OkM41uVksrBlxgVvWVkbHG6bxp9cvISPV4/44uIIgSQK4sqv9eXAFoaWS -ysDXEKQ9gV1IIQhWlpE1PLiZH1QiK1DpuJHa3C6/kcKgMM9/fGxweQcZLFnTVNxpmfyipVjeLBZJskgS -+IE/cKHpY1Ghga1UNTMGFWQWooIZlsK2FTnxQriyqwAKTatE9wGwrc1LXnOTwvV6HQ2L3/IdNzqFa7d2 -XAAc6bVGU8pCp7002YpiOCYUbR1BozDnmkux8sfcMwWEKWRwvYZPPx1objqKTq/wB2bK2IolYfCpZVtB -4p6xkX/iD1iEwxlOwNHpua3N2Oh7Vg068K1dsIHUigK3XGABb99CvyjaakTuVVr3Kh69MRVkYBVlG20P -mVlBFF9lYEqu4x5h+Np9O9uIIoFr/DzyVA7yFaQzugjWJ0b+JPhlQzslJgqeUyfYBzY858K/bZUNuPEB -xRTHAl5QNr59CwVcRm75r3/8c3mKngKNuRSFhgyCNWVLWMDv4Iu1h5Foai5agyMaa8+2klKFBSREfspU -ylZZFuKYMXz+xXogJiMscVyh2JkSXsBnYwu8IHu2/Zob0hnpKK+6vO+0jnW70UaFzz9b+a3O6NHWHPg3 -pVT/B/QHZH8Vpu+Ck+hMfQIuRd31WLW5U7vvG09gasjeC6k3CrDSOBL/IbHVndFr8j7vnPi7N/OC2+aZ -+Z+57qzfPsQRl6HvRAdlcMGwoB5XguPi2HeaN4YZ9I1GG6mwazKadvpeUElWNJILahu3d1HfMdqmsES+ -R9R61+tF8gxTOzTQlScr0alBptR6F3u58NG4cg+2HUpeIYQD/8AypHcGE1ljZM4zNq0uw6fjSRic0XfE -djs55a4DdGEfrza/YG7iPT5qC0K8leo7lpfhEC37abSYxwblFoxk2ujb/Z1tU0FPHkyM6GnCpxq1ZjtM -yeLb/d1xdSld/tZirNGEzqQI9lHHMjPagWC9ySfh7acKN9Xs0IRBLsWW74JVbEoU4TmvAw0rEJLzeba+ -Af6CQKOB5dRxN8CvrsZ2EheRQtbjybTmO3vAXMYtv4vgaQjMFDgcx4WAPOjiMyTWkdndS4EVGoQzsnvS -sYyerC/s8YaLwsblahXnzORl6NwUo1JSOVQXRz/SfY9MmQ0yY5OtG1I1mj8Lg+qeVeEM9xHqJbLKlEF/ -jCdUqIfJT8ddaFBxfIPqHhW0gt0zXrFNhV36j1W0/AsXAccIfr+2paZT9xtZN1KgMG4KdaO+44YMBB4o -wEI6HGlSf+a27EjuplOnFzdY00DZFdRctuSpdXRp5GRc47jCTiLLjcKtKCCjS4jG3k/j5LM+s8e+Jwed -vLpPdstyu78bIsjWqJjSlKo5+d++f/IJ1APWbqP7HAsHr6pRLQ5S+1JzdMPhpLh/ZFkmPVXvYl70Olr4 -rq5uTpPcWxB1LPY5T3XnBOv8iyB7OzMILGUwyQbrIcsxFnlgSnyQRCK8JHDSehXW8v5yKJDhLn/P2L6a -tjoKaqLP+5AOl52/ntuoXUb9vbOh7rYkWUvb4wzWTWUb3PKZZ+nWljZ8ySFYnLuLuYyxvgs8My+e0zzi -VY554XT9OOQFXYCYNuFSl/KwXI03pAiXJS8KFPFGx73Wp4f6BHfwDdicq1ouB8/CIwvUB27yssNmAoQs -ZihMr6OXbqPdPGFHDNdaIUlgV8kNq9ymU9G3I1Koteg6EXRw6sXt8FyvGs9yQwsnTp8K/UVYTwQQyViI -K790c3dwJEuaVolo1vsU6kYKPcv92eGQQU/nes1Yow9sJqM8vui5QHODwdxnwTNa9j6zRbq2fxhSuPX/ -Fu5+Q1fOynwuhcD8vP9c3vi/MrOfNDQilcY0Og3oknvQ9JLSS+rLipPQKg4Z/G/+7hz0TPihb4J/x80b -me/RhK3iqwg0VtuuWvccBx1LYd1Ibas3GO8nY+pBx3klNYaDqyf8dvNd/H6e+JHXKFsTkiZxB3QE1+vR -PWIqehgbLgk36nES3PaeqXeQwV/evPpr3DClkXjiyZzlAoUiZJigVqd9EMDGO4SzDCKgZYXdqIIR+ANO -W+nN9D9WrpBNqrIPr66LWlDCfkQ7k0Z+FDyTS35vmlBd+3jqk8PNJF34/zfJZni+R/U9E0WFqb1URrPs -OhCAfW4FrurkJc39/cU1OJtqXdDkFTLlx1AL0fhM77MkASmqx04hGlhYblpWVY9gT+NiN77eDBWw36XR -ab7sVaQ77frk5jZWZPjL/I6x+UwBnp1zlcH1+dI7T5PRFGHdhdoo+Xg2sH4FlF3EuTH7tWwN4TbM2DXj -AjKYBSStnolFWh6HoZXs5Lir2qmk7gp3KsttTIP6N2kHIyWx3mBxqqNdPqOiXT+bdreB4aai1hfoduPf -eb2zj61itV2ouNgHdxMdlOz+Wt0uAJ6gYaZMIUiCCLxGqfPKMVrcUfXImQktl3rJxV6Hq7hmzRCIVqUI -ePHg8OrR8qJJCW2bES8eJsdYA6PeKPuw8bLqj53q6H05EtH5nXSd2aiGi9tr+22vb878iDymS2p7dH// -2a2m3e7PCwBS+rsHlps/5Ibf4zcV0zqFgNmvgNj/KKXRRrEGXgh2/9UYY9Y0s1uj04gcEX9sp+gweMaa -JiAeF0hccFuj/x0AAP//sWHskogaAAA= +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 +fwUAAP//HalhmTkcAAA= `, }, diff --git a/server/updater/updater.go b/server/updater/updater.go new file mode 100644 index 000000000..e53d8afad --- /dev/null +++ b/server/updater/updater.go @@ -0,0 +1,49 @@ +package updater + +import ( + "time" + + "github.com/andig/evcc/server" + "github.com/andig/evcc/util" + latest "github.com/tcnksm/go-latest" +) + +var instance *updater + +type updater struct { + log *util.Logger + cache chan<- util.Param +} + +// Run regularly checks version +func Run(log *util.Logger, cache chan<- util.Param) { + instance = &updater{ + log: log, + cache: cache, + } + + instance.checkVersion() + for range time.NewTicker(24 * time.Hour).C { + instance.checkVersion() + } +} + +// checkVersion validates if updates are available +func (u *updater) checkVersion() { + githubTag := &latest.GithubTag{ + Owner: "andig", + Repository: "evcc", + } + + if res, err := latest.Check(githubTag, server.Version); err == nil { + if res.Outdated { + u.log.INFO.Printf("new version available - please upgrade to %s", res.Current) + } + u.cache <- util.Param{ + Key: "availableVersion", + Val: res.Current, + } + } else { + u.log.ERROR.Println("version check failed:", err) + } +} diff --git a/server/version.go b/server/version.go index 5153080b1..45605ebff 100644 --- a/server/version.go +++ b/server/version.go @@ -2,7 +2,7 @@ package server var ( // Version of executable - Version = "dev" + Version = "0.0.1-alpha" // Commit of executable Commit = "HEAD" )