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
@@ -1,158 +0,0 @@
1
- # typed: false
2
-
3
- require 'kube-dsl'
4
- require 'kuby/kube-db'
5
-
6
- module Kuby
7
- module Plugins
8
- module RailsApp
9
- class MySQL < ::Kuby::Plugin
10
- ROLE = 'web'.freeze
11
-
12
- attr_reader :environment, :configs
13
-
14
- def initialize(environment, configs)
15
- @environment = environment
16
- @configs = configs
17
- end
18
-
19
- def requires_credentials?
20
- true
21
- end
22
-
23
- def name
24
- :mysql
25
- end
26
-
27
- def resources
28
- @resources ||= [secret, database]
29
- end
30
-
31
- def after_configuration
32
- environment.docker.package_phase.add(:mysql_dev)
33
- environment.docker.package_phase.add(:mysql_client)
34
- end
35
-
36
- def host
37
- # host is the same as the name thanks to k8s DNS
38
- @host ||= database.metadata.name
39
- end
40
-
41
- def rewritten_configs
42
- # deep dup
43
- @rewritten_configs ||= Marshal.load(Marshal.dump(configs)).tap do |new_configs|
44
- new_configs[environment.name]['host'] = host
45
- end
46
- end
47
-
48
- def user(user)
49
- secret do
50
- data do
51
- set :user, user
52
- end
53
- end
54
- end
55
-
56
- def password(password)
57
- secret do
58
- data do
59
- set :password, password
60
- end
61
- end
62
- end
63
-
64
- def storage(amount)
65
- database do
66
- spec do
67
- storage do
68
- resources do
69
- requests do
70
- set :storage, amount
71
- end
72
- end
73
- end
74
- end
75
- end
76
- end
77
-
78
- def secret(&block)
79
- context = self
80
-
81
- @secret ||= KubeDSL.secret do
82
- metadata do
83
- name "#{context.base_name}-mysql-secret"
84
- namespace context.kubernetes.namespace.metadata.name
85
- end
86
-
87
- type 'Opaque'
88
- end
89
-
90
- @secret.instance_eval(&block) if block
91
- @secret
92
- end
93
-
94
- def database(&block)
95
- context = self
96
-
97
- @database ||= Kuby::KubeDB.my_sql do
98
- api_version 'kubedb.com/v1alpha1'
99
-
100
- metadata do
101
- name "#{context.base_name}-mysql"
102
- namespace context.kubernetes.namespace.metadata.name
103
- end
104
-
105
- spec do
106
- database_secret do
107
- secret_name context.secret.metadata.name
108
- end
109
-
110
- version '5.7-v2'
111
- storage_type 'Durable'
112
-
113
- storage do
114
- storage_class_name context.kubernetes.provider.storage_class_name
115
- access_modes ['ReadWriteOnce']
116
-
117
- resources do
118
- requests do
119
- add :storage, '10Gi'
120
- end
121
- end
122
- end
123
-
124
- termination_policy 'DoNotTerminate'
125
- end
126
- end
127
-
128
- @database.instance_eval(&block) if block
129
- @database
130
- end
131
-
132
- def base_name
133
- @base_name ||= "#{kubernetes.selector_app}-#{ROLE}"
134
- end
135
-
136
- def kubernetes
137
- environment.kubernetes
138
- end
139
-
140
- private
141
-
142
- def config
143
- configs[environment.name]
144
- end
145
- end
146
- end
147
- end
148
- end
149
-
150
- Kuby.register_package(:mysql_client,
151
- debian: 'default-mysql-client',
152
- alpine: 'mariadb-client'
153
- )
154
-
155
- Kuby.register_package(:mysql_dev,
156
- debian: 'default-libmysqlclient-dev',
157
- alpine: 'mariadb-dev'
158
- )
@@ -1,163 +0,0 @@
1
- # typed: false
2
-
3
- require 'kube-dsl'
4
- require 'kuby/kube-db'
5
-
6
- module Kuby
7
- module Plugins
8
- module RailsApp
9
- class Postgres < ::Kuby::Plugin
10
- ROLE = 'web'.freeze
11
-
12
- attr_reader :environment, :configs
13
-
14
- def initialize(environment, configs)
15
- @environment = environment
16
- @configs = configs
17
-
18
- user(config['username'])
19
- password(config['password'])
20
- end
21
-
22
- def requires_credentials?
23
- true
24
- end
25
-
26
- def name
27
- :postgres
28
- end
29
-
30
- def resources
31
- @resources ||= [secret, database]
32
- end
33
-
34
- def after_configuration
35
- environment.docker.package_phase.add(:postgres_dev)
36
- environment.docker.package_phase.add(:postgres_client)
37
- end
38
-
39
- def host
40
- # host is the same as the name thanks to k8s DNS
41
- @host ||= database.metadata.name
42
- end
43
-
44
- def rewritten_configs
45
- # deep dup
46
- @rewritten_configs ||= Marshal.load(Marshal.dump(configs)).tap do |new_configs|
47
- new_configs[environment.name]['host'] = host
48
- end
49
- end
50
-
51
- def user(user)
52
- secret do
53
- data do
54
- set :POSTGRES_USER, user
55
- end
56
- end
57
- end
58
-
59
- def password(password)
60
- secret do
61
- data do
62
- set :POSTGRES_PASSWORD, password
63
- end
64
- end
65
- end
66
-
67
- def storage(amount)
68
- database do
69
- spec do
70
- storage do
71
- resources do
72
- requests do
73
- set :storage, amount
74
- end
75
- end
76
- end
77
- end
78
- end
79
- end
80
-
81
- def secret(&block)
82
- context = self
83
-
84
- @secret ||= KubeDSL.secret do
85
- metadata do
86
- name "#{context.base_name}-postgres-secret"
87
- namespace context.kubernetes.namespace.metadata.name
88
- end
89
-
90
- type 'Opaque'
91
- end
92
-
93
- @secret.instance_eval(&block) if block
94
- @secret
95
- end
96
-
97
- def database(&block)
98
- context = self
99
-
100
- @database ||= Kuby::KubeDB.postgres do
101
- api_version 'kubedb.com/v1alpha1'
102
-
103
- metadata do
104
- name "#{context.base_name}-postgres"
105
- namespace context.kubernetes.namespace.metadata.name
106
- end
107
-
108
- spec do
109
- database_secret do
110
- secret_name context.secret.metadata.name
111
- end
112
-
113
- version '11.2'
114
- standby_mode 'Hot'
115
- streaming_mode 'asynchronous'
116
- storage_type 'Durable'
117
-
118
- storage do
119
- storage_class_name context.kubernetes.provider.storage_class_name
120
- access_modes ['ReadWriteOnce']
121
-
122
- resources do
123
- requests do
124
- add :storage, '10Gi'
125
- end
126
- end
127
- end
128
-
129
- termination_policy 'DoNotTerminate'
130
- end
131
- end
132
-
133
- @database.instance_eval(&block) if block
134
- @database
135
- end
136
-
137
- def base_name
138
- @base_name ||= "#{kubernetes.selector_app}-#{ROLE}"
139
- end
140
-
141
- def kubernetes
142
- environment.kubernetes
143
- end
144
-
145
- private
146
-
147
- def config
148
- configs[environment.name]
149
- end
150
- end
151
- end
152
- end
153
- end
154
-
155
- Kuby.register_package(:postgres_dev,
156
- debian: 'postgresql-client',
157
- alpine: 'postgresql-dev'
158
- )
159
-
160
- Kuby.register_package(:postgres_client,
161
- debian: 'postgresql-client',
162
- alpine: 'postgresql-client'
163
- )