Skip to content

Commit

Permalink
Merge pull request #434 from rience/ssh-agent-support
Browse files Browse the repository at this point in the history
Supports Passing SSH Agent Socket to Build Options
  • Loading branch information
djmb authored Mar 4, 2024
2 parents aea5548 + 1c2a458 commit db94789
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 2 deletions.
8 changes: 6 additions & 2 deletions lib/kamal/commands/builder/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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, to: :builder_config

def clean
docker :image, :rm, "--force", config.absolute_image
Expand All @@ -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 ]
end

def build_context
Expand Down Expand Up @@ -60,6 +60,10 @@ def build_dockerfile
end
end

def build_ssh
argumentize "--ssh", ssh if ssh.present?
end

def builder_config
config.builder
end
Expand Down
4 changes: 4 additions & 0 deletions lib/kamal/configuration/builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ def cache_to
end
end

def ssh
@options["ssh"]
end

private
def valid?
if @options["cache"] && @options["cache"]["type"]
Expand Down
8 changes: 8 additions & 0 deletions test/commands/builder_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,14 @@ class CommandsBuilderTest < ActiveSupport::TestCase
builder.push.join(" ")
end

test "build with ssh agent socket" do
builder = new_builder_command(builder: { "ssh" => 'default=$SSH_AUTH_SOCK' })

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

test "validate image" do
assert_equal "docker inspect -f '{{ .Config.Labels.service }}' dhh/app:123 | grep -x app || (echo \"Image dhh/app:123 is missing the `service` label\" && exit 1)", new_builder_command.validate_image.join(" ")
end
Expand Down
10 changes: 10 additions & 0 deletions test/configuration/builder_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,14 @@ class ConfigurationBuilderTest < ActiveSupport::TestCase

assert_equal "..", @config_with_builder_option.builder.context
end

test "ssh" do
assert_nil @config.builder.ssh
end

test "setting ssh params" do
@deploy_with_builder_option[:builder] = { "ssh" => 'default=$SSH_AUTH_SOCK' }

assert_equal 'default=$SSH_AUTH_SOCK', @config_with_builder_option.builder.ssh
end
end

0 comments on commit db94789

Please sign in to comment.