kuby-core 0.11.12 → 0.12.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 +31 -0
- data/Gemfile +2 -2
- data/bin/kuby +2 -0
- data/kuby-core.gemspec +2 -2
- data/lib/kuby.rb +3 -20
- data/lib/kuby/basic_logger.rb +1 -1
- data/lib/kuby/cli_base.rb +9 -4
- data/lib/kuby/commands.rb +13 -67
- data/lib/kuby/docker.rb +27 -25
- data/lib/kuby/docker/alpine.rb +2 -1
- data/lib/kuby/docker/app_image.rb +19 -0
- data/lib/kuby/docker/bundler_phase.rb +0 -4
- data/lib/kuby/docker/cli.rb +4 -12
- data/lib/kuby/docker/docker_uri.rb +18 -7
- data/lib/kuby/docker/errors.rb +1 -19
- data/lib/kuby/docker/image.rb +115 -0
- data/lib/kuby/docker/layer.rb +0 -7
- data/lib/kuby/docker/local_tags.rb +9 -10
- data/lib/kuby/docker/package_phase.rb +0 -5
- data/lib/kuby/docker/packages.rb +1 -0
- data/lib/kuby/docker/remote_tags.rb +10 -5
- data/lib/kuby/docker/setup_phase.rb +17 -9
- data/lib/kuby/docker/spec.rb +29 -62
- data/lib/kuby/docker/timestamp_tag.rb +8 -1
- data/lib/kuby/docker/timestamped_image.rb +113 -0
- data/lib/kuby/docker/yarn_phase.rb +2 -2
- data/lib/kuby/environment.rb +1 -10
- data/lib/kuby/kubernetes.rb +1 -0
- data/lib/kuby/kubernetes/bare_metal_provider.rb +53 -0
- data/lib/kuby/kubernetes/deployer.rb +2 -1
- data/lib/kuby/kubernetes/docker_desktop_provider.rb +0 -15
- data/lib/kuby/kubernetes/spec.rb +21 -17
- data/lib/kuby/plugin.rb +2 -2
- data/lib/kuby/plugins/rails_app.rb +1 -0
- data/lib/kuby/plugins/rails_app/assets.rb +60 -70
- data/lib/kuby/plugins/rails_app/assets_image.rb +55 -0
- data/lib/kuby/plugins/rails_app/plugin.rb +54 -213
- data/lib/kuby/tasks.rb +30 -69
- data/lib/kuby/version.rb +1 -1
- data/spec/docker/spec_spec.rb +9 -118
- data/spec/docker/timestamped_image_spec.rb +123 -0
- data/spec/spec_helper.rb +10 -11
- metadata +10 -10
- data/lib/kuby/dev_setup.rb +0 -346
- data/lib/kuby/docker/dev_spec.rb +0 -202
- data/lib/kuby/docker/metadata.rb +0 -85
- data/lib/kuby/docker/tags.rb +0 -92
- data/lib/kuby/rails_commands.rb +0 -84
- data/spec/docker/metadata_spec.rb +0 -73
data/lib/kuby/version.rb
CHANGED
data/spec/docker/spec_spec.rb
CHANGED
@@ -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.
|
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.
|
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.
|
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.
|
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.
|
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")
|
@@ -111,7 +110,7 @@ describe Kuby::Docker::Spec do
|
|
111
110
|
end
|
112
111
|
|
113
112
|
describe '#package' do
|
114
|
-
subject { spec.
|
113
|
+
subject { spec.image.dockerfile.to_s }
|
115
114
|
|
116
115
|
it 'installs the given package' do
|
117
116
|
# configured in spec_helper.rb
|
@@ -122,7 +121,7 @@ describe Kuby::Docker::Spec do
|
|
122
121
|
end
|
123
122
|
|
124
123
|
describe '#files' do
|
125
|
-
subject { spec.
|
124
|
+
subject { spec.image.dockerfile.to_s }
|
126
125
|
|
127
126
|
it 'copies the current directory contents by default' do
|
128
127
|
expect(subject).to include("COPY ./ .\n")
|
@@ -142,7 +141,7 @@ describe Kuby::Docker::Spec do
|
|
142
141
|
Kuby::Docker::WebserverPhase::DEFAULT_PORT
|
143
142
|
end
|
144
143
|
|
145
|
-
subject { spec.
|
144
|
+
subject { spec.image.dockerfile.to_s }
|
146
145
|
|
147
146
|
it 'exposes the default port' do
|
148
147
|
expect(subject).to include("EXPOSE #{default_port}\n")
|
@@ -157,116 +156,8 @@ describe Kuby::Docker::Spec do
|
|
157
156
|
end
|
158
157
|
end
|
159
158
|
|
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
159
|
describe '#insert' do
|
269
|
-
subject { spec.
|
160
|
+
subject { spec.image.dockerfile.to_s }
|
270
161
|
|
271
162
|
context 'with a custom class-based build phase' do
|
272
163
|
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.
|
4
|
+
version: 0.12.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:
|
11
|
+
date: 2021-06-07 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.
|
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.
|
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,14 +282,13 @@ 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
293
|
- spec/dummy/Gemfile.lock
|
294
294
|
- spec/dummy/README.md
|