kuby-core 0.16.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +58 -0
  3. data/Gemfile +6 -2
  4. data/Rakefile +5 -3
  5. data/bin/tapioca +29 -0
  6. data/kuby-core.gemspec +9 -11
  7. data/lib/kuby/basic_logger.rb +34 -34
  8. data/lib/kuby/cli_base.rb +43 -43
  9. data/lib/kuby/commands.rb +135 -21
  10. data/lib/kuby/definition.rb +12 -12
  11. data/lib/kuby/dependable.rb +20 -0
  12. data/lib/kuby/dependency.rb +14 -0
  13. data/lib/kuby/docker/alpine.rb +10 -10
  14. data/lib/kuby/docker/app_image.rb +11 -20
  15. data/lib/kuby/docker/app_phase.rb +36 -0
  16. data/lib/kuby/docker/assets_phase.rb +2 -2
  17. data/lib/kuby/docker/bundler_phase.rb +42 -40
  18. data/lib/kuby/docker/cli.rb +72 -37
  19. data/lib/kuby/docker/copy_phase.rb +7 -7
  20. data/lib/kuby/docker/credentials.rb +1 -0
  21. data/lib/kuby/docker/debian.rb +10 -10
  22. data/lib/kuby/docker/distro.rb +13 -13
  23. data/lib/kuby/docker/docker_uri.rb +20 -20
  24. data/lib/kuby/docker/dockerfile.rb +48 -39
  25. data/lib/kuby/docker/image.rb +66 -54
  26. data/lib/kuby/docker/inline_layer.rb +4 -4
  27. data/lib/kuby/docker/layer.rb +6 -6
  28. data/lib/kuby/docker/layer_stack.rb +35 -35
  29. data/lib/kuby/docker/local_tags.rb +16 -16
  30. data/lib/kuby/docker/package_list.rb +16 -16
  31. data/lib/kuby/docker/package_phase.rb +16 -16
  32. data/lib/kuby/docker/packages/managed_package.rb +13 -13
  33. data/lib/kuby/docker/packages/nodejs.rb +5 -5
  34. data/lib/kuby/docker/packages/package.rb +8 -8
  35. data/lib/kuby/docker/packages/simple_managed_package.rb +7 -7
  36. data/lib/kuby/docker/packages/yarn.rb +6 -6
  37. data/lib/kuby/docker/remote_tags.rb +16 -16
  38. data/lib/kuby/docker/setup_phase.rb +18 -20
  39. data/lib/kuby/docker/spec.rb +93 -72
  40. data/lib/kuby/docker/timestamp_tag.rb +16 -11
  41. data/lib/kuby/docker/timestamped_image.rb +64 -38
  42. data/lib/kuby/docker/webserver_phase.rb +20 -20
  43. data/lib/kuby/docker/yarn_phase.rb +29 -5
  44. data/lib/kuby/docker.rb +2 -1
  45. data/lib/kuby/kubernetes/bare_metal_provider.rb +12 -10
  46. data/lib/kuby/kubernetes/deployer.rb +22 -10
  47. data/lib/kuby/kubernetes/docker_config.rb +1 -0
  48. data/lib/kuby/kubernetes/provider.rb +1 -0
  49. data/lib/kuby/kubernetes/spec.rb +63 -13
  50. data/lib/kuby/plugin.rb +23 -1
  51. data/lib/kuby/plugin_registry.rb +15 -0
  52. data/lib/kuby/plugins/nginx_ingress.rb +8 -6
  53. data/lib/kuby/plugins/rails_app/assets.rb +16 -4
  54. data/lib/kuby/plugins/rails_app/assets_image.rb +18 -11
  55. data/lib/kuby/plugins/rails_app/crdb/plugin.rb +473 -0
  56. data/lib/kuby/plugins/rails_app/crdb.rb +9 -0
  57. data/lib/kuby/plugins/rails_app/database.rb +12 -8
  58. data/lib/kuby/plugins/rails_app/generators/kuby.rb +17 -16
  59. data/lib/kuby/plugins/rails_app/plugin.rb +37 -27
  60. data/lib/kuby/plugins/rails_app/sqlite.rb +7 -3
  61. data/lib/kuby/plugins/rails_app/tasks.rake +25 -12
  62. data/lib/kuby/plugins/rails_app.rb +1 -0
  63. data/lib/kuby/plugins/system.rb +16 -0
  64. data/lib/kuby/plugins.rb +1 -0
  65. data/lib/kuby/railtie.rb +31 -1
  66. data/lib/kuby/tasks.rb +91 -10
  67. data/lib/kuby/trailing_hash.rb +2 -2
  68. data/lib/kuby/utils/sem_ver/constraint.rb +68 -0
  69. data/lib/kuby/utils/sem_ver/constraint_set.rb +25 -0
  70. data/lib/kuby/utils/sem_ver/version.rb +49 -0
  71. data/lib/kuby/utils/sem_ver.rb +17 -0
  72. data/lib/kuby/utils/table.rb +35 -0
  73. data/lib/kuby/utils/which.rb +65 -0
  74. data/lib/kuby/utils.rb +11 -0
  75. data/lib/kuby/version.rb +1 -1
  76. data/lib/kuby.rb +37 -2
  77. data/rbi/kuby-core.rbi +2128 -0
  78. data/spec/docker/spec_spec.rb +50 -26
  79. data/spec/docker/timestamped_image_spec.rb +2 -2
  80. data/spec/dummy/app/channels/application_cable/channel.rb +2 -1
  81. data/spec/dummy/app/channels/application_cable/connection.rb +2 -1
  82. data/spec/dummy/app/controllers/application_controller.rb +2 -1
  83. data/spec/dummy/app/jobs/application_job.rb +2 -1
  84. data/spec/dummy/app/mailers/application_mailer.rb +2 -1
  85. data/spec/dummy/app/models/application_record.rb +2 -1
  86. data/spec/dummy/config/application.rb +2 -1
  87. data/spec/dummy/config/initializers/wrap_parameters.rb +2 -1
  88. data/spec/dummy/config/routes.rb +2 -1
  89. data/spec/dummy/test/application_system_test_case.rb +2 -1
  90. data/spec/dummy/test/channels/application_cable/connection_test.rb +2 -1
  91. data/spec/spec_helper.rb +13 -1
  92. metadata +46 -39
  93. data/lib/kuby/plugins/rails_app/mysql.rb +0 -158
  94. data/lib/kuby/plugins/rails_app/postgres.rb +0 -163
