makit 0.0.168 → 0.0.169

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 (179) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +41 -41
  3. data/exe/makit +5 -5
  4. data/lib/makit/apache.rb +28 -28
  5. data/lib/makit/auto.rb +48 -48
  6. data/lib/makit/azure/blob_storage.rb +257 -257
  7. data/lib/makit/azure/cli.rb +284 -284
  8. data/lib/makit/azure-pipelines.rb +187 -187
  9. data/lib/makit/cli/base.rb +17 -17
  10. data/lib/makit/cli/build_commands.rb +500 -500
  11. data/lib/makit/cli/generators/base_generator.rb +74 -74
  12. data/lib/makit/cli/generators/dotnet_generator.rb +50 -50
  13. data/lib/makit/cli/generators/generator_factory.rb +49 -49
  14. data/lib/makit/cli/generators/node_generator.rb +50 -50
  15. data/lib/makit/cli/generators/ruby_generator.rb +77 -77
  16. data/lib/makit/cli/generators/rust_generator.rb +50 -50
  17. data/lib/makit/cli/generators/templates/dotnet_templates.rb +167 -167
  18. data/lib/makit/cli/generators/templates/node_templates.rb +161 -161
  19. data/lib/makit/cli/generators/templates/ruby/gemfile.rb +26 -26
  20. data/lib/makit/cli/generators/templates/ruby/gemspec.rb +41 -41
  21. data/lib/makit/cli/generators/templates/ruby/main_lib.rb +33 -33
  22. data/lib/makit/cli/generators/templates/ruby/rakefile.rb +35 -35
  23. data/lib/makit/cli/generators/templates/ruby/readme.rb +63 -63
  24. data/lib/makit/cli/generators/templates/ruby/test.rb +39 -39
  25. data/lib/makit/cli/generators/templates/ruby/test_helper.rb +29 -29
  26. data/lib/makit/cli/generators/templates/ruby/version.rb +29 -29
  27. data/lib/makit/cli/generators/templates/rust_templates.rb +128 -128
  28. data/lib/makit/cli/main.rb +78 -78
  29. data/lib/makit/cli/pipeline_commands.rb +311 -311
  30. data/lib/makit/cli/project_commands.rb +868 -868
  31. data/lib/makit/cli/repository_commands.rb +661 -661
  32. data/lib/makit/cli/strategy_commands.rb +207 -207
  33. data/lib/makit/cli/utility_commands.rb +521 -521
  34. data/lib/makit/commands/factory.rb +359 -359
  35. data/lib/makit/commands/middleware/base.rb +73 -73
  36. data/lib/makit/commands/middleware/cache.rb +248 -248
  37. data/lib/makit/commands/middleware/command_logger.rb +312 -312
  38. data/lib/makit/commands/middleware/validator.rb +269 -269
  39. data/lib/makit/commands/request.rb +316 -316
  40. data/lib/makit/commands/result.rb +323 -323
  41. data/lib/makit/commands/runner.rb +386 -386
  42. data/lib/makit/commands/strategies/base.rb +171 -171
  43. data/lib/makit/commands/strategies/child_process.rb +162 -162
  44. data/lib/makit/commands/strategies/factory.rb +136 -136
  45. data/lib/makit/commands/strategies/synchronous.rb +139 -139
  46. data/lib/makit/commands.rb +50 -50
  47. data/lib/makit/configuration/dotnet_project.rb +48 -48
  48. data/lib/makit/configuration/gitlab_helper.rb +61 -61
  49. data/lib/makit/configuration/project.rb +292 -292
  50. data/lib/makit/configuration/rakefile_helper.rb +43 -43
  51. data/lib/makit/configuration/step.rb +34 -34
  52. data/lib/makit/configuration/timeout.rb +74 -74
  53. data/lib/makit/configuration.rb +21 -21
  54. data/lib/makit/content/default_gitignore.rb +7 -7
  55. data/lib/makit/content/default_gitignore.txt +225 -225
  56. data/lib/makit/content/default_rakefile.rb +13 -13
  57. data/lib/makit/content/gem_rakefile.rb +16 -16
  58. data/lib/makit/context.rb +1 -1
  59. data/lib/makit/data.rb +49 -49
  60. data/lib/makit/directories.rb +170 -170
  61. data/lib/makit/directory.rb +262 -262
  62. data/lib/makit/docs/files.rb +89 -89
  63. data/lib/makit/docs/rake.rb +102 -102
  64. data/lib/makit/dotnet/cli.rb +224 -224
  65. data/lib/makit/dotnet/project.rb +217 -217
  66. data/lib/makit/dotnet/solution.rb +38 -38
  67. data/lib/makit/dotnet/solution_classlib.rb +239 -239
  68. data/lib/makit/dotnet/solution_console.rb +264 -264
  69. data/lib/makit/dotnet/solution_maui.rb +354 -354
  70. data/lib/makit/dotnet/solution_wasm.rb +275 -275
  71. data/lib/makit/dotnet/solution_wpf.rb +304 -304
  72. data/lib/makit/dotnet.rb +110 -110
  73. data/lib/makit/email.rb +90 -90
  74. data/lib/makit/environment.rb +142 -142
  75. data/lib/makit/examples/runner.rb +370 -370
  76. data/lib/makit/exceptions.rb +45 -45
  77. data/lib/makit/fileinfo.rb +32 -32
  78. data/lib/makit/files.rb +43 -43
  79. data/lib/makit/gems.rb +49 -49
  80. data/lib/makit/git/cli.rb +103 -103
  81. data/lib/makit/git/repository.rb +100 -100
  82. data/lib/makit/git.rb +104 -104
  83. data/lib/makit/github_actions.rb +202 -202
  84. data/lib/makit/gitlab/pipeline.rb +857 -857
  85. data/lib/makit/gitlab/pipeline_service_impl.rb +1535 -1535
  86. data/lib/makit/gitlab_runner.rb +59 -59
  87. data/lib/makit/humanize.rb +218 -218
  88. data/lib/makit/indexer.rb +47 -47
  89. data/lib/makit/io/filesystem.rb +111 -111
  90. data/lib/makit/io/filesystem_service_impl.rb +337 -337
  91. data/lib/makit/lint.rb +212 -212
  92. data/lib/makit/logging/configuration.rb +309 -309
  93. data/lib/makit/logging/format_registry.rb +84 -84
  94. data/lib/makit/logging/formatters/base.rb +39 -39
  95. data/lib/makit/logging/formatters/console_formatter.rb +140 -140
  96. data/lib/makit/logging/formatters/json_formatter.rb +65 -65
  97. data/lib/makit/logging/formatters/plain_text_formatter.rb +71 -71
  98. data/lib/makit/logging/formatters/text_formatter.rb +64 -64
  99. data/lib/makit/logging/log_request.rb +119 -119
  100. data/lib/makit/logging/logger.rb +199 -199
  101. data/lib/makit/logging/sinks/base.rb +91 -91
  102. data/lib/makit/logging/sinks/console.rb +72 -72
  103. data/lib/makit/logging/sinks/file_sink.rb +92 -92
  104. data/lib/makit/logging/sinks/structured.rb +123 -123
  105. data/lib/makit/logging/sinks/unified_file_sink.rb +296 -296
  106. data/lib/makit/logging.rb +578 -578
  107. data/lib/makit/markdown.rb +75 -75
  108. data/lib/makit/mp/basic_object_mp.rb +17 -17
  109. data/lib/makit/mp/command_mp.rb +13 -13
  110. data/lib/makit/mp/command_request.mp.rb +17 -17
  111. data/lib/makit/mp/project_mp.rb +199 -199
  112. data/lib/makit/mp/string_mp.rb +205 -205
  113. data/lib/makit/nuget.rb +460 -458
  114. data/lib/makit/podman/podman.rb +458 -458
  115. data/lib/makit/podman/podman_service_impl.rb +1081 -1081
  116. data/lib/makit/port.rb +32 -32
  117. data/lib/makit/process.rb +377 -377
  118. data/lib/makit/protoc.rb +112 -112
  119. data/lib/makit/rake/cli.rb +196 -196
  120. data/lib/makit/rake/trace_controller.rb +174 -174
  121. data/lib/makit/rake.rb +81 -81
  122. data/lib/makit/ruby/cli.rb +185 -185
  123. data/lib/makit/ruby.rb +25 -25
  124. data/lib/makit/rubygems.rb +137 -137
  125. data/lib/makit/secrets/azure_key_vault.rb +322 -322
  126. data/lib/makit/secrets/azure_secrets.rb +221 -221
  127. data/lib/makit/secrets/local_secrets.rb +72 -72
  128. data/lib/makit/secrets/secrets_manager.rb +105 -105
  129. data/lib/makit/secrets.rb +96 -96
  130. data/lib/makit/serializer.rb +130 -130
  131. data/lib/makit/services/builder.rb +186 -186
  132. data/lib/makit/services/error_handler.rb +226 -226
  133. data/lib/makit/services/repository_manager.rb +367 -367
  134. data/lib/makit/services/validator.rb +112 -112
  135. data/lib/makit/setup/classlib.rb +101 -101
  136. data/lib/makit/setup/gem.rb +268 -268
  137. data/lib/makit/setup/pages.rb +11 -11
  138. data/lib/makit/setup/razorclasslib.rb +101 -101
  139. data/lib/makit/setup/runner.rb +54 -54
  140. data/lib/makit/setup.rb +5 -5
  141. data/lib/makit/show.rb +110 -110
  142. data/lib/makit/storage.rb +126 -126
  143. data/lib/makit/symbols.rb +175 -175
  144. data/lib/makit/task_info.rb +130 -130
  145. data/lib/makit/tasks/at_exit.rb +15 -15
  146. data/lib/makit/tasks/build.rb +22 -22
  147. data/lib/makit/tasks/bump.rb +7 -7
  148. data/lib/makit/tasks/clean.rb +13 -13
  149. data/lib/makit/tasks/configure.rb +10 -10
  150. data/lib/makit/tasks/format.rb +10 -10
  151. data/lib/makit/tasks/hook_manager.rb +443 -443
  152. data/lib/makit/tasks/info.rb +368 -368
  153. data/lib/makit/tasks/init.rb +49 -49
  154. data/lib/makit/tasks/integrate.rb +60 -60
  155. data/lib/makit/tasks/pull_incoming.rb +13 -13
  156. data/lib/makit/tasks/secrets.rb +7 -7
  157. data/lib/makit/tasks/setup.rb +16 -16
  158. data/lib/makit/tasks/sync.rb +14 -14
  159. data/lib/makit/tasks/tag.rb +27 -27
  160. data/lib/makit/tasks/task_monkey_patch.rb +81 -81
  161. data/lib/makit/tasks/test.rb +22 -22
  162. data/lib/makit/tasks/update.rb +21 -21
  163. data/lib/makit/tasks/version.rb +6 -6
  164. data/lib/makit/tasks.rb +24 -24
  165. data/lib/makit/test_cache.rb +239 -239
  166. data/lib/makit/tree.rb +37 -37
  167. data/lib/makit/v1/configuration/project_service_impl.rb +370 -370
  168. data/lib/makit/v1/git/git_repository_service_impl.rb +295 -295
  169. data/lib/makit/v1/makit.v1_pb.rb +35 -35
  170. data/lib/makit/v1/makit.v1_services_pb.rb +27 -27
  171. data/lib/makit/v1/services/repository_manager_service_impl.rb +572 -572
  172. data/lib/makit/version.rb +661 -661
  173. data/lib/makit/version_util.rb +21 -21
  174. data/lib/makit/wix.rb +95 -95
  175. data/lib/makit/yaml.rb +29 -29
  176. data/lib/makit/zip.rb +17 -17
  177. data/lib/makit copy.rb +44 -44
  178. data/lib/makit.rb +121 -121
  179. metadata +2 -2
