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
@@ -0,0 +1,35 @@
1
+ module Kuby
2
+ module Utils
3
+ class Table
4
+ attr_reader :headers, :rows
5
+
6
+ def initialize(headers, rows)
7
+ @headers = headers
8
+ @rows = rows
9
+ end
10
+
11
+ def to_s
12
+ [headers, *rows].map { |vals| make_row(vals) }.join("\n")
13
+ end
14
+
15
+ private
16
+
17
+ def make_row(values)
18
+ columns = values.each_with_index.map do |value, idx|
19
+ col_width = col_width_at(idx) + 2
20
+ value.ljust(col_width, ' ')
21
+ end
22
+
23
+ columns.join
24
+ end
25
+
26
+ def col_width_at(idx)
27
+ col_widths[idx] ||= [headers[idx].size, *rows.map { |r| r[idx].size }].max
28
+ end
29
+
30
+ def col_widths
31
+ @col_widths ||= {}
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,65 @@
1
+ module Kuby
2
+ module Utils
3
+ # This code was copied from the ptools gem, licensed under the Artistic v2 license:
4
+ # https://github.com/djberg96/ptools/blob/4ef26adc870cf02b8342df58da53c61bcd4af6c4/lib/ptools.rb
5
+ #
6
+ # Only the #which function and dependent constants have been copied. None of the copied code
7
+ # has been modified.
8
+ #
9
+ module Which
10
+ if File::ALT_SEPARATOR
11
+ MSWINDOWS = true
12
+ if ENV['PATHEXT']
13
+ WIN32EXTS = ".{#{ENV['PATHEXT'].tr(';', ',').tr('.', '')}}".downcase
14
+ else
15
+ WIN32EXTS = '.{exe,com,bat}'.freeze
16
+ end
17
+ else
18
+ MSWINDOWS = false
19
+ end
20
+
21
+ def which(program, path = ENV['PATH'])
22
+ raise ArgumentError, 'path cannot be empty' if path.nil? || path.empty?
23
+
24
+ # Bail out early if an absolute path is provided.
25
+ if program =~ /^\/|^[a-z]:[\\\/]/i
26
+ program += WIN32EXTS if MSWINDOWS && File.extname(program).empty?
27
+ found = Dir[program].first
28
+ if found && File.executable?(found) && !File.directory?(found)
29
+ return found
30
+ else
31
+ return nil
32
+ end
33
+ end
34
+
35
+ # Iterate over each path glob the dir + program.
36
+ path.split(File::PATH_SEPARATOR).each do |dir|
37
+ dir = File.expand_path(dir)
38
+
39
+ next unless File.exist?(dir) # In case of bogus second argument
40
+
41
+ file = File.join(dir, program)
42
+
43
+ # Dir[] doesn't handle backslashes properly, so convert them. Also, if
44
+ # the program name doesn't have an extension, try them all.
45
+ if MSWINDOWS
46
+ file = file.tr(File::ALT_SEPARATOR, File::SEPARATOR)
47
+ file += WIN32EXTS if File.extname(program).empty?
48
+ end
49
+
50
+ found = Dir[file].first
51
+
52
+ # Convert all forward slashes to backslashes if supported
53
+ if found && File.executable?(found) && !File.directory?(found)
54
+ found.tr!(File::SEPARATOR, File::ALT_SEPARATOR) if File::ALT_SEPARATOR
55
+ return found
56
+ end
57
+ end
58
+
59
+ nil
60
+ end
61
+
62
+ extend(self)
63
+ end
64
+ end
65
+ end
data/lib/kuby/utils.rb ADDED
@@ -0,0 +1,11 @@
1
+ module Kuby
2
+ module Utils
3
+ autoload :SemVer, 'kuby/utils/sem_ver'
4
+ autoload :Table, 'kuby/utils/table'
5
+ autoload :Which, 'kuby/utils/which'
6
+
7
+ def self.which(*args)
8
+ Which.which(*args)
9
+ end
10
+ end
11
+ end
data/lib/kuby/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # typed: true
2
2
 