@@ -3,137 +3,149 @@
3
3
  module Kuby
4
4
  module Docker
5
5
  class Image
6
- extend T::Sig
6
+ # extend T::Sig
7
7
 
8
- sig { returns(T.nilable(String)) }
8
+ # T::Sig::WithoutRuntime.sig { returns(T.nilable(String)) }
9
9
  attr_reader :identifier
10
10
 
11
- sig { returns(String) }
11
+ # T::Sig::WithoutRuntime.sig { returns(String) }
12
12
  attr_reader :image_url
13
13
 
14
- sig { returns(T.nilable(String)) }
14
+ # T::Sig::WithoutRuntime.sig { returns(T.nilable(String)) }
15
15
  attr_reader :registry_index_url
16
16
 
17
- sig { returns(Credentials) }
17
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::Credentials) }
18
18
  attr_reader :credentials
19
19
 
20
- sig { returns(T.nilable(String)) }
20
+ # T::Sig::WithoutRuntime.sig { returns(T.nilable(String)) }
21
21
  attr_reader :main_tag
22
22
 
23
- sig { returns T::Array[String] }
23
+ # T::Sig::WithoutRuntime.sig { returns T::Array[String] }
24
24
  attr_reader :alias_tags
25
25
 
26
- sig {
27
- params(
28
- dockerfile: T.any(Dockerfile, T.proc.returns(Dockerfile)),
29
- image_url: String,
30
- credentials: Credentials,
31
- registry_index_url: T.nilable(String),
32
- main_tag: T.nilable(String),
33
- alias_tags: T::Array[String]
34
- ).void
35
- }
26
+ # T::Sig::WithoutRuntime.sig {
27
+ # params(
28
+ # dockerfile: T.any(Dockerfile, T.proc.returns(Kuby::Docker::Dockerfile)),
29
+ # image_url: String,
30
+ # credentials: Kuby::Docker::Credentials,
31
+ # registry_index_url: T.nilable(String),
32
+ # main_tag: T.nilable(String),
33
+ # alias_tags: T::Array[String]
34
+ # ).void
35
+ # }
36
36
  def initialize(dockerfile, image_url, credentials, registry_index_url = nil, main_tag = nil, alias_tags = [])