@@ -1,458 +1,458 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "podman_service_impl"
4
-
5
- module Makit
6
- module Podman
7
- class Podman
8
- def initialize(podman_executable: "podman")
9
- @service = PodmanServiceImpl.new(podman_executable: podman_executable)
10
- end
11
-
12
- # High-level convenience methods
13
- def pull_image(image_name, tag: "latest", force: false)
14
- request = if grpc_available?
15
- Makit::V1::Podman::Service::PullImageRequest.new(
16
- image_name: image_name,
17
- tag: tag,
18
- force: force
19
- )
20
- else
21
- {
22
- image_name: image_name,
23
- tag: tag,
24
- force: force
25
- }
26
- end
27
-
28
- @service.pull_image(request)
29
- end
30
-
31
- def list_images(all: false, filter: nil)
32
- request = if grpc_available?
33
- Makit::V1::Podman::Service::ListImagesRequest.new(
34
- all: all,
35
- filter: filter
36
- )
37
- else
38
- {
39
- all: all,
40
- filter: filter
41
- }
42
- end
43
-
44
- @service.list_images(request)
45
- end
46
-
47
- def remove_image(image_id, force: false)
48
- request = if grpc_available?
49
- Makit::V1::Podman::Service::RemoveImageRequest.new(
50
- image_id: image_id,
51
- force: force
52
- )
53
- else
54
- {
55
- image_id: image_id,
56
- force: force
57
- }
58
- end
59
-
60
- @service.remove_image(request)
61
- end
62
-
63
- def inspect_image(image_id)
64
- request = if grpc_available?
65
- Makit::V1::Podman::Service::InspectImageRequest.new(
66
- image_id: image_id
67
- )
68
- else
69
- {
70
- image_id: image_id
71
- }
72
- end
73
-
74
- @service.inspect_image(request)
75
- end
76
-
77
- def create_container(name:, image:, **options)
78
- request = if grpc_available?
79
- Makit::V1::Podman::Service::CreateContainerRequest.new(
80
- name: name,
81
- image: image,
82
- command: options[:command] || [],
83
- args: options[:args] || [],
84
- environment: options[:environment] || {},
85
- volume_mounts: options[:volume_mounts] || [],
86
- port_mappings: options[:port_mappings] || [],
87
- working_directory: options[:working_directory],
88
- user: options[:user],
89
- privileged: options[:privileged] || false,
90
- capabilities: options[:capabilities] || [],
91
- labels: options[:labels] || {},
92
- auto_remove: options[:auto_remove] || false,
93
- memory_limit: options[:memory_limit] || 0,
94
- cpu_limit: options[:cpu_limit] || 0
95
- )
96
- else
97
- {
98
- name: name,
99
- image: image,
100
- command: options[:command] || [],
101
- args: options[:args] || [],
102
- environment: options[:environment] || {},
103
- volume_mounts: options[:volume_mounts] || [],
104
- port_mappings: options[:port_mappings] || [],
105
- working_directory: options[:working_directory],
106
- user: options[:user],
107
- privileged: options[:privileged] || false,
108
- capabilities: options[:capabilities] || [],
109
- labels: options[:labels] || {},
110
- auto_remove: options[:auto_remove] || false,
111
- memory_limit: options[:memory_limit] || 0,
112
- cpu_limit: options[:cpu_limit] || 0
113
- }
114
- end
115
-
116
- @service.create_container(request)
117
- end
118
-
119
- def start_container(container_id)
120
- request = if grpc_available?
121
- Makit::V1::Podman::Service::StartContainerRequest.new(
122
- container_id: container_id
123
- )
124
- else
125
- {
126
- container_id: container_id
127
- }
128
- end
129
-
130
- @service.start_container(request)
131
- end
132
-
133
- def stop_container(container_id, timeout_seconds: 10)
134
- request = if grpc_available?
135
- Makit::V1::Podman::Service::StopContainerRequest.new(
136
- container_id: container_id,
137
- timeout_seconds: timeout_seconds
138
- )
139
- else
140
- {
141
- container_id: container_id,
142
- timeout_seconds: timeout_seconds
143
- }
144
- end
145
-
146
- @service.stop_container(request)
147
- end
148
-
149
- def remove_container(container_id, force: false)
150
- request = if grpc_available?
151
- Makit::V1::Podman::Service::RemoveContainerRequest.new(
152
- container_id: container_id,
153
- force: force
154
- )
155
- else
156
- {
157
- container_id: container_id,
158
- force: force
159
- }
160
- end
161
-
162
- @service.remove_container(request)
163
- end
164
-
165
- def list_containers(all: false, filter: nil)
166
- request = if grpc_available?
167
- Makit::V1::Podman::Service::ListContainersRequest.new(
168
- all: all,
169
- filter: filter
170
- )
171
- else
172
- {
173
- all: all,
174
- filter: filter
175
- }
176
- end
177
-
178
- @service.list_containers(request)
179
- end
180
-
181
- def inspect_container(container_id)
182
- request = if grpc_available?
183
- Makit::V1::Podman::Service::InspectContainerRequest.new(
184
- container_id: container_id
185
- )
186
- else
187
- {
188
- container_id: container_id
189
- }
190
- end
191
-
192
- @service.inspect_container(request)
193
- end
194
-
195
- def run_script(image, script_content, **options)
196
- # Create container
197
- container_request = if grpc_available?
198
- Makit::V1::Podman::Service::CreateContainerRequest.new(
199
- name: options[:name] || "makit-#{SecureRandom.uuid}",
200
- image: image,
201
- command: ["sleep", "infinity"],
202
- environment: options[:environment] || {},
203
- volume_mounts: options[:volume_mounts] || [],
204
- working_directory: options[:working_directory] || "/tmp",
205
- auto_remove: false
206
- )
207
- else
208
- {
209
- name: options[:name] || "makit-#{SecureRandom.uuid}",
210
- image: image,
211
- command: ["sleep", "infinity"],
212
- environment: options[:environment] || {},
213
- volume_mounts: options[:volume_mounts] || [],
214
- working_directory: options[:working_directory] || "/tmp",
215
- auto_remove: false
216
- }
217
- end
218
-
219
- container_response = @service.create_container(container_request)
220
- return container_response unless container_response.respond_to?(:success) ? container_response.success : container_response[:success]
221
-
222
- # Start container
223
- container_id = container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id]
224
- start_response = start_container(container_id)
225
- return start_response unless start_response.respond_to?(:success) ? start_response.success : start_response[:success]
226
-
227
- # Execute script
228
- script_request = if grpc_available?
229
- Makit::V1::Podman::Service::ExecuteScriptRequest.new(
230
- container_id: container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id],
231
- script_content: script_content,
232
- environment: options[:environment] || [],
233
- working_directory: options[:working_directory] || "/tmp",
234
- timeout_seconds: options[:timeout] || 300,
235
- capture_output: options[:capture_output] != false,
236
- capture_errors: options[:capture_errors] != false
237
- )
238
- else
239
- {
240
- container_id: container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id],
241
- script_content: script_content,
242
- environment: options[:environment] || [],
243
- working_directory: options[:working_directory] || "/tmp",
244
- timeout_seconds: options[:timeout] || 300,
245
- capture_output: options[:capture_output] != false,
246
- capture_errors: options[:capture_errors] != false
247
- }
248
- end
249
-
250
- result = @service.execute_script(script_request)
251
-
252
- # Cleanup container
253
- remove_container(container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id], force: true)
254
-
255
- result
256
- end
257
-
258
- def run_command(image, command, **options)
259
- request = if grpc_available?
260
- Makit::V1::Podman::Service::RunContainerRequest.new(
261
- image: image,
262
- command: command,
263
- args: options[:args] || [],
264
- environment: options[:environment] || {},
265
- volume_mounts: options[:volume_mounts] || [],
266
- port_mappings: options[:port_mappings] || [],
267
- working_directory: options[:working_directory] || "/tmp",
268
- user: options[:user],
269
- auto_remove: options[:auto_remove] != false,
270
- interactive: options[:interactive] || false,
271
- tty: options[:tty] || false,
272
- timeout_seconds: options[:timeout] || 300,
273
- capture_output: options[:capture_output] != false,
274
- capture_errors: options[:capture_errors] != false,
275
- labels: options[:labels] || {}
276
- )
277
- else
278
- {
279
- image: image,
280
- command: command,
281
- args: options[:args] || [],
282
- environment: options[:environment] || {},
283
- volume_mounts: options[:volume_mounts] || [],
284
- port_mappings: options[:port_mappings] || [],
285
- working_directory: options[:working_directory] || "/tmp",
286
- user: options[:user],
287
- auto_remove: options[:auto_remove] != false,
288
- interactive: options[:interactive] || false,
289
- tty: options[:tty] || false,
290
- timeout_seconds: options[:timeout] || 300,
291
- capture_output: options[:capture_output] != false,
292
- capture_errors: options[:capture_errors] != false,
293
- labels: options[:labels] || {}
294
- }
295
- end
296
-
297
- @service.run_container(request)
298
- end
299
-
300
- def execute_script_in_container(container_id, script_content, **options)
301
- request = if grpc_available?
302
- Makit::V1::Podman::Service::ExecuteScriptRequest.new(
303
- container_id: container_id,
304
- script_content: script_content,
305
- environment: options[:environment] || [],
306
- working_directory: options[:working_directory],
307
- user: options[:user],
308
- timeout_seconds: options[:timeout] || 300,
309
- capture_output: options[:capture_output] != false,
310
- capture_errors: options[:capture_errors] != false
311
- )
312
- else
313
- {
314
- container_id: container_id,
315
- script_content: script_content,
316
- environment: options[:environment] || [],
317
- working_directory: options[:working_directory],
318
- user: options[:user],
319
- timeout_seconds: options[:timeout] || 300,
320
- capture_output: options[:capture_output] != false,
321
- capture_errors: options[:capture_errors] != false
322
- }
323
- end
324
-
325
- @service.execute_script(request)
326
- end
327
-
328
- def execute_command_in_container(container_id, command, **options)
329
- request = if grpc_available?
330
- Makit::V1::Podman::Service::ExecuteCommandRequest.new(
331
- container_id: container_id,
332
- command: command,
333
- environment: options[:environment] || [],
334
- working_directory: options[:working_directory],
335
- user: options[:user],
336
- timeout_seconds: options[:timeout] || 300,
337
- capture_output: options[:capture_output] != false,
338
- capture_errors: options[:capture_errors] != false
339
- )
340
- else
341
- {
342
- container_id: container_id,
343
- command: command,
344
- environment: options[:environment] || [],
345
- working_directory: options[:working_directory],
346
- user: options[:user],
347
- timeout_seconds: options[:timeout] || 300,
348
- capture_output: options[:capture_output] != false,
349
- capture_errors: options[:capture_errors] != false
350
- }
351
- end
352
-
353
- @service.execute_command(request)
354
- end
355
-
356
- def create_volume(name:, **options)
357
- request = if grpc_available?
358
- Makit::V1::Podman::Service::CreateVolumeRequest.new(
359
- name: name,
360
- driver: options[:driver],
361
- labels: options[:labels] || {},
362
- options: options[:options] || {}
363
- )
364
- else
365
- {
366
- name: name,
367
- driver: options[:driver],
368
- labels: options[:labels] || {},
369
- options: options[:options] || {}
370
- }
371
- end
372
-
373
- @service.create_volume(request)
374
- end
375
-
376
- def list_volumes(filter: nil)
377
- request = if grpc_available?
378
- Makit::V1::Podman::Service::ListVolumesRequest.new(
379
- filter: filter
380
- )
381
- else
382
- {
383
- filter: filter
384
- }
385
- end
386
-
387
- @service.list_volumes(request)
388
- end
389
-
390
- def remove_volume(volume_name, force: false)
391
- request = if grpc_available?
392
- Makit::V1::Podman::Service::RemoveVolumeRequest.new(
393
- volume_name: volume_name,
394
- force: force
395
- )
396
- else
397
- {
398
- volume_name: volume_name,
399
- force: force
400
- }
401
- end
402
-
403
- @service.remove_volume(request)
404
- end
405
-
406
- def health_check
407
- @service.health_check(nil)
408
- end
409
-
410
- def version
411
- @service.get_version(nil)
412
- end
413
-
414
- def system_info
415
- @service.get_system_info(nil)
416
- end
417
-
418
- # Helper methods for creating common objects
419
- def create_volume_mount(host_path:, container_path:, mode: "rw")
420
- if grpc_available?
421
- Makit::V1::Podman::Service::VolumeMount.new(
422
- host_path: host_path,
423
- container_path: container_path,
424
- mode: mode
425
- )
426
- else
427
- {
428
- host_path: host_path,
429
- container_path: container_path,
430
- mode: mode
431
- }
432
- end
433
- end
434
-
435
- def create_port_mapping(host_port:, container_port:, protocol: "tcp")
436
- if grpc_available?
437
- Makit::V1::Podman::Service::PortMapping.new(
438
- host_port: host_port,
439
- container_port: container_port,
440
- protocol: protocol
441
- )
442
- else
443
- {
444
- host_port: host_port,
445
- container_port: container_port,
446
- protocol: protocol
447
- }
448
- end
449
- end
450
-
451
- private
452
-
453
- def grpc_available?
454
- PodmanServiceImpl.grpc_available?
455
- end
456
- end
457
- end
458
- end
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "podman_service_impl"
4
+
5
+ module Makit
6
+ module Podman
7
+ class Podman
8
+ def initialize(podman_executable: "podman")
9
+ @service = PodmanServiceImpl.new(podman_executable: podman_executable)
10
+ end
11
+
12
+ # High-level convenience methods
13
+ def pull_image(image_name, tag: "latest", force: false)
14
+ request = if grpc_available?
15
+ Makit::V1::Podman::Service::PullImageRequest.new(
16
+ image_name: image_name,
17
+ tag: tag,
18
+ force: force
19
+ )
20
+ else
21
+ {
22
+ image_name: image_name,
23
+ tag: tag,
24
+ force: force
25
+ }
26
+ end
27
+
28
+ @service.pull_image(request)
29
+ end
30
+
31
+ def list_images(all: false, filter: nil)
32
+ request = if grpc_available?
33
+ Makit::V1::Podman::Service::ListImagesRequest.new(
34
+ all: all,
35
+ filter: filter
36
+ )
37
+ else
38
+ {
39
+ all: all,
40
+ filter: filter
41
+ }
42
+ end
43
+
44
+ @service.list_images(request)
45
+ end
46
+
47
+ def remove_image(image_id, force: false)
48
+ request = if grpc_available?
49
+ Makit::V1::Podman::Service::RemoveImageRequest.new(
50
+ image_id: image_id,
51
+ force: force
52
+ )
53
+ else
54
+ {
55
+ image_id: image_id,
56
+ force: force
57
+ }
58
+ end
59
+
60
+ @service.remove_image(request)
61
+ end
62
+
63
+ def inspect_image(image_id)
64
+ request = if grpc_available?
65
+ Makit::V1::Podman::Service::InspectImageRequest.new(
66
+ image_id: image_id
67
+ )
68
+ else
69
+ {
70
+ image_id: image_id
71
+ }
72
+ end
73
+
74
+ @service.inspect_image(request)
75
+ end
76
+
77
+ def create_container(name:, image:, **options)
78
+ request = if grpc_available?
79
+ Makit::V1::Podman::Service::CreateContainerRequest.new(
80
+ name: name,
81
+ image: image,
82
+ command: options[:command] || [],
83
+ args: options[:args] || [],
84
+ environment: options[:environment] || {},
85
+ volume_mounts: options[:volume_mounts] || [],
86
+ port_mappings: options[:port_mappings] || [],
87
+ working_directory: options[:working_directory],
88
+ user: options[:user],
89
+ privileged: options[:privileged] || false,
90
+ capabilities: options[:capabilities] || [],
91
+ labels: options[:labels] || {},
92
+ auto_remove: options[:auto_remove] || false,
93
+ memory_limit: options[:memory_limit] || 0,
94
+ cpu_limit: options[:cpu_limit] || 0
95
+ )
96
+ else
97
+ {
98
+ name: name,
99
+ image: image,
100
+ command: options[:command] || [],
101
+ args: options[:args] || [],
102
+ environment: options[:environment] || {},
103
+ volume_mounts: options[:volume_mounts] || [],
104
+ port_mappings: options[:port_mappings] || [],
105
+ working_directory: options[:working_directory],
106
+ user: options[:user],
107
+ privileged: options[:privileged] || false,
108
+ capabilities: options[:capabilities] || [],
109
+ labels: options[:labels] || {},
110
+ auto_remove: options[:auto_remove] || false,
111
+ memory_limit: options[:memory_limit] || 0,
112
+ cpu_limit: options[:cpu_limit] || 0
113
+ }
114
+ end
115
+
116
+ @service.create_container(request)
117
+ end
118
+
119
+ def start_container(container_id)
120
+ request = if grpc_available?
121
+ Makit::V1::Podman::Service::StartContainerRequest.new(
122
+ container_id: container_id
123
+ )
124
+ else
125
+ {
126
+ container_id: container_id
127
+ }
128
+ end
129
+
130
+ @service.start_container(request)
131
+ end
132
+
133
+ def stop_container(container_id, timeout_seconds: 10)
134
+ request = if grpc_available?
135
+ Makit::V1::Podman::Service::StopContainerRequest.new(
136
+ container_id: container_id,
137
+ timeout_seconds: timeout_seconds
138
+ )
139
+ else
140
+ {
141
+ container_id: container_id,
142
+ timeout_seconds: timeout_seconds
143
+ }
144
+ end
145
+
146
+ @service.stop_container(request)
147
+ end
148
+
149
+ def remove_container(container_id, force: false)
150
+ request = if grpc_available?
151
+ Makit::V1::Podman::Service::RemoveContainerRequest.new(
152
+ container_id: container_id,
153
+ force: force
154
+ )
155
+ else
156
+ {
157
+ container_id: container_id,
158
+ force: force
159
+ }
160
+ end
161
+
162
+ @service.remove_container(request)
163
+ end
164
+
165
+ def list_containers(all: false, filter: nil)
166
+ request = if grpc_available?
167
+ Makit::V1::Podman::Service::ListContainersRequest.new(
168
+ all: all,
169
+ filter: filter
170
+ )
171
+ else
172
+ {
173
+ all: all,
174
+ filter: filter
175
+ }
176
+ end
177
+
178
+ @service.list_containers(request)
179
+ end
180
+
181
+ def inspect_container(container_id)
182
+ request = if grpc_available?
183
+ Makit::V1::Podman::Service::InspectContainerRequest.new(
184
+ container_id: container_id
185
+ )
186
+ else
187
+ {
188
+ container_id: container_id
189
+ }
190
+ end
191
+
192
+ @service.inspect_container(request)
193
+ end
194
+
195
+ def run_script(image, script_content, **options)
196
+ # Create container
197
+ container_request = if grpc_available?
198
+ Makit::V1::Podman::Service::CreateContainerRequest.new(
199
+ name: options[:name] || "makit-#{SecureRandom.uuid}",
200
+ image: image,
201
+ command: ["sleep", "infinity"],
202
+ environment: options[:environment] || {},
203
+ volume_mounts: options[:volume_mounts] || [],
204
+ working_directory: options[:working_directory] || "/tmp",
205
+ auto_remove: false
206
+ )
207
+ else
208
+ {
209
+ name: options[:name] || "makit-#{SecureRandom.uuid}",
210
+ image: image,
211
+ command: ["sleep", "infinity"],
212
+ environment: options[:environment] || {},
213
+ volume_mounts: options[:volume_mounts] || [],
214
+ working_directory: options[:working_directory] || "/tmp",
215
+ auto_remove: false
216
+ }
217
+ end
218
+
219
+ container_response = @service.create_container(container_request)
220
+ return container_response unless container_response.respond_to?(:success) ? container_response.success : container_response[:success]
221
+
222
+ # Start container
223
+ container_id = container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id]
224
+ start_response = start_container(container_id)
225
+ return start_response unless start_response.respond_to?(:success) ? start_response.success : start_response[:success]
226
+
227
+ # Execute script
228
+ script_request = if grpc_available?
229
+ Makit::V1::Podman::Service::ExecuteScriptRequest.new(
230
+ container_id: container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id],
231
+ script_content: script_content,
232
+ environment: options[:environment] || [],
233
+ working_directory: options[:working_directory] || "/tmp",
234
+ timeout_seconds: options[:timeout] || 300,
235
+ capture_output: options[:capture_output] != false,
236
+ capture_errors: options[:capture_errors] != false
237
+ )
238
+ else
239
+ {
240
+ container_id: container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id],
241
+ script_content: script_content,
242
+ environment: options[:environment] || [],
243
+ working_directory: options[:working_directory] || "/tmp",
244
+ timeout_seconds: options[:timeout] || 300,
245
+ capture_output: options[:capture_output] != false,
246
+ capture_errors: options[:capture_errors] != false
247
+ }
248
+ end
249
+
250
+ result = @service.execute_script(script_request)
251
+
252
+ # Cleanup container
253
+ remove_container(container_response.respond_to?(:container_id) ? container_response.container_id : container_response[:container_id], force: true)
254
+
255
+ result
256
+ end
257
+
258
+ def run_command(image, command, **options)
259
+ request = if grpc_available?
260
+ Makit::V1::Podman::Service::RunContainerRequest.new(
261
+ image: image,
262
+ command: command,
263
+ args: options[:args] || [],
264
+ environment: options[:environment] || {},
265
+ volume_mounts: options[:volume_mounts] || [],
266
+ port_mappings: options[:port_mappings] || [],
267
+ working_directory: options[:working_directory] || "/tmp",
268
+ user: options[:user],
269
+ auto_remove: options[:auto_remove] != false,
270
+ interactive: options[:interactive] || false,
271
+ tty: options[:tty] || false,
272
+ timeout_seconds: options[:timeout] || 300,
273
+ capture_output: options[:capture_output] != false,
274
+ capture_errors: options[:capture_errors] != false,
275
+ labels: options[:labels] || {}
276
+ )
277
+ else
278
+ {
279
+ image: image,
280
+ command: command,
281
+ args: options[:args] || [],
282
+ environment: options[:environment] || {},
283
+ volume_mounts: options[:volume_mounts] || [],
284
+ port_mappings: options[:port_mappings] || [],
285
+ working_directory: options[:working_directory] || "/tmp",
286
+ user: options[:user],
287
+ auto_remove: options[:auto_remove] != false,
288
+ interactive: options[:interactive] || false,
289
+ tty: options[:tty] || false,
290
+ timeout_seconds: options[:timeout] || 300,
291
+ capture_output: options[:capture_output] != false,
292
+ capture_errors: options[:capture_errors] != false,
293
+ labels: options[:labels] || {}
294
+ }
295
+ end
296
+
297
+ @service.run_container(request)
298
+ end
299
+
300
+ def execute_script_in_container(container_id, script_content, **options)
301
+ request = if grpc_available?
302
+ Makit::V1::Podman::Service::ExecuteScriptRequest.new(
303
+ container_id: container_id,
304
+ script_content: script_content,
305
+ environment: options[:environment] || [],
306
+ working_directory: options[:working_directory],
307
+ user: options[:user],
308
+ timeout_seconds: options[:timeout] || 300,
309
+ capture_output: options[:capture_output] != false,
310
+ capture_errors: options[:capture_errors] != false
311
+ )
312
+ else
313
+ {
314
+ container_id: container_id,
315
+ script_content: script_content,
316
+ environment: options[:environment] || [],
317
+ working_directory: options[:working_directory],
318
+ user: options[:user],
319
+ timeout_seconds: options[:timeout] || 300,
320
+ capture_output: options[:capture_output] != false,
321
+ capture_errors: options[:capture_errors] != false
322
+ }
323
+ end
324
+
325
+ @service.execute_script(request)
326
+ end
327
+
328
+ def execute_command_in_container(container_id, command, **options)
329
+ request = if grpc_available?
330
+ Makit::V1::Podman::Service::ExecuteCommandRequest.new(
331
+ container_id: container_id,
332
+ command: command,
333
+ environment: options[:environment] || [],
334
+ working_directory: options[:working_directory],
335
+ user: options[:user],
336
+ timeout_seconds: options[:timeout] || 300,
337
+ capture_output: options[:capture_output] != false,
338
+ capture_errors: options[:capture_errors] != false
339
+ )
340
+ else
341
+ {
342
+ container_id: container_id,
343
+ command: command,
344
+ environment: options[:environment] || [],
345
+ working_directory: options[:working_directory],
346
+ user: options[:user],
347
+ timeout_seconds: options[:timeout] || 300,
348
+ capture_output: options[:capture_output] != false,
349
+ capture_errors: options[:capture_errors] != false
350
+ }
351
+ end
352
+
353
+ @service.execute_command(request)
354
+ end
355
+
356
+ def create_volume(name:, **options)
357
+ request = if grpc_available?
358
+ Makit::V1::Podman::Service::CreateVolumeRequest.new(
359
+ name: name,
360
+ driver: options[:driver],
361
+ labels: options[:labels] || {},
362
+ options: options[:options] || {}
363
+ )
364
+ else
365
+ {
366
+ name: name,
367
+ driver: options[:driver],
368
+ labels: options[:labels] || {},
369
+ options: options[:options] || {}
370
+ }
371
+ end
372
+
373
+ @service.create_volume(request)
374
+ end
375
+
376
+ def list_volumes(filter: nil)
377
+ request = if grpc_available?
378
+ Makit::V1::Podman::Service::ListVolumesRequest.new(
379
+ filter: filter
380
+ )
381
+ else
382
+ {
383
+ filter: filter
384
+ }
385
+ end
386
+
387
+ @service.list_volumes(request)
388
+ end
389
+
390
+ def remove_volume(volume_name, force: false)
391
+ request = if grpc_available?
392
+ Makit::V1::Podman::Service::RemoveVolumeRequest.new(
393
+ volume_name: volume_name,
394
+ force: force
395
+ )
396
+ else
397
+ {
398
+ volume_name: volume_name,
399
+ force: force
400
+ }
401
+ end
402
+
403
+ @service.remove_volume(request)
404
+ end
405
+
406
+ def health_check
407
+ @service.health_check(nil)
408
+ end
409
+
410
+ def version
411
+ @service.get_version(nil)
412
+ end
413
+
414
+ def system_info
415
+ @service.get_system_info(nil)
416
+ end
417
+
418
+ # Helper methods for creating common objects
419
+ def create_volume_mount(host_path:, container_path:, mode: "rw")
420
+ if grpc_available?
421
+ Makit::V1::Podman::Service::VolumeMount.new(
422
+ host_path: host_path,
423
+ container_path: container_path,
424
+ mode: mode
425
+ )
426
+ else
427
+ {
428
+ host_path: host_path,
429
+ container_path: container_path,
430
+ mode: mode
431
+ }
432
+ end
433
+ end
434
+
435
+ def create_port_mapping(host_port:, container_port:, protocol: "tcp")
436
+ if grpc_available?
437
+ Makit::V1::Podman::Service::PortMapping.new(
438
+ host_port: host_port,
439
+ container_port: container_port,
440
+ protocol: protocol
441
+ )
442
+ else
443
+ {
444
+ host_port: host_port,
445
+ container_port: container_port,
446
+ protocol: protocol
447
+ }
448
+ end
449
+ end
450
+
451
+ private
452
+
453
+ def grpc_available?
454
+ PodmanServiceImpl.grpc_available?
455
+ end
456
+ end
457
+ end
458
+ end