diff --git a/lib/kamal/commands/builder/base.rb b/lib/kamal/commands/builder/base.rb index 19d44935e..b7a6e504c 100644 --- a/lib/kamal/commands/builder/base.rb +++ b/lib/kamal/commands/builder/base.rb @@ -3,7 +3,7 @@ class Kamal::Commands::Builder::Base < Kamal::Commands::Base class BuilderError < StandardError; end delegate :argumentize, to: Kamal::Utils - delegate :args, :secrets, :dockerfile, :local_arch, :local_host, :remote_arch, :remote_host, :cache_from, :cache_to, to: :builder_config + delegate :args, :secrets, :dockerfile, :local_arch, :local_host, :remote_arch, :remote_host, :cache_from, :cache_to, :ssh_agent_socket?, to: :builder_config def clean docker :image, :rm, "--force", config.absolute_image @@ -14,7 +14,7 @@ def pull end def build_options - [ *build_tags, *build_cache, *build_labels, *build_args, *build_secrets, *build_dockerfile ] + [ *build_tags, *build_cache, *build_labels, *build_args, *build_secrets, *build_dockerfile, *build_ssh_agent_socket ] end def build_context @@ -54,6 +54,12 @@ def build_dockerfile end end + def build_ssh_agent_socket + if ssh_agent_socket? + [ "--ssh", "default=$SSH_AUTH_SOCK" ] + end + end + def builder_config config.builder end diff --git a/lib/kamal/configuration/builder.rb b/lib/kamal/configuration/builder.rb index c7d81922a..9243a25ca 100644 --- a/lib/kamal/configuration/builder.rb +++ b/lib/kamal/configuration/builder.rb @@ -81,6 +81,10 @@ def cache_to end end + def ssh_agent_socket? + @options["ssh_agent_socket"] == true + end + private def valid? if @options["cache"] && @options["cache"]["type"] diff --git a/test/commands/builder_test.rb b/test/commands/builder_test.rb index 1cc5939b1..19ba5490c 100644 --- a/test/commands/builder_test.rb +++ b/test/commands/builder_test.rb @@ -103,6 +103,14 @@ class CommandsBuilderTest < ActiveSupport::TestCase builder.push.join(" ") end + test "build with ssh agent socket" do + builder = new_builder_command(builder: { "ssh_agent_socket" => true }) + + assert_equal \ + "-t dhh/app:123 -t dhh/app:latest --label service=\"app\" --file Dockerfile --ssh default=$SSH_AUTH_SOCK", + builder.target.build_options.join(" ") + end + private def new_builder_command(additional_config = {}) Kamal::Commands::Builder.new(Kamal::Configuration.new(@config.merge(additional_config), version: "123")) diff --git a/test/configuration/builder_test.rb b/test/configuration/builder_test.rb index da30d9156..4806bdc29 100644 --- a/test/configuration/builder_test.rb +++ b/test/configuration/builder_test.rb @@ -148,4 +148,16 @@ class ConfigurationBuilderTest < ActiveSupport::TestCase assert_equal "..", @config_with_builder_option.builder.context end + + test "ssh_agent_socket?" do + assert_not @config.builder.ssh_agent_socket? + end + + test "setting ssh_agent_socket" do + @deploy_with_builder_option[:builder] = { "ssh_agent_socket" => true } + + assert @config_with_builder_option.builder.ssh_agent_socket? + assert_equal "type=registry,ref=dhh/app-build-cache", @config_with_builder_option.builder.cache_from + # assert_equal "type=registry,mode=max,image-manifest=true,oci-mediatypes=true,ref=dhh/app-build-cache", @config_with_builder_option.builder.cache_to + end end