kuby-core 0.11.14 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -0
  3. data/Gemfile +2 -2
  4. data/README.md +2 -1
  5. data/bin/kuby +2 -0
  6. data/kuby-core.gemspec +2 -2
  7. data/lib/kuby/basic_logger.rb +1 -1
  8. data/lib/kuby/cli_base.rb +9 -4
  9. data/lib/kuby/commands.rb +16 -69
  10. data/lib/kuby/docker/alpine.rb +2 -1
  11. data/lib/kuby/docker/app_image.rb +19 -0
  12. data/lib/kuby/docker/bundler_phase.rb +9 -3
  13. data/lib/kuby/docker/cli.rb +4 -12
  14. data/lib/kuby/docker/docker_uri.rb +18 -7
  15. data/lib/kuby/docker/errors.rb +1 -19
  16. data/lib/kuby/docker/image.rb +115 -0
  17. data/lib/kuby/docker/layer.rb +0 -7
  18. data/lib/kuby/docker/local_tags.rb +9 -10
  19. data/lib/kuby/docker/package_phase.rb +0 -5
  20. data/lib/kuby/docker/packages.rb +1 -0
  21. data/lib/kuby/docker/remote_tags.rb +10 -5
  22. data/lib/kuby/docker/setup_phase.rb +17 -9
  23. data/lib/kuby/docker/spec.rb +29 -62
  24. data/lib/kuby/docker/timestamp_tag.rb +8 -1
  25. data/lib/kuby/docker/timestamped_image.rb +113 -0
  26. data/lib/kuby/docker/yarn_phase.rb +2 -2
  27. data/lib/kuby/docker.rb +27 -25
  28. data/lib/kuby/environment.rb +1 -10
  29. data/lib/kuby/kubernetes/bare_metal_provider.rb +53 -0
  30. data/lib/kuby/kubernetes/deployer.rb +2 -1
  31. data/lib/kuby/kubernetes/docker_desktop_provider.rb +0 -15
  32. data/lib/kuby/kubernetes/spec.rb +21 -17
  33. data/lib/kuby/kubernetes.rb +1 -0
  34. data/lib/kuby/plugin.rb +2 -2
  35. data/lib/kuby/plugins/rails_app/assets.rb +60 -70
  36. data/lib/kuby/plugins/rails_app/assets_image.rb +55 -0
  37. data/lib/kuby/plugins/rails_app/plugin.rb +54 -213
  38. data/lib/kuby/plugins/rails_app.rb +1 -0
  39. data/lib/kuby/tasks.rb +30 -69
  40. data/lib/kuby/version.rb +1 -1
  41. data/lib/kuby.rb +3 -20
  42. data/spec/docker/spec_spec.rb +21 -118
  43. data/spec/docker/timestamped_image_spec.rb +123 -0
  44. data/spec/spec_helper.rb +10 -11
  45. metadata +11 -14
  46. data/lib/kuby/dev_setup.rb +0 -346
  47. data/lib/kuby/docker/dev_spec.rb +0 -202
  48. data/lib/kuby/docker/metadata.rb +0 -90
  49. data/lib/kuby/docker/tags.rb +0 -92
  50. data/lib/kuby/rails_commands.rb +0 -84
  51. data/spec/docker/metadata_spec.rb +0 -73
  52. data/spec/dummy/Gemfile.lock +0 -223
  53. data/spec/dummy/config/master.key +0 -1
  54. data/spec/dummy/tmp/cache/bootsnap-load-path-cache +0 -0
data/lib/kuby/tasks.rb CHANGED
@@ -9,65 +9,60 @@ module Kuby
9
9
  @environment = environment
10
10
  end
11
11
 
12
- def print_dockerfile
13
- theme = Rouge::Themes::Base16::Solarized.new
14
- formatter = Rouge::Formatters::Terminal256.new(theme)
15
- lexer = Rouge::Lexers::Docker.new
16
- tokens = lexer.lex(Kuby.environment.docker.to_dockerfile.to_s)
17
- puts formatter.format(tokens)
12
+ def print_dockerfiles
13
+ kubernetes.docker_images.each do |image|
14
+ image = image.current_version
15
+ Kuby.logger.info("Dockerfile for image #{image.image_url} with tags #{image.tags.join(', ')}")
16
+ theme = Rouge::Themes::Base16::Solarized.new
17
+ formatter = Rouge::Formatters::Terminal256.new(theme)
18
+ lexer = Rouge::Lexers::Docker.new
19
+ tokens = lexer.lex(image.dockerfile.to_s)
20
+ puts formatter.format(tokens)
21
+ end
18
22
  end
