Class: Dash::Configuration::Builder

Inherits:
Object
  • Object
show all
Includes:
Validation
Defined in:
lib/dash/configuration/builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Validation

#validate!, #validation_yml

Constructor Details

#initialize(config:) ⇒ Builder

Returns a new instance of Builder.



8
9
10
11
12
13
14
15
16
# File 'lib/dash/configuration/builder.rb', line 8

def initialize(config:)
  @config = config
  @builder_config = config.raw_config.builder || {}
  @image = config.image
  @server = config.registry.server
  @service = config.service

  validate! builder_config, with: Dash::Configuration::Validator::Builder
end

Instance Attribute Details

#builder_config ⇒ Object (readonly)

Returns the value of attribute builder_config.



4
5
6
# File 'lib/dash/configuration/builder.rb', line 4

def builder_config
  @builder_config
end

#config ⇒ Object (readonly)

Returns the value of attribute config.



4
5
6
# File 'lib/dash/configuration/builder.rb', line 4

def config
  @config
end

Instance Method Details

#arches ⇒ Object



26
27
28
# File 'lib/dash/configuration/builder.rb', line 26

def arches
  Array(builder_config.fetch("arch", default_arch))
end

#args ⇒ Object



68
69
70
# File 'lib/dash/configuration/builder.rb', line 68

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

#build_directory ⇒ Object



146
147
148
149
150
151
152
153
# File 'lib/dash/configuration/builder.rb', line 146

def build_directory
  @build_directory ||=
    if git_clone?
      File.join clone_directory, repo_basename, repo_relative_pwd
    else
      "."
    end
end

#cache_from ⇒ Object



104
105
106
107
108
109
110
111
112
113
# File 'lib/dash/configuration/builder.rb', line 104

def cache_from
  if cached?
    case builder_config["cache"]["type"]
    when "gha"
      cache_from_config_for_gha
    when "registry"
      cache_from_config_for_registry
    end
  end
end

#cache_to ⇒ Object



115
116
117
118
119
120
121
122
123
124
# File 'lib/dash/configuration/builder.rb', line 115

def cache_to
  if cached?
    case builder_config["cache"]["type"]
    when "gha"
      cache_to_config_for_gha
    when "registry"
      cache_to_config_for_registry
    end
  end
end

#cached? ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/dash/configuration/builder.rb', line 60

def cached?
  !!builder_config["cache"]
end

#clone_directory ⇒ Object



142
143
144
# File 'lib/dash/configuration/builder.rb', line 142

def clone_directory
  @clone_directory ||= File.join Dir.tmpdir, "kamal-clones", [ service, pwd_sha ].compact.join("-")
end

#cloud? ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/dash/configuration/builder.rb', line 56

def cloud?
  driver.start_with? "cloud"
end

#context ⇒ Object



84
85
86
# File 'lib/dash/configuration/builder.rb', line 84

def context
  builder_config["context"] || "."
end

#docker_driver? ⇒ Boolean

Returns:

  • (Boolean)


155
156
157
# File 'lib/dash/configuration/builder.rb', line 155

def docker_driver?
  driver == "docker"
end

#dockerfile ⇒ Object



76
77
78
# File 'lib/dash/configuration/builder.rb', line 76

def dockerfile
  builder_config["dockerfile"] || "Dockerfile"
end

#driver ⇒ Object



88
89
90
# File 'lib/dash/configuration/builder.rb', line 88

def driver
  builder_config.fetch("driver", "docker-container")
end

#git_clone? ⇒ Boolean

Returns:

  • (Boolean)


138
139
140
# File 'lib/dash/configuration/builder.rb', line 138

def git_clone?
  Dash::Git.used? && builder_config["context"].nil?
end

#local? ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/dash/configuration/builder.rb', line 52

def local?
  !local_disabled? && (arches.empty? || local_arches.any?)
end

#local_arches ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/dash/configuration/builder.rb', line 30

def local_arches
  @local_arches ||= if local_disabled?
    []
  elsif remote
    arches & [ Dash::Utils.docker_arch ]
  else
    arches
  end
end

#local_disabled? ⇒ Boolean

Returns:

  • (Boolean)


100
101
102
# File 'lib/dash/configuration/builder.rb', line 100

def local_disabled?
  builder_config["local"] == false
end

#pack? ⇒ Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/dash/configuration/builder.rb', line 64

def pack?
  !!builder_config["pack"]
end

#pack_builder ⇒ Object



92
93
94
# File 'lib/dash/configuration/builder.rb', line 92

def pack_builder
  builder_config["pack"]["builder"] if pack?
end

#pack_buildpacks ⇒ Object



96
97
98
# File 'lib/dash/configuration/builder.rb', line 96

def pack_buildpacks
  builder_config["pack"]["buildpacks"] if pack?
end

#provenance ⇒ Object



130
131
132
# File 'lib/dash/configuration/builder.rb', line 130

def provenance
  builder_config["provenance"]
end

#remote ⇒ Object



22
23
24
# File 'lib/dash/configuration/builder.rb', line 22

def remote
  builder_config["remote"]
end

#remote? ⇒ Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/dash/configuration/builder.rb', line 48

def remote?
  remote_arches.any?
end

#remote_arches ⇒ Object



40
41
42
43
44
45
46
# File 'lib/dash/configuration/builder.rb', line 40

def remote_arches
  @remote_arches ||= if remote
    arches - local_arches
  else
    []
  end
end

#sbom ⇒ Object



134
135
136
# File 'lib/dash/configuration/builder.rb', line 134

def sbom
  builder_config["sbom"]
end

#secrets ⇒ Object



72
73
74
# File 'lib/dash/configuration/builder.rb', line 72

def secrets
  (builder_config["secrets"] || []).to_h { |key| [ key, config.secrets[key] ] }
end

#ssh ⇒ Object



126
127
128
# File 'lib/dash/configuration/builder.rb', line 126

def ssh
  builder_config["ssh"]
end

#target ⇒ Object



80
81
82
# File 'lib/dash/configuration/builder.rb', line 80

def target
  builder_config["target"]
end

#to_h ⇒ Object



18
19
20
# File 'lib/dash/configuration/builder.rb', line 18

def to_h
  builder_config
end