37
- @dockerfile = T.let(dockerfile, T.any(Dockerfile, T.proc.returns(Dockerfile)))
38
- @image_url = T.let(image_url, String)
39
- @registry_index_url = T.let(registry_index_url, T.nilable(String))
40
- @credentials = T.let(credentials, Credentials)
41
- @main_tag = T.let(main_tag, T.nilable(String))
42
- @alias_tags = T.let(alias_tags, T::Array[String])
43
- @identifier = T.let(@identifier, T.nilable(String))
44
-
45
- @image_host = T.let(@image_host, T.nilable(String))
46
- @image_hostname = T.let(@image_hostname, T.nilable(String))
47
- @registry_index_host = T.let(@registry_index_host, T.nilable(String))
48
- @registry_index_hostname = T.let(@registry_index_hostname, T.nilable(String))
49
- @registry_index_uri = T.let(@registry_index_uri, T.nilable(DockerURI))
50
- @image_repo = T.let(@image_repo, T.nilable(String))
51
- @full_image_uri = T.let(@full_image_uri, T.nilable(DockerURI))
52
- @docker_cli = T.let(@docker_cli, T.nilable(Docker::CLI))
53
- end
54
-
55
- sig { returns(Image) }
37
+ @dockerfile = dockerfile
38
+ @image_url = image_url
39
+ @registry_index_url = registry_index_url
40
+ @credentials = credentials
41
+ @main_tag = main_tag
42
+ @alias_tags = alias_tags
43
+ # @identifier = T.let(@identifier, T.nilable(String))
44
+
45
+ # @image_host = T.let(@image_host, T.nilable(String))
46
+ # @image_hostname = T.let(@image_hostname, T.nilable(String))
47
+ # @registry_index_host = T.let(@registry_index_host, T.nilable(String))
48
+ # @registry_index_hostname = T.let(@registry_index_hostname, T.nilable(String))
49
+ # @registry_index_uri = T.let(@registry_index_uri, T.nilable(DockerURI))
50
+ # @image_repo = T.let(@image_repo, T.nilable(String))
51
+ # @full_image_uri = T.let(@full_image_uri, T.nilable(DockerURI))
52
+ # @docker_cli = T.let(@docker_cli, T.nilable(Docker::CLI))
53
+ end
54
+
55
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::Image) }
56
56
  def new_version
57
57
  raise NotImplementedError, 'please use a Docker::Image subclass'
58
58
  end
59
59
 
60
- sig { returns(Image) }
60
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::Image) }
61
61
  def current_version
62
62
  raise NotImplementedError, 'please use a Docker::Image subclass'
63
63
  end
64
64
 
65
- sig { params(current_tag: T.nilable(String)).returns(Image) }
65
+ # T::Sig::WithoutRuntime.sig { params(current_tag: T.nilable(String)).returns(Image) }
66
66
  def previous_version(current_tag = nil)
67
67
  raise NotImplementedError, 'please use a Docker::Image subclass'
68
68
  end
69
69
 
70
- sig { returns(Dockerfile) }
70
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::Dockerfile) }
71
71
  def dockerfile
72
72
  if @dockerfile.respond_to?(:call)
73
- T.cast(@dockerfile, T.proc.returns(Dockerfile)).call
73
+ @dockerfile.call
74
74
  else
75
- T.cast(@dockerfile, Dockerfile)
75
+ @dockerfile
76
76
  end
77
77
  end
78
78
 
79
- sig { returns(String) }
79
+ # T::Sig::WithoutRuntime.sig { returns(String) }
80
80
  def image_host
81
81
  @image_host ||= "#{image_uri.host}:#{image_uri.port}"
82
82
  end
83
83
 
84
- sig { returns(String) }
84
+ # T::Sig::WithoutRuntime.sig { returns(String) }
85
85
  def registry_index_host
86
86
  @registry_index_host ||= "#{registry_index_uri.host}:#{registry_index_uri.port}"
87
87
  end
