Make verify_local_dependencies private
We don't need to what it returns, it raises if there is a problem. Move it out of the run_locally block to make it easier to add hooks.
This commit is contained in:
@@ -14,11 +14,11 @@ class Mrsk::Cli::Build < Mrsk::Cli::Base
|
|||||||
with_lock do
|
with_lock do
|
||||||
cli = self
|
cli = self
|
||||||
|
|
||||||
|
verify_local_dependencies
|
||||||
|
|
||||||
run_locally do
|
run_locally do
|
||||||
begin
|
begin
|
||||||
if cli.verify_local_dependencies
|
MRSK.with_verbosity(:debug) { execute *MRSK.builder.push }
|
||||||
MRSK.with_verbosity(:debug) { execute *MRSK.builder.push }
|
|
||||||
end
|
|
||||||
rescue SSHKit::Command::Failed => e
|
rescue SSHKit::Command::Failed => e
|
||||||
if e.message =~ /(no builder)|(no such file or directory)/
|
if e.message =~ /(no builder)|(no such file or directory)/
|
||||||
error "Missing compatible builder, so creating a new one first"
|
error "Missing compatible builder, so creating a new one first"
|
||||||
@@ -82,21 +82,18 @@ class Mrsk::Cli::Build < Mrsk::Cli::Base
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def verify_local_dependencies
|
||||||
|
run_locally do
|
||||||
|
begin
|
||||||
|
execute *MRSK.builder.ensure_local_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"
|
||||||
|
|
||||||
desc "", "" # Really a private method, but needed to be invoked from #push
|
raise BuildError, build_error
|
||||||
def verify_local_dependencies
|
end
|
||||||
run_locally do
|
|
||||||
begin
|
|
||||||
execute *MRSK.builder.ensure_local_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
|
||||||
end
|
end
|
||||||
|
|
||||||
true
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -9,17 +9,19 @@ class CliBuildTest < CliTestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
test "push" do
|
test "push" do
|
||||||
Mrsk::Cli::Build.any_instance.stubs(:verify_local_dependencies).returns(true)
|
|
||||||
run_command("push").tap do |output|
|
run_command("push").tap do |output|
|
||||||
|
assert_match /docker --version && docker buildx version/, 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
|
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
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "push without builder" do
|
test "push without builder" do
|
||||||
stub_locking
|
stub_locking
|
||||||
Mrsk::Cli::Build.any_instance.stubs(:verify_local_dependencies).returns(true)
|
|
||||||
SSHKit::Backend::Abstract.any_instance.stubs(:execute)
|
SSHKit::Backend::Abstract.any_instance.stubs(:execute)
|
||||||
.with { |arg| arg == :docker }
|
.with(:docker, "--version", "&&", :docker, :buildx, "version")
|
||||||
|
|
||||||
|
SSHKit::Backend::Abstract.any_instance.stubs(:execute)
|
||||||
|
.with { |*args| args[0..1] == [:docker, :buildx] }
|
||||||
.raises(SSHKit::Command::Failed.new("no builder"))
|
.raises(SSHKit::Command::Failed.new("no builder"))
|
||||||
.then
|
.then
|
||||||
.returns(true)
|
.returns(true)
|
||||||
@@ -29,6 +31,16 @@ class CliBuildTest < CliTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "push with no buildx plugin" do
|
||||||
|
stub_locking
|
||||||
|
SSHKit::Backend::Abstract.any_instance.stubs(:execute)
|
||||||
|
.with(:docker, "--version", "&&", :docker, :buildx, "version")
|
||||||
|
.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("push") }
|
||||||
|
end
|
||||||
|
|
||||||
test "pull" do
|
test "pull" do
|
||||||
run_command("pull").tap do |output|
|
run_command("pull").tap do |output|
|
||||||
assert_match /docker image rm --force dhh\/app:999/, output
|
assert_match /docker image rm --force dhh\/app:999/, output
|
||||||
@@ -70,23 +82,6 @@ class CliBuildTest < CliTestCase
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
test "verify local dependencies" do
|
|
||||||
Mrsk::Commands::Builder.any_instance.stubs(:name).returns("remote".inquiry)
|
|
||||||
|
|
||||||
run_command("verify_local_dependencies").tap do |output|
|
|
||||||
assert_match /docker --version && docker buildx version/, output
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
test "verify local dependencies with no buildx plugin" do
|
|
||||||
SSHKit::Backend::Abstract.any_instance.stubs(:execute)
|
|
||||||
.with(:docker, "--version", "&&", :docker, :buildx, "version")
|
|
||||||
.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("verify_local_dependencies") }
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
def run_command(*command)
|
def run_command(*command)
|
||||||
stdouted { Mrsk::Cli::Build.start([*command, "-c", "test/fixtures/deploy_with_accessories.yml"]) }
|
stdouted { Mrsk::Cli::Build.start([*command, "-c", "test/fixtures/deploy_with_accessories.yml"]) }
|
||||||
|
|||||||
Reference in New Issue
Block a user