From cf80932216728cc1a52fdc46bfe854a402cf0030 Mon Sep 17 00:00:00 2001 From: Donal McBreen Date: Thu, 6 Jun 2024 12:48:50 +0100 Subject: [PATCH] Validate multiarch configuration Remote and local are only allowed when multiarch is enabled. Remote requires a host and arch, local only requires an arch. --- lib/kamal/commands/builder/base.rb | 2 +- lib/kamal/configuration/builder.rb | 24 ++++++++++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/kamal/commands/builder/base.rb b/lib/kamal/commands/builder/base.rb index 763b3142..1cac6a63 100644 --- a/lib/kamal/commands/builder/base.rb +++ b/lib/kamal/commands/builder/base.rb @@ -5,7 +5,7 @@ class Kamal::Commands::Builder::Base < Kamal::Commands::Base delegate :argumentize, to: Kamal::Utils delegate \ - :args, :secrets, :dockerfile, :target, :local_arch, :local_host, :remote_arch, :remote_host, + :args, :secrets, :dockerfile, :target, :local_arch, :remote_arch, :remote_host, :cache_from, :cache_to, :multiarch?, :ssh, to: :builder_config diff --git a/lib/kamal/configuration/builder.rb b/lib/kamal/configuration/builder.rb index 74c8d1c6..a6440dd1 100644 --- a/lib/kamal/configuration/builder.rb +++ b/lib/kamal/configuration/builder.rb @@ -59,10 +59,6 @@ class Kamal::Configuration::Builder builder_config["local"]["arch"] if local? end - def local_host - builder_config["local"]["host"] if local? - end - def remote_arch builder_config["remote"]["arch"] if remote? end @@ -115,6 +111,26 @@ class Kamal::Configuration::Builder end private + def valid? + if multiarch? + if local? + raise ArgumentError, "Invalid builder configuration: local configuration, arch required" unless local_arch + end + + if remote? + raise ArgumentError, "Invalid builder configuration: remote configuration, arch required" unless remote_arch + raise ArgumentError, "Invalid builder configuration: remote configuration, arch required" unless remote_host + end + else + raise ArgumentError, "Invalid builder configuration: multiarch must be enabled for local configuration" if local? + raise ArgumentError, "Invalid builder configuration: multiarch must be enabled for remote configuration" if remote? + end + + if @options["cache"] && @options["cache"]["type"] + raise ArgumentError, "Invalid cache type: #{@options["cache"]["type"]}" unless [ "gha", "registry" ].include?(@options["cache"]["type"]) + end + end + def cache_image builder_config["cache"]&.fetch("image", nil) || "#{image}-build-cache" end