88
88
 
89
- sig { returns(String) }
89
+ # T::Sig::WithoutRuntime.sig { returns(String) }
90
90
  def registry_index_hostname
91
91
  @registry_index_hostname ||= registry_index_uri.host
92
92
  end
93
93
 
94
- sig { returns(String) }
94
+ # T::Sig::WithoutRuntime.sig { returns(String) }
95
95
  def image_hostname
96
96
  @image_hostname ||= image_uri.host
97
97
  end
98
98
 
99
- sig { returns(String) }
99
+ # T::Sig::WithoutRuntime.sig { returns(String) }
100
100
  def image_repo
101
101
  @image_repo ||= image_uri.path
102
102
  end
103
103
 
104
- sig { returns(DockerURI) }
104
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::DockerURI) }
105
105
  def image_uri
106
106
  @full_image_uri ||= DockerURI.parse_uri(image_url)
107
107
  end
108
108
 
109
- sig { returns(DockerURI) }
109
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::DockerURI) }
110
110
  def registry_index_uri
111
111
  @registry_index_uri ||= DockerURI.parse_index_uri(registry_index_url || image_url)
112
112
  end
113
113
 
114
- sig { returns(T::Array[String]) }
114
+ # T::Sig::WithoutRuntime.sig { returns(T::Array[String]) }
115
115
  def tags
116
116
  [main_tag, *alias_tags].compact
117
117
  end
118
118
 
119
- sig { params(build_args: T::Hash[String, String], docker_args: T::Array[String]).void }
120
- def build(build_args = {}, docker_args = [])
119
+ # T::Sig::WithoutRuntime.sig {
120
+ # params(
121
+ # build_args: T::Hash[String, String],
122
+ # docker_args: T::Array[String],
123
+ # context: T.nilable(String),
124
+ # cache_from: T.nilable(String)
125
+ # ).void
126
+ # }
127
+ def build(build_args = {}, docker_args = [], context: nil, cache_from: nil)
121
128
  raise NotImplementedError, 'please use a Docker::Image subclass'
122
129
  end
123
130
 
124
- sig { params(tag: String).void }
131
+ # T::Sig::WithoutRuntime.sig { params(tag: String).void }
125
132
  def push(tag)
126
133
  raise NotImplementedError, 'please use a Docker::Image subclass'
127
134
  end
128
135
 
129
- sig { returns(Docker::CLI) }
136
+ # T::Sig::WithoutRuntime.sig { params(tag: String).void }
137
+ def pull(tag)
138
+ raise NotImplementedError, 'please use a Docker::Image subclass'
139
+ end
140
+
141
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::CLI) }
130
142
  def docker_cli
131
143
  @docker_cli ||= Docker::CLI.new
132
144
  end
133
145
 
134
146
  private
135
147
 
136
- sig { params(main_tag: String, alias_tags: T::Array[String]).returns(Image) }
148
+ # T::Sig::WithoutRuntime.sig { params(main_tag: String, alias_tags: T::Array[String]).returns(Image) }
137
149
  def duplicate_with_tags(main_tag, alias_tags)
138
150
  self.class.new(dockerfile, image_url, credentials, registry_index_url, main_tag, alias_tags)
139
151
  end
@@ -3,17 +3,17 @@
3
3
  module Kuby
4
4
  module Docker
5
5
  class InlineLayer < Layer
6
- extend T::Sig
6
+ # extend T::Sig
7
7
 
8
- sig { returns(T.proc.params(df: Dockerfile).void) }
8
+ # T::Sig::WithoutRuntime.sig { returns(T.proc.params(df: Dockerfile).void) }
9
9
  attr_reader :block
10
10
 
11
- sig { params(block: T.proc.params(df: Dockerfile).void).void }
11
+ # T::Sig::WithoutRuntime.sig { params(block: T.proc.params(df: Dockerfile).void).void }
12
12
  def initialize(block)
13
13
  @block = block
14
14
  end
15
15
 
16
- sig { override.params(dockerfile: Dockerfile).void }
16
+ # T::Sig::WithoutRuntime.sig { override.params(dockerfile: Dockerfile).void }
17
17
  def apply_to(dockerfile)
18
18
  block.call(dockerfile)
19
19
  end
