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.
Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -0
  3. data/Gemfile +1 -0
  4. data/README.md +4 -2
  5. data/kuby-core.gemspec +2 -1
  6. data/lib/kuby-core.rb +1 -0
  7. data/lib/kuby.rb +14 -0
  8. data/lib/kuby/basic_logger.rb +1 -0
  9. data/lib/kuby/cli_base.rb +53 -4
  10. data/lib/kuby/commands.rb +29 -4
  11. data/lib/kuby/definition.rb +1 -0
  12. data/lib/kuby/dev_setup.rb +1 -0
  13. data/lib/kuby/docker.rb +3 -0
  14. data/lib/kuby/docker/alpine.rb +16 -12
  15. data/lib/kuby/docker/assets_phase.rb +5 -0
  16. data/lib/kuby/docker/bundler_phase.rb +36 -2
  17. data/lib/kuby/docker/cli.rb +47 -2
  18. data/lib/kuby/docker/copy_phase.rb +11 -3
  19. data/lib/kuby/docker/credentials.rb +1 -0
  20. data/lib/kuby/docker/debian.rb +14 -10
  21. data/lib/kuby/docker/dev_spec.rb +82 -18
  22. data/lib/kuby/docker/distro.rb +43 -0
  23. data/lib/kuby/docker/dockerfile.rb +67 -19
  24. data/lib/kuby/docker/errors.rb +9 -0
  25. data/lib/kuby/docker/inline_layer.rb +7 -0
  26. data/lib/kuby/docker/layer.rb +11 -0
  27. data/lib/kuby/docker/layer_stack.rb +43 -6
  28. data/lib/kuby/docker/local_tags.rb +23 -2
  29. data/lib/kuby/docker/metadata.rb +35 -7
  30. data/lib/kuby/docker/package_list.rb +22 -3
  31. data/lib/kuby/docker/package_phase.rb +25 -5
  32. data/lib/kuby/docker/packages.rb +1 -0
  33. data/lib/kuby/docker/packages/managed_package.rb +20 -2
  34. data/lib/kuby/docker/packages/nodejs.rb +8 -0
  35. data/lib/kuby/docker/packages/package.rb +15 -1
  36. data/lib/kuby/docker/packages/simple_managed_package.rb +10 -1
  37. data/lib/kuby/docker/packages/yarn.rb +14 -0
  38. data/lib/kuby/docker/remote_tags.rb +21 -2
  39. data/lib/kuby/docker/setup_phase.rb +35 -4
  40. data/lib/kuby/docker/spec.rb +89 -13
  41. data/lib/kuby/docker/tags.rb +37 -2
  42. data/lib/kuby/docker/timestamp_tag.rb +14 -2
  43. data/lib/kuby/docker/webserver_phase.rb +41 -6
  44. data/lib/kuby/docker/yarn_phase.rb +5 -0
  45. data/lib/kuby/environment.rb +4 -0
  46. data/lib/kuby/kubernetes.rb +1 -0
  47. data/lib/kuby/kubernetes/deploy_task.rb +1 -0
  48. data/lib/kuby/kubernetes/deployer.rb +8 -4
  49. data/lib/kuby/kubernetes/docker_config.rb +1 -0
  50. data/lib/kuby/kubernetes/docker_desktop_provider.rb +1 -0
  51. data/lib/kuby/kubernetes/errors.rb +1 -0
  52. data/lib/kuby/kubernetes/manifest.rb +1 -0
  53. data/lib/kuby/kubernetes/provider.rb +1 -0
  54. data/lib/kuby/kubernetes/registry_secret.rb +1 -0
  55. data/lib/kuby/kubernetes/spec.rb +1 -0
  56. data/lib/kuby/middleware.rb +1 -0
  57. data/lib/kuby/middleware/health_check.rb +1 -0
  58. data/lib/kuby/plugin.rb +1 -0
  59. data/lib/kuby/plugin_registry.rb +1 -0
  60. data/lib/kuby/plugins.rb +1 -0
  61. data/lib/kuby/plugins/nginx_ingress.rb +1 -0
  62. data/lib/kuby/plugins/rails_app.rb +1 -0
  63. data/lib/kuby/plugins/rails_app/asset_copy_task.rb +1 -0
  64. data/lib/kuby/plugins/rails_app/assets.rb +1 -0
  65. data/lib/kuby/plugins/rails_app/database.rb +10 -9
  66. data/lib/kuby/plugins/rails_app/generators/kuby.rb +45 -32
  67. data/lib/kuby/plugins/rails_app/mysql.rb +1 -3
  68. data/lib/kuby/plugins/rails_app/plugin.rb +13 -4
  69. data/lib/kuby/plugins/rails_app/postgres.rb +1 -0
  70. data/lib/kuby/plugins/rails_app/rewrite_db_config.rb +1 -0
  71. data/lib/kuby/plugins/rails_app/sqlite.rb +1 -0
  72. data/lib/kuby/rails_commands.rb +14 -19
  73. data/lib/kuby/railtie.rb +1 -0
  74. data/lib/kuby/tasks.rb +3 -1
  75. data/lib/kuby/trailing_hash.rb +5 -3
  76. data/lib/kuby/version.rb +3 -1
  77. data/spec/docker/metadata_spec.rb +1 -0
  78. data/spec/docker/spec_spec.rb +37 -0
  79. data/spec/docker/timestamp_tag_spec.rb +1 -0
  80. data/spec/dummy/app/channels/application_cable/channel.rb +1 -0
  81. data/spec/dummy/app/channels/application_cable/connection.rb +1 -0
  82. data/spec/dummy/app/controllers/application_controller.rb +1 -0
  83. data/spec/dummy/app/helpers/application_helper.rb +1 -0
  84. data/spec/dummy/app/jobs/application_job.rb +1 -0
  85. data/spec/dummy/app/mailers/application_mailer.rb +1 -0
  86. data/spec/dummy/app/models/application_record.rb +1 -0
  87. data/spec/dummy/config/application.rb +1 -0
  88. data/spec/dummy/config/boot.rb +1 -0
  89. data/spec/dummy/config/environment.rb +1 -0
  90. data/spec/dummy/config/environments/development.rb +1 -0
  91. data/spec/dummy/config/environments/production.rb +1 -0
  92. data/spec/dummy/config/environments/test.rb +1 -0
  93. data/spec/dummy/config/initializers/application_controller_renderer.rb +1 -0
  94. data/spec/dummy/config/initializers/assets.rb +1 -0
  95. data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -0
  96. data/spec/dummy/config/initializers/content_security_policy.rb +1 -0
  97. data/spec/dummy/config/initializers/cookies_serializer.rb +1 -0
  98. data/spec/dummy/config/initializers/filter_parameter_logging.rb +1 -0
  99. data/spec/dummy/config/initializers/inflections.rb +1 -0
  100. data/spec/dummy/config/initializers/mime_types.rb +1 -0
  101. data/spec/dummy/config/initializers/wrap_parameters.rb +1 -0
  102. data/spec/dummy/config/puma.rb +1 -0
  103. data/spec/dummy/config/routes.rb +1 -0
  104. data/spec/dummy/config/spring.rb +1 -0
  105. data/spec/dummy/db/seeds.rb +1 -0
  106. data/spec/dummy/test/application_system_test_case.rb +1 -0
  107. data/spec/dummy/test/channels/application_cable/connection_test.rb +1 -0
  108. data/spec/dummy/test/test_helper.rb +1 -0
  109. data/spec/spec_helper.rb +10 -0
  110. data/spec/support/docker/fake_cli.rb +1 -0
  111. data/spec/support/docker/remote/fake_client.rb +1 -0
  112. data/spec/trailing_hash_spec.rb +2 -0
  113. metadata +20 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f9367e316dfab7a0210bea18ab630b65a5996ce0622960f3be2a76f8ec4482c1
