Validate multiarch configuration

Remote and local are only allowed when multiarch is enabled.
Remote requires a host and arch, local only requires an arch.
This commit is contained in:
Donal McBreen
2024-06-06 12:48:50 +01:00
parent cf81837737
commit cf80932216
2 changed files with 21 additions and 5 deletions

View File

@@ -5,7 +5,7 @@ class Kamal::Commands::Builder::Base < Kamal::Commands::Base
delegate :argumentize, to: Kamal::Utils delegate :argumentize, to: Kamal::Utils
delegate \ 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, :cache_from, :cache_to, :multiarch?, :ssh,
to: :builder_config to: :builder_config

View File

@@ -59,10 +59,6 @@ class Kamal::Configuration::Builder
builder_config["local"]["arch"] if local? builder_config["local"]["arch"] if local?
end end
def local_host
builder_config["local"]["host"] if local?
end
def remote_arch def remote_arch
builder_config["remote"]["arch"] if remote? builder_config["remote"]["arch"] if remote?
end end
@@ -115,6 +111,26 @@ class Kamal::Configuration::Builder
end end
private 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 def cache_image
builder_config["cache"]&.fetch("image", nil) || "#{image}-build-cache" builder_config["cache"]&.fetch("image", nil) || "#{image}-build-cache"
end end