@@ -3,20 +3,20 @@
3
3
  module Kuby
4
4
  module Docker
5
5
  class Layer
6
- extend T::Sig
7
- extend T::Helpers
6
+ # extend T::Sig
7
+ # extend T::Helpers
8
8
 
9
- abstract!
9
+ # abstract!
10
10
 
11
- sig { returns(Environment) }
11
+ # T::Sig::WithoutRuntime.sig { returns(Environment) }
12
12
  attr_reader :environment
13
13
 
14
- sig { params(environment: Environment).void }
14
+ # T::Sig::WithoutRuntime.sig { params(environment: Environment).void }
15
15
  def initialize(environment)
16
16
  @environment = environment
17
17
  end
18
18
 
19
- sig { params(dockerfile: Dockerfile).void }
19
+ # T::Sig::WithoutRuntime.sig { params(dockerfile: Dockerfile).void }
20
20
  def apply_to(dockerfile)
21
21
  raise NotImplementedError,
22
22
  "#{__method__} must be defined in derived classes"
@@ -3,44 +3,44 @@
3
3
  module Kuby
4
4
  module Docker
5
5
  class LayerStack
6
- extend T::Sig
7
- extend T::Generic
6
+ # extend T::Sig
7
+ # extend T::Generic
8
8
 
9
- Elem = type_member(fixed: Layer)
9
+ # Elem = type_member { { fixed: Kuby::Docker::Layer } }
10
10
 
11
11
  include Enumerable
12
12
 
13
- sig { returns(T::Array[Symbol]) }
13
+ # T::Sig::WithoutRuntime.sig { returns(T::Array[Symbol]) }
14
14
  attr_reader :stack
15
15
 
16
- sig { returns(T::Hash[Symbol, Layer]) }
16
+ # T::Sig::WithoutRuntime.sig { returns(T::Hash[Symbol, Kuby::Docker::Layer]) }
17
17
  attr_reader :layers
18
18
 
19
- sig { void }
19
+ # T::Sig::WithoutRuntime.sig { void }
20
20
  def initialize
21
- @stack = T.let([], T::Array[Symbol])
22
- @layers = T.let({}, T::Hash[Symbol, Layer])
21
+ @stack = []
22
+ @layers = {}
23
23
  end
24
24
 
25
- sig {
26
- override.params(
27
- block: T.nilable(T.proc.params(layer: Layer).void)
28
- )
29
- .void
30
- }
25
+ # T::Sig::WithoutRuntime.sig {
26
+ # override.params(
27
+ # block: T.nilable(T.proc.params(layer: Kuby::Docker::Layer).void)
28
+ # )
29
+ # .void
30
+ # }
31
31
  def each(&block)
32
- return to_enum(T.must(__method__)) unless block_given?
33
- @stack.each { |name| yield T.must(layers[name]) }
32
+ return to_enum(__method__) unless block_given?
33
+ @stack.each { |name| yield layers[name] }
34
34
  end
35
35
 
36
- sig {
37
- params(
38
- name: Symbol,
39
- layer: T.nilable(Layer),
40
- block: T.nilable(T.proc.params(df: Dockerfile).void)
41
- )
42
- .void
43
- }
36
+ # T::Sig::WithoutRuntime.sig {
37
+ # params(
38
+ # name: Symbol,
39
+ # layer: T.nilable(Layer),
40
+ # block: T.nilable(T.proc.params(df: Kuby::Docker::Dockerfile).void)
41
+ # )
42
+ # .void
43
+ # }
44
44
  def use(name, layer = nil, &block)
45
45
  stack << name
46
46
 
@@ -53,15 +53,15 @@ module Kuby
53
53
  end
54
54
  end
55
55
 
56
- sig {
57
- params(
58
- name: Symbol,
59
- layer: T.nilable(T.any(Layer, T::Hash[Symbol, T.untyped])),
60
- options: T::Hash[Symbol, T.untyped],
61
- block: T.nilable(T.proc.params(df: Dockerfile).void)
62
- )
63
- .void
64
- }
56
+ # T::Sig::WithoutRuntime.sig {
57
+ # params(
58
+ # name: Symbol,
59
+ # layer: T.nilable(T.any(Layer, T::Hash[Symbol, T.untyped])),
60
+ # options: T::Hash[Symbol, T.untyped],
61
+ # block: T.nilable(T.proc.params(df: Kuby::Docker::Dockerfile).void)
62
+ # )
63
+ # .void
64
+ # }
65
65
  def insert(name, layer = nil, options = {}, &block)
