Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions lib/kamal/commands/builder/base.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ class BuilderError < StandardError; end
delegate :argumentize, to: Kamal::Utils
delegate \
:args, :secrets, :dockerfile, :target, :arches, :local_arches, :remote_arches, :remote,
:pack?, :pack_builder, :pack_buildpacks,
:pack?, :pack_builder, :pack_buildpacks, :additional_contexts,
:cache_from, :cache_to, :ssh, :provenance, :sbom, :driver, :docker_driver?,
to: :builder_config

Expand Down Expand Up @@ -41,7 +41,7 @@ def inspect_builder
end

def build_options
[ *build_cache, *build_labels, *build_args, *build_secrets, *build_dockerfile, *build_target, *build_ssh, *builder_provenance, *builder_sbom ]
[ *build_cache, *build_labels, *build_args, *build_secrets, *build_dockerfile, *build_target, *build_ssh, *builder_provenance, *builder_sbom, *build_additional_contexts ]
end

def build_context
Expand Down Expand Up @@ -95,6 +95,10 @@ def build_args
argumentize "--build-arg", args, sensitive: true
end

def build_additional_contexts
argumentize "--build-context", additional_contexts
end

def build_secrets
argumentize "--secret", secrets.keys.collect { |secret| [ "id", secret ] }
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 @@ -85,6 +85,10 @@ def context
builder_config["context"] || "."
end

def additional_contexts
builder_config["additional_contexts"] || {}
end

def driver
builder_config.fetch("driver", "docker-container")
end
Expand Down
8 changes: 8 additions & 0 deletions lib/kamal/configuration/docs/builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,14 @@ builder:
# The Dockerfile to use for building, defaults to `Dockerfile`:
dockerfile: Dockerfile.production

# Additional build contexts
#
# Additional build contexts to use when building. They are referenced by
# name from the Dockerfile:
additional_contexts:
scripts: ../../scripts
assets: ../../assets

# Build target
#
# If not set, then the default target is used:
Expand Down
2 changes: 1 addition & 1 deletion lib/kamal/configuration/validator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ def validate_against_example!(validation_config, example)
end
elsif example_value.is_a?(Hash)
case key.to_s
when "options", "args"
when "options", "args", "additional_contexts"
validate_type! value, Hash
when "labels"
validate_hash_of! value, example_value.first[1].class
Expand Down
14 changes: 14 additions & 0 deletions test/commands/builder_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,20 @@ class CommandsBuilderTest < ActiveSupport::TestCase
builder.push.join(" ")
end

test "build additional contexts" do
builder = new_builder_command(builder: { "additional_contexts" => { "scripts" => "../../scripts", "assets" => "../../assets" } })
assert_equal \
"--label service=\"app\" --file Dockerfile --build-context scripts=\"../../scripts\" --build-context assets=\"../../assets\"",
builder.target.build_options.join(" ")
end

test "push with additional contexts" do
builder = new_builder_command(builder: { "additional_contexts" => { "scripts" => "../../scripts", "assets" => "../../assets" } })
assert_equal \
"docker buildx build --output=type=registry --platform linux/amd64 --builder kamal-local-docker-container -t dhh/app:123 -t dhh/app:latest --label service=\"app\" --file Dockerfile --build-context scripts=\"../../scripts\" --build-context assets=\"../../assets\" . 2>&1",
builder.push.join(" ")
end

test "push with build args" do
builder = new_builder_command(builder: { "args" => { "a" => 1, "b" => 2 } })
assert_equal \
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 @@ -141,6 +141,16 @@ class ConfigurationBuilderTest < ActiveSupport::TestCase
assert_equal "..", config.builder.context
end

test "additional_contexts" do
assert_equal({}, config.builder.additional_contexts)
end

test "setting additional_contexts" do
@deploy[:builder]["additional_contexts"] = { "scripts" => "../../scripts", "assets" => "../../assets" }

assert_equal({ "scripts" => "../../scripts", "assets" => "../../assets" }, config.builder.additional_contexts)
end

test "ssh" do
assert_nil config.builder.ssh
end
Expand Down