diff --git a/lib/kamal/cli/healthcheck.rb b/lib/kamal/cli/healthcheck.rb index e9bd6c2e..54d01c03 100644 --- a/lib/kamal/cli/healthcheck.rb +++ b/lib/kamal/cli/healthcheck.rb @@ -3,7 +3,7 @@ class Kamal::Cli::Healthcheck < Kamal::Cli::Base desc "perform", "Health check current app version" def perform - return unless KAMAL.primary_role.running_traefik? + raise "The primary host is not configured to run Traefik" unless KAMAL.config.primary_role.running_traefik? on(KAMAL.primary_host) do begin execute *KAMAL.healthcheck.run diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index b1f54aba..c8f0411d 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -38,8 +38,10 @@ class Kamal::Cli::Main < Kamal::Cli::Base say "Ensure Traefik is running...", :magenta invoke "kamal:cli:traefik:boot", [], invoke_options - say "Ensure app can pass healthcheck...", :magenta - invoke "kamal:cli:healthcheck:perform", [], invoke_options + if KAMAL.config.primary_role.running_traefik? + say "Ensure app can pass healthcheck...", :magenta + invoke "kamal:cli:healthcheck:perform", [], invoke_options + end say "Detect stale containers...", :magenta invoke "kamal:cli:app:stale_containers", [], invoke_options.merge(stop: true) diff --git a/lib/kamal/commands/healthcheck.rb b/lib/kamal/commands/healthcheck.rb index 6abe9bbd..5adc0244 100644 --- a/lib/kamal/commands/healthcheck.rb +++ b/lib/kamal/commands/healthcheck.rb @@ -2,7 +2,6 @@ class Kamal::Commands::Healthcheck < Kamal::Commands::Base def run web = config.role(:web) - return unless web.present? docker :run, "--detach", diff --git a/test/cli/healthcheck_test.rb b/test/cli/healthcheck_test.rb index c4554d4f..3cba78bc 100644 --- a/test/cli/healthcheck_test.rb +++ b/test/cli/healthcheck_test.rb @@ -65,9 +65,14 @@ class CliHealthcheckTest < CliTestCase assert_match "container not ready (unhealthy)", exception.message end - test "does not perform if primary does not have traefik" do + test "raises an exception if primary does not have traefik" do SSHKit::Backend::Abstract.any_instance.expects(:execute).never - run_command("perform", config_file: "test/fixtures/deploy_workers_only.yml") + + exception = assert_raises do + run_command("perform", config_file: "test/fixtures/deploy_workers_only.yml") + end + + assert_equal "The primary host is not configured to run Traefik", exception.message end private diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index a19ff90e..852602c6 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -122,6 +122,21 @@ class CliMainTest < CliTestCase refute_match /Running the post-deploy hook.../, output end end + + test "deploy without healthcheck if primary host doesn't have traefik" do + invoke_options = { "config_file" => "test/fixtures/deploy_workers_only.yml", "version" => "999", "skip_hooks" => false } + + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:healthcheck:perform", [], invoke_options).never + + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:registry:login", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:build:deliver", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:traefik:boot", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:app:stale_containers", [], invoke_options.merge(stop: true)) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:app:boot", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:prune:all", [], invoke_options) + + run_command("deploy", config_file: "deploy_workers_only") + end test "deploy with missing secrets" do invoke_options = { "config_file" => "test/fixtures/deploy_with_secrets.yml", "version" => "999", "skip_hooks" => false }