19
23
 
20
24
  def setup
21
25
  environment.kubernetes.setup
22
26
  end
23
27
 
24
- def build
25
- build_args = {}
26
-
27
- unless ENV.fetch('RAILS_MASTER_KEY', '').empty?
28
- build_args['RAILS_MASTER_KEY'] = ENV['RAILS_MASTER_KEY']
28
+ def build(build_args = {})
29
+ kubernetes.docker_images.each do |image|
30
+ image = image.new_version
31
+ Kuby.logger.info("Building image #{image.image_url} with tags #{image.tags.join(', ')}")
32
+ image.build(build_args)
29
33
  end
30
-
31
- docker.cli.build(
32
- dockerfile: docker.to_dockerfile,
33
- image_url: docker.metadata.image_url,
34
- tags: docker.metadata.tags,
35
- build_args: build_args
36
- )
37
34
  end
38
35
 
39
36
  def push
40
- if environment.development?
41
- fail 'Cannot push Docker images built for the development environment'
37
+ kubernetes.docker_images.each do |image|
38
+ image = image.current_version
39
+ Kuby.logger.info("Pushing image #{image.image_url} with tags #{image.tags.join(', ')}")
40
+ push_image(image)
42
41
  end
42
+ end
43
43
 
44
- host = docker.metadata.image_host
45
-
46
- if docker.credentials.username && !docker.cli.auths.include?(host)
47
- Kuby.logger.info("Attempting to log in to registry at #{host}")
44
+ def push_image(image)
45
+ if image.credentials.username && !image.docker_cli.auths.include?(image.image_host)
46
+ Kuby.logger.info("Attempting to log in to registry at #{image.image_host}")
48
47
 
49
48
  begin
