minfra-cli 1.12.1 → 1.13.0
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 +4 -4
- data/CHANGELOG.md +3 -0
- data/Gemfile.lock +23 -29
- data/README.md +1 -1
- data/lib/minfra/cli/version.rb +1 -1
- data/lib/orchparty/dsl_parser_kubernetes.rb +28 -1
- data/lib/orchparty/kubernetes_application.rb +92 -89
- data/minfra-cli.gemspec +1 -1
- metadata +6 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 013e2aad3df9fffb13eaceeac4ccc3306ac4dfedb9ef7f0019251ee4238e9dbf
|
4
|
+
data.tar.gz: 266a3cbfbcbc27eda6411806a20c1f3d5547d4b02fda404531861eb538f1be2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab2a2990bec284c339aaee8b49998cbf93c5cc53179a70ac6ddc6c6d557eb30b3b5b594877d744875bbeb200b90533630e61d60a84b016dab044e128b74aa6b0
|
7
|
+
data.tar.gz: b2e7767759e9c2eb7391974a46d1c1bec649f5247f580a7f7aef3b3bbc98e451d1ef882bdae0fc52fbfa12ad2d572a3d8daefb0a7a05f774909bf1aab1e2f129
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
minfra-cli (1.
|
5
|
-
activesupport (
|
4
|
+
minfra-cli (1.12.0)
|
5
|
+
activesupport (= 7.0.7.2)
|
6
6
|
erubis (~> 2.7)
|
7
7
|
hashie (~> 3.5)
|
8
8
|
hiera (= 3.9.0)
|
@@ -15,16 +15,14 @@ PATH
|
|
15
15
|
GEM
|
16
16
|
remote: https://rubygems.org/
|
17
17
|
specs:
|
18
|
-
activesupport (
|
18
|
+
activesupport (7.0.7.2)
|
19
19
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
20
20
|
i18n (>= 1.6, < 2)
|
21
21
|
minitest (>= 5.1)
|
22
22
|
tzinfo (~> 2.0)
|
23
|
-
|
24
|
-
concurrent-ruby (1.2.0)
|
23
|
+
concurrent-ruby (1.2.2)
|
25
24
|
diff-lcs (1.5.0)
|
26
|
-
domain_name (0.
|
27
|
-
unf (>= 0.0.5, < 1.0.0)
|
25
|
+
domain_name (0.6.20231109)
|
28
26
|
erubis (2.7.0)
|
29
27
|
hashie (3.6.0)
|
30
28
|
hiera (3.9.0)
|
@@ -37,42 +35,38 @@ GEM
|
|
37
35
|
http-accept (1.7.0)
|
38
36
|
http-cookie (1.0.5)
|
39
37
|
domain_name (~> 0.5)
|
40
|
-
i18n (1.
|
38
|
+
i18n (1.14.1)
|
41
39
|
concurrent-ruby (~> 1.0)
|
42
|
-
mime-types (3.
|
40
|
+
mime-types (3.5.1)
|
43
41
|
mime-types-data (~> 3.2015)
|
44
|
-
mime-types-data (3.
|
45
|
-
minitest (5.
|
42
|
+
mime-types-data (3.2023.1205)
|
43
|
+
minitest (5.20.0)
|
46
44
|
netrc (0.11.0)
|
47
|
-
optimist (3.0
|
45
|
+
optimist (3.1.0)
|
48
46
|
rake (12.3.3)
|
49
47
|
rest-client (2.1.0)
|
50
48
|
http-accept (>= 1.7.0, < 2.0)
|
51
49
|
http-cookie (>= 1.0.2, < 2.0)
|
52
50
|
mime-types (>= 1.16, < 4.0)
|
53
51
|
netrc (~> 0.8)
|
54
|
-
rspec (3.
|
55
|
-
rspec-core (~> 3.
|
56
|
-
rspec-expectations (~> 3.
|
57
|
-
rspec-mocks (~> 3.
|
58
|
-
rspec-core (3.
|
59
|
-
rspec-support (~> 3.
|
60
|
-
rspec-expectations (3.
|
52
|
+
rspec (3.12.0)
|
53
|
+
rspec-core (~> 3.12.0)
|
54
|
+
rspec-expectations (~> 3.12.0)
|
55
|
+
rspec-mocks (~> 3.12.0)
|
56
|
+
rspec-core (3.12.2)
|
57
|
+
rspec-support (~> 3.12.0)
|
58
|
+
rspec-expectations (3.12.3)
|
61
59
|
diff-lcs (>= 1.2.0, < 2.0)
|
62
|
-
rspec-support (~> 3.
|
63
|
-
rspec-mocks (3.
|
60
|
+
rspec-support (~> 3.12.0)
|
61
|
+
rspec-mocks (3.12.6)
|
64
62
|
diff-lcs (>= 1.2.0, < 2.0)
|
65
|
-
rspec-support (~> 3.
|
66
|
-
rspec-support (3.
|
63
|
+
rspec-support (~> 3.12.0)
|
64
|
+
rspec-support (3.12.1)
|
67
65
|
table_print (1.5.6)
|
68
|
-
thor (1.
|
69
|
-
timecop (0.9.
|
66
|
+
thor (1.3.0)
|
67
|
+
timecop (0.9.8)
|
70
68
|
tzinfo (2.0.6)
|
71
69
|
concurrent-ruby (~> 1.0)
|
72
|
-
unf (0.1.4)
|
73
|
-
unf_ext
|
74
|
-
unf_ext (0.0.8.2)
|
75
|
-
zeitwerk (2.6.6)
|
76
70
|
|
77
71
|
PLATFORMS
|
78
72
|
ruby
|
data/README.md
CHANGED
data/lib/minfra/cli/version.rb
CHANGED
@@ -378,12 +378,39 @@ module Orchparty
|
|
378
378
|
self
|
379
379
|
end
|
380
380
|
|
381
|
-
|
381
|
+
# secrets can be aprt of the helm chart or we write them to
|
382
|
+
# a file and later apply it
|
383
|
+
# apiVersion: v1
|
384
|
+
# kind: Secret
|
385
|
+
# metadata:
|
386
|
+
# name: dotfile-secret
|
387
|
+
# data:
|
388
|
+
# key: base64_encoded_value
|
389
|
+
|
390
|
+
def secrets(name, deploy: :helm, &block)
|
391
|
+
case deploy
|
392
|
+
when :helm
|
382
393
|
result = ServiceBuilder.build(name, "chart-secret", block)
|
383
394
|
@application.services[name] = result
|
384
395
|
@application._service_order << name
|
385
396
|
@node._services << name
|
386
397
|
self
|
398
|
+
when :apply
|
399
|
+
result = ServiceBuilder.build(name, "apply", block)
|
400
|
+
file = Tempfile.create(name)
|
401
|
+
result.tmp_file=file.path
|
402
|
+
file.puts "apiVersion: v1\nkind: Secret\nmetadata:\n name: #{name}\ntype: Opaque\ndata:"
|
403
|
+
result._.each do |key, value|
|
404
|
+
file.puts " #{key}: #{Base64.strict_encode64(value.respond_to?(:call) ? value.call : value)}"
|
405
|
+
end
|
406
|
+
file.close
|
407
|
+
@application.services[name] = result
|
408
|
+
@application._service_order << name
|
409
|
+
when :none
|
410
|
+
|
411
|
+
else
|
412
|
+
raise "unknown secret type: #{type}, known tpyes: [helm, apply]"
|
413
|
+
end
|
387
414
|
end
|
388
415
|
|
389
416
|
end
|
@@ -15,24 +15,24 @@ module Orchparty
|
|
15
15
|
class Context
|
16
16
|
include ::Minfra::Cli::Logging
|
17
17
|
|
18
|
-
attr_accessor :cluster_name, :namespace, :dir_path, :app_config, :options
|
18
|
+
attr_accessor :cluster_name, :namespace, :dir_path, :app_config, :options, :service
|
19
19
|
|
20
|
-
def initialize(cluster_name:, namespace:, file_path:, app_config:, app:, out_io: $stdout)
|
20
|
+
def initialize(cluster_name:, namespace:, file_path:, app_config:, app:, service:, out_io: $stdout)
|
21
21
|
self.cluster_name = cluster_name
|
22
22
|
self.namespace = namespace
|
23
23
|
self.dir_path = file_path
|
24
24
|
self.app_config = app_config
|
25
25
|
@app = app
|
26
26
|
@out_io = out_io
|
27
|
+
self.service = service # ugly naming, should be 'context'?
|
27
28
|
self.options = options
|
28
29
|
end
|
29
30
|
|
30
31
|
def template(file_path, helm, flag: '-f ', fix_file_path: nil)
|
31
32
|
return '' unless file_path
|
32
33
|
|
33
|
-
|
34
|
-
file_path = File.join(dir_path, file_path)
|
35
|
-
|
34
|
+
debug "Rendering: #{file_path}"
|
35
|
+
file_path = File.join(dir_path, file_path) unless file_path.start_with?('/')
|
36
36
|
if file_path.end_with?('.erb')
|
37
37
|
helm.application = OpenStruct.new(cluster_name: cluster_name, namespace: namespace)
|
38
38
|
template = Erubis::Eruby.new(File.read(file_path))
|
@@ -46,124 +46,125 @@ module Orchparty
|
|
46
46
|
"#{flag}#{fix_file_path || file_path}"
|
47
47
|
end
|
48
48
|
|
49
|
-
def print_install
|
49
|
+
def print_install
|
50
50
|
@out_io.puts '---'
|
51
|
-
@out_io.puts install_cmd(
|
52
|
-
@out_io.puts upgrade_cmd(
|
51
|
+
@out_io.puts install_cmd(value_path).cmd
|
52
|
+
@out_io.puts upgrade_cmd(value_path).cmd
|
53
53
|
@out_io.puts '---'
|
54
|
-
@out_io.puts File.read(template(value_path
|
54
|
+
@out_io.puts File.read(template(value_path, service, flag: '')) if value_path
|
55
|
+
cleanup
|
55
56
|
end
|
56
57
|
|
57
58
|
# On 05.02.2021 we have decided that it would be best to print both commands.
|
58
59
|
# This way it would be possible to debug both upgrade and install and also people would not see git diffs all the time.
|
59
|
-
def print_upgrade
|
60
|
-
print_install
|
60
|
+
def print_upgrade
|
61
|
+
print_install
|
61
62
|
end
|
62
63
|
|
63
|
-
def upgrade
|
64
|
-
@out_io.puts upgrade_cmd
|
64
|
+
def upgrade
|
65
|
+
@out_io.puts upgrade_cmd.run.stdout
|
66
|
+
cleanup if respond_to?(:cleanup)
|
65
67
|
end
|
66
68
|
|
67
|
-
def install
|
68
|
-
@out_io.puts install_cmd
|
69
|
+
def install
|
70
|
+
@out_io.puts install_cmd.run.stdout
|
71
|
+
cleanup if respond_to?(:cleanup)
|
69
72
|
end
|
70
73
|
end
|
71
74
|
|
72
75
|
class Helm < Context
|
73
|
-
def value_path
|
74
|
-
|
76
|
+
def value_path
|
77
|
+
service[:values]
|
75
78
|
end
|
76
79
|
|
77
|
-
def upgrade_cmd(
|
78
|
-
Minfra::Cli::HelmRunner.new("upgrade --namespace #{namespace} --kube-context #{cluster_name} --version #{
|
79
|
-
value_path
|
80
|
+
def upgrade_cmd(fix_file_path = nil)
|
81
|
+
Minfra::Cli::HelmRunner.new("upgrade --namespace #{namespace} --kube-context #{cluster_name} --version #{service.version} #{service.name} #{service.chart} #{template(
|
82
|
+
value_path, service, fix_file_path: fix_file_path
|
80
83
|
)}")
|
81
84
|
end
|
82
85
|
|
83
|
-
def install_cmd(
|
84
|
-
Minfra::Cli::HelmRunner.new("install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} --version #{
|
85
|
-
value_path
|
86
|
+
def install_cmd(fix_file_path = nil)
|
87
|
+
Minfra::Cli::HelmRunner.new("install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} --version #{service.version} #{service.name} #{service.chart} #{template(
|
88
|
+
value_path, service, fix_file_path: fix_file_path
|
86
89
|
)}")
|
87
90
|
end
|
88
91
|
end
|
89
92
|
|
90
93
|
class Apply < Context
|
91
|
-
def value_path
|
92
|
-
|
94
|
+
def value_path
|
95
|
+
service[:tmp_file] || service[:name]
|
93
96
|
end
|
94
97
|
|
95
|
-
def upgrade_cmd(
|
96
|
-
Minfra::Cli::KubeCtlRunner.new("apply --namespace #{namespace} --context #{cluster_name} #{template(
|
97
|
-
|
98
|
-
)}")
|
98
|
+
def upgrade_cmd(fix_file_path = nil)
|
99
|
+
Minfra::Cli::KubeCtlRunner.new("apply --namespace #{namespace} --context #{cluster_name} #{template(value_path,
|
100
|
+
service, fix_file_path: fix_file_path)}")
|
99
101
|
end
|
100
102
|
|
101
|
-
def install_cmd(
|
102
|
-
Minfra::Cli::KubeCtlRunner.new("apply --namespace #{namespace} --context #{cluster_name} #{template(
|
103
|
-
|
104
|
-
)}")
|
103
|
+
def install_cmd(fix_file_path = nil)
|
104
|
+
Minfra::Cli::KubeCtlRunner.new("apply --namespace #{namespace} --context #{cluster_name} #{template(value_path,
|
105
|
+
service, fix_file_path: fix_file_path)}")
|
105
106
|
end
|
106
|
-
end
|
107
107
|
|
108
|
-
|
109
|
-
|
110
|
-
secret[:from_file]
|
108
|
+
def cleanup
|
109
|
+
File.unlink(service[:tmp_file]) if service[:tmp_file]
|
111
110
|
end
|
111
|
+
end
|
112
112
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
)} | #{apply_cmd(cluster_name).cmd}")
|
113
|
+
class SecretGeneric < Context
|
114
|
+
def value_path
|
115
|
+
service[:from_file]
|
117
116
|
end
|
118
117
|
|
119
|
-
def
|
120
|
-
|
121
|
-
value_path
|
122
|
-
)} | #{
|
118
|
+
def upgrade_cmd(fix_file_path = nil)
|
119
|
+
"kubectl --namespace #{namespace} --context #{cluster_name} create secret generic --dry-run -o yaml #{service[:name]} #{template(
|
120
|
+
value_path, service, flag: '--from-file=', fix_file_path: fix_file_path
|
121
|
+
)} | kubectl --context #{cluster_name} apply -f -"
|
123
122
|
end
|
124
123
|
|
125
|
-
def
|
126
|
-
|
124
|
+
def install_cmd(fix_file_path = nil)
|
125
|
+
"kubectl --namespace #{namespace} --context #{cluster_name} create secret generic --dry-run -o yaml #{service[:name]} #{template(
|
126
|
+
value_path, service, flag: '--from-file=', fix_file_path: fix_file_path
|
127
|
+
)} | kubectl --context #{cluster_name} apply -f -"
|
127
128
|
end
|
128
129
|
end
|
129
130
|
|
130
131
|
class Label < Context
|
131
|
-
def print_install
|
132
|
+
def print_install
|
132
133
|
@out_io.puts '---'
|
133
|
-
@out_io.puts install_cmd
|
134
|
+
@out_io.puts install_cmd
|
134
135
|
end
|
135
136
|
|
136
|
-
def print_upgrade
|
137
|
+
def print_upgrade
|
137
138
|
@out_io.puts '---'
|
138
|
-
@out_io.puts upgrade_cmd
|
139
|
+
@out_io.puts upgrade_cmd
|
139
140
|
end
|
140
141
|
|
141
|
-
def upgrade_cmd
|
142
|
-
|
142
|
+
def upgrade_cmd
|
143
|
+
"kubectl --namespace #{namespace} --context #{cluster_name} label --overwrite #{service[:resource]} #{service[:name]} #{service['value']}"
|
143
144
|
end
|
144
145
|
|
145
|
-
def install_cmd
|
146
|
-
|
146
|
+
def install_cmd
|
147
|
+
"kubectl --namespace #{namespace} --context #{cluster_name} label --overwrite #{service[:resource]} #{service[:name]} #{service['value']}"
|
147
148
|
end
|
148
149
|
end
|
149
150
|
|
150
151
|
class Wait < Context
|
151
|
-
def print_install
|
152
|
+
def print_install
|
152
153
|
@out_io.puts '---'
|
153
|
-
@out_io.puts
|
154
|
+
@out_io.puts service.cmd
|
154
155
|
end
|
155
156
|
|
156
|
-
def print_upgrade
|
157
|
+
def print_upgrade
|
157
158
|
@out_io.puts '---'
|
158
|
-
@out_io.puts
|
159
|
+
@out_io.puts service.cmd
|
159
160
|
end
|
160
161
|
|
161
|
-
def upgrade
|
162
|
-
eval(
|
162
|
+
def upgrade
|
163
|
+
eval(service.cmd)
|
163
164
|
end
|
164
165
|
|
165
|
-
def install
|
166
|
-
eval(
|
166
|
+
def install
|
167
|
+
eval(service.cmd)
|
167
168
|
end
|
168
169
|
end
|
169
170
|
|
@@ -176,49 +177,48 @@ module Orchparty
|
|
176
177
|
end
|
177
178
|
end
|
178
179
|
|
179
|
-
def print_install
|
180
|
-
build_chart
|
180
|
+
def print_install
|
181
|
+
build_chart do |chart_path|
|
181
182
|
cmd = "helm template --namespace #{namespace} --debug --kube-context #{cluster_name} --output-dir #{chart_path.join(
|
182
183
|
'..', 'helm_expanded'
|
183
|
-
)} #{
|
184
|
+
)} #{service.name} #{chart_path}"
|
184
185
|
@out_io.puts `$cmd`
|
185
186
|
if system("#{cmd} > /dev/null")
|
186
187
|
|
187
|
-
|
188
|
+
debug('Helm: template check: OK')
|
188
189
|
else
|
189
|
-
error('
|
190
|
+
error('Helm: template check: FAIL')
|
190
191
|
end
|
191
192
|
end
|
192
193
|
end
|
193
194
|
|
194
|
-
def print_upgrade
|
195
|
-
print_install
|
195
|
+
def print_upgrade
|
196
|
+
print_install
|
196
197
|
end
|
197
198
|
|
198
|
-
def install
|
199
|
-
|
200
|
-
build_chart
|
201
|
-
res = Minfra::Cli::HelmRunner.new("install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} #{
|
199
|
+
def install
|
200
|
+
debug("Install: #{service.name}")
|
201
|
+
build_chart do |chart_path|
|
202
|
+
res = Minfra::Cli::HelmRunner.new("install --create-namespace --namespace #{namespace} --kube-context #{cluster_name} #{service.name} #{chart_path}").run
|
202
203
|
@out_io.puts res.stdout
|
203
204
|
end
|
204
205
|
end
|
205
206
|
|
206
|
-
def upgrade
|
207
|
-
|
208
|
-
build_chart
|
209
|
-
res = Minfra::Cli::HelmRunner.new("upgrade --namespace #{namespace} --kube-context #{cluster_name} #{
|
207
|
+
def upgrade
|
208
|
+
debug("Upgrade: #{service.name}: #{service._services.join(', ')}")
|
209
|
+
build_chart do |chart_path|
|
210
|
+
res = Minfra::Cli::HelmRunner.new("upgrade --namespace #{namespace} --kube-context #{cluster_name} #{service.name} #{chart_path}").run
|
210
211
|
@out_io.puts res.stdout
|
211
212
|
end
|
212
213
|
end
|
213
214
|
|
214
215
|
private
|
215
216
|
|
216
|
-
def build_chart
|
217
|
+
def build_chart
|
217
218
|
dir = @app.status_dir.join('helm') # duplication
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
chart: chart)
|
219
|
+
params = service._services.map { |s| app_config.services[s.to_sym] }.map { |s| [s.name, s] }.to_h
|
220
|
+
run(templates_path: File.expand_path(service.template, dir_path), params: params, output_chart_path: dir,
|
221
|
+
chart: service)
|
222
222
|
yield dir
|
223
223
|
end
|
224
224
|
|
@@ -253,7 +253,7 @@ module Orchparty
|
|
253
253
|
params._used_vars = {} # here we'll collect all used vars
|
254
254
|
|
255
255
|
Dir[File.join(templates_path, kind, '*.erb')].each do |template_path|
|
256
|
-
|
256
|
+
debug("Rendering Template: #{template_path}")
|
257
257
|
template_name = File.basename(template_path, '.erb')
|
258
258
|
output_path = File.join(output_chart_path, 'templates', "#{app_name}-#{template_name}")
|
259
259
|
|
@@ -318,7 +318,7 @@ class KubernetesApplication
|
|
318
318
|
chart_name: namespace
|
319
319
|
)
|
320
320
|
|
321
|
-
|
321
|
+
debug("Minfra: generating base helm structure from: #{output_chart_path} from #{templates_path}")
|
322
322
|
system("mkdir -p #{File.join(output_chart_path, 'templates')}")
|
323
323
|
|
324
324
|
system("cp #{File.join(templates_path, 'values.yaml')} #{File.join(output_chart_path, 'values.yaml')}")
|
@@ -344,6 +344,8 @@ class KubernetesApplication
|
|
344
344
|
current_service._services.each do |n|
|
345
345
|
services.delete n.to_s
|
346
346
|
end
|
347
|
+
# else
|
348
|
+
# puts "unkown service: #{name}: #{current_service._type}"
|
347
349
|
end
|
348
350
|
services
|
349
351
|
end
|
@@ -351,18 +353,19 @@ class KubernetesApplication
|
|
351
353
|
def each_service(method)
|
352
354
|
prepare
|
353
355
|
services = combine_charts(app_config)
|
356
|
+
|
354
357
|
services.each do |name|
|
355
358
|
service = app_config[:services][name]
|
356
|
-
|
359
|
+
debug("Generating Service: #{name}(#{service._type}) #{method}")
|
357
360
|
deployable_class = "::Orchparty::Services::#{service._type.classify}".constantize
|
358
361
|
deployable = deployable_class.new(cluster_name: cluster_name,
|
359
362
|
namespace: namespace,
|
360
363
|
file_path: file_path,
|
361
364
|
app_config: app_config,
|
362
365
|
out_io: @out_io,
|
363
|
-
app: self
|
364
|
-
|
365
|
-
deployable.send(method
|
366
|
+
app: self,
|
367
|
+
service: service)
|
368
|
+
deployable.send(method)
|
366
369
|
end
|
367
370
|
end
|
368
371
|
end
|
data/minfra-cli.gemspec
CHANGED
@@ -31,7 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_runtime_dependency "table_print", "1.5.6"
|
32
32
|
spec.add_runtime_dependency "rest-client", "~>2.0"
|
33
33
|
spec.add_runtime_dependency "hashie", "~>3.5"
|
34
|
-
spec.add_runtime_dependency "activesupport", "
|
34
|
+
spec.add_runtime_dependency "activesupport", "= 7.0.7.2"
|
35
35
|
spec.add_runtime_dependency "erubis", "~> 2.7"
|
36
36
|
spec.add_runtime_dependency "hiera", "3.9.0"
|
37
37
|
spec.add_runtime_dependency "hiera-eyaml", "3.3.0"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minfra-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Schrammel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -76,16 +76,16 @@ dependencies:
|
|
76
76
|
name: activesupport
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
78
78
|
requirements:
|
79
|
-
- -
|
79
|
+
- - '='
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version:
|
81
|
+
version: 7.0.7.2
|
82
82
|
type: :runtime
|
83
83
|
prerelease: false
|
84
84
|
version_requirements: !ruby/object:Gem::Requirement
|
85
85
|
requirements:
|
86
|
-
- -
|
86
|
+
- - '='
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
version:
|
88
|
+
version: 7.0.7.2
|
89
89
|
- !ruby/object:Gem::Dependency
|
90
90
|
name: erubis
|
91
91
|
requirement: !ruby/object:Gem::Requirement
|