From 42b343436d3c42a1d23116582ec577b333a814da Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 20 Feb 2023 18:06:16 +0100 Subject: [PATCH] Remove images of the same name before pulling a new one Or you'll end up with untagged dupes. --- lib/mrsk/cli/build.rb | 1 + lib/mrsk/commands/builder.rb | 2 +- lib/mrsk/commands/builder/base.rb | 4 ++++ test/cli/build_test.rb | 15 +++++++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 test/cli/build_test.rb diff --git a/lib/mrsk/cli/build.rb b/lib/mrsk/cli/build.rb index 5e493a56..3e8912d7 100644 --- a/lib/mrsk/cli/build.rb +++ b/lib/mrsk/cli/build.rb @@ -30,6 +30,7 @@ class Mrsk::Cli::Build < Mrsk::Cli::Base def pull on(MRSK.hosts) do execute *MRSK.auditor.record("Pulled image with version #{MRSK.version}"), verbosity: :debug + execute *MRSK.builder.clean, raise_on_non_zero_exit: false execute *MRSK.builder.pull end end diff --git a/lib/mrsk/commands/builder.rb b/lib/mrsk/commands/builder.rb index 70957afe..85dbce0a 100644 --- a/lib/mrsk/commands/builder.rb +++ b/lib/mrsk/commands/builder.rb @@ -1,5 +1,5 @@ class Mrsk::Commands::Builder < Mrsk::Commands::Base - delegate :create, :remove, :push, :pull, :info, to: :target + delegate :create, :remove, :push, :clean, :pull, :info, to: :target def name target.class.to_s.remove("Mrsk::Commands::Builder::").underscore diff --git a/lib/mrsk/commands/builder/base.rb b/lib/mrsk/commands/builder/base.rb index 4f2a8dbe..d282fd01 100644 --- a/lib/mrsk/commands/builder/base.rb +++ b/lib/mrsk/commands/builder/base.rb @@ -1,6 +1,10 @@ class Mrsk::Commands::Builder::Base < Mrsk::Commands::Base delegate :argumentize, to: Mrsk::Utils + def clean + docker :image, :rm, "--force", config.absolute_image + end + def pull docker :pull, config.absolute_image end diff --git a/test/cli/build_test.rb b/test/cli/build_test.rb new file mode 100644 index 00000000..3d5f4431 --- /dev/null +++ b/test/cli/build_test.rb @@ -0,0 +1,15 @@ +require_relative "cli_test_case" + +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:999/, output + end + end + + private + def run_command(*command) + stdouted { Mrsk::Cli::Build.start([*command, "-c", "test/fixtures/deploy_with_accessories.yml"]) } + end +end