Add local dependencies check

Add checks for:

* Docker installed locally
* Docker buildx plugin installed locally
* Dockerfile exists

If checks fail, it will halt deployment and provide more specific error messages.

Also adds a cli subcommand:
`mrsk build dependencies`

Fixes: #109 and #237
This commit is contained in:
Jberczel
2023-05-01 15:26:50 -04:00
parent 4fa6a6c06d
commit bfb70b2118
5 changed files with 83 additions and 4 deletions

View File

@@ -1,4 +1,7 @@
class Mrsk::Cli::Build < Mrsk::Cli::Base
class BuildError < StandardError; end
desc "deliver", "Build app and push app image to registry then pull image on servers"
def deliver
with_lock do
@@ -10,16 +13,18 @@ class Mrsk::Cli::Build < Mrsk::Cli::Base
desc "push", "Build and push app image to registry"
def push
with_lock do
cli = self
cli_build = self
run_locally do
begin
MRSK.with_verbosity(:debug) { execute *MRSK.builder.push }
if cli_build.dependencies
MRSK.with_verbosity(:debug) { execute *MRSK.builder.push }
end
rescue SSHKit::Command::Failed => e
if e.message =~ /(no builder)|(no such file or directory)/
error "Missing compatible builder, so creating a new one first"
if cli.create
if cli_build.create
MRSK.with_verbosity(:debug) { execute *MRSK.builder.push }
end
else
@@ -77,4 +82,19 @@ class Mrsk::Cli::Build < Mrsk::Cli::Base
puts capture(*MRSK.builder.info)
end
end
desc "dependencies", "Check local dependencies"
def dependencies
run_locally do
begin
execute *MRSK.builder.dependencies
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
true
end
end