class Kamal::Commands::Builder::Base
def build_args
def build_args argumentize "--build-arg", args, sensitive: true end
def build_cache
def build_cache if cache_to && cache_from [ "--cache-to", cache_to, "--cache-from", cache_from ] end end
def build_context
def build_context config.builder.context end
def build_dockerfile
def build_dockerfile if Pathname.new(File.expand_path(dockerfile)).exist? argumentize "--file", dockerfile else raise BuilderError, "Missing #{dockerfile}" end end
def build_labels
def build_labels argumentize "--label", { service: config.service } end
def build_options
def build_options [ *build_tags, *build_cache, *build_labels, *build_args, *build_secrets, *build_dockerfile, *build_ssh ] end
def build_secrets
def build_secrets argumentize "--secret", secrets.collect { |secret| [ "id", secret ] } end
def build_ssh
def build_ssh argumentize "--ssh", ssh if ssh.present? end
def build_tags
def build_tags [ "-t", config.absolute_image, "-t", config.latest_image ] end
def builder_config
def builder_config config.builder end
def clean
def clean docker :image, :rm, "--force", config.absolute_image end
def pull
def pull docker :pull, config.absolute_image end
def push
def push if git_archive? pipe \ git(:archive, "--format=tar", :HEAD), build_and_push else build_and_push end end
def validate_image
def validate_image pipe \ docker(:inspect, "-f", "'{{ .Config.Labels.service }}'", config.absolute_image), any( [ :grep, "-x", config.service ], "(echo \"Image #{config.absolute_image} is missing the 'service' label\" && exit 1)" ) end