From cbd99306eb79db1f99285564a7737c681006ddcf Mon Sep 17 00:00:00 2001 From: Aleksandr Nigomatulin Date: Mon, 30 Oct 2023 23:27:58 +0600 Subject: [PATCH 1/5] Add skip_push option to setup --- lib/kamal/cli/main.rb | 9 ++++++--- test/cli/main_test.rb | 27 +++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index b1f54aba..b66073e4 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -1,15 +1,18 @@ class Kamal::Cli::Main < Kamal::Cli::Base desc "setup", "Setup all accessories, push the env, and deploy app to servers" + option :skip_push, aliases: "-P", type: :boolean, default: false, desc: "Skip image build and push" def setup print_runtime do mutating do + invoke_options = deploy_options + say "Ensure Docker is installed...", :magenta - invoke "kamal:cli:server:bootstrap" + invoke "kamal:cli:server:bootstrap", [], invoke_options say "Push env files...", :magenta - invoke "kamal:cli:env:push" + invoke "kamal:cli:env:push", [], invoke_options - invoke "kamal:cli:accessory:boot", [ "all" ] + invoke "kamal:cli:accessory:boot", [ "all" ], invoke_options deploy end end diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index a19ff90e..e13da92e 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -2,12 +2,31 @@ require_relative "cli_test_case" class CliMainTest < CliTestCase test "setup" do - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap") - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push") - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ]) + invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } + + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) Kamal::Cli::Main.any_instance.expects(:deploy) - run_command("setup") + run_command("setup").tap do |output| + assert_match /Ensure Docker is installed.../, output + assert_match /Push env files.../, output + end + end + + test "setup with skip_push" do + invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } + + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) + Kamal::Cli::Main.any_instance.expects(:deploy) + + run_command("setup", "--skip_push").tap do |output| + assert_match /Ensure Docker is installed.../, output + assert_match /Push env files.../, output + end end test "deploy" do From bc6c027315625c1f6f2a02db883e17aec7e68655 Mon Sep 17 00:00:00 2001 From: Aleksandr Nigomatulin Date: Fri, 16 Feb 2024 11:56:58 +0600 Subject: [PATCH 2/5] Upds according remarks --- lib/kamal/cli/main.rb | 8 +++----- test/cli/main_test.rb | 20 +++----------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index b66073e4..62416bbc 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -4,15 +4,13 @@ class Kamal::Cli::Main < Kamal::Cli::Base def setup print_runtime do mutating do - invoke_options = deploy_options - say "Ensure Docker is installed...", :magenta - invoke "kamal:cli:server:bootstrap", [], invoke_options + invoke "kamal:cli:server:bootstrap" say "Push env files...", :magenta - invoke "kamal:cli:env:push", [], invoke_options + invoke "kamal:cli:env:push" - invoke "kamal:cli:accessory:boot", [ "all" ], invoke_options + invoke "kamal:cli:accessory:boot", [ "all" ] deploy end end diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index e13da92e..10deda5c 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -4,9 +4,9 @@ class CliMainTest < CliTestCase test "setup" do invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap") + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push") + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ]) Kamal::Cli::Main.any_instance.expects(:deploy) run_command("setup").tap do |output| @@ -15,20 +15,6 @@ class CliMainTest < CliTestCase end end - test "setup with skip_push" do - invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } - - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) - Kamal::Cli::Main.any_instance.expects(:deploy) - - run_command("setup", "--skip_push").tap do |output| - assert_match /Ensure Docker is installed.../, output - assert_match /Push env files.../, output - end - end - test "deploy" do invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } From b94dfe193ba3e038b3a82e47f8ae7828d0d01743 Mon Sep 17 00:00:00 2001 From: Aleksandr Nigomatulin Date: Fri, 16 Feb 2024 12:52:07 +0600 Subject: [PATCH 3/5] Remove unnecessary code --- test/cli/main_test.rb | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index 10deda5c..2d3dbafb 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -2,8 +2,6 @@ require_relative "cli_test_case" class CliMainTest < CliTestCase test "setup" do - invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap") Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push") Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ]) From 5ef384d66694fbe9611ba7c81aa9479121d9abd3 Mon Sep 17 00:00:00 2001 From: Aleksandr Nigomatulin Date: Sat, 17 Feb 2024 00:11:03 +0600 Subject: [PATCH 4/5] Add test --- test/cli/main_test.rb | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index 2d3dbafb..7954f09a 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -13,6 +13,36 @@ class CliMainTest < CliTestCase end end + test "setup with skip_push" do + invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } + + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap") + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push") + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ]) + # deploy + 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:pull", [], 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:healthcheck:perform", [], 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("setup", "--skip_push").tap do |output| + assert_match /Ensure Docker is installed.../, output + assert_match /Push env files.../, output + # deploy + assert_match /Acquiring the deploy lock/, output + assert_match /Log into image registry/, output + assert_match /Pull app image/, output + assert_match /Ensure Traefik is running/, output + assert_match /Ensure app can pass healthcheck/, output + assert_match /Detect stale containers/, output + assert_match /Prune old containers and images/, output + assert_match /Releasing the deploy lock/, output + end + end + test "deploy" do invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } From 064ace059810c47b45d5bc3ad8fa5f83aec745b8 Mon Sep 17 00:00:00 2001 From: Aleksandr Nigomatulin Date: Sat, 24 Feb 2024 21:36:20 +0600 Subject: [PATCH 5/5] Rollback passing invoke_options --- lib/kamal/cli/main.rb | 8 +++++--- test/cli/main_test.rb | 14 ++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/lib/kamal/cli/main.rb b/lib/kamal/cli/main.rb index 62416bbc..b66073e4 100644 --- a/lib/kamal/cli/main.rb +++ b/lib/kamal/cli/main.rb @@ -4,13 +4,15 @@ class Kamal::Cli::Main < Kamal::Cli::Base def setup print_runtime do mutating do + invoke_options = deploy_options + say "Ensure Docker is installed...", :magenta - invoke "kamal:cli:server:bootstrap" + invoke "kamal:cli:server:bootstrap", [], invoke_options say "Push env files...", :magenta - invoke "kamal:cli:env:push" + invoke "kamal:cli:env:push", [], invoke_options - invoke "kamal:cli:accessory:boot", [ "all" ] + invoke "kamal:cli:accessory:boot", [ "all" ], invoke_options deploy end end diff --git a/test/cli/main_test.rb b/test/cli/main_test.rb index 7954f09a..1d979925 100644 --- a/test/cli/main_test.rb +++ b/test/cli/main_test.rb @@ -2,9 +2,11 @@ require_relative "cli_test_case" class CliMainTest < CliTestCase test "setup" do - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap") - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push") - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ]) + invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } + + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) Kamal::Cli::Main.any_instance.expects(:deploy) run_command("setup").tap do |output| @@ -16,9 +18,9 @@ class CliMainTest < CliTestCase test "setup with skip_push" do invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "version" => "999", "skip_hooks" => false } - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap") - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push") - Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ]) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:server:bootstrap", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:env:push", [], invoke_options) + Kamal::Cli::Main.any_instance.expects(:invoke).with("kamal:cli:accessory:boot", [ "all" ], invoke_options) # deploy 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:pull", [], invoke_options)