kuby-core 0.9.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -0
- data/Gemfile +1 -0
- data/README.md +4 -2
- data/kuby-core.gemspec +2 -1
- data/lib/kuby-core.rb +1 -0
- data/lib/kuby.rb +14 -0
- data/lib/kuby/basic_logger.rb +1 -0
- data/lib/kuby/cli_base.rb +53 -4
- data/lib/kuby/commands.rb +29 -4
- data/lib/kuby/definition.rb +1 -0
- data/lib/kuby/dev_setup.rb +1 -0
- data/lib/kuby/docker.rb +3 -0
- data/lib/kuby/docker/alpine.rb +16 -12
- data/lib/kuby/docker/assets_phase.rb +5 -0
- data/lib/kuby/docker/bundler_phase.rb +36 -2
- data/lib/kuby/docker/cli.rb +47 -2
- data/lib/kuby/docker/copy_phase.rb +11 -3
- data/lib/kuby/docker/credentials.rb +1 -0
- data/lib/kuby/docker/debian.rb +14 -10
- data/lib/kuby/docker/dev_spec.rb +82 -18
- data/lib/kuby/docker/distro.rb +43 -0
- data/lib/kuby/docker/dockerfile.rb +67 -19
- data/lib/kuby/docker/errors.rb +9 -0
- data/lib/kuby/docker/inline_layer.rb +7 -0
- data/lib/kuby/docker/layer.rb +11 -0
- data/lib/kuby/docker/layer_stack.rb +43 -6
- data/lib/kuby/docker/local_tags.rb +23 -2
- data/lib/kuby/docker/metadata.rb +35 -7
- data/lib/kuby/docker/package_list.rb +22 -3
- data/lib/kuby/docker/package_phase.rb +25 -5
- data/lib/kuby/docker/packages.rb +1 -0
- data/lib/kuby/docker/packages/managed_package.rb +20 -2
- data/lib/kuby/docker/packages/nodejs.rb +8 -0
- data/lib/kuby/docker/packages/package.rb +15 -1
- data/lib/kuby/docker/packages/simple_managed_package.rb +10 -1
- data/lib/kuby/docker/packages/yarn.rb +14 -0
- data/lib/kuby/docker/remote_tags.rb +21 -2
- data/lib/kuby/docker/setup_phase.rb +35 -4
- data/lib/kuby/docker/spec.rb +89 -13
- data/lib/kuby/docker/tags.rb +37 -2
- data/lib/kuby/docker/timestamp_tag.rb +14 -2
- data/lib/kuby/docker/webserver_phase.rb +41 -6
- data/lib/kuby/docker/yarn_phase.rb +5 -0
- data/lib/kuby/environment.rb +4 -0
- data/lib/kuby/kubernetes.rb +1 -0
- data/lib/kuby/kubernetes/deploy_task.rb +1 -0
- data/lib/kuby/kubernetes/deployer.rb +8 -4
- data/lib/kuby/kubernetes/docker_config.rb +1 -0
- data/lib/kuby/kubernetes/docker_desktop_provider.rb +1 -0
- data/lib/kuby/kubernetes/errors.rb +1 -0
- data/lib/kuby/kubernetes/manifest.rb +1 -0
- data/lib/kuby/kubernetes/provider.rb +1 -0
- data/lib/kuby/kubernetes/registry_secret.rb +1 -0
- data/lib/kuby/kubernetes/spec.rb +1 -0
- data/lib/kuby/middleware.rb +1 -0
- data/lib/kuby/middleware/health_check.rb +1 -0
- data/lib/kuby/plugin.rb +1 -0
- data/lib/kuby/plugin_registry.rb +1 -0
- data/lib/kuby/plugins.rb +1 -0
- data/lib/kuby/plugins/nginx_ingress.rb +1 -0
- data/lib/kuby/plugins/rails_app.rb +1 -0
- data/lib/kuby/plugins/rails_app/asset_copy_task.rb +1 -0
- data/lib/kuby/plugins/rails_app/assets.rb +1 -0
- data/lib/kuby/plugins/rails_app/database.rb +10 -9
- data/lib/kuby/plugins/rails_app/generators/kuby.rb +45 -32
- data/lib/kuby/plugins/rails_app/mysql.rb +1 -3
- data/lib/kuby/plugins/rails_app/plugin.rb +13 -4
- data/lib/kuby/plugins/rails_app/postgres.rb +1 -0
- data/lib/kuby/plugins/rails_app/rewrite_db_config.rb +1 -0
- data/lib/kuby/plugins/rails_app/sqlite.rb +1 -0
- data/lib/kuby/rails_commands.rb +14 -19
- data/lib/kuby/railtie.rb +1 -0
- data/lib/kuby/tasks.rb +3 -1
- data/lib/kuby/trailing_hash.rb +5 -3
- data/lib/kuby/version.rb +3 -1
- data/spec/docker/metadata_spec.rb +1 -0
- data/spec/docker/spec_spec.rb +37 -0
- data/spec/docker/timestamp_tag_spec.rb +1 -0
- data/spec/dummy/app/channels/application_cable/channel.rb +1 -0
- data/spec/dummy/app/channels/application_cable/connection.rb +1 -0
- data/spec/dummy/app/controllers/application_controller.rb +1 -0
- data/spec/dummy/app/helpers/application_helper.rb +1 -0
- data/spec/dummy/app/jobs/application_job.rb +1 -0
- data/spec/dummy/app/mailers/application_mailer.rb +1 -0
- data/spec/dummy/app/models/application_record.rb +1 -0
- data/spec/dummy/config/application.rb +1 -0
- data/spec/dummy/config/boot.rb +1 -0
- data/spec/dummy/config/environment.rb +1 -0
- data/spec/dummy/config/environments/development.rb +1 -0
- data/spec/dummy/config/environments/production.rb +1 -0
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/dummy/config/initializers/application_controller_renderer.rb +1 -0
- data/spec/dummy/config/initializers/assets.rb +1 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -0
- data/spec/dummy/config/initializers/content_security_policy.rb +1 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +1 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +1 -0
- data/spec/dummy/config/initializers/inflections.rb +1 -0
- data/spec/dummy/config/initializers/mime_types.rb +1 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +1 -0
- data/spec/dummy/config/puma.rb +1 -0
- data/spec/dummy/config/routes.rb +1 -0
- data/spec/dummy/config/spring.rb +1 -0
- data/spec/dummy/db/seeds.rb +1 -0
- data/spec/dummy/test/application_system_test_case.rb +1 -0
- data/spec/dummy/test/channels/application_cable/connection_test.rb +1 -0
- data/spec/dummy/test/test_helper.rb +1 -0
- data/spec/spec_helper.rb +10 -0
- data/spec/support/docker/fake_cli.rb +1 -0
- data/spec/support/docker/remote/fake_client.rb +1 -0
- data/spec/trailing_hash_spec.rb +2 -0
- metadata +20 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8664691d15dc7ba054a6986e9b62ef0ad3fc1ff7aa9e80a12595bee3029b7814
|
4
|
+
data.tar.gz: 1a29a74242aa420dbf1c8c50804f85b24716d479f226bd8b411fdb5794031d41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3fd0f6fc04d728e7122287889c6013a3578b4eb4a7bc0ae8903232bbd42b99265567271a6e171ec26838259e193f042558df583c2f66ac7d90454aa2f53943ef
|
7
|
+
data.tar.gz: e3480ec344cd46ca020cc7f4615028490f721ed21887b1c45efcb0d17f4d2e1739741946768ed52bab8a1fa75f417ff061a5c970a331fa003520044e0cfca508
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,35 @@
|
|
1
|
+
## 0.11.1
|
2
|
+
* Use integers for ports instead of strings to appease Kubernetes.
|
3
|
+
|
4
|
+
## 0.11.0
|
5
|
+
* Defer evaluation of database config until after Kuby has been configured.
|
6
|
+
- The issue that prompted this was that the `database` block was being evaluated before the Rails root had been set via `root`. Kuby couldn't find database.yml in a non-standard location and blew up with an error.
|
7
|
+
* Fix tests broken in 0.10.1.
|
8
|
+
* Set up Travis CI builds.
|
9
|
+
* Add a few tests for custom build phases.
|
10
|
+
* Add the `Environment#configured?` method that will return `true` if Kuby has been configured and `false` if configuration hasn't happened or is in progress.
|
11
|
+
* Add sorbet typedefs for some classes.
|
12
|
+
* Fix issue in Rails generator (hadn't been updated with new `environment` block).
|
13
|
+
* Add kuby-core.rb so Bundler setup works for Kuby without having to add a Rails initializer.
|
14
|
+
|
15
|
+
## 0.10.1
|
16
|
+
* Fix bug causing some `rails` and `rake` commands to not be executed.
|
17
|
+
* Fix issue restricting Docker CLI output.
|
18
|
+
|
19
|
+
## 0.10.0
|
20
|
+
* Set default database user and password in dev environment.
|
21
|
+
* Add ability to run rake tasks in dev environment.
|
22
|
+
* Disallow running rails and rake tasks in non-dev environments.
|
23
|
+
* Don't run database config through ERB.
|
24
|
+
- Rails env often isn't loaded, so ERB rendering can blow up with `NoMethodError`s, etc.
|
25
|
+
- All we really need to know is what database engine to stand up.
|
26
|
+
* Require database user/password to be added manually to Kuby config.
|
27
|
+
|
28
|
+
## 0.9.1
|
29
|
+
* Run dev setup when asked to.
|
30
|
+
- Bug caused dev setup to be skipped even when requested.
|
31
|
+
* Deployer should be tolerant of missing namespace.
|
32
|
+
|
1
33
|
## 0.9.0
|
2
34
|
* Add support for developing your app using a local Kubernetes cluster.
|
3
35
|
- Includes a default `:development` Kuby environment.
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
## Kuby
|
2
2
|
|
3
|
+
[![Build Status](https://travis-ci.com/getkuby/kuby-core.svg?branch=master)](https://travis-ci.com/getkuby/kuby-core)
|
4
|
+
|
3
5
|
Deploy your Rails app the easy way.
|
4
6
|
|
5
7
|
## What is Kuby?
|
@@ -20,11 +22,11 @@ Kuby embraces the same convention-over-configuration approach that Rails does. I
|
|
20
22
|
|
21
23
|
## Getting Started
|
22
24
|
|
23
|
-
See the [Quick Start Guide](https://
|
25
|
+
See the [Quick Start Guide](https://getkuby.io/docs)
|
24
26
|
|
25
27
|
## More Info
|
26
28
|
|
27
|
-
|
29
|
+
Check out [getkuby.io](https://getkuby.io).
|
28
30
|
|
29
31
|
## Running Tests
|
30
32
|
|
data/kuby-core.gemspec
CHANGED
@@ -20,11 +20,12 @@ Gem::Specification.new do |s|
|
|
20
20
|
# See: https://github.com/Shopify/krane/blob/master/CHANGELOG.md#114
|
21
21
|
s.add_dependency 'krane', '>= 1.1.4', '< 2.0'
|
22
22
|
s.add_dependency 'kuby-cert-manager', '>= 0.3'
|
23
|
-
s.add_dependency 'kube-dsl', '~> 0.
|
23
|
+
s.add_dependency 'kube-dsl', '~> 0.4'
|
24
24
|
s.add_dependency 'kuby-kube-db', '>= 0.6'
|
25
25
|
s.add_dependency 'kubernetes-cli', '~> 0.3'
|
26
26
|
s.add_dependency 'railties', '>= 5.1'
|
27
27
|
s.add_dependency 'rouge', '~> 3.0'
|
28
|
+
s.add_dependency 'sorbet-runtime-stub', '~> 0.2'
|
28
29
|
|
29
30
|
s.add_development_dependency 'rspec'
|
30
31
|
|
data/lib/kuby-core.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'kuby'
|
data/lib/kuby.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# typed: false
|
2
|
+
|
3
|
+
require 'sorbet-runtime-stub'
|
1
4
|
require 'kuby/railtie'
|
2
5
|
|
3
6
|
begin
|
@@ -23,6 +26,8 @@ module Kuby
|
|
23
26
|
autoload :TrailingHash, 'kuby/trailing_hash'
|
24
27
|
|
25
28
|
DEFAULT_ENV = 'development'.freeze
|
29
|
+
DEFAULT_DB_USER = 'root'.freeze
|
30
|
+
DEFAULT_DB_PASSWORD = 'password'.freeze
|
26
31
|
|
27
32
|
class UndefinedEnvironmentError < StandardError; end
|
28
33
|
class MissingConfigError < StandardError; end
|
@@ -52,6 +57,11 @@ module Kuby
|
|
52
57
|
kubernetes do
|
53
58
|
add_plugin(:rails_app) do
|
54
59
|
tls_enabled false
|
60
|
+
|
61
|
+
database do
|
62
|
+
user(DEFAULT_DB_USER) if respond_to?(:user)
|
63
|
+
password(DEFAULT_DB_PASSWORD) if respond_to?(:password)
|
64
|
+
end
|
55
65
|
end
|
56
66
|
|
57
67
|
provider :docker_desktop
|
@@ -62,6 +72,10 @@ module Kuby
|
|
62
72
|
env.kubernetes.after_configuration
|
63
73
|
end
|
64
74
|
|
75
|
+
@definition.environments.each do |_, env|
|
76
|
+
env.configured = true
|
77
|
+
end
|
78
|
+
|
65
79
|
@definition
|
66
80
|
end
|
67
81
|
|
data/lib/kuby/basic_logger.rb
CHANGED
data/lib/kuby/cli_base.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: true
|
1
2
|
require 'open3'
|
2
3
|
require 'thread'
|
3
4
|
|
@@ -81,18 +82,42 @@ module Kuby
|
|
81
82
|
end
|
82
83
|
|
83
84
|
def systemm(cmd)
|
85
|
+
if stdout == STDOUT && stderr == STDERR
|
86
|
+
systemm_default(cmd)
|
87
|
+
else
|
88
|
+
systemm_open3(cmd)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def systemm_default(cmd)
|
93
|
+
run_before_callbacks(cmd)
|
94
|
+
cmd_s = cmd.join(' ')
|
95
|
+
system(cmd_s).tap do
|
96
|
+
self.last_status = $?
|
97
|
+
run_after_callbacks(cmd)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def systemm_open3(cmd)
|
84
102
|
run_before_callbacks(cmd)
|
85
103
|
cmd_s = cmd.join(' ')
|
86
104
|
|
87
105
|
Open3.popen3(cmd_s) do |p_stdin, p_stdout, p_stderr, wait_thread|
|
88
106
|
Thread.new(stdout) do |t_stdout|
|
89
|
-
|
107
|
+
begin
|
108
|
+
p_stdout.each { |line| t_stdout.puts(line) }
|
109
|
+
rescue IOError
|
110
|
+
end
|
90
111
|
end
|
91
112
|
|
92
113
|
Thread.new(stderr) do |t_stderr|
|
93
|
-
|
114
|
+
begin
|
115
|
+
p_stderr.each { |line| t_stderr.puts(line) }
|
116
|
+
rescue IOError
|
117
|
+
end
|
94
118
|
end
|
95
119
|
|
120
|
+
p_stdin.close
|
96
121
|
self.last_status = wait_thread.value
|
97
122
|
run_after_callbacks(cmd)
|
98
123
|
wait_thread.join
|
@@ -100,19 +125,43 @@ module Kuby
|
|
100
125
|
end
|
101
126
|
|
102
127
|
def backticks(cmd)
|
128
|
+
if stdout == STDOUT && stderr == STDERR
|
129
|
+
backticks_default(cmd)
|
130
|
+
else
|
131
|
+
backticks_open3(cmd)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def backticks_default(cmd)
|
136
|
+
run_before_callbacks(cmd)
|
137
|
+
cmd_s = cmd.join(' ')
|
138
|
+
`#{cmd_s}`.tap do
|
139
|
+
self.last_status = $?
|
140
|
+
run_after_callbacks(cmd)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def backticks_open3(cmd)
|
103
145
|
run_before_callbacks(cmd)
|
104
146
|
cmd_s = cmd.join(' ')
|
105
147
|
result = StringIO.new
|
106
148
|
|
107
149
|
Open3.popen3(cmd_s) do |p_stdin, p_stdout, p_stderr, wait_thread|
|
108
150
|
Thread.new do
|
109
|
-
|
151
|
+
begin
|
152
|
+
p_stdout.each { |line| result.puts(line) }
|
153
|
+
rescue IOError
|
154
|
+
end
|
110
155
|
end
|
111
156
|
|
112
157
|
Thread.new(stderr) do |t_stderr|
|
113
|
-
|
158
|
+
begin
|
159
|
+
p_stderr.each { |line| t_stderr.puts(line) }
|
160
|
+
rescue IOError
|
161
|
+
end
|
114
162
|
end
|
115
163
|
|
164
|
+
p_stdin.close
|
116
165
|
self.last_status = wait_thread.value
|
117
166
|
run_after_callbacks(cmd)
|
118
167
|
wait_thread.join
|
data/lib/kuby/commands.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# typed: true
|
1
2
|
require 'kuby/version'
|
2
3
|
require 'gli'
|
3
4
|
|
@@ -17,9 +18,9 @@ module Kuby
|
|
17
18
|
# is no singleton class version of #prepend in the Ruby language).
|
18
19
|
singleton_class.send(:prepend, Module.new do
|
19
20
|
def run(args)
|
20
|
-
if idx = args.index('rails')
|
21
|
-
@rails_options = args[
|
22
|
-
super(args[0..
|
21
|
+
if idx = args.index('rails') || idx = args.index('rake')
|
22
|
+
@rails_options = args[idx..-1]
|
23
|
+
super(args[0..idx])
|
23
24
|
else
|
24
25
|
super
|
25
26
|
end
|
@@ -27,7 +28,13 @@ module Kuby
|
|
27
28
|
end)
|
28
29
|
|
29
30
|
def self.tasks
|
30
|
-
Kuby::Tasks.new(Kuby.
|
31
|
+
Kuby::Tasks.new(Kuby.environment)
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.must_be_dev_env!
|
35
|
+
unless Kuby.environment.development?
|
36
|
+
fail "Command not supported in the '#{Kuby.environment.name}' environment"
|
37
|
+
end
|
31
38
|
end
|
32
39
|
|
33
40
|
program_desc 'Kuby command-line interface. Kuby is a convention '\
|
@@ -57,9 +64,16 @@ module Kuby
|
|
57
64
|
# commands are handled by the RailsCommands class.
|
58
65
|
desc 'Runs a Rails command.'
|
59
66
|
command :rails do |rc|
|
67
|
+
rc.action do |global_options, options, args|
|
68
|
+
must_be_dev_env!
|
69
|
+
exit 1 unless tasks.dev_deployment_ok
|
70
|
+
Kuby::RailsCommands.run(@rails_options)
|
71
|
+
end
|
72
|
+
|
60
73
|
rc.desc 'Runs the rails server (run `rails server --help` for options)'
|
61
74
|
rc.command [:server, :s] do |c|
|
62
75
|
c.action do |global_options, options, args|
|
76
|
+
must_be_dev_env!
|
63
77
|
exit 1 unless tasks.dev_deployment_ok
|
64
78
|
Kuby::RailsCommands.run(@rails_options)
|
65
79
|
end
|
@@ -68,6 +82,7 @@ module Kuby
|
|
68
82
|
rc.desc 'Runs a script in the Rails environment (run `rails runner --help` for options)'
|
69
83
|
rc.command [:runner, :r] do |c|
|
70
84
|
c.action do |global_options, options, args|
|
85
|
+
must_be_dev_env!
|
71
86
|
exit 1 unless tasks.dev_deployment_ok
|
72
87
|
Kuby::RailsCommands.run(@rails_options)
|
73
88
|
end
|
@@ -77,12 +92,22 @@ module Kuby
|
|
77
92
|
'(run `rails console --help` for options)'
|
78
93
|
rc.command [:console, :c] do |c|
|
79
94
|
c.action do |global_options, options, args|
|
95
|
+
must_be_dev_env!
|
80
96
|
exit 1 unless tasks.dev_deployment_ok
|
81
97
|
Kuby::RailsCommands.run(@rails_options)
|
82
98
|
end
|
83
99
|
end
|
84
100
|
end
|
85
101
|
|
102
|
+
desc 'Runs a rake task.'
|
103
|
+
command :rake do |rc|
|
104
|
+
rc.action do |global_options, options, args|
|
105
|
+
must_be_dev_env!
|
106
|
+
exit 1 unless tasks.dev_deployment_ok
|
107
|
+
Kuby::RailsCommands.run(@rails_options)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
86
111
|
desc 'Builds the Docker image.'
|
87
112
|
command :build do |c|
|
88
113
|
c.action do |global_options, options, args|
|
data/lib/kuby/definition.rb
CHANGED
data/lib/kuby/dev_setup.rb
CHANGED
data/lib/kuby/docker.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
1
3
|
require 'kuby/docker/errors'
|
2
4
|
|
3
5
|
module Kuby
|
@@ -10,6 +12,7 @@ module Kuby
|
|
10
12
|
autoload :Credentials, 'kuby/docker/credentials'
|
11
13
|
autoload :Debian, 'kuby/docker/debian'
|
12
14
|
autoload :DevSpec, 'kuby/docker/dev_spec'
|
15
|
+
autoload :Distro, 'kuby/docker/distro'
|
13
16
|
autoload :Dockerfile, 'kuby/docker/dockerfile'
|
14
17
|
autoload :InlineLayer, 'kuby/docker/inline_layer'
|
15
18
|
autoload :Layer, 'kuby/docker/layer'
|
data/lib/kuby/docker/alpine.rb
CHANGED
@@ -1,40 +1,43 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
1
3
|
module Kuby
|
2
4
|
module Docker
|
3
|
-
class Alpine
|
4
|
-
SHELL_EXE = '/bin/sh'.freeze
|
5
|
+
class Alpine < Distro
|
6
|
+
SHELL_EXE = T.let('/bin/sh'.freeze, String)
|
5
7
|
|
6
|
-
DEFAULT_PACKAGES = [
|
7
|
-
[:ca_certificates],
|
8
|
+
DEFAULT_PACKAGES = T.let([
|
9
|
+
[:ca_certificates, nil],
|
8
10
|
[:nodejs, '12.14.1'],
|
9
11
|
[:yarn, '1.21.1'],
|
10
|
-
[:c_toolchain],
|
11
|
-
[:tzdata]
|
12
|
-
].freeze
|
12
|
+
[:c_toolchain, nil],
|
13
|
+
[:tzdata, nil]
|
14
|
+
].freeze, T::Array[[Symbol, T.nilable(String)]])
|
13
15
|
|
16
|
+
sig { returns(Layer) }
|
14
17
|
attr_reader :phase
|
15
18
|
|
16
|
-
|
17
|
-
@phase = phase
|
18
|
-
end
|
19
|
-
|
19
|
+
sig { override.params(packages: T::Array[Distro::PackageImpl], into: Dockerfile).void }
|
20
20
|
def install(packages, into:)
|
21
21
|
dockerfile = into
|
22
22
|
install_managed(packages, dockerfile)
|
23
23
|
install_unmanaged(packages, dockerfile)
|
24
24
|
end
|
25
25
|
|
26
|
+
sig { override.returns(T::Array[[Symbol, T.nilable(String)]]) }
|
26
27
|
def default_packages
|
27
28
|
DEFAULT_PACKAGES
|
28
29
|
end
|
29
30
|
|
31
|
+
sig { override.returns(String) }
|
30
32
|
def shell_exe
|
31
33
|
SHELL_EXE
|
32
34
|
end
|
33
35
|
|
34
36
|
private
|
35
37
|
|
38
|
+
sig { params(packages: T::Array[Distro::PackageImpl], dockerfile: Dockerfile).void }
|
36
39
|
def install_managed(packages, dockerfile)
|
37
|
-
pkgs = packages.select(&:managed?)
|
40
|
+
pkgs = T.cast(packages.select(&:managed?), T::Array[Distro::ManagedPackageImpl])
|
38
41
|
|
39
42
|
unless pkgs.empty?
|
40
43
|
package_names = pkgs.map { |pkg| pkg.package_name_for(:alpine) }
|
@@ -44,6 +47,7 @@ module Kuby
|
|
44
47
|
end
|
45
48
|
end
|
46
49
|
|
50
|
+
sig { params(packages: T::Array[Distro::PackageImpl], dockerfile: Dockerfile).void }
|
47
51
|
def install_unmanaged(packages, dockerfile)
|
48
52
|
packages
|
49
53
|
.reject(&:managed?)
|
@@ -1,12 +1,44 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
1
3
|
require 'pathname'
|
2
4
|
|
3
5
|
module Kuby
|
4
6
|
module Docker
|
5
7
|
class BundlerPhase < Layer
|
6
|
-
|
8
|
+
extend T::Sig
|
9
|
+
|
10
|
+
DEFAULT_WITHOUT = T.let(
|
11
|
+
['development', 'test', 'deploy'].freeze, T::Array[String]
|
12
|
+
)
|
13
|
+
|
14
|
+
sig { returns(T.nilable(String)) }
|
15
|
+
attr_reader :version
|
16
|
+
|
17
|
+
sig { params(version: String).void }
|
18
|
+
attr_writer :version
|
19
|
+
|
20
|
+
sig { returns(T.nilable(String)) }
|
21
|
+
attr_reader :gemfile
|
7
22
|
|
8
|
-
|
23
|
+
sig { params(gemfile: String).void }
|
24
|
+
attr_writer :gemfile
|
25
|
+
|
26
|
+
sig { returns(T.nilable(T::Array[String])) }
|
27
|
+
attr_reader :without
|
28
|
+
|
29
|
+
sig { params(without: T::Array[String]).void }
|
30
|
+
attr_writer :without
|
31
|
+
|
32
|
+
sig { params(environment: Environment).void }
|
33
|
+
def initialize(environment)
|
34
|
+
super
|
35
|
+
|
36
|
+
@version = T.let(@version, T.nilable(String))
|
37
|
+
@gemfile = T.let(@gemfile, T.nilable(String))
|
38
|
+
@without = T.let(@without, T.nilable(T::Array[String]))
|
39
|
+
end
|
9
40
|
|
41
|
+
sig { override.params(dockerfile: Dockerfile).void }
|
10
42
|
def apply_to(dockerfile)
|
11
43
|
gf = gemfile || default_gemfile
|
12
44
|
lf = "#{gf}.lock"
|
@@ -41,10 +73,12 @@ module Kuby
|
|
41
73
|
|
42
74
|
private
|
43
75
|
|
76
|
+
sig { returns(String) }
|
44
77
|
def default_version
|
45
78
|
Bundler::VERSION
|
46
79
|
end
|
47
80
|
|
81
|
+
sig { returns(String) }
|
48
82
|
def default_gemfile
|
49
83
|
Bundler
|
50
84
|
.definition
|