Class: Kamal::Commands::Builder::Base

Inherits:
Kamal::Commands::Base show all
Defined in:
lib/kamal/commands/builder/base.rb

Direct Known Subclasses

Cloud, Local, Remote

Defined Under Namespace

Classes: BuilderError

Constant Summary collapse

ENDPOINT_DOCKER_HOST_INSPECT =
"'{{.Endpoints.docker.Host}}'"

Constants inherited from Kamal::Commands::Base

Kamal::Commands::Base::DOCKER_HEALTH_STATUS_FORMAT

Instance Attribute Summary

Attributes inherited from Kamal::Commands::Base

#config

Instance Method Summary collapse

Methods inherited from Kamal::Commands::Base

#container_id_for, #ensure_docker_installed, #initialize, #make_directory, #make_directory_for, #remove_directory, #remove_file, #run_over_ssh

Constructor Details

This class inherits a constructor from Kamal::Commands::Base

Instance Method Details

#build_contextObject



44
45
46
# File 'lib/kamal/commands/builder/base.rb', line 44

def build_context
  config.builder.context
end

#build_optionsObject



40
41
42
# File 'lib/kamal/commands/builder/base.rb', line 40

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

#cleanObject



12
13
14
# File 'lib/kamal/commands/builder/base.rb', line 12

def clean
  docker :image, :rm, "--force", config.absolute_image
end

#first_mirrorObject



57
58
59
# File 'lib/kamal/commands/builder/base.rb', line 57

def first_mirror
  docker(:info, "--format '{{index .RegistryConfig.Mirrors 0}}'")
end

#infoObject



30
31
32
33
34
# File 'lib/kamal/commands/builder/base.rb', line 30

def info
  combine \
    docker(:context, :ls),
    docker(:buildx, :ls)
end

#inspect_builderObject



36
37
38
# File 'lib/kamal/commands/builder/base.rb', line 36

def inspect_builder
  docker :buildx, :inspect, builder_name unless docker_driver?
end

#pullObject



26
27
28
# File 'lib/kamal/commands/builder/base.rb', line 26

def pull
  docker :pull, config.absolute_image
end

#push(export_action = "registry", tag_as_dirty: false) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/kamal/commands/builder/base.rb', line 16

def push(export_action = "registry", tag_as_dirty: false)
  docker :buildx, :build,
    "--output=type=#{export_action}",
    *platform_options(arches),
    *([ "--builder", builder_name ] unless docker_driver?),
    *build_tag_options(tag_as_dirty: tag_as_dirty),
    *build_options,
    build_context
end

#validate_imageObject



48
49
50
51
52
53
54
55
# File 'lib/kamal/commands/builder/base.rb', line 48

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