Create missing buildx builder if missing automatically

This commit is contained in:
David Heinemeier Hansson
2023-01-11 17:24:32 +01:00
parent 1bb9fe9095
commit 543af475d5
3 changed files with 14 additions and 4 deletions

View File

@@ -1,7 +1,5 @@
class Mrsk::Commands::App < Mrsk::Commands::Base
def push
# TODO: Run 'docker buildx create --use' when needed
# TODO: Make multiarch an option so Linux users can enjoy speedier builds
docker :buildx, :build, "--push", "--platform linux/amd64,linux/arm64", "-t", config.absolute_image, "."
end
@@ -64,6 +62,10 @@ class Mrsk::Commands::App < Mrsk::Commands::Base
docker :image, :prune, "-a", "-f", *service_filter
end
def create_new_builder
docker :buildx, :create, "--use", "--name", config.service
end
private
def service_filter
[ "--filter", "label=service=#{config.service}" ]

View File

@@ -9,7 +9,15 @@ namespace :mrsk do
desc "Build locally and push app image to registry"
task :push do
run_locally { execute *app.push } unless ENV["VERSION"]
run_locally do
begin
execute *app.push
rescue SSHKit::Command::Failed => e
error "Missing compatible buildx builder, so creating a new one first"
execute *app.create_new_builder
execute *app.push
end
end unless ENV["VERSION"]
end
desc "Pull app image from the registry onto servers"