temporalio 0.2.0-arm64-darwin → 0.4.0-arm64-darwin
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/.yardopts +2 -0
- data/Gemfile +7 -3
- data/Rakefile +10 -296
- data/lib/temporalio/activity/complete_async_error.rb +1 -1
- data/lib/temporalio/activity/context.rb +18 -2
- data/lib/temporalio/activity/definition.rb +180 -65
- data/lib/temporalio/activity/info.rb +25 -21
- data/lib/temporalio/activity.rb +2 -59
- data/lib/temporalio/api/activity/v1/message.rb +25 -0
- data/lib/temporalio/api/batch/v1/message.rb +6 -1
- data/lib/temporalio/api/cloud/account/v1/message.rb +28 -0
- data/lib/temporalio/api/cloud/cloudservice/v1/request_response.rb +34 -1
- data/lib/temporalio/api/cloud/cloudservice/v1/service.rb +1 -1
- data/lib/temporalio/api/cloud/identity/v1/message.rb +6 -1
- data/lib/temporalio/api/cloud/namespace/v1/message.rb +8 -1
- data/lib/temporalio/api/cloud/nexus/v1/message.rb +31 -0
- data/lib/temporalio/api/cloud/operation/v1/message.rb +2 -1
- data/lib/temporalio/api/cloud/region/v1/message.rb +2 -1
- data/lib/temporalio/api/cloud/resource/v1/message.rb +23 -0
- data/lib/temporalio/api/cloud/sink/v1/message.rb +24 -0
- data/lib/temporalio/api/cloud/usage/v1/message.rb +31 -0
- data/lib/temporalio/api/command/v1/message.rb +1 -1
- data/lib/temporalio/api/common/v1/message.rb +8 -1
- data/lib/temporalio/api/deployment/v1/message.rb +38 -0
- data/lib/temporalio/api/enums/v1/batch_operation.rb +1 -1
- data/lib/temporalio/api/enums/v1/common.rb +1 -1
- data/lib/temporalio/api/enums/v1/deployment.rb +23 -0
- data/lib/temporalio/api/enums/v1/event_type.rb +1 -1
- data/lib/temporalio/api/enums/v1/failed_cause.rb +1 -1
- data/lib/temporalio/api/enums/v1/nexus.rb +21 -0
- data/lib/temporalio/api/enums/v1/reset.rb +1 -1
- data/lib/temporalio/api/enums/v1/workflow.rb +2 -1
- data/lib/temporalio/api/errordetails/v1/message.rb +3 -1
- data/lib/temporalio/api/failure/v1/message.rb +3 -1
- data/lib/temporalio/api/history/v1/message.rb +3 -1
- data/lib/temporalio/api/nexus/v1/message.rb +3 -2
- data/lib/temporalio/api/operatorservice/v1/service.rb +1 -1
- data/lib/temporalio/api/payload_visitor.rb +1581 -0
- data/lib/temporalio/api/query/v1/message.rb +2 -1
- data/lib/temporalio/api/schedule/v1/message.rb +2 -1
- data/lib/temporalio/api/taskqueue/v1/message.rb +4 -1
- data/lib/temporalio/api/testservice/v1/request_response.rb +31 -0
- data/lib/temporalio/api/testservice/v1/service.rb +23 -0
- data/lib/temporalio/api/workflow/v1/message.rb +9 -1
- data/lib/temporalio/api/workflowservice/v1/request_response.rb +46 -2
- data/lib/temporalio/api/workflowservice/v1/service.rb +1 -1
- data/lib/temporalio/api.rb +2 -0
- data/lib/temporalio/cancellation.rb +34 -14
- data/lib/temporalio/client/async_activity_handle.rb +12 -37
- data/lib/temporalio/client/connection/cloud_service.rb +309 -231
- data/lib/temporalio/client/connection/operator_service.rb +36 -84
- data/lib/temporalio/client/connection/service.rb +6 -5
- data/lib/temporalio/client/connection/test_service.rb +111 -0
- data/lib/temporalio/client/connection/workflow_service.rb +474 -441
- data/lib/temporalio/client/connection.rb +90 -44
- data/lib/temporalio/client/interceptor.rb +199 -60
- data/lib/temporalio/client/schedule.rb +991 -0
- data/lib/temporalio/client/schedule_handle.rb +126 -0
- data/lib/temporalio/client/with_start_workflow_operation.rb +115 -0
- data/lib/temporalio/client/workflow_execution.rb +26 -10
- data/lib/temporalio/client/workflow_handle.rb +41 -98
- data/lib/temporalio/client/workflow_update_handle.rb +3 -5
- data/lib/temporalio/client.rb +247 -44
- data/lib/temporalio/common_enums.rb +17 -0
- data/lib/temporalio/contrib/open_telemetry.rb +470 -0
- data/lib/temporalio/converters/data_converter.rb +4 -7
- data/lib/temporalio/converters/failure_converter.rb +5 -3
- data/lib/temporalio/converters/payload_converter/composite.rb +4 -0
- data/lib/temporalio/converters/payload_converter.rb +6 -8
- data/lib/temporalio/converters/raw_value.rb +20 -0
- data/lib/temporalio/error/failure.rb +1 -1
- data/lib/temporalio/error.rb +11 -2
- data/lib/temporalio/internal/bridge/3.2/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/3.3/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/{3.1 → 3.4}/temporalio_bridge.bundle +0 -0
- data/lib/temporalio/internal/bridge/api/activity_task/activity_task.rb +1 -1
- data/lib/temporalio/internal/bridge/api/common/common.rb +2 -1
- data/lib/temporalio/internal/bridge/api/core_interface.rb +5 -1
- data/lib/temporalio/internal/bridge/api/nexus/nexus.rb +33 -0
- data/lib/temporalio/internal/bridge/api/workflow_activation/workflow_activation.rb +5 -1
- data/lib/temporalio/internal/bridge/api/workflow_commands/workflow_commands.rb +4 -1
- data/lib/temporalio/internal/bridge/api/workflow_completion/workflow_completion.rb +2 -1
- data/lib/temporalio/internal/bridge/client.rb +11 -6
- data/lib/temporalio/internal/bridge/runtime.rb +3 -0
- data/lib/temporalio/internal/bridge/testing.rb +23 -0
- data/lib/temporalio/internal/bridge/worker.rb +2 -0
- data/lib/temporalio/internal/bridge.rb +1 -1
- data/lib/temporalio/internal/client/implementation.rb +468 -71
- data/lib/temporalio/internal/metric.rb +122 -0
- data/lib/temporalio/internal/proto_utils.rb +118 -7
- data/lib/temporalio/internal/worker/activity_worker.rb +69 -29
- data/lib/temporalio/internal/worker/multi_runner.rb +53 -9
- data/lib/temporalio/internal/worker/workflow_instance/child_workflow_handle.rb +54 -0
- data/lib/temporalio/internal/worker/workflow_instance/context.rb +383 -0
- data/lib/temporalio/internal/worker/workflow_instance/details.rb +46 -0
- data/lib/temporalio/internal/worker/workflow_instance/external_workflow_handle.rb +32 -0
- data/lib/temporalio/internal/worker/workflow_instance/externally_immutable_hash.rb +22 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_execution.rb +25 -0
- data/lib/temporalio/internal/worker/workflow_instance/handler_hash.rb +41 -0
- data/lib/temporalio/internal/worker/workflow_instance/illegal_call_tracer.rb +97 -0
- data/lib/temporalio/internal/worker/workflow_instance/inbound_implementation.rb +62 -0
- data/lib/temporalio/internal/worker/workflow_instance/outbound_implementation.rb +400 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_logger.rb +37 -0
- data/lib/temporalio/internal/worker/workflow_instance/replay_safe_metric.rb +40 -0
- data/lib/temporalio/internal/worker/workflow_instance/scheduler.rb +183 -0
- data/lib/temporalio/internal/worker/workflow_instance.rb +774 -0
- data/lib/temporalio/internal/worker/workflow_worker.rb +239 -0
- data/lib/temporalio/metric.rb +109 -0
- data/lib/temporalio/retry_policy.rb +37 -14
- data/lib/temporalio/runtime/metric_buffer.rb +94 -0
- data/lib/temporalio/runtime.rb +160 -79
- data/lib/temporalio/search_attributes.rb +93 -37
- data/lib/temporalio/testing/activity_environment.rb +44 -16
- data/lib/temporalio/testing/workflow_environment.rb +276 -7
- data/lib/temporalio/version.rb +1 -1
- data/lib/temporalio/worker/activity_executor/thread_pool.rb +9 -217
- data/lib/temporalio/worker/activity_executor.rb +3 -3
- data/lib/temporalio/worker/interceptor.rb +343 -66
- data/lib/temporalio/worker/thread_pool.rb +237 -0
- data/lib/temporalio/worker/tuner.rb +38 -0
- data/lib/temporalio/worker/workflow_executor/thread_pool.rb +235 -0
- data/lib/temporalio/worker/workflow_executor.rb +26 -0
- data/lib/temporalio/worker/workflow_replayer.rb +350 -0
- data/lib/temporalio/worker.rb +235 -58
- data/lib/temporalio/workflow/activity_cancellation_type.rb +20 -0
- data/lib/temporalio/workflow/child_workflow_cancellation_type.rb +21 -0
- data/lib/temporalio/workflow/child_workflow_handle.rb +43 -0
- data/lib/temporalio/workflow/definition.rb +598 -0
- data/lib/temporalio/workflow/external_workflow_handle.rb +41 -0
- data/lib/temporalio/workflow/future.rb +151 -0
- data/lib/temporalio/workflow/handler_unfinished_policy.rb +13 -0
- data/lib/temporalio/workflow/info.rb +104 -0
- data/lib/temporalio/workflow/parent_close_policy.rb +19 -0
- data/lib/temporalio/workflow/update_info.rb +20 -0
- data/lib/temporalio/workflow.rb +575 -0
- data/lib/temporalio/workflow_history.rb +26 -1
- data/lib/temporalio.rb +4 -0
- data/temporalio.gemspec +4 -3
- metadata +75 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a71ac59892867ee498d5b736f357b1e691f46da82b9ddbeadafb0e75a1b3296
|
4
|
+
data.tar.gz: ca0a790947f671ecf638f4f403346fe43350f3152d6449e956595bfe2ee9b9a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49b168ccae5c9fa63d9308aa66b55b9505a2b872da802298c5d2924dac01c4caef7f9432a0f840ba5caf446c90672faf983f07fc54ca08b90b11da49450e34bb
|
7
|
+
data.tar.gz: b5c592002254c04590580bd1e99a5a10df24ac7c02e3bff008da0535b03147cb5a841916d30337c6ecc7572d018a30f5abb5b4e85394d8538f78b939bddee453
|
data/.yardopts
ADDED
data/Gemfile
CHANGED
@@ -9,15 +9,19 @@ group :development do
|
|
9
9
|
gem 'activerecord'
|
10
10
|
gem 'async'
|
11
11
|
gem 'base64'
|
12
|
-
gem 'grpc', '
|
13
|
-
gem 'grpc-tools'
|
12
|
+
gem 'grpc', '~> 1.69'
|
13
|
+
gem 'grpc-tools', '~> 1.69'
|
14
14
|
gem 'minitest'
|
15
|
+
# We are intentionally not pinning OTel versions here so that CI tests the latest. This also means that the OTel
|
16
|
+
# contrib library also does not require specific versions, we are relying on the compatibility rigor of OTel.
|
17
|
+
gem 'opentelemetry-api'
|
18
|
+
gem 'opentelemetry-sdk'
|
15
19
|
gem 'rake'
|
16
20
|
gem 'rake-compiler'
|
17
21
|
gem 'rbs', '~> 3.5.3'
|
18
22
|
gem 'rb_sys', '~> 0.9.63'
|
19
23
|
gem 'rubocop'
|
20
|
-
gem 'sqlite3'
|
24
|
+
gem 'sqlite3'
|
21
25
|
gem 'steep', '~> 1.7.1'
|
22
26
|
gem 'yard'
|
23
27
|
end
|
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# rubocop:disable
|
3
|
+
# rubocop:disable Lint/MissingCopEnableDirective, Style/DocumentationMethod
|
4
4
|
|
5
5
|
require 'bundler/gem_tasks'
|
6
6
|
require 'rb_sys/cargo/metadata'
|
@@ -55,8 +55,9 @@ module CustomizeYardWarnings # rubocop:disable Style/Documentation
|
|
55
55
|
super
|
56
56
|
rescue YARD::Parser::UndocumentableError
|
57
57
|
# We ignore if it's an API warning
|
58
|
-
|
59
|
-
|
58
|
+
last_file = statement.last.file
|
59
|
+
raise unless (last_file.start_with?('lib/temporalio/api/') && last_file.count('/') > 3) ||
|
60
|
+
last_file.start_with?('lib/temporalio/internal/bridge/api/')
|
60
61
|
end
|
61
62
|
end
|
62
63
|
|
@@ -64,302 +65,15 @@ YARD::Handlers::Ruby::ConstantHandler.prepend(CustomizeYardWarnings)
|
|
64
65
|
|
65
66
|
YARD::Rake::YardocTask.new { |t| t.options = ['--fail-on-warning'] }
|
66
67
|
|
67
|
-
|
68
|
-
|
68
|
+
Rake::Task[:yard].enhance([:copy_parent_files]) do
|
69
|
+
rm ['LICENSE', 'README.md']
|
70
|
+
end
|
69
71
|
|
70
72
|
namespace :proto do
|
71
73
|
desc 'Generate API and Core protobufs'
|
72
74
|
task :generate do
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
def generate_protos(api_protos)
|
77
|
-
# Generate API to temp dir and move
|
78
|
-
FileUtils.rm_rf('tmp-proto')
|
79
|
-
FileUtils.mkdir_p('tmp-proto')
|
80
|
-
sh 'bundle exec grpc_tools_ruby_protoc ' \
|
81
|
-
'--proto_path=ext/sdk-core/sdk-core-protos/protos/api_upstream ' \
|
82
|
-
'--proto_path=ext/sdk-core/sdk-core-protos/protos/api_cloud_upstream ' \
|
83
|
-
'--proto_path=ext/additional_protos ' \
|
84
|
-
'--ruby_out=tmp-proto ' \
|
85
|
-
"#{api_protos.join(' ')}"
|
86
|
-
|
87
|
-
# Walk all generated Ruby files and cleanup content and filename
|
88
|
-
Dir.glob('tmp-proto/temporal/api/**/*.rb') do |path|
|
89
|
-
# Fix up the import
|
90
|
-
content = File.read(path)
|
91
|
-
content.gsub!(%r{^require 'temporal/(.*)_pb'$}, "require 'temporalio/\\1'")
|
92
|
-
File.write(path, content)
|
93
|
-
|
94
|
-
# Remove _pb from the filename
|
95
|
-
FileUtils.mv(path, path.sub('_pb', ''))
|
96
|
-
end
|
97
|
-
|
98
|
-
# Move from temp dir and remove temp dir
|
99
|
-
FileUtils.cp_r('tmp-proto/temporal/api', 'lib/temporalio')
|
100
|
-
FileUtils.rm_rf('tmp-proto')
|
101
|
-
end
|
102
|
-
|
103
|
-
# Generate from API with Google ones removed
|
104
|
-
generate_protos(Dir.glob('ext/sdk-core/sdk-core-protos/protos/api_upstream/**/*.proto').reject do |proto|
|
105
|
-
proto.include?('google')
|
106
|
-
end)
|
107
|
-
|
108
|
-
# Generate from Cloud API
|
109
|
-
generate_protos(Dir.glob('ext/sdk-core/sdk-core-protos/protos/api_cloud_upstream/**/*.proto'))
|
110
|
-
|
111
|
-
# Generate additional protos
|
112
|
-
generate_protos(Dir.glob('ext/additional_protos/**/*.proto'))
|
113
|
-
|
114
|
-
# Write files that will help with imports. We are requiring the
|
115
|
-
# request_response and not the service because the service depends on Google
|
116
|
-
# API annotations we don't want to have to depend on.
|
117
|
-
File.write(
|
118
|
-
'lib/temporalio/api/cloud/cloudservice.rb',
|
119
|
-
<<~TEXT
|
120
|
-
# frozen_string_literal: true
|
121
|
-
|
122
|
-
require 'temporalio/api/cloud/cloudservice/v1/request_response'
|
123
|
-
TEXT
|
124
|
-
)
|
125
|
-
File.write(
|
126
|
-
'lib/temporalio/api/workflowservice.rb',
|
127
|
-
<<~TEXT
|
128
|
-
# frozen_string_literal: true
|
129
|
-
|
130
|
-
require 'temporalio/api/workflowservice/v1/request_response'
|
131
|
-
TEXT
|
132
|
-
)
|
133
|
-
File.write(
|
134
|
-
'lib/temporalio/api/operatorservice.rb',
|
135
|
-
<<~TEXT
|
136
|
-
# frozen_string_literal: true
|
137
|
-
|
138
|
-
require 'temporalio/api/operatorservice/v1/request_response'
|
139
|
-
TEXT
|
140
|
-
)
|
141
|
-
File.write(
|
142
|
-
'lib/temporalio/api.rb',
|
143
|
-
<<~TEXT
|
144
|
-
# frozen_string_literal: true
|
145
|
-
|
146
|
-
require 'temporalio/api/cloud/cloudservice'
|
147
|
-
require 'temporalio/api/common/v1/grpc_status'
|
148
|
-
require 'temporalio/api/errordetails/v1/message'
|
149
|
-
require 'temporalio/api/operatorservice'
|
150
|
-
require 'temporalio/api/workflowservice'
|
151
|
-
|
152
|
-
module Temporalio
|
153
|
-
# Raw protocol buffer models.
|
154
|
-
module Api
|
155
|
-
end
|
156
|
-
end
|
157
|
-
TEXT
|
158
|
-
)
|
159
|
-
|
160
|
-
# Write the service classes that have the RPC calls
|
161
|
-
def write_service_file(qualified_service_name:, file_name:, class_name:, service_enum:)
|
162
|
-
# Do service lookup
|
163
|
-
desc = Google::Protobuf::DescriptorPool.generated_pool.lookup(qualified_service_name)
|
164
|
-
raise 'Failed finding service descriptor' unless desc
|
165
|
-
|
166
|
-
# Open file to generate Ruby code
|
167
|
-
File.open("lib/temporalio/client/connection/#{file_name}.rb", 'w') do |file|
|
168
|
-
file.puts <<~TEXT
|
169
|
-
# frozen_string_literal: true
|
170
|
-
|
171
|
-
# Generated code. DO NOT EDIT!
|
172
|
-
|
173
|
-
require 'temporalio/api'
|
174
|
-
require 'temporalio/client/connection/service'
|
175
|
-
require 'temporalio/internal/bridge/client'
|
176
|
-
|
177
|
-
module Temporalio
|
178
|
-
class Client
|
179
|
-
class Connection
|
180
|
-
# #{class_name} API.
|
181
|
-
class #{class_name} < Service
|
182
|
-
# @!visibility private
|
183
|
-
def initialize(connection)
|
184
|
-
super(connection, Internal::Bridge::Client::#{service_enum})
|
185
|
-
end
|
186
|
-
TEXT
|
187
|
-
|
188
|
-
desc.each do |method|
|
189
|
-
# Camel case to snake case
|
190
|
-
rpc = method.name.gsub(/([A-Z])/, '_\1').downcase.delete_prefix('_')
|
191
|
-
file.puts <<-TEXT
|
192
|
-
|
193
|
-
# Calls #{class_name}.#{method.name} API call.
|
194
|
-
#
|
195
|
-
# @param request [#{method.input_type.msgclass}] API request.
|
196
|
-
# @param rpc_retry [Boolean] Whether to implicitly retry known retryable errors.
|
197
|
-
# @param rpc_metadata [Hash<String, String>, nil] Headers to include on the RPC call.
|
198
|
-
# @param rpc_timeout [Float, nil] Number of seconds before timeout.
|
199
|
-
# @return [#{method.output_type.msgclass}] API response.
|
200
|
-
def #{rpc}(request, rpc_retry: false, rpc_metadata: nil, rpc_timeout: nil)
|
201
|
-
invoke_rpc(
|
202
|
-
rpc: '#{rpc}',
|
203
|
-
request_class: #{method.input_type.msgclass},
|
204
|
-
response_class: #{method.output_type.msgclass},
|
205
|
-
request:,
|
206
|
-
rpc_retry:,
|
207
|
-
rpc_metadata:,
|
208
|
-
rpc_timeout:
|
209
|
-
)
|
210
|
-
end
|
211
|
-
TEXT
|
212
|
-
end
|
213
|
-
|
214
|
-
file.puts <<~TEXT
|
215
|
-
end
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end
|
219
|
-
TEXT
|
220
|
-
end
|
221
|
-
|
222
|
-
# Open file to generate RBS code
|
223
|
-
# TODO(cretz): Improve this when RBS proto is supported
|
224
|
-
File.open("sig/temporalio/client/connection/#{file_name}.rbs", 'w') do |file|
|
225
|
-
file.puts <<~TEXT
|
226
|
-
# Generated code. DO NOT EDIT!
|
227
|
-
|
228
|
-
module Temporalio
|
229
|
-
class Client
|
230
|
-
class Connection
|
231
|
-
class #{class_name} < Service
|
232
|
-
def initialize: (Connection) -> void
|
233
|
-
TEXT
|
234
|
-
|
235
|
-
desc.each do |method|
|
236
|
-
# Camel case to snake case
|
237
|
-
rpc = method.name.gsub(/([A-Z])/, '_\1').downcase.delete_prefix('_')
|
238
|
-
file.puts <<-TEXT
|
239
|
-
def #{rpc}: (untyped request, ?rpc_retry: bool, ?rpc_metadata: Hash[String, String]?, ?rpc_timeout: Float?) -> untyped
|
240
|
-
TEXT
|
241
|
-
end
|
242
|
-
|
243
|
-
file.puts <<~TEXT
|
244
|
-
end
|
245
|
-
end
|
246
|
-
end
|
247
|
-
end
|
248
|
-
TEXT
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
require './lib/temporalio/api/workflowservice/v1/service'
|
253
|
-
write_service_file(
|
254
|
-
qualified_service_name: 'temporal.api.workflowservice.v1.WorkflowService',
|
255
|
-
file_name: 'workflow_service',
|
256
|
-
class_name: 'WorkflowService',
|
257
|
-
service_enum: 'SERVICE_WORKFLOW'
|
258
|
-
)
|
259
|
-
require './lib/temporalio/api/operatorservice/v1/service'
|
260
|
-
write_service_file(
|
261
|
-
qualified_service_name: 'temporal.api.operatorservice.v1.OperatorService',
|
262
|
-
file_name: 'operator_service',
|
263
|
-
class_name: 'OperatorService',
|
264
|
-
service_enum: 'SERVICE_OPERATOR'
|
265
|
-
)
|
266
|
-
require './lib/temporalio/api/cloud/cloudservice/v1/service'
|
267
|
-
write_service_file(
|
268
|
-
qualified_service_name: 'temporal.api.cloud.cloudservice.v1.CloudService',
|
269
|
-
file_name: 'cloud_service',
|
270
|
-
class_name: 'CloudService',
|
271
|
-
service_enum: 'SERVICE_CLOUD'
|
272
|
-
)
|
273
|
-
|
274
|
-
# Generate Rust code
|
275
|
-
def generate_rust_match_arm(file:, qualified_service_name:, service_enum:, trait:)
|
276
|
-
# Do service lookup
|
277
|
-
desc = Google::Protobuf::DescriptorPool.generated_pool.lookup(qualified_service_name)
|
278
|
-
file.puts <<~TEXT
|
279
|
-
#{service_enum} => match call.rpc.as_str() {
|
280
|
-
TEXT
|
281
|
-
|
282
|
-
desc.to_a.sort_by(&:name).each do |method|
|
283
|
-
# Camel case to snake case
|
284
|
-
rpc = method.name.gsub(/([A-Z])/, '_\1').downcase.delete_prefix('_')
|
285
|
-
file.puts <<~TEXT
|
286
|
-
"#{rpc}" => rpc_call!(self, callback, call, #{trait}, #{rpc}),
|
287
|
-
TEXT
|
288
|
-
end
|
289
|
-
file.puts <<~TEXT
|
290
|
-
_ => Err(error!("Unknown RPC call {}", call.rpc)),
|
291
|
-
},
|
292
|
-
TEXT
|
293
|
-
end
|
294
|
-
File.open('ext/src/client_rpc_generated.rs', 'w') do |file|
|
295
|
-
file.puts <<~TEXT
|
296
|
-
// Generated code. DO NOT EDIT!
|
297
|
-
|
298
|
-
use magnus::{Error, Ruby};
|
299
|
-
use temporal_client::{CloudService, OperatorService, WorkflowService};
|
300
|
-
|
301
|
-
use super::{error, rpc_call};
|
302
|
-
use crate::{
|
303
|
-
client::{Client, RpcCall, SERVICE_CLOUD, SERVICE_OPERATOR, SERVICE_WORKFLOW},
|
304
|
-
util::AsyncCallback,
|
305
|
-
};
|
306
|
-
|
307
|
-
impl Client {
|
308
|
-
pub fn invoke_rpc(&self, service: u8, callback: AsyncCallback, call: RpcCall) -> Result<(), Error> {
|
309
|
-
match service {
|
310
|
-
TEXT
|
311
|
-
generate_rust_match_arm(
|
312
|
-
file:,
|
313
|
-
qualified_service_name: 'temporal.api.workflowservice.v1.WorkflowService',
|
314
|
-
service_enum: 'SERVICE_WORKFLOW',
|
315
|
-
trait: 'WorkflowService'
|
316
|
-
)
|
317
|
-
generate_rust_match_arm(
|
318
|
-
file:,
|
319
|
-
qualified_service_name: 'temporal.api.operatorservice.v1.OperatorService',
|
320
|
-
service_enum: 'SERVICE_OPERATOR',
|
321
|
-
trait: 'OperatorService'
|
322
|
-
)
|
323
|
-
generate_rust_match_arm(
|
324
|
-
file:,
|
325
|
-
qualified_service_name: 'temporal.api.cloud.cloudservice.v1.CloudService',
|
326
|
-
service_enum: 'SERVICE_CLOUD',
|
327
|
-
trait: 'CloudService'
|
328
|
-
)
|
329
|
-
file.puts <<~TEXT
|
330
|
-
_ => Err(error!("Unknown service")),
|
331
|
-
}
|
332
|
-
}
|
333
|
-
}
|
334
|
-
TEXT
|
335
|
-
end
|
336
|
-
sh 'cargo', 'fmt', '--', 'ext/src/client_rpc_generated.rs'
|
337
|
-
|
338
|
-
# Generate core protos
|
339
|
-
FileUtils.rm_rf('lib/temporalio/internal/bridge/api')
|
340
|
-
# Generate API to temp dir
|
341
|
-
FileUtils.rm_rf('tmp-proto')
|
342
|
-
FileUtils.mkdir_p('tmp-proto')
|
343
|
-
sh 'bundle exec grpc_tools_ruby_protoc ' \
|
344
|
-
'--proto_path=ext/sdk-core/sdk-core-protos/protos/api_upstream ' \
|
345
|
-
'--proto_path=ext/sdk-core/sdk-core-protos/protos/local ' \
|
346
|
-
'--ruby_out=tmp-proto ' \
|
347
|
-
"#{Dir.glob('ext/sdk-core/sdk-core-protos/protos/local/**/*.proto').join(' ')}"
|
348
|
-
# Walk all generated Ruby files and cleanup content and filename
|
349
|
-
Dir.glob('tmp-proto/temporal/sdk/**/*.rb') do |path|
|
350
|
-
# Fix up the imports
|
351
|
-
content = File.read(path)
|
352
|
-
content.gsub!(%r{^require 'temporal/(.*)_pb'$}, "require 'temporalio/\\1'")
|
353
|
-
content.gsub!(%r{^require 'temporalio/sdk/core/(.*)'$}, "require 'temporalio/internal/bridge/api/\\1'")
|
354
|
-
File.write(path, content)
|
355
|
-
|
356
|
-
# Remove _pb from the filename
|
357
|
-
FileUtils.mv(path, path.sub('_pb', ''))
|
358
|
-
end
|
359
|
-
# Move from temp dir and remove temp dir
|
360
|
-
FileUtils.mkdir_p('lib/temporalio/internal/bridge/api')
|
361
|
-
FileUtils.cp_r(Dir.glob('tmp-proto/temporal/sdk/core/*'), 'lib/temporalio/internal/bridge/api')
|
362
|
-
FileUtils.rm_rf('tmp-proto')
|
75
|
+
require_relative 'extra/proto_gen'
|
76
|
+
ProtoGen.new.run
|
363
77
|
end
|
364
78
|
end
|
365
79
|
|
@@ -380,7 +94,7 @@ Rake::Task[:build].enhance([:copy_parent_files]) do
|
|
380
94
|
end
|
381
95
|
|
382
96
|
task :rust_lint do
|
383
|
-
sh 'cargo', 'clippy'
|
97
|
+
sh 'cargo', 'clippy', '-p', 'temporalio_bridge', '--no-deps', '--', '-Dwarnings'
|
384
98
|
sh 'cargo', 'fmt', '--check'
|
385
99
|
end
|
386
100
|
|
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'temporalio/error'
|
4
4
|
|
5
5
|
module Temporalio
|
6
|
-
|
6
|
+
module Activity
|
7
7
|
# Context accessible only within an activity. Use {current} to get the current context. Contexts are fiber or thread
|
8
8
|
# local so may not be available in a newly started thread from an activity and may have to be propagated manually.
|
9
9
|
class Context
|
@@ -48,6 +48,12 @@ module Temporalio
|
|
48
48
|
raise NotImplementedError
|
49
49
|
end
|
50
50
|
|
51
|
+
# @return [Object, nil] Activity class instance. This should always be present except for advanced cases where the
|
52
|
+
# definition was manually created without any instance getter/creator.
|
53
|
+
def instance
|
54
|
+
raise NotImplementedError
|
55
|
+
end
|
56
|
+
|
51
57
|
# Record a heartbeat on the activity.
|
52
58
|
#
|
53
59
|
# Heartbeats should be used for all non-immediately-returning, non-local activities and they are required to
|
@@ -101,7 +107,17 @@ module Temporalio
|
|
101
107
|
}.freeze
|
102
108
|
end
|
103
109
|
|
104
|
-
#
|
110
|
+
# @return [Metric::Meter] Metric meter to create metrics on, with some activity-specific attributes already set.
|
111
|
+
# @raise [RuntimeError] Called within a {Testing::ActivityEnvironment} and it was not set.
|
112
|
+
def metric_meter
|
113
|
+
raise NotImplementedError
|
114
|
+
end
|
115
|
+
|
116
|
+
# @return [Client] Temporal client this activity worker is running in.
|
117
|
+
# @raise [RuntimeError] Called within a {Testing::ActivityEnvironment} and it was not set.
|
118
|
+
def client
|
119
|
+
raise NotImplementedError
|
120
|
+
end
|
105
121
|
end
|
106
122
|
end
|
107
123
|
end
|