3
3
  module Kuby
4
- VERSION = '0.16.0'.freeze
4
+ VERSION = '0.18.0'.freeze
5
5
  end
data/lib/kuby.rb CHANGED
@@ -1,7 +1,9 @@
1
- # typed: false
1
+ # typed: ignore
2
2
 
3
- require 'sorbet-runtime-stub'
4
3
  require 'kuby/railtie'
4
+ require 'kubectl-rb/version'
5
+ require 'helm-rb/version'
6
+ require 'yaml'
5
7
 
6
8
  begin
7
9
  require 'kuby/plugins/rails_app/generators/kuby'
@@ -13,6 +15,8 @@ module Kuby
13
15
  autoload :CLIBase, 'kuby/cli_base'
14
16
  autoload :Commands, 'kuby/commands'
15
17
  autoload :Definition, 'kuby/definition'
18
+ autoload :Dependable, 'kuby/dependable'
19
+ autoload :Dependency, 'kuby/dependency'
16
20
  autoload :Docker, 'kuby/docker'
17
21
  autoload :Environment, 'kuby/environment'
18
22
  autoload :Kubernetes, 'kuby/kubernetes'
@@ -22,6 +26,7 @@ module Kuby
22
26
  autoload :Plugins, 'kuby/plugins'
23
27
  autoload :Tasks, 'kuby/tasks'
24
28
  autoload :TrailingHash, 'kuby/trailing_hash'
29
+ autoload :Utils, 'kuby/utils'
25
30
 
26
31
  DEFAULT_ENV = 'development'.freeze
27
32
  DEFAULT_DB_USER = 'root'.freeze
@@ -119,6 +124,14 @@ module Kuby
119
124
  @packages ||= {}
120
125
  end
121
126
 
127
+ def register_dependable(name, version_or_callable)
128
+ dependables[name] = Dependable.new(name, version_or_callable)
129
+ end
130
+
131
+ def dependables
132
+ @dependables ||= {}
133
+ end
134
+
122
135
  def env=(env_name)
123
136
  @env = env_name.to_s
124
137
  end
@@ -128,6 +141,18 @@ module Kuby
128
141
  (@env || Rails.env rescue nil || DEFAULT_ENV).to_s
129
142
  end
130
143
  end
144
+
145
+ def load_rake_tasks!
146
+ Rake::TaskManager.record_task_metadata = true
147
+
148
+ Kuby.plugins.each do |_, plugin_klass|
149
+ plugin_klass.task_dirs.each do |task_dir|
150
+ Dir.glob(File.join(task_dir, '*.rake')).each do |path|
151
+ Rake.load_rakefile(path)
152
+ end
153
+ end
154
+ end
155
+ end
131
156
  end
132
157
  end
133
158
 
@@ -136,6 +161,7 @@ Kuby.register_provider(:docker_desktop, Kuby::Kubernetes::DockerDesktopProvider)
136
161
  Kuby.register_provider(:bare_metal, Kuby::Kubernetes::BareMetalProvider)
137
162
 
138
163
  # plugins
164
+ Kuby.register_plugin(:system, Kuby::Plugins::System)
139
165
  Kuby.register_plugin(:rails_app, Kuby::Plugins::RailsApp::Plugin)
140
166
  Kuby.register_plugin(:nginx_ingress, Kuby::Plugins::NginxIngress)
141
167
 
@@ -156,3 +182,12 @@ Kuby.register_package(:c_toolchain,
156
182
  )
157
183
 
158
184
  Kuby.register_package(:git, 'git')
185
+
186
+ # dependables
187
+ Kuby.register_dependable(:kubectl, KubectlRb::KUBECTL_VERSION)
188
+ Kuby.register_dependable(:helm, HelmRb::HELM_VERSION)
189
+ Kuby.register_dependable(:kubernetes, -> {
190
+ version_info = Kuby.environment.kubernetes.provider.kubernetes_cli.version
191
+ version = version_info.dig('serverVersion', 'gitVersion')
192
+ version.sub(/\Av/, '')
193
+ })