Merge branch 'main' into cleanup-excessive-containers-running
* main: Pull the primary host from the role Minimise holding the deploy lock
This commit is contained in:
@@ -6,6 +6,7 @@ class CliAppTest < CliTestCase
|
||||
SSHKit::Backend::Abstract.any_instance.stubs(:capture).returns("123") # old version
|
||||
|
||||
run_command("boot").tap do |output|
|
||||
assert_match "docker tag dhh/app:latest dhh/app:latest", output
|
||||
assert_match "docker run --detach --restart unless-stopped", output
|
||||
assert_match "docker container ls --all --filter name=^app-web-123$ --quiet | xargs docker stop", output
|
||||
end
|
||||
@@ -15,7 +16,7 @@ class CliAppTest < CliTestCase
|
||||
run_command("details") # Preheat MRSK const
|
||||
|
||||
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info)
|
||||
.with(:docker, :container, :ls, "--all", "--filter", "name=^app-web-latest$", "--quiet")
|
||||
.with(:docker, :container, :ls, "--all", "--filter", "name=^app-web-latest$", "--quiet", raise_on_non_zero_exit: false)
|
||||
.returns("12345678") # running version
|
||||
|
||||
SSHKit::Backend::Abstract.any_instance.expects(:capture_with_info)
|
||||
|
||||
@@ -30,7 +30,7 @@ class CliBuildTest < CliTestCase
|
||||
test "pull" do
|
||||
run_command("pull").tap do |output|
|
||||
assert_match /docker image rm --force dhh\/app:999/, output
|
||||
assert_match /docker pull dhh\/app:latest/, output
|
||||
assert_match /docker pull dhh\/app:999/, output
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -83,18 +83,36 @@ class CliMainTest < CliTestCase
|
||||
end
|
||||
end
|
||||
|
||||
test "deploy errors leave lock in place" do
|
||||
test "deploy errors during critical section leave lock in place" do
|
||||
invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "skip_broadcast" => false, "version" => "999" }
|
||||
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:server:bootstrap", [], invoke_options)
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:registry:login", [], invoke_options)
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:build:deliver", [], invoke_options)
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:stale_containers", [], invoke_options)
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:traefik:boot", [], invoke_options)
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:healthcheck:perform", [], invoke_options)
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke).with("mrsk:cli:app:boot", [], invoke_options).raises(RuntimeError)
|
||||
|
||||
assert !MRSK.holding_lock?
|
||||
assert_raises(RuntimeError) do
|
||||
stderred { run_command("deploy") }
|
||||
end
|
||||
assert MRSK.holding_lock?
|
||||
end
|
||||
|
||||
test "deploy errors during outside section leave remove lock" do
|
||||
invoke_options = { "config_file" => "test/fixtures/deploy_simple.yml", "skip_broadcast" => false, "version" => "999" }
|
||||
|
||||
Mrsk::Cli::Main.any_instance.expects(:invoke)
|
||||
.with("mrsk:cli:server:bootstrap", [], invoke_options)
|
||||
.raises(RuntimeError)
|
||||
|
||||
assert_equal 0, MRSK.lock_count
|
||||
assert !MRSK.holding_lock?
|
||||
assert_raises(RuntimeError) do
|
||||
stderred { run_command("deploy") }
|
||||
end
|
||||
assert_equal 1, MRSK.lock_count
|
||||
assert !MRSK.holding_lock?
|
||||
end
|
||||
|
||||
test "redeploy" do
|
||||
@@ -142,6 +160,7 @@ class CliMainTest < CliTestCase
|
||||
|
||||
run_command("rollback", "123", config_file: "deploy_with_accessories").tap do |output|
|
||||
assert_match "Start version 123", output
|
||||
assert_match "docker tag dhh/app:123 dhh/app:latest", output
|
||||
assert_match "docker start app-web-123", output
|
||||
assert_match "docker container ls --all --filter name=^app-web-version-to-rollback$ --quiet | xargs docker stop", output, "Should stop the container that was previously running"
|
||||
end
|
||||
|
||||
@@ -47,8 +47,8 @@ class CommanderTest < ActiveSupport::TestCase
|
||||
end
|
||||
|
||||
test "primary_host with specific hosts via role" do
|
||||
@mrsk.specific_roles = "web"
|
||||
assert_equal "1.1.1.1", @mrsk.primary_host
|
||||
@mrsk.specific_roles = "workers"
|
||||
assert_equal "1.1.1.3", @mrsk.primary_host
|
||||
end
|
||||
|
||||
test "roles_on" do
|
||||
|
||||
@@ -277,6 +277,12 @@ class CommandsAppTest < ActiveSupport::TestCase
|
||||
new_command.remove_images.join(" ")
|
||||
end
|
||||
|
||||
test "tag_current_as_latest" do
|
||||
assert_equal \
|
||||
"docker tag dhh/app:999 dhh/app:latest",
|
||||
new_command.tag_current_as_latest.join(" ")
|
||||
end
|
||||
|
||||
private
|
||||
def new_command(role: "web")
|
||||
Mrsk::Commands::App.new(Mrsk::Configuration.new(@config, destination: @destination, version: "999"), role: role)
|
||||
|
||||
Reference in New Issue
Block a user