66
66
  # this is truly gross but it's the only way I can think of to be able
67
67
  # to call insert these two ways:
@@ -94,13 +94,13 @@ module Kuby
94
94
  end
95
95
  end
96
96
 
97
- sig { params(name: Symbol).void }
97
+ # T::Sig::WithoutRuntime.sig { params(name: Symbol).void }
98
98
  def delete(name)
99
99
  stack.delete(name)
100
100
  layers.delete(name)
101
101
  end
102
102
 
103
- sig { params(name: Symbol).returns(T::Boolean) }
103
+ # T::Sig::WithoutRuntime.sig { params(name: Symbol).returns(T::Boolean) }
104
104
  def includes?(name)
105
105
  layers.include?(name)
106
106
  end
@@ -3,34 +3,34 @@
3
3
  module Kuby
4
4
  module Docker
5
5
  class LocalTags
6
- extend T::Sig
6
+ # extend T::Sig
7
7
 
8
- sig { returns CLI }
8
+ # T::Sig::WithoutRuntime.sig { returns Kuby::Docker::CLI }
9
9
  attr_reader :cli
10
10
 
11
- sig { returns(String) }
11
+ # T::Sig::WithoutRuntime.sig { returns(String) }
12
12
  attr_reader :image_url
13
13
 
14
- sig {
15
- params(
16
- cli: CLI,
17
- image_url: String
18
- )
19
- .void
20
- }
14
+ # T::Sig::WithoutRuntime.sig {
15
+ # params(
16
+ # cli: Kuby::Docker::CLI,
17
+ # image_url: String
18
+ # )
19
+ # .void
20
+ # }
21
21
  def initialize(cli, image_url)
22
22
  @cli = cli
23
23
  @image_url = image_url
24
- @latest_timestamp_tag = T.let(@latest_timestamp_tag, T.nilable(TimestampTag))
24
+ # @latest_timestamp_tag = T.let(@latest_timestamp_tag, T.nilable(TimestampTag))
25
25
  end
26
26
 
27
- sig { returns(T::Array[String]) }
27
+ # T::Sig::WithoutRuntime.sig { returns(T::Array[String]) }
28
28
  def tags
29
29
  images = cli.images(image_url)
30
- images.map { |image| T.must(image[:tag]) }
30
+ images.map { |image| image[:tag] }
31
31
  end
32
32
 
33
- sig { returns(T::Array[String]) }
33
+ # T::Sig::WithoutRuntime.sig { returns(T::Array[String]) }
34
34
  def latest_tags
35
35
  # find "latest" tag
36
36
  images = cli.images(image_url)
@@ -48,12 +48,12 @@ module Kuby
48
48
  end
49
49
  end
50
50
 
51
- sig { returns(T::Array[TimestampTag]) }
51
+ # T::Sig::WithoutRuntime.sig { returns(T::Array[Kuby::Docker::TimestampTag]) }
52
52
  def timestamp_tags
53
53
  tags.map { |t| TimestampTag.try_parse(t) }.compact
54
54
  end
55
55
 
56
- sig { returns(T.nilable(TimestampTag)) }
56
+ # T::Sig::WithoutRuntime.sig { returns(T.nilable(Kuby::Docker::TimestampTag)) }
57
57
  def latest_timestamp_tag
58
58
  @latest_timestamp_tag ||= timestamp_tags.sort.last
59
59
  end
@@ -3,48 +3,48 @@
3
3
  module Kuby
4
4
  module Docker
5
5
  class PackageList
6
- extend T::Sig
7
- extend T::Generic
6
+ # extend T::Sig
7
+ # extend T::Generic
8
8
 
9
- Elem = type_member(fixed: Distro::PackageImpl)
9
+ # Elem = type_member { { fixed: Distro::PackageImpl } }
10
10
 
11
11
  include Enumerable
12
12
 
