temporalio 0.0.1

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 (317) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +130 -0
  5. data/bridge/Cargo.lock +2865 -0
  6. data/bridge/Cargo.toml +26 -0
  7. data/bridge/sdk-core/ARCHITECTURE.md +76 -0
  8. data/bridge/sdk-core/Cargo.lock +2606 -0
  9. data/bridge/sdk-core/Cargo.toml +2 -0
  10. data/bridge/sdk-core/LICENSE.txt +23 -0
  11. data/bridge/sdk-core/README.md +107 -0
  12. data/bridge/sdk-core/arch_docs/diagrams/README.md +10 -0
  13. data/bridge/sdk-core/arch_docs/diagrams/sticky_queues.puml +40 -0
  14. data/bridge/sdk-core/arch_docs/diagrams/workflow_internals.svg +1 -0
  15. data/bridge/sdk-core/arch_docs/sticky_queues.md +51 -0
  16. data/bridge/sdk-core/bridge-ffi/Cargo.toml +24 -0
  17. data/bridge/sdk-core/bridge-ffi/LICENSE.txt +23 -0
  18. data/bridge/sdk-core/bridge-ffi/build.rs +25 -0
  19. data/bridge/sdk-core/bridge-ffi/include/sdk-core-bridge.h +249 -0
  20. data/bridge/sdk-core/bridge-ffi/src/lib.rs +825 -0
  21. data/bridge/sdk-core/bridge-ffi/src/wrappers.rs +211 -0
  22. data/bridge/sdk-core/client/Cargo.toml +40 -0
  23. data/bridge/sdk-core/client/LICENSE.txt +23 -0
  24. data/bridge/sdk-core/client/src/lib.rs +1294 -0
  25. data/bridge/sdk-core/client/src/metrics.rs +165 -0
  26. data/bridge/sdk-core/client/src/raw.rs +931 -0
  27. data/bridge/sdk-core/client/src/retry.rs +674 -0
  28. data/bridge/sdk-core/client/src/workflow_handle/mod.rs +185 -0
  29. data/bridge/sdk-core/core/Cargo.toml +116 -0
  30. data/bridge/sdk-core/core/LICENSE.txt +23 -0
  31. data/bridge/sdk-core/core/benches/workflow_replay.rs +73 -0
  32. data/bridge/sdk-core/core/src/abstractions.rs +166 -0
  33. data/bridge/sdk-core/core/src/core_tests/activity_tasks.rs +911 -0
  34. data/bridge/sdk-core/core/src/core_tests/child_workflows.rs +221 -0
  35. data/bridge/sdk-core/core/src/core_tests/determinism.rs +107 -0
  36. data/bridge/sdk-core/core/src/core_tests/local_activities.rs +515 -0
  37. data/bridge/sdk-core/core/src/core_tests/mod.rs +100 -0
  38. data/bridge/sdk-core/core/src/core_tests/queries.rs +736 -0
  39. data/bridge/sdk-core/core/src/core_tests/replay_flag.rs +65 -0
  40. data/bridge/sdk-core/core/src/core_tests/workers.rs +259 -0
  41. data/bridge/sdk-core/core/src/core_tests/workflow_cancels.rs +124 -0
  42. data/bridge/sdk-core/core/src/core_tests/workflow_tasks.rs +2070 -0
  43. data/bridge/sdk-core/core/src/ephemeral_server/mod.rs +515 -0
  44. data/bridge/sdk-core/core/src/lib.rs +175 -0
  45. data/bridge/sdk-core/core/src/log_export.rs +62 -0
  46. data/bridge/sdk-core/core/src/pollers/mod.rs +54 -0
  47. data/bridge/sdk-core/core/src/pollers/poll_buffer.rs +297 -0
  48. data/bridge/sdk-core/core/src/protosext/mod.rs +428 -0
  49. data/bridge/sdk-core/core/src/replay/mod.rs +71 -0
  50. data/bridge/sdk-core/core/src/retry_logic.rs +202 -0
  51. data/bridge/sdk-core/core/src/telemetry/metrics.rs +383 -0
  52. data/bridge/sdk-core/core/src/telemetry/mod.rs +412 -0
  53. data/bridge/sdk-core/core/src/telemetry/prometheus_server.rs +77 -0
  54. data/bridge/sdk-core/core/src/test_help/mod.rs +875 -0
  55. data/bridge/sdk-core/core/src/worker/activities/activity_heartbeat_manager.rs +580 -0
  56. data/bridge/sdk-core/core/src/worker/activities/local_activities.rs +1042 -0
  57. data/bridge/sdk-core/core/src/worker/activities.rs +464 -0
  58. data/bridge/sdk-core/core/src/worker/client/mocks.rs +87 -0
  59. data/bridge/sdk-core/core/src/worker/client.rs +347 -0
  60. data/bridge/sdk-core/core/src/worker/mod.rs +566 -0
  61. data/bridge/sdk-core/core/src/worker/workflow/bridge.rs +37 -0
  62. data/bridge/sdk-core/core/src/worker/workflow/driven_workflow.rs +110 -0
  63. data/bridge/sdk-core/core/src/worker/workflow/history_update.rs +458 -0
  64. data/bridge/sdk-core/core/src/worker/workflow/machines/activity_state_machine.rs +911 -0
  65. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_external_state_machine.rs +298 -0
  66. data/bridge/sdk-core/core/src/worker/workflow/machines/cancel_workflow_state_machine.rs +171 -0
  67. data/bridge/sdk-core/core/src/worker/workflow/machines/child_workflow_state_machine.rs +860 -0
  68. data/bridge/sdk-core/core/src/worker/workflow/machines/complete_workflow_state_machine.rs +140 -0
  69. data/bridge/sdk-core/core/src/worker/workflow/machines/continue_as_new_workflow_state_machine.rs +161 -0
  70. data/bridge/sdk-core/core/src/worker/workflow/machines/fail_workflow_state_machine.rs +133 -0
  71. data/bridge/sdk-core/core/src/worker/workflow/machines/local_activity_state_machine.rs +1448 -0
  72. data/bridge/sdk-core/core/src/worker/workflow/machines/mod.rs +342 -0
  73. data/bridge/sdk-core/core/src/worker/workflow/machines/mutable_side_effect_state_machine.rs +127 -0
  74. data/bridge/sdk-core/core/src/worker/workflow/machines/patch_state_machine.rs +712 -0
  75. data/bridge/sdk-core/core/src/worker/workflow/machines/side_effect_state_machine.rs +71 -0
  76. data/bridge/sdk-core/core/src/worker/workflow/machines/signal_external_state_machine.rs +443 -0
  77. data/bridge/sdk-core/core/src/worker/workflow/machines/timer_state_machine.rs +439 -0
  78. data/bridge/sdk-core/core/src/worker/workflow/machines/transition_coverage.rs +169 -0
  79. data/bridge/sdk-core/core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +246 -0
  80. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines/local_acts.rs +96 -0
  81. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_machines.rs +1184 -0
  82. data/bridge/sdk-core/core/src/worker/workflow/machines/workflow_task_state_machine.rs +277 -0
  83. data/bridge/sdk-core/core/src/worker/workflow/managed_run/managed_wf_test.rs +198 -0
  84. data/bridge/sdk-core/core/src/worker/workflow/managed_run.rs +647 -0
  85. data/bridge/sdk-core/core/src/worker/workflow/mod.rs +1143 -0
  86. data/bridge/sdk-core/core/src/worker/workflow/run_cache.rs +145 -0
  87. data/bridge/sdk-core/core/src/worker/workflow/wft_poller.rs +88 -0
  88. data/bridge/sdk-core/core/src/worker/workflow/workflow_stream.rs +940 -0
  89. data/bridge/sdk-core/core-api/Cargo.toml +31 -0
  90. data/bridge/sdk-core/core-api/LICENSE.txt +23 -0
  91. data/bridge/sdk-core/core-api/src/errors.rs +95 -0
  92. data/bridge/sdk-core/core-api/src/lib.rs +151 -0
  93. data/bridge/sdk-core/core-api/src/worker.rs +135 -0
  94. data/bridge/sdk-core/etc/deps.svg +187 -0
  95. data/bridge/sdk-core/etc/dynamic-config.yaml +2 -0
  96. data/bridge/sdk-core/etc/otel-collector-config.yaml +36 -0
  97. data/bridge/sdk-core/etc/prometheus.yaml +6 -0
  98. data/bridge/sdk-core/fsm/Cargo.toml +18 -0
  99. data/bridge/sdk-core/fsm/LICENSE.txt +23 -0
  100. data/bridge/sdk-core/fsm/README.md +3 -0
  101. data/bridge/sdk-core/fsm/rustfsm_procmacro/Cargo.toml +27 -0
  102. data/bridge/sdk-core/fsm/rustfsm_procmacro/LICENSE.txt +23 -0
  103. data/bridge/sdk-core/fsm/rustfsm_procmacro/src/lib.rs +647 -0
  104. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/progress.rs +8 -0
  105. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.rs +18 -0
  106. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dupe_transitions_fail.stderr +12 -0
  107. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/dynamic_dest_pass.rs +41 -0
  108. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.rs +14 -0
  109. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/forgot_name_fail.stderr +11 -0
  110. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_arg_pass.rs +32 -0
  111. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/handler_pass.rs +31 -0
  112. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/medium_complex_pass.rs +46 -0
  113. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.rs +29 -0
  114. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/no_handle_conversions_require_into_fail.stderr +12 -0
  115. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/simple_pass.rs +32 -0
  116. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.rs +18 -0
  117. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/struct_event_variant_fail.stderr +5 -0
  118. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.rs +11 -0
  119. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_more_item_event_variant_fail.stderr +5 -0
  120. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.rs +11 -0
  121. data/bridge/sdk-core/fsm/rustfsm_procmacro/tests/trybuild/tuple_zero_item_event_variant_fail.stderr +5 -0
  122. data/bridge/sdk-core/fsm/rustfsm_trait/Cargo.toml +14 -0
  123. data/bridge/sdk-core/fsm/rustfsm_trait/LICENSE.txt +23 -0
  124. data/bridge/sdk-core/fsm/rustfsm_trait/src/lib.rs +249 -0
  125. data/bridge/sdk-core/fsm/src/lib.rs +2 -0
  126. data/bridge/sdk-core/histories/fail_wf_task.bin +0 -0
  127. data/bridge/sdk-core/histories/timer_workflow_history.bin +0 -0
  128. data/bridge/sdk-core/integ-with-otel.sh +7 -0
  129. data/bridge/sdk-core/protos/api_upstream/README.md +9 -0
  130. data/bridge/sdk-core/protos/api_upstream/api-linter.yaml +40 -0
  131. data/bridge/sdk-core/protos/api_upstream/buf.yaml +12 -0
  132. data/bridge/sdk-core/protos/api_upstream/dependencies/gogoproto/gogo.proto +141 -0
  133. data/bridge/sdk-core/protos/api_upstream/temporal/api/batch/v1/message.proto +86 -0
  134. data/bridge/sdk-core/protos/api_upstream/temporal/api/cluster/v1/message.proto +83 -0
  135. data/bridge/sdk-core/protos/api_upstream/temporal/api/command/v1/message.proto +259 -0
  136. data/bridge/sdk-core/protos/api_upstream/temporal/api/common/v1/message.proto +112 -0
  137. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/batch_operation.proto +46 -0
  138. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/cluster.proto +40 -0
  139. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/command_type.proto +57 -0
  140. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/common.proto +55 -0
  141. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/event_type.proto +168 -0
  142. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +97 -0
  143. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/namespace.proto +51 -0
  144. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/query.proto +50 -0
  145. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/reset.proto +41 -0
  146. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/schedule.proto +60 -0
  147. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +59 -0
  148. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/update.proto +51 -0
  149. data/bridge/sdk-core/protos/api_upstream/temporal/api/enums/v1/workflow.proto +122 -0
  150. data/bridge/sdk-core/protos/api_upstream/temporal/api/errordetails/v1/message.proto +108 -0
  151. data/bridge/sdk-core/protos/api_upstream/temporal/api/failure/v1/message.proto +114 -0
  152. data/bridge/sdk-core/protos/api_upstream/temporal/api/filter/v1/message.proto +56 -0
  153. data/bridge/sdk-core/protos/api_upstream/temporal/api/history/v1/message.proto +751 -0
  154. data/bridge/sdk-core/protos/api_upstream/temporal/api/namespace/v1/message.proto +97 -0
  155. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +161 -0
  156. data/bridge/sdk-core/protos/api_upstream/temporal/api/operatorservice/v1/service.proto +99 -0
  157. data/bridge/sdk-core/protos/api_upstream/temporal/api/query/v1/message.proto +61 -0
  158. data/bridge/sdk-core/protos/api_upstream/temporal/api/replication/v1/message.proto +55 -0
  159. data/bridge/sdk-core/protos/api_upstream/temporal/api/schedule/v1/message.proto +300 -0
  160. data/bridge/sdk-core/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +108 -0
  161. data/bridge/sdk-core/protos/api_upstream/temporal/api/update/v1/message.proto +46 -0
  162. data/bridge/sdk-core/protos/api_upstream/temporal/api/version/v1/message.proto +59 -0
  163. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflow/v1/message.proto +145 -0
  164. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +1124 -0
  165. data/bridge/sdk-core/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +401 -0
  166. data/bridge/sdk-core/protos/grpc/health/v1/health.proto +63 -0
  167. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_result/activity_result.proto +78 -0
  168. data/bridge/sdk-core/protos/local/temporal/sdk/core/activity_task/activity_task.proto +79 -0
  169. data/bridge/sdk-core/protos/local/temporal/sdk/core/bridge/bridge.proto +210 -0
  170. data/bridge/sdk-core/protos/local/temporal/sdk/core/child_workflow/child_workflow.proto +77 -0
  171. data/bridge/sdk-core/protos/local/temporal/sdk/core/common/common.proto +15 -0
  172. data/bridge/sdk-core/protos/local/temporal/sdk/core/core_interface.proto +30 -0
  173. data/bridge/sdk-core/protos/local/temporal/sdk/core/external_data/external_data.proto +30 -0
  174. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +261 -0
  175. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +297 -0
  176. data/bridge/sdk-core/protos/local/temporal/sdk/core/workflow_completion/workflow_completion.proto +29 -0
  177. data/bridge/sdk-core/protos/testsrv_upstream/api-linter.yaml +38 -0
  178. data/bridge/sdk-core/protos/testsrv_upstream/buf.yaml +13 -0
  179. data/bridge/sdk-core/protos/testsrv_upstream/dependencies/gogoproto/gogo.proto +141 -0
  180. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/request_response.proto +63 -0
  181. data/bridge/sdk-core/protos/testsrv_upstream/temporal/api/testservice/v1/service.proto +90 -0
  182. data/bridge/sdk-core/rustfmt.toml +1 -0
  183. data/bridge/sdk-core/sdk/Cargo.toml +47 -0
  184. data/bridge/sdk-core/sdk/LICENSE.txt +23 -0
  185. data/bridge/sdk-core/sdk/src/activity_context.rs +230 -0
  186. data/bridge/sdk-core/sdk/src/app_data.rs +37 -0
  187. data/bridge/sdk-core/sdk/src/conversions.rs +8 -0
  188. data/bridge/sdk-core/sdk/src/interceptors.rs +17 -0
  189. data/bridge/sdk-core/sdk/src/lib.rs +792 -0
  190. data/bridge/sdk-core/sdk/src/payload_converter.rs +11 -0
  191. data/bridge/sdk-core/sdk/src/workflow_context/options.rs +295 -0
  192. data/bridge/sdk-core/sdk/src/workflow_context.rs +683 -0
  193. data/bridge/sdk-core/sdk/src/workflow_future.rs +503 -0
  194. data/bridge/sdk-core/sdk-core-protos/Cargo.toml +30 -0
  195. data/bridge/sdk-core/sdk-core-protos/LICENSE.txt +23 -0
  196. data/bridge/sdk-core/sdk-core-protos/build.rs +108 -0
  197. data/bridge/sdk-core/sdk-core-protos/src/constants.rs +7 -0
  198. data/bridge/sdk-core/sdk-core-protos/src/history_builder.rs +497 -0
  199. data/bridge/sdk-core/sdk-core-protos/src/history_info.rs +230 -0
  200. data/bridge/sdk-core/sdk-core-protos/src/lib.rs +1910 -0
  201. data/bridge/sdk-core/sdk-core-protos/src/task_token.rs +38 -0
  202. data/bridge/sdk-core/sdk-core-protos/src/utilities.rs +14 -0
  203. data/bridge/sdk-core/test-utils/Cargo.toml +35 -0
  204. data/bridge/sdk-core/test-utils/src/canned_histories.rs +1579 -0
  205. data/bridge/sdk-core/test-utils/src/histfetch.rs +28 -0
  206. data/bridge/sdk-core/test-utils/src/lib.rs +598 -0
  207. data/bridge/sdk-core/tests/integ_tests/client_tests.rs +36 -0
  208. data/bridge/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +128 -0
  209. data/bridge/sdk-core/tests/integ_tests/heartbeat_tests.rs +218 -0
  210. data/bridge/sdk-core/tests/integ_tests/polling_tests.rs +146 -0
  211. data/bridge/sdk-core/tests/integ_tests/queries_tests.rs +437 -0
  212. data/bridge/sdk-core/tests/integ_tests/visibility_tests.rs +93 -0
  213. data/bridge/sdk-core/tests/integ_tests/workflow_tests/activities.rs +878 -0
  214. data/bridge/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +61 -0
  215. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +59 -0
  216. data/bridge/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +58 -0
  217. data/bridge/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +50 -0
  218. data/bridge/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +60 -0
  219. data/bridge/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +54 -0
  220. data/bridge/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +634 -0
  221. data/bridge/sdk-core/tests/integ_tests/workflow_tests/patches.rs +113 -0
  222. data/bridge/sdk-core/tests/integ_tests/workflow_tests/replay.rs +137 -0
  223. data/bridge/sdk-core/tests/integ_tests/workflow_tests/resets.rs +93 -0
  224. data/bridge/sdk-core/tests/integ_tests/workflow_tests/signals.rs +167 -0
  225. data/bridge/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +99 -0
  226. data/bridge/sdk-core/tests/integ_tests/workflow_tests/timers.rs +131 -0
  227. data/bridge/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +75 -0
  228. data/bridge/sdk-core/tests/integ_tests/workflow_tests.rs +587 -0
  229. data/bridge/sdk-core/tests/load_tests.rs +191 -0
  230. data/bridge/sdk-core/tests/main.rs +111 -0
  231. data/bridge/sdk-core/tests/runner.rs +93 -0
  232. data/bridge/src/connection.rs +167 -0
  233. data/bridge/src/lib.rs +180 -0
  234. data/bridge/src/runtime.rs +47 -0
  235. data/bridge/src/worker.rs +73 -0
  236. data/ext/Rakefile +9 -0
  237. data/lib/bridge.so +0 -0
  238. data/lib/gen/dependencies/gogoproto/gogo_pb.rb +14 -0
  239. data/lib/gen/temporal/api/batch/v1/message_pb.rb +48 -0
  240. data/lib/gen/temporal/api/cluster/v1/message_pb.rb +67 -0
  241. data/lib/gen/temporal/api/command/v1/message_pb.rb +166 -0
  242. data/lib/gen/temporal/api/common/v1/message_pb.rb +69 -0
  243. data/lib/gen/temporal/api/enums/v1/batch_operation_pb.rb +32 -0
  244. data/lib/gen/temporal/api/enums/v1/cluster_pb.rb +26 -0
  245. data/lib/gen/temporal/api/enums/v1/command_type_pb.rb +37 -0
  246. data/lib/gen/temporal/api/enums/v1/common_pb.rb +41 -0
  247. data/lib/gen/temporal/api/enums/v1/event_type_pb.rb +67 -0
  248. data/lib/gen/temporal/api/enums/v1/failed_cause_pb.rb +71 -0
  249. data/lib/gen/temporal/api/enums/v1/namespace_pb.rb +37 -0
  250. data/lib/gen/temporal/api/enums/v1/query_pb.rb +31 -0
  251. data/lib/gen/temporal/api/enums/v1/reset_pb.rb +24 -0
  252. data/lib/gen/temporal/api/enums/v1/schedule_pb.rb +28 -0
  253. data/lib/gen/temporal/api/enums/v1/task_queue_pb.rb +30 -0
  254. data/lib/gen/temporal/api/enums/v1/update_pb.rb +28 -0
  255. data/lib/gen/temporal/api/enums/v1/workflow_pb.rb +89 -0
  256. data/lib/gen/temporal/api/errordetails/v1/message_pb.rb +84 -0
  257. data/lib/gen/temporal/api/failure/v1/message_pb.rb +83 -0
  258. data/lib/gen/temporal/api/filter/v1/message_pb.rb +40 -0
  259. data/lib/gen/temporal/api/history/v1/message_pb.rb +489 -0
  260. data/lib/gen/temporal/api/namespace/v1/message_pb.rb +63 -0
  261. data/lib/gen/temporal/api/operatorservice/v1/request_response_pb.rb +125 -0
  262. data/lib/gen/temporal/api/operatorservice/v1/service_pb.rb +20 -0
  263. data/lib/gen/temporal/api/query/v1/message_pb.rb +38 -0
  264. data/lib/gen/temporal/api/replication/v1/message_pb.rb +37 -0
  265. data/lib/gen/temporal/api/schedule/v1/message_pb.rb +128 -0
  266. data/lib/gen/temporal/api/taskqueue/v1/message_pb.rb +73 -0
  267. data/lib/gen/temporal/api/update/v1/message_pb.rb +26 -0
  268. data/lib/gen/temporal/api/version/v1/message_pb.rb +41 -0
  269. data/lib/gen/temporal/api/workflow/v1/message_pb.rb +110 -0
  270. data/lib/gen/temporal/api/workflowservice/v1/request_response_pb.rb +771 -0
  271. data/lib/gen/temporal/api/workflowservice/v1/service_pb.rb +20 -0
  272. data/lib/gen/temporal/sdk/core/activity_result/activity_result_pb.rb +58 -0
  273. data/lib/gen/temporal/sdk/core/activity_task/activity_task_pb.rb +57 -0
  274. data/lib/gen/temporal/sdk/core/bridge/bridge_pb.rb +222 -0
  275. data/lib/gen/temporal/sdk/core/child_workflow/child_workflow_pb.rb +57 -0
  276. data/lib/gen/temporal/sdk/core/common/common_pb.rb +22 -0
  277. data/lib/gen/temporal/sdk/core/core_interface_pb.rb +34 -0
  278. data/lib/gen/temporal/sdk/core/external_data/external_data_pb.rb +27 -0
  279. data/lib/gen/temporal/sdk/core/workflow_activation/workflow_activation_pb.rb +164 -0
  280. data/lib/gen/temporal/sdk/core/workflow_commands/workflow_commands_pb.rb +192 -0
  281. data/lib/gen/temporal/sdk/core/workflow_completion/workflow_completion_pb.rb +34 -0
  282. data/lib/temporal/bridge.rb +14 -0
  283. data/lib/temporal/client/implementation.rb +339 -0
  284. data/lib/temporal/client/workflow_handle.rb +243 -0
  285. data/lib/temporal/client.rb +144 -0
  286. data/lib/temporal/connection.rb +736 -0
  287. data/lib/temporal/data_converter.rb +150 -0
  288. data/lib/temporal/error/failure.rb +194 -0
  289. data/lib/temporal/error/workflow_failure.rb +17 -0
  290. data/lib/temporal/errors.rb +22 -0
  291. data/lib/temporal/failure_converter/base.rb +26 -0
  292. data/lib/temporal/failure_converter/basic.rb +313 -0
  293. data/lib/temporal/failure_converter.rb +8 -0
  294. data/lib/temporal/interceptor/chain.rb +27 -0
  295. data/lib/temporal/interceptor/client.rb +102 -0
  296. data/lib/temporal/payload_codec/base.rb +32 -0
  297. data/lib/temporal/payload_converter/base.rb +24 -0
  298. data/lib/temporal/payload_converter/bytes.rb +26 -0
  299. data/lib/temporal/payload_converter/composite.rb +47 -0
  300. data/lib/temporal/payload_converter/encoding_base.rb +35 -0
  301. data/lib/temporal/payload_converter/json.rb +25 -0
  302. data/lib/temporal/payload_converter/nil.rb +25 -0
  303. data/lib/temporal/payload_converter.rb +14 -0
  304. data/lib/temporal/retry_policy.rb +82 -0
  305. data/lib/temporal/retry_state.rb +35 -0
  306. data/lib/temporal/runtime.rb +22 -0
  307. data/lib/temporal/timeout_type.rb +29 -0
  308. data/lib/temporal/version.rb +3 -0
  309. data/lib/temporal/workflow/execution_info.rb +54 -0
  310. data/lib/temporal/workflow/execution_status.rb +36 -0
  311. data/lib/temporal/workflow/id_reuse_policy.rb +36 -0
  312. data/lib/temporal/workflow/query_reject_condition.rb +33 -0
  313. data/lib/temporal.rb +8 -0
  314. data/lib/temporalio.rb +3 -0
  315. data/lib/thermite_patch.rb +23 -0
  316. data/temporalio.gemspec +41 -0
  317. metadata +583 -0
