diff --git a/TODO.md b/TODO.md index 95712fb..d7526ee 100644 --- a/TODO.md +++ b/TODO.md @@ -6,7 +6,7 @@ * Config UI in frontend? * Support tokens besides basic auth * Polish frontend UI **A LOT** -* Version checks for consistency between client/server +* ✅ Version checks for consistency between client/server * Have 3 runtimes: * ✅ Crystal + Kemal * ✅ Python + Flask diff --git a/config/Caddyfile b/config/Caddyfile index 276e7fd..29669d7 100644 --- a/config/Caddyfile +++ b/config/Caddyfile @@ -15,12 +15,4 @@ http://*:8888 { handle_path /admin/* { reverse_proxy /* http://127.0.0.1:3000 } - - handle_path /faaso/exp/* { - reverse_proxy /* http://faaso-exp-6ne49v:3000 { - health_uri /ping - fail_duration 30s - } - } - } diff --git a/shard.yml b/shard.yml index eb29fd1..21d2a06 100644 --- a/shard.yml +++ b/shard.yml @@ -34,4 +34,4 @@ dependencies: github: petoem/inotify.cr scripts: - postinstall: cat .rucksack >> bin/faaso \ No newline at end of file + postinstall: cat .rucksack >> bin/faaso diff --git a/src/commands/build.cr b/src/commands/build.cr index bf70395..f2cf5c4 100644 --- a/src/commands/build.cr +++ b/src/commands/build.cr @@ -17,6 +17,7 @@ module Faaso Log.info { "Building function... #{funko.name} in #{tmp_dir}" } funko.build tmp_dir else # Running against a server + Faaso.check_version # Create a tarball for the funko buf = IO::Memory.new Compress::Gzip::Writer.open(buf) do |gzip| diff --git a/src/commands/scale.cr b/src/commands/scale.cr index 1b6ae7f..cf3deb3 100644 --- a/src/commands/scale.cr +++ b/src/commands/scale.cr @@ -27,6 +27,7 @@ module Faaso end def remote(options, name, scale) : Int32 + Faaso.check_version if !scale Crest.get( "#{FAASO_SERVER}funkos/#{name}/scale/", \ diff --git a/src/commands/secret.cr b/src/commands/secret.cr index 6e1aca7..ed046b2 100644 --- a/src/commands/secret.cr +++ b/src/commands/secret.cr @@ -13,6 +13,7 @@ module Faaso end def remote(options, funko, name, secret) : Int32 + Faaso.check_version if options["--add"] Crest.post( "#{FAASO_SERVER}secrets/", diff --git a/src/commands/status.cr b/src/commands/status.cr index 352b319..13a3cbc 100644 --- a/src/commands/status.cr +++ b/src/commands/status.cr @@ -26,6 +26,7 @@ module Faaso end def remote(options, name) : Int32 + Faaso.check_version Crest.get( "#{FAASO_SERVER}funkos/#{name}/status/", \ user: "admin", password: "admin") do |response| diff --git a/src/daemon/main.cr b/src/daemon/main.cr index 667a76a..27e1af0 100644 --- a/src/daemon/main.cr +++ b/src/daemon/main.cr @@ -8,8 +8,16 @@ require "docr" require "kemal" require "uuid" +macro version + "{{ `grep version shard.yml | cut -d: -f2` }}".strip() +end + get "/" do |env| env.redirect "/index.html" end +get "/version" do + "#{version}" +end + Kemal.run diff --git a/src/faaso.cr b/src/faaso.cr index 2ae7175..c3c0ae9 100644 --- a/src/faaso.cr +++ b/src/faaso.cr @@ -28,9 +28,18 @@ module Faaso )) rescue ex : Docr::Errors::DockerAPIError raise ex if ex.status_code != 409 # Network already exists - end - module Commands + # Compare version with server's + def self.check_version + server_version = Crest.get( + "#{FAASO_SERVER}version/", \ + user: "admin", password: "admin").body + + local_version = "#{version}" + + if server_version != local_version + Log.warn { "Server is version #{server_version} and client is #{local_version}" } + end end end diff --git a/src/main.cr b/src/main.cr index 769dbbb..5c29e31 100644 --- a/src/main.cr +++ b/src/main.cr @@ -3,6 +3,10 @@ require "colorize" require "docopt" require "rucksack" +macro version + "{{ `grep version shard.yml | cut -d: -f2` }}".strip() +end + struct LogFormat < Log::StaticFormatter @@colors = { "FATAL" => :red, @@ -82,6 +86,8 @@ when .fetch("secret", false) status = Faaso::Commands::Secret.new.run(ans, ans["FUNKO"].as(String), ans["SECRET"].as(String)) when .fetch("status", false) status = Faaso::Commands::Status.new.run(ans, ans["FUNKO"].as(String)) +when .fetch("version", false) + Log.info { "#{version}" } end exit(status)