13
- sig { returns(T::Array[Distro::PackageImpl]) }
13
+ # T::Sig::WithoutRuntime.sig { returns(T::Array[Distro::PackageImpl]) }
14
14
  attr_reader :packages
15
15
 
16
- sig { params(package_tuples: T::Array[[Symbol, T.nilable(String)]]).void }
16
+ # T::Sig::WithoutRuntime.sig { params(package_tuples: T::Array[[Symbol, T.nilable(String)]]).void }
17
17
  def initialize(package_tuples)
18
- @packages = T.let([], T::Array[Distro::PackageImpl])
18
+ @packages = []
19
19
  package_tuples.each { |name, version| add(name, version) }
20
20
  end
21
21
 
22
- sig { params(name: Symbol).returns(T.nilable(Distro::PackageImpl)) }
22
+ # T::Sig::WithoutRuntime.sig { params(name: Symbol).returns(T.nilable(Distro::PackageImpl)) }
23
23
  def [](name)
24
24
  packages.find { |pkg| pkg.name == name }
25
25
  end
26
26
 
27
- sig { params(name: Symbol, version: T.nilable(String)).void }
27
+ # T::Sig::WithoutRuntime.sig { params(name: Symbol, version: T.nilable(String)).void }
28
28
  def add(name, version = nil)
29
29
  packages << Packages::Package.new(name, version)
30
30
  end
31
31
 
32
- sig { params(name: String).void }
32
+ # T::Sig::WithoutRuntime.sig { params(name: String).void }
33
33
  def delete(name)
34
34
  packages.delete_if { |pkg| pkg.name == name }
35
35
  end
36
36
 
37
- sig {
38
- override.params(
39
- block: T.proc.params(package: Distro::PackageImpl).void
40
- )
41
- .void
42
- }
37
+ # T::Sig::WithoutRuntime.sig {
38
+ # override.params(
39
+ # block: T.proc.params(package: Distro::PackageImpl).void
40
+ # )
41
+ # .void
42
+ # }
43
43
  def each(&block)
44
44
  packages.each(&block)
45
45
  end
46
46
 
47
- sig { returns(T::Boolean) }
47
+ # T::Sig::WithoutRuntime.sig { returns(T::Boolean) }
48
48
  def empty?
49
49
  packages.empty?
50
50
  end
@@ -3,31 +3,31 @@
3
3
  module Kuby
4
4
  module Docker
5
5
  class PackagePhase < Layer
6
- extend T::Sig
6
+ # extend T::Sig
7
7
 
8
- Operation = T.type_alias { [Symbol, Symbol, T.nilable(String)] }
8
+ # Operation = T.type_alias { [Symbol, Symbol, T.nilable(String)] }
9
9
 
10
- sig { returns(T::Array[Operation]) }
10
+ # T::Sig::WithoutRuntime.sig { returns(T::Array[Operation]) }
11
11
  attr_reader :operations
12
12
 
13
- sig { params(environment: Environment).void }
13
+ # T::Sig::WithoutRuntime.sig { params(environment: Kuby::Environment).void }
14
14
  def initialize(environment)
15
15
  super
16
16
 
17
- @operations = T.let([], T::Array[Operation])
17
+ @operations = []
18
18
  end
19
19
 
20
- sig { params(package_name: Symbol, version: T.nilable(String)).void }
20
+ # T::Sig::WithoutRuntime.sig { params(package_name: Symbol, version: T.nilable(String)).void }
21
21
  def add(package_name, version = nil)
22
22
  operations << [:add, package_name, version]
23
23
  end
24
24
 
25
- sig { params(package_name: Symbol).void }
25
+ # T::Sig::WithoutRuntime.sig { params(package_name: Symbol).void }
26
26
  def remove(package_name)
27
27
  operations << [:remove, package_name, nil]
28
28
  end
29
29
 
30
- sig { override.params(dockerfile: Dockerfile).void }
30
+ # T::Sig::WithoutRuntime.sig { override.params(dockerfile: Kuby::Docker::Dockerfile).void }
31
31
  def apply_to(dockerfile)
32
32
  packages = distro_spec.default_packages.dup
33
33
 
@@ -50,18 +50,18 @@ module Kuby
50
50
 
51
51
  private
52
52
 
