dagger_ruby 0.2.0 → 0.3.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +7 -0
- data/dagger_ruby.gemspec +17 -12
- data/lib/dagger_ruby/cache_volume.rb +1 -2
- data/lib/dagger_ruby/client.rb +30 -24
- data/lib/dagger_ruby/container.rb +14 -13
- data/lib/dagger_ruby/dagger_object.rb +2 -2
- data/lib/dagger_ruby/directory.rb +10 -4
- data/lib/dagger_ruby/file.rb +2 -2
- data/lib/dagger_ruby/query_builder.rb +15 -15
- data/lib/dagger_ruby/service.rb +12 -12
- data/lib/dagger_ruby/version.rb +1 -1
- data/lib/dagger_ruby.rb +3 -3
- metadata +21 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9bb342a6b2f94fd6077e596faed26989210cbd80f77b1dc98d960a38296e701e
|
4
|
+
data.tar.gz: ee43c34f786d43639538ffefae5bc0554c983071b6411ac9a9031d0193c763c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7272a0f5320e74fb5b329f8d8928c4061bba358fe1bf0a1f91234546504b9695fd9858a42642cb916ff2dae94ab6ad1251d61452ef9e0ca7fc6da863fc64d734
|
7
|
+
data.tar.gz: 3e860fb3f81ccadae92fafa0ada49e0b6609829b2cca3305b8c1af3d964adac54362950a0d643a0698fad70132c0f5af9c8ecfe21f8816a6882b407b1c280562
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
7
|
|
8
|
+
## [0.3.0] - 2024-12-19
|
9
|
+
|
10
|
+
### Fixed
|
11
|
+
|
12
|
+
- Removed unwanted Gemfile dependencies
|
13
|
+
- Rubocop
|
14
|
+
|
8
15
|
## [0.1.0] - 2024-12-19
|
9
16
|
|
10
17
|
### Added
|
data/dagger_ruby.gemspec
CHANGED
@@ -5,11 +5,15 @@ require_relative "lib/dagger_ruby/version"
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "dagger_ruby"
|
7
7
|
spec.version = DaggerRuby::VERSION
|
8
|
-
spec.authors = [
|
9
|
-
spec.email = [
|
8
|
+
spec.authors = ["Gaurav Tiwari", "Claude Sonnet 4 + GPT-4"]
|
9
|
+
spec.email = ["gaurav@gauravtiwari.co.uk"]
|
10
10
|
|
11
11
|
spec.summary = "A Ruby SDK for Dagger - build powerful CI/CD pipelines using Ruby"
|
12
|
-
|
12
|
+
# rubocop:disable Layout/LineLength
|
13
|
+
spec.description = "DaggerRuby provides a fluent, idiomatic Ruby interface to Dagger's container-based CI/CD engine. " \
|
14
|
+
"Define build pipelines programmatically with Ruby instead of YAML. " \
|
15
|
+
"Features lazy execution, caching, secrets, and service orchestration."
|
16
|
+
# rubocop:enable Layout/LineLength
|
13
17
|
spec.homepage = "https://github.com/boringcache/dagger_ruby"
|
14
18
|
spec.license = "MIT"
|
15
19
|
spec.required_ruby_version = ">= 3.1.0"
|
@@ -22,21 +26,22 @@ Gem::Specification.new do |spec|
|
|
22
26
|
|
23
27
|
# Specify which files should be added to the gem when it is released.
|
24
28
|
spec.files = Dir.glob(%w[
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
lib/**/*
|
30
|
+
*.gemspec
|
31
|
+
LICENSE*
|
32
|
+
CHANGELOG*
|
33
|
+
README*
|
34
|
+
.yardopts
|
35
|
+
]).reject { |f| File.directory?(f) }
|
32
36
|
|
33
37
|
spec.bindir = "exe"
|
34
38
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
35
|
-
spec.require_paths = [
|
39
|
+
spec.require_paths = ["lib"]
|
36
40
|
|
37
41
|
# Core dependencies - using only Ruby stdlib
|
38
|
-
spec.add_dependency "json", "~> 2.6"
|
39
42
|
spec.add_dependency "base64", "~> 0.1"
|
43
|
+
spec.add_dependency "json", "~> 2.6"
|
44
|
+
spec.add_dependency "logger", "~> 1.4"
|
40
45
|
|
41
46
|
# Development dependencies are managed in Gemfile
|
42
47
|
spec.metadata["rubygems_mfa_required"] = "true"
|
data/lib/dagger_ruby/client.rb
CHANGED
@@ -22,11 +22,12 @@ module DaggerRuby
|
|
22
22
|
def initialize(config: nil)
|
23
23
|
@config = config || Config.new
|
24
24
|
|
25
|
-
port = ENV
|
26
|
-
@session_token = ENV
|
25
|
+
port = ENV.fetch("DAGGER_SESSION_PORT", nil)
|
26
|
+
@session_token = ENV.fetch("DAGGER_SESSION_TOKEN", nil)
|
27
27
|
|
28
28
|
unless port && @session_token
|
29
|
-
raise ConnectionError,
|
29
|
+
raise ConnectionError,
|
30
|
+
"This script must be run within a Dagger session.\nRun with: dagger run ruby script.rb [args...]"
|
30
31
|
end
|
31
32
|
|
32
33
|
@endpoint = "http://127.0.0.1:#{port}/query"
|
@@ -41,18 +42,18 @@ module DaggerRuby
|
|
41
42
|
|
42
43
|
begin
|
43
44
|
execute_query("query { container { id } }")
|
44
|
-
rescue => e
|
45
|
+
rescue StandardError => e
|
45
46
|
raise ConnectionError, "Failed to connect to Dagger engine: #{e.message}"
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
50
|
def container(opts = {})
|
50
51
|
query = QueryBuilder.new
|
51
|
-
if opts[:platform]
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
52
|
+
query = if opts[:platform]
|
53
|
+
query.chain_operation("container", { "platform" => opts[:platform] })
|
54
|
+
else
|
55
|
+
query.chain_operation("container")
|
56
|
+
end
|
56
57
|
Container.new(query, self)
|
57
58
|
end
|
58
59
|
|
@@ -82,10 +83,19 @@ module DaggerRuby
|
|
82
83
|
args = { "url" => url }
|
83
84
|
args["keepGitDir"] = opts[:keep_git_dir] if opts.key?(:keep_git_dir)
|
84
85
|
args["sshKnownHosts"] = opts[:ssh_known_hosts] if opts[:ssh_known_hosts]
|
85
|
-
|
86
|
+
if opts[:ssh_auth_socket]
|
87
|
+
args["sshAuthSocket"] =
|
88
|
+
opts[:ssh_auth_socket].is_a?(DaggerObject) ? opts[:ssh_auth_socket].id : opts[:ssh_auth_socket]
|
89
|
+
end
|
86
90
|
args["httpAuthUsername"] = opts[:http_auth_username] if opts[:http_auth_username]
|
87
|
-
|
88
|
-
|
91
|
+
if opts[:http_auth_token]
|
92
|
+
args["httpAuthToken"] =
|
93
|
+
opts[:http_auth_token].is_a?(DaggerObject) ? opts[:http_auth_token].id : opts[:http_auth_token]
|
94
|
+
end
|
95
|
+
if opts[:http_auth_header]
|
96
|
+
args["httpAuthHeader"] =
|
97
|
+
opts[:http_auth_header].is_a?(DaggerObject) ? opts[:http_auth_header].id : opts[:http_auth_header]
|
98
|
+
end
|
89
99
|
|
90
100
|
query = QueryBuilder.new
|
91
101
|
query = query.chain_operation("git", args)
|
@@ -96,7 +106,10 @@ module DaggerRuby
|
|
96
106
|
args = { "url" => url }
|
97
107
|
args["name"] = opts[:name] if opts[:name]
|
98
108
|
args["permissions"] = opts[:permissions] if opts[:permissions]
|
99
|
-
|
109
|
+
if opts[:auth_header]
|
110
|
+
args["authHeader"] =
|
111
|
+
opts[:auth_header].is_a?(DaggerObject) ? opts[:auth_header].id : opts[:auth_header]
|
112
|
+
end
|
100
113
|
|
101
114
|
query = QueryBuilder.new
|
102
115
|
query = query.chain_operation("http", args)
|
@@ -109,8 +122,7 @@ module DaggerRuby
|
|
109
122
|
Secret.new(query, self)
|
110
123
|
end
|
111
124
|
|
112
|
-
def close
|
113
|
-
end
|
125
|
+
def close; end
|
114
126
|
|
115
127
|
def execute_query(query)
|
116
128
|
http = Net::HTTP.new(@uri.host, @uri.port)
|
@@ -140,17 +152,11 @@ module DaggerRuby
|
|
140
152
|
raise GraphQLError, "Invalid JSON response from server"
|
141
153
|
end
|
142
154
|
|
143
|
-
if parsed_body.nil?
|
144
|
-
raise GraphQLError, "Empty response from server"
|
145
|
-
end
|
155
|
+
raise GraphQLError, "Empty response from server" if parsed_body.nil?
|
146
156
|
|
147
|
-
if parsed_body["errors"]
|
148
|
-
raise GraphQLError, parsed_body["errors"].map { |e| e["message"] }.join(", ")
|
149
|
-
end
|
157
|
+
raise GraphQLError, parsed_body["errors"].map { |e| e["message"] }.join(", ") if parsed_body["errors"]
|
150
158
|
|
151
|
-
if parsed_body["data"].nil?
|
152
|
-
raise GraphQLError, "No data in response"
|
153
|
-
end
|
159
|
+
raise GraphQLError, "No data in response" if parsed_body["data"].nil?
|
154
160
|
|
155
161
|
parsed_body["data"]
|
156
162
|
when 400
|
@@ -14,7 +14,6 @@ module DaggerRuby
|
|
14
14
|
"container"
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
17
|
def from(address)
|
19
18
|
chain_operation("from", { "address" => address })
|
20
19
|
end
|
@@ -107,7 +106,7 @@ module DaggerRuby
|
|
107
106
|
chain_operation("withUser", { "name" => name })
|
108
107
|
end
|
109
108
|
|
110
|
-
def with_registry_auth(
|
109
|
+
def with_registry_auth(_address, _username, _secret)
|
111
110
|
puts "⚠️ Registry auth temporarily disabled due to GraphQL formatting issues"
|
112
111
|
self
|
113
112
|
end
|
@@ -119,7 +118,7 @@ module DaggerRuby
|
|
119
118
|
def with_service_binding(alias_name, service)
|
120
119
|
args = {
|
121
120
|
"alias" => alias_name,
|
122
|
-
"service" => service.is_a?(DaggerObject) ? service.id : service
|
121
|
+
"service" => service.is_a?(DaggerObject) ? service.id : service,
|
123
122
|
}
|
124
123
|
chain_operation("withServiceBinding", args)
|
125
124
|
end
|
@@ -128,7 +127,10 @@ module DaggerRuby
|
|
128
127
|
args = {}
|
129
128
|
args["args"] = opts[:args] if opts[:args]
|
130
129
|
args["useEntrypoint"] = opts[:use_entrypoint] if opts.key?(:use_entrypoint)
|
131
|
-
|
130
|
+
if opts.key?(:experimental_privileged_nesting)
|
131
|
+
args["experimentalPrivilegedNesting"] =
|
132
|
+
opts[:experimental_privileged_nesting]
|
133
|
+
end
|
132
134
|
args["insecureRootCapabilities"] = opts[:insecure_root_capabilities] if opts.key?(:insecure_root_capabilities)
|
133
135
|
args["expand"] = opts[:expand] if opts.key?(:expand)
|
134
136
|
args["noInit"] = opts[:no_init] if opts.key?(:no_init)
|
@@ -144,7 +146,7 @@ module DaggerRuby
|
|
144
146
|
args["buildArgs"] = opts[:build_args] if opts[:build_args]
|
145
147
|
|
146
148
|
if opts[:secrets]
|
147
|
-
|
149
|
+
raise NotImplementedError, "Build secrets are not yet supported. Use with_mounted_secret instead."
|
148
150
|
end
|
149
151
|
|
150
152
|
args["noInit"] = opts[:no_init] if opts.key?(:no_init)
|
@@ -152,8 +154,6 @@ module DaggerRuby
|
|
152
154
|
chain_operation("build", args)
|
153
155
|
end
|
154
156
|
|
155
|
-
|
156
|
-
|
157
157
|
def import(source, opts = {})
|
158
158
|
args = { "source" => source.is_a?(DaggerObject) ? source.id : source }
|
159
159
|
args["tag"] = opts[:tag] if opts[:tag]
|
@@ -164,7 +164,10 @@ module DaggerRuby
|
|
164
164
|
def terminal(opts = {})
|
165
165
|
args = {}
|
166
166
|
args["cmd"] = opts[:cmd] if opts[:cmd]
|
167
|
-
|
167
|
+
if opts.key?(:experimental_privileged_nesting)
|
168
|
+
args["experimentalPrivilegedNesting"] =
|
169
|
+
opts[:experimental_privileged_nesting]
|
170
|
+
end
|
168
171
|
args["insecureRootCapabilities"] = opts[:insecure_root_capabilities] if opts.key?(:insecure_root_capabilities)
|
169
172
|
|
170
173
|
if args.empty?
|
@@ -234,7 +237,6 @@ module DaggerRuby
|
|
234
237
|
chain_operation("withoutExposedPort", args)
|
235
238
|
end
|
236
239
|
|
237
|
-
|
238
240
|
def directory(path, opts = {})
|
239
241
|
args = { "path" => path }
|
240
242
|
args["expand"] = opts[:expand] if opts.key?(:expand)
|
@@ -247,7 +249,6 @@ module DaggerRuby
|
|
247
249
|
get_object("file", File, args)
|
248
250
|
end
|
249
251
|
|
250
|
-
|
251
252
|
def stdout
|
252
253
|
get_scalar("stdout")
|
253
254
|
end
|
@@ -355,7 +356,7 @@ module DaggerRuby
|
|
355
356
|
end
|
356
357
|
|
357
358
|
def sync
|
358
|
-
get_scalar("id")
|
359
|
+
get_scalar("id") # Force execution by getting ID
|
359
360
|
self
|
360
361
|
end
|
361
362
|
|
@@ -378,10 +379,10 @@ module DaggerRuby
|
|
378
379
|
when NilClass
|
379
380
|
"null"
|
380
381
|
when Array
|
381
|
-
"[#{value.map { |v| format_value(v) }.join(
|
382
|
+
"[#{value.map { |v| format_value(v) }.join(", ")}]"
|
382
383
|
when Hash
|
383
384
|
formatted_pairs = value.map { |k, v| "#{k}: #{format_value(v)}" }
|
384
|
-
"{ #{formatted_pairs.join(
|
385
|
+
"{ #{formatted_pairs.join(", ")} }"
|
385
386
|
when DaggerObject
|
386
387
|
value.id
|
387
388
|
else
|
@@ -52,11 +52,11 @@ module DaggerRuby
|
|
52
52
|
klass.new(new_query, @client)
|
53
53
|
end
|
54
54
|
|
55
|
-
def get_object_array(field, klass,
|
55
|
+
def get_object_array(field, klass, _args = {})
|
56
56
|
query = @query_builder.build_query_with_selection(field)
|
57
57
|
|
58
58
|
array_field = query.selections.find { |s| s.field == field }
|
59
|
-
array_field
|
59
|
+
array_field&.select("id")
|
60
60
|
|
61
61
|
result = @client.execute(query)
|
62
62
|
ids = extract_array_from_result(result, field)
|
@@ -111,9 +111,15 @@ module DaggerRuby
|
|
111
111
|
|
112
112
|
def terminal(opts = {})
|
113
113
|
args = {}
|
114
|
-
|
114
|
+
if opts[:container]
|
115
|
+
args["container"] =
|
116
|
+
opts[:container].is_a?(DaggerObject) ? opts[:container].id : opts[:container]
|
117
|
+
end
|
115
118
|
args["cmd"] = opts[:cmd] if opts[:cmd]
|
116
|
-
|
119
|
+
if opts.key?(:experimental_privileged_nesting)
|
120
|
+
args["experimentalPrivilegedNesting"] =
|
121
|
+
opts[:experimental_privileged_nesting]
|
122
|
+
end
|
117
123
|
args["insecureRootCapabilities"] = opts[:insecure_root_capabilities] if opts.key?(:insecure_root_capabilities)
|
118
124
|
|
119
125
|
if args.empty?
|
@@ -152,10 +158,10 @@ module DaggerRuby
|
|
152
158
|
when NilClass
|
153
159
|
"null"
|
154
160
|
when Array
|
155
|
-
"[#{value.map { |v| format_value(v) }.join(
|
161
|
+
"[#{value.map { |v| format_value(v) }.join(", ")}]"
|
156
162
|
when Hash
|
157
163
|
formatted_pairs = value.map { |k, v| "#{k}: #{format_value(v)}" }
|
158
|
-
"{ #{formatted_pairs.join(
|
164
|
+
"{ #{formatted_pairs.join(", ")} }"
|
159
165
|
when DaggerObject
|
160
166
|
value.id
|
161
167
|
else
|
data/lib/dagger_ruby/file.rb
CHANGED
@@ -75,10 +75,10 @@ module DaggerRuby
|
|
75
75
|
when NilClass
|
76
76
|
"null"
|
77
77
|
when Array
|
78
|
-
"[#{value.map { |v| format_value(v) }.join(
|
78
|
+
"[#{value.map { |v| format_value(v) }.join(", ")}]"
|
79
79
|
when Hash
|
80
80
|
formatted_pairs = value.map { |k, v| "#{k}: #{format_value(v)}" }
|
81
|
-
"{ #{formatted_pairs.join(
|
81
|
+
"{ #{formatted_pairs.join(", ")} }"
|
82
82
|
when DaggerObject
|
83
83
|
value.id
|
84
84
|
else
|
@@ -15,7 +15,7 @@ module DaggerRuby
|
|
15
15
|
|
16
16
|
def chain_operation(field, args = {})
|
17
17
|
new_query = QueryBuilder.new(@root_field)
|
18
|
-
new_query.instance_variable_set(:@operation_chain, @operation_chain + [
|
18
|
+
new_query.instance_variable_set(:@operation_chain, @operation_chain + [{ field: field, args: args }])
|
19
19
|
new_query.instance_variable_set(:@variables, @variables.dup)
|
20
20
|
new_query
|
21
21
|
end
|
@@ -66,11 +66,11 @@ module DaggerRuby
|
|
66
66
|
|
67
67
|
if @operation_chain.length > 1
|
68
68
|
result << " { "
|
69
|
-
@operation_chain[1
|
69
|
+
@operation_chain[1..].each do |op|
|
70
70
|
result << "#{op[:field]}#{format_arguments(op[:args])} { "
|
71
71
|
end
|
72
72
|
result << field
|
73
|
-
result << " }" * @operation_chain.length
|
73
|
+
result << (" }" * @operation_chain.length)
|
74
74
|
else
|
75
75
|
result << " { #{field} }"
|
76
76
|
end
|
@@ -81,7 +81,7 @@ module DaggerRuby
|
|
81
81
|
def format_arguments(args)
|
82
82
|
return "" if args.empty?
|
83
83
|
|
84
|
-
"(#{args.map { |key, value| "#{key}: #{format_value(value)}" }.join(
|
84
|
+
"(#{args.map { |key, value| "#{key}: #{format_value(value)}" }.join(", ")})"
|
85
85
|
end
|
86
86
|
|
87
87
|
def format_value(value)
|
@@ -97,12 +97,12 @@ module DaggerRuby
|
|
97
97
|
when NilClass
|
98
98
|
"null"
|
99
99
|
when Array
|
100
|
-
"[#{value.map { |v| format_value(v) }.join(
|
100
|
+
"[#{value.map { |v| format_value(v) }.join(", ")}]"
|
101
101
|
when Hash
|
102
102
|
if value[:type] && value[:value]
|
103
103
|
value[:value].to_s
|
104
104
|
else
|
105
|
-
"{#{value.map { |k, v| "#{k}: #{format_value(v)}" }.join(
|
105
|
+
"{#{value.map { |k, v| "#{k}: #{format_value(v)}" }.join(", ")}}"
|
106
106
|
end
|
107
107
|
else
|
108
108
|
value.to_s
|
@@ -110,15 +110,15 @@ module DaggerRuby
|
|
110
110
|
end
|
111
111
|
|
112
112
|
def escape_string(str)
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
113
|
+
escape_map = {
|
114
|
+
'"' => '\\"',
|
115
|
+
"\\" => "\\\\",
|
116
|
+
"\n" => '\\n',
|
117
|
+
"\r" => '\\r',
|
118
|
+
"\t" => '\\t',
|
119
|
+
}
|
120
|
+
|
121
|
+
str.gsub(/["\\\n\r\t]/) { |c| escape_map[c] }
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|
data/lib/dagger_ruby/service.rb
CHANGED
@@ -46,11 +46,11 @@ module DaggerRuby
|
|
46
46
|
args = {}
|
47
47
|
args["kill"] = opts[:kill] if opts.key?(:kill)
|
48
48
|
|
49
|
-
if args.empty?
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
query = if args.empty?
|
50
|
+
@query_builder.build_query_with_selection("stop")
|
51
|
+
else
|
52
|
+
@query_builder.build_query_with_selection("stop(#{format_arguments(args)})")
|
53
|
+
end
|
54
54
|
|
55
55
|
result = @client.execute(query)
|
56
56
|
extract_value_from_result(result, "stop")
|
@@ -61,11 +61,11 @@ module DaggerRuby
|
|
61
61
|
args["ports"] = opts[:ports] if opts[:ports]
|
62
62
|
args["random"] = opts[:random] if opts.key?(:random)
|
63
63
|
|
64
|
-
if args.empty?
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
64
|
+
query = if args.empty?
|
65
|
+
@query_builder.build_query_with_selection("up")
|
66
|
+
else
|
67
|
+
@query_builder.build_query_with_selection("up(#{format_arguments(args)})")
|
68
|
+
end
|
69
69
|
|
70
70
|
result = @client.execute(query)
|
71
71
|
extract_value_from_result(result, "up")
|
@@ -99,10 +99,10 @@ module DaggerRuby
|
|
99
99
|
when NilClass
|
100
100
|
"null"
|
101
101
|
when Array
|
102
|
-
"[#{value.map { |v| format_value(v) }.join(
|
102
|
+
"[#{value.map { |v| format_value(v) }.join(", ")}]"
|
103
103
|
when Hash
|
104
104
|
formatted_pairs = value.map { |k, v| "#{k}: #{format_value(v)}" }
|
105
|
-
"{ #{formatted_pairs.join(
|
105
|
+
"{ #{formatted_pairs.join(", ")} }"
|
106
106
|
when DaggerObject
|
107
107
|
value.id
|
108
108
|
else
|
data/lib/dagger_ruby/version.rb
CHANGED
data/lib/dagger_ruby.rb
CHANGED
@@ -25,14 +25,14 @@ module DaggerRuby
|
|
25
25
|
require "open3"
|
26
26
|
|
27
27
|
# Get the current script and its arguments
|
28
|
-
script = $
|
28
|
+
script = $PROGRAM_NAME
|
29
29
|
args = ARGV
|
30
30
|
|
31
31
|
# Construct the command that dagger should run
|
32
|
-
ruby_cmd = [
|
32
|
+
ruby_cmd = ["ruby", script, *args].join(" ")
|
33
33
|
|
34
34
|
# Run dagger with our command
|
35
|
-
cmd = [
|
35
|
+
cmd = ["dagger", "run", ruby_cmd].join(" ")
|
36
36
|
|
37
37
|
# Execute the command
|
38
38
|
exec(cmd)
|
metadata
CHANGED
@@ -1,14 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dagger_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gaurav Tiwari
|
8
|
+
- Claude Sonnet 4 + GPT-4
|
8
9
|
bindir: exe
|
9
10
|
cert_chain: []
|
10
11
|
date: 1980-01-02 00:00:00.000000000 Z
|
11
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: base64
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
12
27
|
- !ruby/object:Gem::Dependency
|
13
28
|
name: json
|
14
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -24,23 +39,22 @@ dependencies:
|
|
24
39
|
- !ruby/object:Gem::Version
|
25
40
|
version: '2.6'
|
26
41
|
- !ruby/object:Gem::Dependency
|
27
|
-
name:
|
42
|
+
name: logger
|
28
43
|
requirement: !ruby/object:Gem::Requirement
|
29
44
|
requirements:
|
30
45
|
- - "~>"
|
31
46
|
- !ruby/object:Gem::Version
|
32
|
-
version: '
|
47
|
+
version: '1.4'
|
33
48
|
type: :runtime
|
34
49
|
prerelease: false
|
35
50
|
version_requirements: !ruby/object:Gem::Requirement
|
36
51
|
requirements:
|
37
52
|
- - "~>"
|
38
53
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
54
|
+
version: '1.4'
|
40
55
|
description: DaggerRuby provides a fluent, idiomatic Ruby interface to Dagger's container-based
|
41
|
-
CI/CD engine. Define build pipelines programmatically with
|
42
|
-
|
43
|
-
and service orchestration.
|
56
|
+
CI/CD engine. Define build pipelines programmatically with Ruby instead of YAML.
|
57
|
+
Features lazy execution, caching, secrets, and service orchestration.
|
44
58
|
email:
|
45
59
|
- gaurav@gauravtiwari.co.uk
|
46
60
|
executables: []
|