50
- docker.cli.login(
51
- url: docker.metadata.image_host,
52
- username: docker.credentials.username,
53
- password: docker.credentials.password
49
+ image.docker_cli.login(
50
+ url: image.image_host,
51
+ username: image.credentials.username,
52
+ password: image.credentials.password
54
53
  )
55
54
  rescue Kuby::Docker::LoginError => e
56
- Kuby.logger.fatal("Couldn't log in to the registry at #{host}")
55
+ Kuby.logger.fatal("Couldn't log in to the registry at #{image.image_host}")
57
56
  Kuby.logger.fatal(e.message)
58
57
  return
59
58
  end
60
59
  end
61
60
 
62
- image_url = docker.metadata.image_url
63
-
64
61
  begin
65
- docker.tags.local.latest_tags.each do |tag|
66
- docker.cli.push(image_url, tag)
67
- end
62
+ image.tags.each { |tag| image.push(tag) }
68
63
  rescue Kuby::Docker::MissingTagError => e
69
64
  msg = "#{e.message} Run kuby build to build the "\
70
- 'Docker image before running this task.'
65
+ 'Docker images before running this task.'
71
66
 
72
67
  Kuby.logger.fatal(msg)
73
68
  Kuby.logger.fatal(e.message)
@@ -135,40 +130,6 @@ module Kuby
135
130
  kubernetes_cli.restart_deployment(namespace, deployment)
136
131
  end
137
132
 
138
- def dev_deployment_ok
139
- return true unless Kuby.environment.development?
140
-
141
- deployments = kubernetes_cli.get_objects(
142
- 'deployments', namespace, match_labels.serialize
143
- )
144
-
145
- if deployments.empty?
146
- puts 'No development environment detected.'
147
- STDOUT.write('Set up development environment? (y/n): ')
148
- answer = STDIN.gets.strip.downcase
149
- return false unless answer =~ /ye?s?/
150
- return DevSetup.new(environment).run
151
- else
152
- depl = deployments.first
153
- deployed_checksum = depl.dig('metadata', 'annotations', 'getkuby.io/dockerfile-checksum')
154
- current_checksum = docker.to_dockerfile.checksum
155
-
156
- if deployed_checksum != current_checksum
157
- puts "Development environment appears to be out-of-date."
158
- puts "Environment checksum: #{deployed_checksum}"
159
- puts "Current checksum: #{current_checksum}"
160
- STDOUT.write('Update development environment? (y/n): ')
161
- answer = STDIN.gets.strip.downcase
162
- # return true here to prevent letting an out-of-date deployment
163
- # stop us from running commands
164
- return true unless answer =~ /ye?s?/
165
- return DevSetup.new(environment).run
166
- end
167
- end
168
-
169
- true
170
- end
171
-
172
133
  private
173
134
 
174
135
  def get_first_pod
data/lib/kuby/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # typed: true
2
2
 
3
3
  module Kuby
4
- VERSION = '0.11.14'.freeze
4
+ VERSION = '0.13.0'.freeze
5
5
  end
data/lib/kuby.rb CHANGED
@@ -13,7 +13,6 @@ module Kuby
13
13
  autoload :CLIBase, 'kuby/cli_base'
14
14
  autoload :Commands, 'kuby/commands'
15
15
  autoload :Definition, 'kuby/definition'
16
- autoload :DevSetup, 'kuby/dev_setup'
17
16
  autoload :Docker, 'kuby/docker'
18
17
  autoload :Environment, 'kuby/environment'
19
18
  autoload :Kubernetes, 'kuby/kubernetes'
@@ -21,7 +20,6 @@ module Kuby
21
20
  autoload :Plugin, 'kuby/plugin'
22
21
  autoload :PluginRegistry, 'kuby/plugin_registry'
23
22
  autoload :Plugins, 'kuby/plugins'
24
- autoload :RailsCommands, 'kuby/rails_commands'
25
23
  autoload :Tasks, 'kuby/tasks'
26
24
  autoload :TrailingHash, 'kuby/trailing_hash'
27
25
 
@@ -52,24 +50,6 @@ module Kuby
52
50
  @definition = Definition.new(name.to_s)
53
51
  @definition.instance_eval(&block)
54
52
 
55
- # default development environment
56
- @definition.environment(:development) do
57
- kubernetes do
58
- add_plugin(:rails_app) do
59
- tls_enabled false
60
-
61
- database do
62
- if requires_credentials?
63
- user(DEFAULT_DB_USER)
64
- password(DEFAULT_DB_PASSWORD)
65
- end
66
- end
67
- end
68
-
69
- provider :docker_desktop
70
- end
71
- end
72
-
73
53
  @definition.environments.each do |_, env|
74
54
  env.kubernetes.after_configuration
75
55
  end
@@ -153,6 +133,7 @@ end
153
133
 
154
134
  # providers
155
135
  Kuby.register_provider(:docker_desktop, Kuby::Kubernetes::DockerDesktopProvider)
136
+ Kuby.register_provider(:bare_metal, Kuby::Kubernetes::BareMetalProvider)
156
137
 
157
138
  # plugins
158
139
  Kuby.register_plugin(:rails_app, Kuby::Plugins::RailsApp::Plugin)
@@ -173,3 +154,5 @@ Kuby.register_package(:c_toolchain,
173
154
  debian: 'build-essential',
174
155
  alpine: 'build-base'
175
156
  )
157
+
158
+ Kuby.register_package(:git, 'git')
@@ -1,12 +1,11 @@
1
1
  # typed: false
2
2
  require 'spec_helper'
3
- require 'timecop'
4
3
 
5
4
  describe Kuby::Docker::Spec do
6
5
  let(:spec) { definition.environment.docker }
7
6
 
8
7
  describe '#base_image' do
9
- subject { spec.to_dockerfile.to_s }
8
+ subject { spec.image.dockerfile.to_s }
10
9
 
11
10
  it 'uses the default base image for Debian' do
12
11
  expect(subject).to include("FROM ruby:#{RUBY_VERSION}\n")
@@ -34,7 +33,7 @@ describe Kuby::Docker::Spec do
34
33
  Kuby::Docker::SetupPhase::DEFAULT_WORKING_DIR
35
34
  end
36
35
 
37
- subject { spec.to_dockerfile.to_s }
36
+ subject { spec.image.dockerfile.to_s }
38
37
 
39
38
  it 'uses the default working dir' do
40
39
  expect(subject).to(
@@ -52,7 +51,7 @@ describe Kuby::Docker::Spec do
52
51
  end
53
52
 
54
53
  describe '#rails_env' do
55
- subject { spec.to_dockerfile.to_s }
54
+ subject { spec.image.dockerfile.to_s }
56
55
 
57
56
  it 'uses the name of the current Kuby environment' do
58
57
  expect(subject).to include("ENV RAILS_ENV=#{spec.environment.name}\n")
@@ -73,7 +72,7 @@ describe Kuby::Docker::Spec do
73
72
  end
74
73
 
75
74
  describe '#bundler_version' do
76
- subject { spec.to_dockerfile.to_s }
75
+ subject { spec.image.dockerfile.to_s }
77
76
 
78
77
  it 'installs the current bundler version' do
79
78
  expect(subject).to(
@@ -91,7 +90,7 @@ describe Kuby::Docker::Spec do
91
90
  end
92
91
 
93
92
  describe '#gemfile' do
94
- subject { spec.to_dockerfile.to_s }
93
+ subject { spec.image.dockerfile.to_s }
95
94
 
96
95
  it 'uses the default Gemfile' do
97
96
  expect(subject).to include("COPY Gemfile .\n")
@@ -108,10 +107,22 @@ describe Kuby::Docker::Spec do
108
107
  expect(subject).to match(/RUN bundle install .* --gemfile foo\/bar\/Gemfile/)
109
108
  end
110
109
  end
110
+
111
+ context 'when multiple gemfiles are specified' do
112
+ before { spec.bundler_phase.gemfiles('gemfiles/a.gemfile', 'gemfiles/b.gemfile') }
113
+
114
+ it 'uses all gemfiles including the default one' do
115
+ expect(subject).to include("COPY Gemfile .\n")
116
+ expect(subject).to include("COPY Gemfile.lock .\n")
117
+ expect(subject).to include("COPY gemfiles/a.gemfile gemfiles/a.gemfile\n")
118
+ expect(subject).to include("COPY gemfiles/b.gemfile gemfiles/b.gemfile\n")
119
+ expect(subject).to match(/RUN bundle install .* --gemfile Gemfile/)
120
+ end
121
+ end
111
122
  end
112
123
 
113
124
  describe '#package' do
114
- subject { spec.to_dockerfile.to_s }
125
+ subject { spec.image.dockerfile.to_s }
115
126
 
116
127
  it 'installs the given package' do
117
128
  # configured in spec_helper.rb
@@ -122,7 +133,7 @@ describe Kuby::Docker::Spec do
122
133
  end
123
134
 
124
135
  describe '#files' do
125
- subject { spec.to_dockerfile.to_s }
136
+ subject { spec.image.dockerfile.to_s }
126
137
 
127
138
  it 'copies the current directory contents by default' do
128
139
  expect(subject).to include("COPY ./ .\n")
@@ -142,7 +153,7 @@ describe Kuby::Docker::Spec do
142
153
  Kuby::Docker::WebserverPhase::DEFAULT_PORT
143
154
  end
144
155
 
145
- subject { spec.to_dockerfile.to_s }
156
+ subject { spec.image.dockerfile.to_s }
146
157
 
147
158
  it 'exposes the default port' do
148
159
  expect(subject).to include("EXPOSE #{default_port}\n")
@@ -157,116 +168,8 @@ describe Kuby::Docker::Spec do
157
168
  end
158
169
  end
159
170
 
160
- describe '#tag' do
161
- let(:tag) { make_ts_tag(Time.now) }
162
-
163
- subject { spec.tag }
164
-
165
- context 'with no local or remote tags' do
166
- it 'raises an error' do
167
- expect { subject }.to raise_error(Kuby::Docker::MissingTagError)
168
- end
169
- end
170
-
171
- context 'with an available remote tag' do
172
- before { docker_remote_client.tags << tag }
173
-
174
- it { is_expected.to eq(tag) }
175
- end
176
-
177
- context 'with an available local tag' do
178
- before do
179
- docker_cli.build(
180
- dockerfile: nil,
181
- image_url: docker_image_url,
182
- tags: [tag]
183
- )
184
- end
185
-
186
- it { is_expected.to eq(tag) }
187
- end
188
-
189
- context 'with multiple remote tags' do
190
- let(:time) { Time.now }
191
-
192
- before do
193
- docker_remote_client.tags +=
194
- [time - 5, time + 10, time - 10, time + 15].map do |t|
195
- make_ts_tag(t)
196
- end
197
- end
198
-
199
- it { is_expected.to eq(make_ts_tag(time + 15)) }
200
- end
201
-
202
- context 'with multiple local and remote tags' do
203
- let(:time) { Time.now }
204
-
205
- before do
206
- docker_remote_client.tags +=
207
- [time - 5, time + 10, time - 10, time + 15].map do |t|
208
- make_ts_tag(t)
209
- end
210
-
211
- docker_cli.build(
212
- dockerfile: nil,
213
- image_url: docker_image_url,
214
- tags: [time - 3, time + 6, time - 6, time + 18].map do |t|
215
- make_ts_tag(t)
216
- end
217
- )
218
- end
219
-
220
- it { is_expected.to eq(make_ts_tag(time + 18)) }
221
- end
222
- end
223
-
224
- describe '#previous_tag' do
225
- let(:time) { Time.now }
226
- let(:current_tag) { make_ts_tag(time) }
227
-
228
- before do
229
- docker_remote_client.tags << current_tag
230
- docker_cli.build(
231
- dockerfile: nil,
232
- image_url: docker_image_url,
233
- tags: [current_tag]
234
- )
235
- end
236
-
237
- subject { spec.previous_tag(current_tag) }
238
-
239
- context 'with no previous local or remote tag' do
240
- it 'raises an error' do
241
- expect { subject }.to raise_error(Kuby::Docker::MissingTagError)
242
- end
243
- end
244
-
245
- context 'with an available previous remote tag' do
246
- let(:previous_tag) { make_ts_tag(time - 5) }
247
-
248
- before { docker_remote_client.tags << previous_tag }
249
-
250
- it { is_expected.to eq(previous_tag) }
251
- end
252
-
253
- context 'with an available previous local tag' do
254
- let(:previous_tag) { make_ts_tag(time - 5) }
255
-
256
- before do
257
- docker_cli.build(
258
- dockerfile: nil,
259
- image_url: docker_image_url,
260
- tags: [previous_tag]
261
- )
262
- end
263
-
264
- it { is_expected.to eq(previous_tag) }
265
- end
266
- end
267
-
268
171
  describe '#insert' do
269
- subject { spec.to_dockerfile.to_s }
172
+ subject { spec.image.dockerfile.to_s }
270
173
 
271
174
  context 'with a custom class-based build phase' do
272
175
  before do
@@ -0,0 +1,123 @@
1
+ # typed: false
2
+ require 'spec_helper'
3
+
4
+ describe Kuby::Docker::TimestampedImage do
5
+ let(:dockerfile) { Kuby::Docker::Dockerfile.new }
6
+ let(:image_url) { docker_image_url }
7
+ let(:credentials) do
8
+ Kuby::Docker::Credentials.new do
9
+ username 'foo'
10
+ password 'bar'
11
+ email 'foo@bar.com'
12
+ end
13
+ end
14
+ let(:image) { described_class.new(dockerfile, image_url, credentials) }
15
+
16
+ describe '#current_version' do
17
+ let(:tag) { make_ts_tag(Time.now) }
18
+
19
+ subject { image.current_version&.main_tag }
20
+
21
+ context 'with no local or remote tags' do
22
+ it 'raises an error' do
23
+ expect { subject }.to raise_error(Kuby::Docker::MissingTagError)
24
+ end
25
+ end
26
+
27
+ context 'with an available remote tag' do
28
+ before { docker_remote_client.tags << tag }
29
+
30
+ it { is_expected.to eq(tag) }
31
+ end
32
+
33
+ context 'with an available local tag' do
34
+ before do
35
+ docker_cli.build(
36
+ dockerfile: nil,
37
+ image_url: docker_image_url,
38
+ tags: [tag]
39
+ )
40
+ end
41
+
42
+ it { is_expected.to eq(tag) }
43
+ end
44
+
45
+ context 'with multiple remote tags' do
46
+ let(:time) { Time.now }
47
+
48
+ before do
49
+ docker_remote_client.tags +=
50
+ [time - 5, time + 10, time - 10, time + 15].map do |t|
51
+ make_ts_tag(t)
52
+ end
53
+ end
54
+
55
+ it { is_expected.to eq(make_ts_tag(time + 15)) }
56
+ end
57
+
58
+ context 'with multiple local and remote tags' do
59
+ let(:time) { Time.now }
60
+
61
+ before do
62
+ docker_remote_client.tags +=
63
+ [time - 5, time + 10, time - 10, time + 15].map do |t|
64
+ make_ts_tag(t)
65
+ end
66
+
67
+ docker_cli.build(
68
+ dockerfile: nil,
69
+ image_url: docker_image_url,
70
+ tags: [time - 3, time + 6, time - 6, time + 18].map do |t|
71
+ make_ts_tag(t)
72
+ end
73
+ )
74
+ end
75
+
76
+ it { is_expected.to eq(make_ts_tag(time + 18)) }
77
+ end
78
+ end
79
+
80
+ describe '#previous_version' do
81
+ let(:time) { Time.now }
82
+ let(:current_tag) { make_ts_tag(time) }
83
+
84
+ before do
85
+ docker_remote_client.tags << current_tag
86
+ docker_cli.build(
87
+ dockerfile: nil,
88
+ image_url: docker_image_url,
89
+ tags: [current_tag]
90
+ )
91
+ end
92
+
93
+ subject { image.previous_version(current_tag)&.main_tag }
94
+
95
+ context 'with no previous local or remote tag' do
96
+ it 'raises an error' do
97
+ expect { subject }.to raise_error(Kuby::Docker::MissingTagError)
98
+ end
99
+ end
100
+
101
+ context 'with an available previous remote tag' do
102
+ let(:previous_tag) { make_ts_tag(time - 5) }
103
+
104
+ before { docker_remote_client.tags << previous_tag }
105
+
106
+ it { is_expected.to eq(previous_tag) }
107
+ end
108
+
109
+ context 'with an available previous local tag' do
110
+ let(:previous_tag) { make_ts_tag(time - 5) }
111
+
112
+ before do
113
+ docker_cli.build(
114
+ dockerfile: nil,
115
+ image_url: docker_image_url,
116
+ tags: [previous_tag]
117
+ )
118
+ end
119
+
120
+ it { is_expected.to eq(previous_tag) }
121
+ end
122
+ end
123
+ end
data/spec/spec_helper.rb CHANGED
@@ -71,24 +71,23 @@ module SpecHelpers
71
71
  end
72
72
  end
73
73
  end
74
-
75
- environment(:development) do
76
- kubernetes do
77
- configure_plugin(:rails_app) do
78
- root File.expand_path(File.join(*%w(. dummy)), __dir__)
79
- end
80
- end
81
- end
82
74
  end
83
75
 
84
76
  docker = definition.environment.docker
85
77
 
86
- docker.instance_variable_set(:@remote_client, docker_remote_client)
87
- docker.instance_variable_set(:@cli, docker_cli)
88
-
89
78
  definition
90
79
  end
91
80
 
81
+ before do
82
+ allow_any_instance_of(Kuby::Docker::TimestampedImage).to(
83
+ receive(:remote_client).and_return(docker_remote_client)
84
+ )
85
+
86
+ allow_any_instance_of(Kuby::Docker::Image).to(
87
+ receive(:docker_cli).and_return(docker_cli)
88
+ )
89
+ end
90
+
92
91
  def make_ts_tag(time)
93
92
  Kuby::Docker::TimestampTag.new(time).to_s
94
93
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kuby-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.14
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cameron Dutro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-27 00:00:00.000000000 Z
11
+ date: 2021-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.5'
33
+ version: '0.6'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.5'
40
+ version: '0.6'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: gli
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -219,25 +219,24 @@ files:
219
219
  - lib/kuby/cli_base.rb
220
220
  - lib/kuby/commands.rb
221
221
  - lib/kuby/definition.rb
222
- - lib/kuby/dev_setup.rb
223
222
  - lib/kuby/docker.rb
224
223
  - lib/kuby/docker/alpine.rb
224
+ - lib/kuby/docker/app_image.rb
225
225
  - lib/kuby/docker/assets_phase.rb
226
226
  - lib/kuby/docker/bundler_phase.rb
227
227
  - lib/kuby/docker/cli.rb
228
228
  - lib/kuby/docker/copy_phase.rb
229
229
  - lib/kuby/docker/credentials.rb
230
230
  - lib/kuby/docker/debian.rb
231
- - lib/kuby/docker/dev_spec.rb
232
231
  - lib/kuby/docker/distro.rb
233
232
  - lib/kuby/docker/docker_uri.rb
234
233
  - lib/kuby/docker/dockerfile.rb
235
234
  - lib/kuby/docker/errors.rb
235
+ - lib/kuby/docker/image.rb
236
236
  - lib/kuby/docker/inline_layer.rb
237
237
  - lib/kuby/docker/layer.rb
238
238
  - lib/kuby/docker/layer_stack.rb
239
239
  - lib/kuby/docker/local_tags.rb
240
- - lib/kuby/docker/metadata.rb
241
240
  - lib/kuby/docker/package_list.rb
242
241
  - lib/kuby/docker/package_phase.rb
243
242
  - lib/kuby/docker/packages.rb
@@ -249,12 +248,13 @@ files:
249
248
  - lib/kuby/docker/remote_tags.rb
250
249
  - lib/kuby/docker/setup_phase.rb
251
250
  - lib/kuby/docker/spec.rb
252
- - lib/kuby/docker/tags.rb
253
251
  - lib/kuby/docker/timestamp_tag.rb
252
+ - lib/kuby/docker/timestamped_image.rb
254
253
  - lib/kuby/docker/webserver_phase.rb
255
254
  - lib/kuby/docker/yarn_phase.rb
256
255
  - lib/kuby/environment.rb
257
256
  - lib/kuby/kubernetes.rb
257
+ - lib/kuby/kubernetes/bare_metal_provider.rb
258
258
  - lib/kuby/kubernetes/deploy_task.rb
259
259
  - lib/kuby/kubernetes/deployer.rb
260
260
  - lib/kuby/kubernetes/docker_config.rb
@@ -273,6 +273,7 @@ files:
273
273
  - lib/kuby/plugins/rails_app.rb
274
274
  - lib/kuby/plugins/rails_app/asset_copy_task.rb
275
275
  - lib/kuby/plugins/rails_app/assets.rb
276
+ - lib/kuby/plugins/rails_app/assets_image.rb
276
277
  - lib/kuby/plugins/rails_app/database.rb
277
278
  - lib/kuby/plugins/rails_app/generators/kuby.rb
278
279
  - lib/kuby/plugins/rails_app/mysql.rb
@@ -281,16 +282,14 @@ files:
281
282
  - lib/kuby/plugins/rails_app/rewrite_db_config.rb
282
283
  - lib/kuby/plugins/rails_app/sqlite.rb
283
284
  - lib/kuby/plugins/rails_app/tasks.rake
284
- - lib/kuby/rails_commands.rb
285
285
  - lib/kuby/railtie.rb
286
286
  - lib/kuby/tasks.rb
287
287
  - lib/kuby/trailing_hash.rb
288
288
  - lib/kuby/version.rb
289
- - spec/docker/metadata_spec.rb
290
289
  - spec/docker/spec_spec.rb
291
290
  - spec/docker/timestamp_tag_spec.rb
291
+ - spec/docker/timestamped_image_spec.rb
292
292
  - spec/dummy/Gemfile
293
- - spec/dummy/Gemfile.lock
294
293
  - spec/dummy/README.md
295
294
  - spec/dummy/Rakefile
296
295
  - spec/dummy/app/assets/config/manifest.js
@@ -334,7 +333,6 @@ files:
334
333
  - spec/dummy/config/initializers/mime_types.rb
335
334
  - spec/dummy/config/initializers/wrap_parameters.rb
336
335
  - spec/dummy/config/locales/en.yml
337
- - spec/dummy/config/master.key
338
336
  - spec/dummy/config/puma.rb
339
337
  - spec/dummy/config/routes.rb
340
338
  - spec/dummy/config/spring.rb
@@ -351,7 +349,6 @@ files:
351
349
  - spec/dummy/test/application_system_test_case.rb
352
350
  - spec/dummy/test/channels/application_cable/connection_test.rb
353
351
  - spec/dummy/test/test_helper.rb
354
- - spec/dummy/tmp/cache/bootsnap-load-path-cache
355
352
  - spec/spec_helper.rb
356
353
  - spec/support/docker/fake_cli.rb
357
354
  - spec/support/docker/remote/fake_client.rb
@@ -374,7 +371,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
374
371
  - !ruby/object:Gem::Version
375
372
  version: '0'
376
373
  requirements: []
377
- rubygems_version: 3.1.4
374
+ rubygems_version: 3.2.22
378
375
  signing_key:
379
376
  specification_version: 4
380
377
  summary: Deploy your Rails app onto Kubernetes the easy way.