Kamal needs images to have the service label so it can track them for pruning. Images built by Kamal will have the label, but externally built ones may not. Without it images will build up over time. The worst case is an outage if all the hosts disks fill up at the same time. We'll add a check for the label and halt if it is not there.
67 lines
1.6 KiB
Ruby
67 lines
1.6 KiB
Ruby
|
|
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
|
|
|
|
def clean
|
|
docker :image, :rm, "--force", config.absolute_image
|
|
end
|
|
|
|
def pull
|
|
docker :pull, config.absolute_image
|
|
end
|
|
|
|
def build_options
|
|
[ *build_tags, *build_cache, *build_labels, *build_args, *build_secrets, *build_dockerfile ]
|
|
end
|
|
|
|
def build_context
|
|
config.builder.context
|
|
end
|
|
|
|
def validate_image
|
|
pipe \
|
|
docker(:inspect, "-f", "'{{ .Config.Labels.service }}'", config.absolute_image),
|
|
[:grep, "-x", config.service, "||", "(echo \"Image #{config.absolute_image} is missing the `service` label\" && exit 1)"]
|
|
end
|
|
|
|
|
|
private
|
|
def build_tags
|
|
[ "-t", config.absolute_image, "-t", config.latest_image ]
|
|
end
|
|
|
|
def build_cache
|
|
if cache_to && cache_from
|
|
["--cache-to", cache_to,
|
|
"--cache-from", cache_from]
|
|
end
|
|
end
|
|
|
|
def build_labels
|
|
argumentize "--label", { service: config.service }
|
|
end
|
|
|
|
def build_args
|
|
argumentize "--build-arg", args, sensitive: true
|
|
end
|
|
|
|
def build_secrets
|
|
argumentize "--secret", secrets.collect { |secret| [ "id", secret ] }
|
|
end
|
|
|
|
def build_dockerfile
|
|
if Pathname.new(File.expand_path(dockerfile)).exist?
|
|
argumentize "--file", dockerfile
|
|
else
|
|
raise BuilderError, "Missing #{dockerfile}"
|
|
end
|
|
end
|
|
|
|
def builder_config
|
|
config.builder
|
|
end
|
|
end
|