4
- data.tar.gz: d48777e79f11eab678545a2d398d3f60463e7d1209e6d15987c3f3665d571b82
3
+ metadata.gz: 8664691d15dc7ba054a6986e9b62ef0ad3fc1ff7aa9e80a12595bee3029b7814
4
+ data.tar.gz: 1a29a74242aa420dbf1c8c50804f85b24716d479f226bd8b411fdb5794031d41
5
5
  SHA512:
6
- metadata.gz: cbfd215f8b4a7cb2b1a53bc8de8298e4dd85f487f0245da82bd19a390d55500c20e97e155a07fafa09284683ee9c220bb4cdd89194c3e5cb4c6e3c055fbcce74
7
- data.tar.gz: 03c15b9ffb8672ef2e45d2d818c3d048e694dae2656db0be6325a1edf6853b1c9c8bc7060b021add66b43d87c9ca3ac46bb71346f2e2a4e68bd89ba6d45635f9
6
+ metadata.gz: 3fd0f6fc04d728e7122287889c6013a3578b4eb4a7bc0ae8903232bbd42b99265567271a6e171ec26838259e193f042558df583c2f66ac7d90454aa2f53943ef
7
+ data.tar.gz: e3480ec344cd46ca020cc7f4615028490f721ed21887b1c45efcb0d17f4d2e1739741946768ed52bab8a1fa75f417ff061a5c970a331fa003520044e0cfca508
@@ -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
@@ -5,6 +5,7 @@ gemspec
5
5
  group :development, :test do
