diff --git a/lib/mrsk/cli/build.rb b/lib/mrsk/cli/build.rb index 0c2bcfde..75558812 100644 --- a/lib/mrsk/cli/build.rb +++ b/lib/mrsk/cli/build.rb @@ -16,7 +16,7 @@ class Mrsk::Cli::Build < Mrsk::Cli::Base run_locally do begin - if cli.dependencies + if cli.verify_dependencies MRSK.with_verbosity(:debug) { execute *MRSK.builder.push } end rescue SSHKit::Command::Failed => e @@ -82,15 +82,17 @@ class Mrsk::Cli::Build < Mrsk::Cli::Base end end - desc "dependencies", "Check local dependencies" - def dependencies + + desc "", "" # Really a private method, but needed to be invoked from #push + def verify_dependencies run_locally do begin - execute *MRSK.builder.dependencies + execute *MRSK.builder.ensure_dependencies_installed rescue SSHKit::Command::Failed => e build_error = e.message =~ /command not found/ ? "Docker is not installed locally" : "Docker buildx plugin is not installed locally" + raise BuildError, build_error end end diff --git a/lib/mrsk/commands/builder.rb b/lib/mrsk/commands/builder.rb index c8fb1c59..f7710b37 100644 --- a/lib/mrsk/commands/builder.rb +++ b/lib/mrsk/commands/builder.rb @@ -2,7 +2,7 @@ class Mrsk::Commands::Builder < Mrsk::Commands::Base delegate :create, :remove, :push, :clean, :pull, :info, to: :target def name - target.class.to_s.remove("Mrsk::Commands::Builder::").underscore + target.class.to_s.remove("Mrsk::Commands::Builder::").underscore.inquiry end def target @@ -34,26 +34,23 @@ class Mrsk::Commands::Builder < Mrsk::Commands::Base @multiarch_remote ||= Mrsk::Commands::Builder::Multiarch::Remote.new(config) end - def native_and_local? - name == 'native' - end - def dependencies - if native_and_local? - docker_version + def ensure_dependencies_installed + if name.native? + ensure_docker_installed else combine \ - docker_version, - docker_buildx_version + ensure_docker_installed, + ensure_buildx_installed end end private - def docker_version + def ensure_docker_installed docker "--version" end - def docker_buildx_version + def ensure_buildx_installed docker :buildx, "version" end end diff --git a/test/cli/build_test.rb b/test/cli/build_test.rb index fa5c958d..304f65f4 100644 --- a/test/cli/build_test.rb +++ b/test/cli/build_test.rb @@ -9,7 +9,7 @@ class CliBuildTest < CliTestCase end test "push" do - Mrsk::Cli::Build.any_instance.stubs(:dependencies).returns(true) + Mrsk::Cli::Build.any_instance.stubs(:verify_dependencies).returns(true) run_command("push").tap do |output| assert_match /docker buildx build --push --platform linux\/amd64,linux\/arm64 --builder mrsk-app-multiarch -t dhh\/app:999 -t dhh\/app:latest --label service="app" --file Dockerfile \. as .*@localhost/, output end @@ -17,7 +17,7 @@ class CliBuildTest < CliTestCase test "push without builder" do stub_locking - Mrsk::Cli::Build.any_instance.stubs(:dependencies).returns(true) + Mrsk::Cli::Build.any_instance.stubs(:verify_dependencies).returns(true) SSHKit::Backend::Abstract.any_instance.stubs(:execute) .with { |arg| arg == :docker } .raises(SSHKit::Command::Failed.new("no builder")) @@ -70,9 +70,10 @@ class CliBuildTest < CliTestCase end end - test "dependencies" do - Mrsk::Commands::Builder.any_instance.stubs(:native_and_local?).returns(false) - run_command("dependencies").tap do |output| + test "verify dependencies" do + Mrsk::Commands::Builder.any_instance.stubs(:name).returns("remote".inquiry) + + run_command("verify_dependencies").tap do |output| assert_match /docker --version && docker buildx version/, output end end @@ -83,7 +84,7 @@ class CliBuildTest < CliTestCase .raises(SSHKit::Command::Failed.new("no buildx")) Mrsk::Commands::Builder.any_instance.stubs(:native_and_local?).returns(false) - assert_raises(Mrsk::Cli::Build::BuildError) { run_command("dependencies") } + assert_raises(Mrsk::Cli::Build::BuildError) { run_command("verify_dependencies") } end private diff --git a/test/configuration_test.rb b/test/configuration_test.rb index 2697673b..eda85484 100644 --- a/test/configuration_test.rb +++ b/test/configuration_test.rb @@ -48,7 +48,7 @@ class ConfigurationTest < ActiveSupport::TestCase end test "role" do - assert_equal "web", @config.role(:web).name + assert @config.role(:web).name.web? assert_equal "workers", @config_with_roles.role(:workers).name assert_nil @config.role(:missing) end