53
- sig { returns(Distro) }
53
+ # T::Sig::WithoutRuntime.sig { returns(Kuby::Docker::Distro) }
54
54
  def distro_spec
55
55
  environment.docker.distro_spec
56
56
  end
57
57
 
58
- sig {
59
- params(
60
- package_name: Symbol,
61
- version: T.nilable(String)
62
- )
63
- .returns(Distro::PackageImpl)
64
- }
58
+ # T::Sig::WithoutRuntime.sig {
59
+ # params(
60
+ # package_name: Symbol,
61
+ # version: T.nilable(String)
62
+ # )
63
+ # .returns(Kuby::Docker::Distro::PackageImpl)
64
+ # }
65
65
  def get_package(package_name, version)
66
66
  if package = Kuby.packages[package_name]
67
67
  package.with_version(version)
@@ -4,27 +4,27 @@ module Kuby
4
4
  module Docker
5
5
  module Packages
6
6
  class ManagedPackage
7
- extend T::Sig
7
+ # extend T::Sig
8
8
 
9
- sig { returns(Symbol) }
9
+ # T::Sig::WithoutRuntime.sig { returns(Symbol) }
10
10
  attr_reader :name
11
11
 
12
- sig { returns(T::Hash[Symbol, String]) }
12
+ # T::Sig::WithoutRuntime.sig { returns(T::Hash[Symbol, String]) }
13
13
  attr_reader :names_per_distro
14
14
 
15
- sig {
16
- params(
17
- name: Symbol,
18
- names_per_distro: T::Hash[Symbol, String]
19
- )
20
- .void
21
- }
15
+ # T::Sig::WithoutRuntime.sig {
16
+ # params(
17
+ # name: Symbol,
18
+ # names_per_distro: T::Hash[Symbol, String]
19
+ # )
20
+ # .void
21
+ # }
22
22
  def initialize(name, names_per_distro)
23
23
  @name = name
24
24
  @names_per_distro = names_per_distro
25
25
  end
26
26
 
27
- sig { params(distro: Symbol).returns(String) }
27
+ # T::Sig::WithoutRuntime.sig { params(distro: Symbol).returns(String) }
28
28
  def package_name_for(distro)
29
29
  names_per_distro.fetch(distro) do
30
30
  raise UnsupportedDistroError, "Couldn't install #{name} "\
@@ -32,12 +32,12 @@ module Kuby
32
32
  end
33
33
  end
34
34
 
35
- sig { params(ver: String).returns(T.self_type) }
35
+ # T::Sig::WithoutRuntime.sig { params(ver: String).returns(T.self_type) }
36
36
  def with_version(ver)
37
37
  self
38
38
  end
39
39
 
40
- sig { returns(T::Boolean) }
40
+ # T::Sig::WithoutRuntime.sig { returns(T::Boolean) }
41
41
  def managed?
42
42
  true
43
43
  end
@@ -4,26 +4,26 @@ module Kuby
4
4
  module Docker
5
5
  module Packages
6
6
  class Nodejs < Package
7
- extend T::Sig
7
+ # extend T::Sig
8
8
 
9
- sig { params(dockerfile: Dockerfile).void }
9
+ # T::Sig::WithoutRuntime.sig { params(dockerfile: Dockerfile).void }
10
10
  def install_on_debian(dockerfile)
11
11
  install_from_image("node:#{version}", dockerfile)
12
12
  end
13
13
 
14
- sig { params(dockerfile: Dockerfile).void }
14
+ # T::Sig::WithoutRuntime.sig { params(dockerfile: Dockerfile).void }
15
15
  def install_on_alpine(dockerfile)
16
16
  install_from_image("node:#{version}-alpine", dockerfile)
17
17
  end
18
18
 
19
- sig { returns(String) }
19
+ # T::Sig::WithoutRuntime.sig { returns(String) }
20
20
  def version
21
21
  @version || 'current'
22
22
  end
23
23
 
24
24
  private
25
25
 
26
- sig { params(image: String, dockerfile: Dockerfile).void }
26
+ # T::Sig::WithoutRuntime.sig { params(image: String, dockerfile: Dockerfile).void }
27
27
  def install_from_image(image, dockerfile)
28
28
  dockerfile.insert_at(0) do
29
29
  dockerfile.from(image, as: 'nodejs')