6
6
  gem 'pry-byebug'
7
7
  gem 'rake'
8
+ gem 'sorbet', '~> 0.5'
8
9
  end
9
10
 
10
11
  group :test do
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://github.com/getkuby/kuby-core/wiki/Quick-Start-Guide)
25
+ See the [Quick Start Guide](https://getkuby.io/docs)
24
26
 
25
27
  ## More Info
26
28
 
27
- See the [wiki](https://github.com/getkuby/kuby-core/wiki).
29
+ Check out [getkuby.io](https://getkuby.io).
28
30
 
29
31
  ## Running Tests
30
32
 
@@ -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.3'
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
 
@@ -0,0 +1 @@
1
+ require 'kuby'
@@ -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
 
@@ -1,3 +1,4 @@
1
+ # typed: false
1
2
  require 'logger'
2
3
  require 'colorized_string'
3
4
 
@@ -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
- p_stdout.each { |line| t_stdout.puts(line) }
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
- p_stderr.each { |line| t_stderr.puts(line) }
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
- p_stdout.each { |line| result.puts(line) }
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
- p_stderr.each { |line| t_stderr.puts(line) }
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
@@ -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[(idx + 1)..-1]
22
- super(args[0..(idx + 1)])
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.definition.environment)
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|
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Kuby
2
3
  class Definition
3
4
  attr_reader :app_name
@@ -1,3 +1,4 @@
1
+ # typed: true
1
2
  module Kuby
2
3
  class Spinner
3
4
  PIECES = %w(- \\ | /).freeze
@@ -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'
@@ -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
- def initialize(phase)
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,6 +1,11 @@
1
+ # typed: strict
2
+
1
3
  module Kuby
2
4
  module Docker
3
5
  class AssetsPhase < Layer
6
+ extend T::Sig
7
+
8
+ sig { override.params(dockerfile: Dockerfile).void }
4
9
  def apply_to(dockerfile)
5
10
  dockerfile.run(
6
11
  'bundle', 'exec', 'rake', 'assets:precompile'
@@ -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
- DEFAULT_WITHOUT = ['development', 'test', 'deploy'].freeze
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
- attr_accessor :version, :gemfile, :without
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