kuby-core 0.9.0 → 0.11.1

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.
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