@@ -0,0 +1,82 @@
1
+ require 'temporal/api/common/v1/message_pb'
2
+ require 'temporal/errors'
3
+
4
+ module Temporal
5
+ # Options for retrying workflows and activities.
6
+ #
7
+ # @see https://docs.temporal.io/application-development/features/#workflow-retry-policy
8
+ class RetryPolicy
9
+ class Invalid < Temporal::Error; end
10
+
11
+ # @return [Integer] Backoff interval for the first retry.
12
+ attr_reader :initial_interval
13
+
14
+ # @return [Float] Coefficient to multiply previous backoff interval by to get new interval.
15
+ attr_reader :backoff
16
+
17
+ # @return [Integer, nil] Maximum backoff interval between retries. Default 100x
18
+ # {#initial_interval}.
19
+ attr_reader :max_interval
20
+
21
+ # @return [Integer] Maximum number of attempts. If 0, the default, there is no maximum.
22
+ attr_reader :max_attempts
23
+
24
+ # @return [Array<String>] List of error types that are not retryable.
25
+ attr_reader :non_retriable_errors
26
+
27
+ # @param initial_interval [Integer] Backoff interval (in seconds) for the first retry.
28
+ # @param backoff [Float] Coefficient to multiply previous backoff interval by to get new
29
+ # interval.
30
+ # @param max_interval [Integer] Maximum backoff interval between retries. Default 100x
31
+ # {#initial_interval}.
32
+ # @param max_attempts [Integer] Maximum number of attempts. If 0, there is no maximum.
33
+ # @param non_retriable_errors [Array<String>] List of error types that are not retryable.
34
+ def initialize(
35
+ initial_interval: 1,
36
+ backoff: 2.0,
37
+ max_interval: nil,
38
+ max_attempts: 0,
39
+ non_retriable_errors: []
40
+ )
41
+ @initial_interval = initial_interval
42
+ @backoff = backoff
43
+ @max_interval = max_interval
44
+ @max_attempts = max_attempts
45
+ @non_retriable_errors = non_retriable_errors
46
+ end
47
+
48
+ def validate!
49
+ # Retries disabled
50
+ return if max_attempts == 1
51
+
52
+ # Maximum attempts
53
+ raise Invalid, 'Maximum attempts must be specified' unless max_attempts
54
+ raise Invalid, 'Maximum attempts cannot be negative' if max_attempts.negative?
55
+
56
+ # Initial interval
57
+ raise Invalid, 'Initial interval must be specified' unless initial_interval
58
+ raise Invalid, 'Initial interval cannot be negative' if initial_interval.negative?
59
+ raise Invalid, 'Initial interval must be in whole seconds' unless initial_interval.is_a?(Integer)
60
+
61
+ # Backoff coefficient
62
+ raise Invalid, 'Backoff coefficient must be specified' unless backoff
63
+ raise Invalid, 'Backoff coefficient cannot be less than 1' if backoff < 1
64
+
65
+ # Maximum interval
66
+ if max_interval
67
+ raise Invalid, 'Maximum interval cannot be negative' if max_interval.negative?
68
+ raise Invalid, 'Maximum interval cannot be less than initial interval' if max_interval < initial_interval
69
+ end
70
+ end
71
+
72
+ def to_proto
73
+ Temporal::Api::Common::V1::RetryPolicy.new(
74
+ initial_interval: Google::Protobuf::Duration.new(seconds: initial_interval),
75
+ backoff_coefficient: backoff,
76
+ maximum_interval: max_interval ? Google::Protobuf::Duration.new(seconds: max_interval) : nil,
77
+ maximum_attempts: max_attempts,
78
+ non_retryable_error_types: non_retriable_errors.map(&:name).compact,
79
+ )
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,35 @@
1
+ module Temporal
2
+ # Current retry state of the workflow/activity during error.
3
+ module RetryState
4
+ STATES = [
5
+ IN_PROGRESS = :IN_PROGRESS,
6
+ NON_RETRYABLE_FAILURE = :NON_RETRYABLE_FAILURE,
7
+ TIMEOUT = :TIMEOUT,
8
+ MAXIMUM_ATTEMPTS_REACHED = :MAXIMUM_ATTEMPTS_REACHED,
9
+ RETRY_POLICY_NOT_SET = :RETRY_POLICY_NOT_SET,
10
+ INTERNAL_SERVER_ERROR = :INTERNAL_SERVER_ERROR,
11
+ CANCEL_REQUESTED = :CANCEL_REQUESTED,
12
+ ].freeze
13
+
14
+ # RBS screws up style definitions when using .freeze
15
+ # rubocop:disable Style/MutableConstant
16
+ API_MAP = {
17
+ RETRY_STATE_IN_PROGRESS: IN_PROGRESS,
18
+ RETRY_STATE_NON_RETRYABLE_FAILURE: NON_RETRYABLE_FAILURE,
19
+ RETRY_STATE_TIMEOUT: TIMEOUT,
20
+ RETRY_STATE_MAXIMUM_ATTEMPTS_REACHED: MAXIMUM_ATTEMPTS_REACHED,
21
+ RETRY_STATE_RETRY_POLICY_NOT_SET: RETRY_POLICY_NOT_SET,
22
+ RETRY_STATE_INTERNAL_SERVER_ERROR: INTERNAL_SERVER_ERROR,
23
+ RETRY_STATE_CANCEL_REQUESTED: CANCEL_REQUESTED,
24
+ }
25
+ # rubocop:enable Style/MutableConstant
26
+
27
+ def self.to_raw(state)
28
+ API_MAP.invert[state] || :RETRY_STATE_UNSPECIFIED
29
+ end
30
+
31
+ def self.from_raw(raw_state)
32
+ API_MAP[raw_state]
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ require 'singleton'
2
+ require 'temporal/bridge'
3
+
4
+ module Temporal
5
+ class Runtime
6
+ include Singleton
7
+
8
+ attr_reader :core_runtime
9
+
10
+ def initialize
11
+ @core_runtime = Temporal::Bridge::Runtime.init
12
+ end
13
+
14
+ def ensure_callback_loop
15
+ return if @thread
16
+
17
+ @thread = Thread.new do
18
+ core_runtime.run_callback_loop
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,29 @@
1
+ module Temporal
2
+ # Type of timeout for {Temporal::TimeoutError}.
3
+ module TimeoutType
4
+ TYPES = [
5
+ START_TO_CLOSE = :START_TO_CLOSE,
6
+ SCHEDULE_TO_START = :SCHEDULE_TO_START,
7
+ SCHEDULE_TO_CLOSE = :SCHEDULE_TO_CLOSE,
8
+ HEARTBEAT = :HEARTBEAT,
9
+ ].freeze
10
+
11
+ # RBS screws up style definitions when using .freeze
12
+ # rubocop:disable Style/MutableConstant
13
+ API_MAP = {
14
+ TIMEOUT_TYPE_START_TO_CLOSE: START_TO_CLOSE,
15
+ TIMEOUT_TYPE_SCHEDULE_TO_START: SCHEDULE_TO_START,
16
+ TIMEOUT_TYPE_SCHEDULE_TO_CLOSE: SCHEDULE_TO_CLOSE,
17
+ TIMEOUT_TYPE_HEARTBEAT: HEARTBEAT,
18
+ }
19
+ # rubocop:enable Style/MutableConstant
20
+
21
+ def self.to_raw(type)
22
+ API_MAP.invert[type] || :TIMEOUT_TYPE_UNSPECIFIED
23
+ end
24
+
25
+ def self.from_raw(raw_type)
26
+ API_MAP[raw_type]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ module Temporal
2
+ VERSION = '0.0.1'.freeze
3
+ end
@@ -0,0 +1,54 @@
1
+ require 'temporal/errors'
2
+ require 'temporal/workflow/execution_status'
3
+ require 'google/protobuf/well_known_types'
4
+
5
+ module Temporal
6
+ class Workflow
7
+ class ExecutionInfo < Struct.new(
8
+ :raw,
9
+ :workflow,
10
+ :id,
11
+ :run_id,
12
+ :task_queue,
13
+ :status,
14
+ :parent_id,
15
+ :parent_run_id,
16
+ :start_time,
17
+ :close_time,
18
+ :execution_time,
19
+ :history_length,
20
+ :memo,
21
+ :search_attributes,
22
+ keyword_init: true,
23
+ )
24
+ def self.from_raw(response, converter)
25
+ raw_info = response.workflow_execution_info
26
+ raise Temporal::Error::UnexpectedResponse, 'missing workflow_execution_info' unless raw_info
27
+
28
+ new(
29
+ raw: response,
30
+ workflow: raw_info.type&.name,
31
+ id: raw_info.execution&.workflow_id,
32
+ run_id: raw_info.execution&.run_id,
33
+ task_queue: raw_info.task_queue,
34
+ status: Workflow::ExecutionStatus.from_raw(raw_info.status),
35
+ parent_id: raw_info.parent_execution&.workflow_id,
36
+ parent_run_id: raw_info.parent_execution&.run_id,
37
+ start_time: raw_info.start_time&.to_time,
38
+ close_time: raw_info.close_time&.to_time,
39
+ execution_time: raw_info.execution_time&.to_time,
40
+ history_length: raw_info.history_length,
41
+ memo: converter.from_payload_map(raw_info.memo&.fields),
42
+ search_attributes: converter.from_payload_map(raw_info.search_attributes&.indexed_fields),
43
+ ).freeze
44
+ end
45
+
46
+ # Helper methods for checking execution status
47
+ Workflow::ExecutionStatus::STATUSES.each do |status|
48
+ define_method("#{status.downcase}?") do
49
+ self.status == status
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,36 @@
1
+ module Temporal
2
+ class Workflow
3
+ module ExecutionStatus
4
+ STATUSES = [
5
+ RUNNING = :RUNNING,
6
+ COMPLETED = :COMPLETED,
7
+ FAILED = :FAILED,
8
+ CANCELED = :CANCELED,
9
+ TERMINATED = :TERMINATED,
10
+ CONTINUED_AS_NEW = :CONTINUED_AS_NEW,
11
+ TIMED_OUT = :TIMED_OUT,
12
+ ].freeze
13
+
14
+ # RBS screws up style definitions when using .freeze
15
+ # rubocop:disable Style/MutableConstant
16
+ API_MAP = {
17
+ WORKFLOW_EXECUTION_STATUS_RUNNING: RUNNING,
18
+ WORKFLOW_EXECUTION_STATUS_COMPLETED: COMPLETED,
19
+ WORKFLOW_EXECUTION_STATUS_FAILED: FAILED,
20
+ WORKFLOW_EXECUTION_STATUS_CANCELED: CANCELED,
21
+ WORKFLOW_EXECUTION_STATUS_TERMINATED: TERMINATED,
22
+ WORKFLOW_EXECUTION_STATUS_CONTINUED_AS_NEW: CONTINUED_AS_NEW,
23
+ WORKFLOW_EXECUTION_STATUS_TIMED_OUT: TIMED_OUT,
24
+ }
25
+ # rubocop:enable Style/MutableConstant
26
+
27
+ def self.to_raw(status)
28
+ API_MAP.invert[status]
29
+ end
30
+
31
+ def self.from_raw(raw_status)
32
+ API_MAP[raw_status]
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ require 'temporal/api/enums/v1/workflow_pb'
2
+
3
+ module Temporal
4
+ class Workflow
5
+ # How already-in-use workflow IDs are handled on start.
6
+ #
7
+ # @see Temporal::Api::Enums::V1::WorkflowIdReusePolicy
8
+ class IDReusePolicy
9
+ POLICIES = [
10
+ ALLOW_DUPLICATE = :ALLOW_DUPLICATE,
11
+ ALLOW_DUPLICATE_FAILED_ONLY = :ALLOW_DUPLICATE_FAILED_ONLY,
12
+ REJECT_DUPLICATE = :REJECT_DUPLICATE,
13
+ TERMINATE_IF_RUNNING = :TERMINATE_IF_RUNNING,
14
+ ].freeze
15
+
16
+ API_MAP = {
17
+ Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE =>
18
+ ALLOW_DUPLICATE,
19
+ Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_ALLOW_DUPLICATE_FAILED_ONLY =>
20
+ ALLOW_DUPLICATE_FAILED_ONLY,
21
+ Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_REJECT_DUPLICATE =>
22
+ REJECT_DUPLICATE,
23
+ Temporal::Api::Enums::V1::WorkflowIdReusePolicy::WORKFLOW_ID_REUSE_POLICY_TERMINATE_IF_RUNNING =>
24
+ TERMINATE_IF_RUNNING,
25
+ }.freeze
26
+
27
+ def self.to_raw(policy)
28
+ API_MAP.invert[policy]
29
+ end
30
+
31
+ def self.from_raw(raw_policy)
32
+ API_MAP[raw_policy]
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,33 @@
1
+ require 'temporal/api/enums/v1/query_pb'
2
+
3
+ module Temporal
4
+ class Workflow
5
+ # Whether a query should be rejected in certain conditions.
6
+ #
7
+ # @see Temporal::Api::Enums::V1::QueryRejectCondition
8
+ module QueryRejectCondition
9
+ CONDITIONS = [
10
+ NONE = :NONE,
11
+ NOT_OPEN = :NOT_OPEN,
12
+ NOT_COMPLETED_CLEANLY = :NOT_COMPLETED_CLEANLY,
13
+ ].freeze
14
+
15
+ API_MAP = {
16
+ Temporal::Api::Enums::V1::QueryRejectCondition::QUERY_REJECT_CONDITION_NONE =>
17
+ NONE,
18
+ Temporal::Api::Enums::V1::QueryRejectCondition::QUERY_REJECT_CONDITION_NOT_OPEN =>
19
+ NOT_OPEN,
20
+ Temporal::Api::Enums::V1::QueryRejectCondition::QUERY_REJECT_CONDITION_NOT_COMPLETED_CLEANLY =>
21
+ NOT_COMPLETED_CLEANLY,
22
+ }.freeze
23
+
24
+ def self.to_raw(condition)
25
+ API_MAP.invert[condition]
26
+ end
27
+
28
+ def self.from_raw(raw_condition)
29
+ API_MAP[raw_condition]
30
+ end
31
+ end
32
+ end
33
+ end
data/lib/temporal.rb ADDED
@@ -0,0 +1,8 @@
1
+ # Protoc wants all of its generated files on the LOAD_PATH
2
+ $LOAD_PATH << File.expand_path('./gen', File.dirname(__FILE__))
3
+
4
+ require 'temporal/bridge'
5
+ require 'temporal/version'
6
+
7
+ module Temporal
8
+ end
data/lib/temporalio.rb ADDED
@@ -0,0 +1,3 @@
1
+ # This file provides the main entry-point for the gem (based on the name).
2
+ # All the gem internals are namespaced Temporal, temporalio is onle the name of the gem.
3
+ require_relative './temporal'
@@ -0,0 +1,23 @@
1
+ require 'rbconfig'
2
+
3
+ module Thermite
4
+ class Config
5
+ # Thermite doesn't support cross-compilation so it always assumes the binary is being
6
+ # built for the current architecture. It only really affects the name of the tarball.
7
+ def target_arch
8
+ @target_arch ||= ENV.fetch('TARGET_ARCH', RbConfig::CONFIG['target_cpu'])
9
+ end
10
+
11
+ # Use the same target for all darwin versions
12
+ def target_os
13
+ @target_os ||= RbConfig::CONFIG['target_os'].sub(/darwin\d+/, 'darwin')
14
+ end
15
+
16
+ # Due to the lack of cross-compilation support, thermite assumes the resulting binary
17
+ # is placed in target/<profile>, however it's actually in target/<target_arch>/<profile>
18
+ def cargo_target_path(profile, *path_components)
19
+ target_base = ENV.fetch('CARGO_TARGET_DIR', File.join(rust_toplevel_dir, 'target'))
20
+ File.join(target_base, ENV.fetch('CARGO_BUILD_TARGET', ''), profile, *path_components)
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,41 @@
1
+ require_relative './lib/temporal/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'temporalio'
5
+ spec.version = Temporal::VERSION
6
+ spec.summary = 'Temporal.io Ruby SDK'
7
+ spec.description = 'An SDK for implementing Temporal.io workflows and activities in Ruby'
8
+ spec.homepage = 'https://github.com/temporalio/sdk-ruby'
9
+ spec.licenses = ['MIT']
10
+
11
+ spec.authors = ['Anthony D']
12
+ spec.email = ['anthony@temporal.io']
13
+
14
+ spec.require_paths = ['lib']
15
+ spec.extensions = ['ext/Rakefile']
16
+
17
+ spec.files =
18
+ Dir['lib/**/*.*'] +
19
+ Dir['bridge/**/*.*'].reject { |x| x.include?('/target/') } +
20
+ %w[ext/Rakefile temporalio.gemspec Gemfile LICENSE README.md]
21
+
22
+ spec.required_ruby_version = '>= 2.7.0'
23
+
24
+ spec.add_dependency 'google-protobuf', '~> 3.21.1' # Protobuf
25
+ spec.add_dependency 'rexml', '~> 3.2.5' # Implicitly required by thermite
26
+ spec.add_dependency 'rutie', '~> 0.0.4' # Rust bindings
27
+ spec.add_dependency 'thermite', '~> 0.13.0' # For compiling Rust ext
28
+
29
+ spec.add_development_dependency 'grpc' # Ruby GRPC for the mock server
30
+ spec.add_development_dependency 'grpc-tools' # GRPC generator for the mock server
31
+ spec.add_development_dependency 'protobuf' # Ruby implementation of protobufs (for rbs_protobuf)
32
+ spec.add_development_dependency 'pry' # Debugger
33
+ spec.add_development_dependency 'rake' # rake tasks
34
+ spec.add_development_dependency 'rbs_protobuf' # RBS generator for protobufs
35
+ spec.add_development_dependency 'rspec' # specs
36
+ spec.add_development_dependency 'rubocop' # linter
37
+ spec.add_development_dependency 'rubocop-rspec' # spec linter
38
+ spec.add_development_dependency 'steep' # type checker
39
+ spec.add_development_dependency 'typeprof' # type generator
40
+ spec.add_development_dependency 'yard' # docs
41
+ end