kamal-backup 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c69dd196192b66424004ae3769d75602862227ad958e056288e1cb49b8242a8a
4
- data.tar.gz: fa70cfffdf1d95212700244fcdfbb5e7b72b8f4eaf27f2898177c16c305fe9d8
3
+ metadata.gz: dfb6c6c9e7956edddb88036298071e47511a29cd062fbaa2553f89d9a310dfaa
4
+ data.tar.gz: fc3f699dcd1daa667cb4fd984729c9adf9b9e762d99c0716da5869da236c3bc9
5
5
  SHA512:
6
- metadata.gz: c1764bd5d9a81b9d705838a27f857a679efebe7b2c3ff64be0f4faffc440678e1958124f0cb8ca81c24fa5e30380324d20d42447ae20e5b33f7d946eab7dcec4
7
- data.tar.gz: f929aecfd15c9b2ed34560292217a97e4ceff31fd4fad1b9ce0e2589af862cd725a45a275c3755ddc744bb8f0e8703c187aa96537664431b93cc4a2841ae4627
6
+ metadata.gz: 640dc10b40aa46159391cac4f73567746ccd845359d10dae443b500234136ca43962fbc83353308e14809a5c9c1d3a51ebe35e9b6b3bc517b204183968d2d2e5
7
+ data.tar.gz: 7637ff0dc17cdf53968ad8b0ca4908ac1cdb62cfa119fd489b2c3a639c19479176532c3437b82955226111da04826a6546670b8f3b6b66e4292dac955a13774b
@@ -64,7 +64,8 @@ module KamalBackup
64
64
  @bridge ||= KamalBridge.new(
65
65
  redactor: redactor,
66
66
  config_file: options[:config_file],
67
- destination: options[:destination]
67
+ destination: options[:destination],
68
+ env: command_env
68
69
  )
69
70
  end
70
71
 
@@ -6,10 +6,12 @@ module KamalBackup
6
6
  DEFAULT_CONFIG_FILE = "config/deploy.yml"
7
7
  VERSION_LINE_PATTERN = /\A\d+(?:\.\d+)+(?:[-.][A-Za-z0-9]+)*\z/
8
8
 
9
- def initialize(redactor:, config_file: nil, destination: nil)
9
+ def initialize(redactor:, config_file: nil, destination: nil, env: ENV, cwd: Dir.pwd)
10
10
  @redactor = redactor
11
11
  @config_file = config_file
12
12
  @destination = destination
13
+ @env = env
14
+ @cwd = cwd
13
15
  end
14
16
 
15
17
  def accessory_name(preferred: nil)
@@ -104,23 +106,61 @@ module KamalBackup
104
106
  def normalize_secret_env(values)
105
107
  case values
106
108
  when Hash
107
- values.each_with_object({}) { |(key, _value), env| env[key.to_s] = "configured" }
109
+ values.each_with_object({}) do |(key, secret_key), env|
110
+ add_resolved_secret(env, target: key, source: secret_key)
111
+ end
108
112
  when Array
109
- values.each_with_object({}) { |key, env| env[key.to_s] = "configured" }
113
+ values.each_with_object({}) do |entry, env|
114
+ target, source = parse_secret_entry(entry)
115
+ add_resolved_secret(env, target: target, source: source)
116
+ end
110
117
  when String, Symbol
111
- { values.to_s => "configured" }
118
+ {}.tap do |env|
119
+ target, source = parse_secret_entry(values)
120
+ add_resolved_secret(env, target: target, source: source)
121
+ end
112
122
  else
113
123
  {}
114
124
  end
115
125
  end
116
126
 
127
+ def parse_secret_entry(entry)
128
+ target, source = entry.to_s.split(":", 2)
129
+ [ target, source || target ]
130
+ end
131
+
132
+ def add_resolved_secret(env, target:, source:)
133
+ if value = resolved_secret(source)
134
+ env[target.to_s] = value
135
+ end
136
+ end
137
+
138
+ def resolved_secret(key)
139
+ raw = resolved_secrets[key.to_s] || @env[key.to_s]
140
+ value = raw.to_s.strip
141
+ value.empty? ? nil : value
142
+ end
143
+
144
+ def resolved_secrets
145
+ @resolved_secrets ||= parse_secret_output(capture_kamal(kamal_secrets_print_argv).stdout)
146
+ end
147
+
148
+ def parse_secret_output(output)
149
+ output.to_s.lines.each_with_object({}) do |line, secrets|
150
+ key, value = line.chomp.split("=", 2)
151
+ next if key.to_s.empty?
152
+
153
+ secrets[key] = value.to_s
154
+ end
155
+ end
156
+
117
157
  def fetch(hash, key)
118
158
  hash[key] || hash[key.to_s] || hash[key.to_sym]
119
159
  end
120
160
 
121
161
  def kamal_config_argv
122
162
  [
123
- "kamal",
163
+ *kamal_command,
124
164
  "config",
125
165
  *kamal_option_argv,
126
166
  "--version",
@@ -130,7 +170,7 @@ module KamalBackup
130
170
 
131
171
  def kamal_exec_argv(accessory_name, command)
132
172
  [
133
- "kamal",
173
+ *kamal_command,
134
174
  "accessory",
135
175
  "exec",
136
176
  accessory_name,
@@ -139,6 +179,25 @@ module KamalBackup
139
179
  ]
140
180
  end
141
181
 
182
+ def kamal_secrets_print_argv
183
+ [
184
+ *kamal_command,
185
+ "secrets",
186
+ "print",
187
+ *kamal_option_argv
188
+ ]
189
+ end
190
+
191
+ def kamal_command
192
+ if File.executable?(File.join(@cwd, "bin", "kamal"))
193
+ [ "bin/kamal" ]
194
+ elsif File.file?(File.join(@cwd, "Gemfile"))
195
+ [ "bundle", "exec", "kamal" ]
196
+ else
197
+ [ "kamal" ]
198
+ end
199
+ end
200
+
142
201
  def kamal_option_argv
143
202
  argv = []
144
203
  argv.concat(["-c", @config_file]) if @config_file
@@ -1,3 +1,3 @@
1
1
  module KamalBackup
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kamal-backup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - crmne