@temporalio/core-bridge 1.14.2-canary-release-testing.0 → 1.16.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.
Files changed (233) hide show
  1. package/Cargo.lock +794 -650
  2. package/bridge-macros/src/derive_tryintojs.rs +40 -0
  3. package/lib/native.d.ts +24 -3
  4. package/package.json +4 -4
  5. package/releases/aarch64-apple-darwin/index.node +0 -0
  6. package/releases/aarch64-unknown-linux-gnu/index.node +0 -0
  7. package/releases/x86_64-apple-darwin/index.node +0 -0
  8. package/releases/x86_64-pc-windows-msvc/index.node +0 -0
  9. package/releases/x86_64-unknown-linux-gnu/index.node +0 -0
  10. package/sdk-core/.github/workflows/per-pr.yml +6 -6
  11. package/sdk-core/AGENTS.md +42 -31
  12. package/sdk-core/Cargo.toml +4 -1
  13. package/sdk-core/README.md +19 -13
  14. package/sdk-core/crates/client/Cargo.toml +4 -0
  15. package/sdk-core/crates/client/README.md +139 -0
  16. package/sdk-core/crates/client/src/async_activity_handle.rs +297 -0
  17. package/sdk-core/crates/client/src/callback_based.rs +7 -0
  18. package/sdk-core/crates/client/src/errors.rs +294 -0
  19. package/sdk-core/crates/client/src/{raw.rs → grpc.rs} +370 -159
  20. package/sdk-core/crates/client/src/lib.rs +920 -1326
  21. package/sdk-core/crates/client/src/metrics.rs +24 -33
  22. package/sdk-core/crates/client/src/options_structs.rs +457 -0
  23. package/sdk-core/crates/client/src/replaceable.rs +5 -4
  24. package/sdk-core/crates/client/src/request_extensions.rs +8 -9
  25. package/sdk-core/crates/client/src/retry.rs +99 -54
  26. package/sdk-core/crates/client/src/{worker/mod.rs → worker.rs} +104 -29
  27. package/sdk-core/crates/client/src/workflow_handle.rs +826 -0
  28. package/sdk-core/crates/common/Cargo.toml +62 -3
  29. package/sdk-core/crates/common/build.rs +742 -12
  30. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/ci.yml +2 -0
  31. package/sdk-core/crates/common/protos/api_upstream/.github/workflows/create-release.yml +0 -5
  32. package/sdk-core/crates/common/protos/api_upstream/Makefile +2 -1
  33. package/sdk-core/crates/common/protos/api_upstream/README.md +8 -0
  34. package/sdk-core/crates/common/protos/api_upstream/cmd/check-path-conflicts/main.go +137 -0
  35. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv2.json +3329 -2647
  36. package/sdk-core/crates/common/protos/api_upstream/openapi/openapiv3.yaml +2734 -708
  37. package/sdk-core/crates/common/protos/api_upstream/temporal/api/activity/v1/message.proto +155 -3
  38. package/sdk-core/crates/common/protos/api_upstream/temporal/api/command/v1/message.proto +26 -0
  39. package/sdk-core/crates/common/protos/api_upstream/temporal/api/common/v1/message.proto +8 -1
  40. package/sdk-core/crates/common/protos/api_upstream/temporal/api/deployment/v1/message.proto +27 -1
  41. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/activity.proto +81 -0
  42. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/event_type.proto +4 -0
  43. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/failed_cause.proto +4 -0
  44. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/task_queue.proto +15 -0
  45. package/sdk-core/crates/common/protos/api_upstream/temporal/api/enums/v1/workflow.proto +63 -15
  46. package/sdk-core/crates/common/protos/api_upstream/temporal/api/errordetails/v1/message.proto +8 -0
  47. package/sdk-core/crates/common/protos/api_upstream/temporal/api/failure/v1/message.proto +1 -0
  48. package/sdk-core/crates/common/protos/api_upstream/temporal/api/history/v1/message.proto +111 -17
  49. package/sdk-core/crates/common/protos/api_upstream/temporal/api/namespace/v1/message.proto +21 -0
  50. package/sdk-core/crates/common/protos/api_upstream/temporal/api/nexus/v1/message.proto +20 -1
  51. package/sdk-core/crates/common/protos/api_upstream/temporal/api/operatorservice/v1/request_response.proto +4 -0
  52. package/sdk-core/crates/common/protos/api_upstream/temporal/api/schedule/v1/message.proto +2 -2
  53. package/sdk-core/crates/common/protos/api_upstream/temporal/api/taskqueue/v1/message.proto +2 -0
  54. package/sdk-core/crates/common/protos/api_upstream/temporal/api/worker/v1/message.proto +4 -7
  55. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflow/v1/message.proto +80 -22
  56. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/request_response.proto +347 -23
  57. package/sdk-core/crates/common/protos/api_upstream/temporal/api/workflowservice/v1/service.proto +242 -43
  58. package/sdk-core/crates/common/protos/local/temporal/sdk/core/core_interface.proto +15 -0
  59. package/sdk-core/crates/common/protos/local/temporal/sdk/core/nexus/nexus.proto +9 -2
  60. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_activation/workflow_activation.proto +8 -0
  61. package/sdk-core/crates/common/protos/local/temporal/sdk/core/workflow_commands/workflow_commands.proto +22 -5
  62. package/sdk-core/crates/common/src/activity_definition.rs +20 -0
  63. package/sdk-core/crates/common/src/data_converters.rs +770 -0
  64. package/sdk-core/crates/common/src/envconfig.rs +5 -0
  65. package/sdk-core/crates/common/src/lib.rs +15 -211
  66. package/sdk-core/crates/common/src/payload_visitor.rs +648 -0
  67. package/sdk-core/crates/common/src/priority.rs +110 -0
  68. package/sdk-core/crates/common/src/protos/canned_histories.rs +19 -0
  69. package/sdk-core/crates/common/src/protos/history_builder.rs +45 -0
  70. package/sdk-core/crates/common/src/protos/history_info.rs +2 -0
  71. package/sdk-core/crates/common/src/protos/mod.rs +134 -27
  72. package/sdk-core/crates/common/src/protos/task_token.rs +3 -3
  73. package/sdk-core/crates/common/src/protos/utilities.rs +11 -0
  74. package/sdk-core/crates/{sdk-core → common}/src/telemetry/log_export.rs +11 -16
  75. package/sdk-core/crates/common/src/telemetry/metrics/core.rs +125 -0
  76. package/sdk-core/crates/common/src/telemetry/metrics.rs +272 -225
  77. package/sdk-core/crates/{sdk-core → common}/src/telemetry/otel.rs +8 -13
  78. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_meter.rs +49 -50
  79. package/sdk-core/crates/{sdk-core → common}/src/telemetry/prometheus_server.rs +2 -3
  80. package/sdk-core/crates/common/src/telemetry.rs +278 -19
  81. package/sdk-core/crates/common/src/worker.rs +68 -636
  82. package/sdk-core/crates/common/src/workflow_definition.rs +60 -0
  83. package/sdk-core/crates/macros/Cargo.toml +5 -1
  84. package/sdk-core/crates/macros/src/activities_definitions.rs +585 -0
  85. package/sdk-core/crates/macros/src/fsm_impl.rs +507 -0
  86. package/sdk-core/crates/macros/src/lib.rs +138 -512
  87. package/sdk-core/crates/macros/src/macro_utils.rs +106 -0
  88. package/sdk-core/crates/macros/src/workflow_definitions.rs +1224 -0
  89. package/sdk-core/crates/sdk/Cargo.toml +19 -6
  90. package/sdk-core/crates/sdk/README.md +415 -0
  91. package/sdk-core/crates/sdk/src/activities.rs +417 -0
  92. package/sdk-core/crates/sdk/src/interceptors.rs +1 -1
  93. package/sdk-core/crates/sdk/src/lib.rs +759 -442
  94. package/sdk-core/crates/sdk/src/workflow_context/options.rs +64 -35
  95. package/sdk-core/crates/sdk/src/workflow_context.rs +1033 -289
  96. package/sdk-core/crates/sdk/src/workflow_future.rs +277 -213
  97. package/sdk-core/crates/sdk/src/workflows.rs +711 -0
  98. package/sdk-core/crates/sdk-core/Cargo.toml +59 -65
  99. package/sdk-core/crates/sdk-core/benches/workflow_replay_bench.rs +45 -54
  100. package/sdk-core/crates/sdk-core/machine_coverage/ActivityMachine_Coverage.puml +1 -1
  101. package/sdk-core/crates/sdk-core/src/abstractions.rs +6 -10
  102. package/sdk-core/crates/sdk-core/src/core_tests/activity_tasks.rs +6 -5
  103. package/sdk-core/crates/sdk-core/src/core_tests/mod.rs +22 -21
  104. package/sdk-core/crates/sdk-core/src/core_tests/queries.rs +21 -25
  105. package/sdk-core/crates/sdk-core/src/core_tests/replay_flag.rs +7 -10
  106. package/sdk-core/crates/sdk-core/src/core_tests/updates.rs +14 -17
  107. package/sdk-core/crates/sdk-core/src/core_tests/workers.rs +647 -27
  108. package/sdk-core/crates/sdk-core/src/core_tests/workflow_tasks.rs +46 -41
  109. package/sdk-core/crates/sdk-core/src/ephemeral_server/mod.rs +13 -16
  110. package/sdk-core/crates/sdk-core/src/histfetch.rs +20 -10
  111. package/sdk-core/crates/sdk-core/src/lib.rs +60 -123
  112. package/sdk-core/crates/sdk-core/src/pollers/mod.rs +4 -9
  113. package/sdk-core/crates/sdk-core/src/pollers/poll_buffer.rs +411 -32
  114. package/sdk-core/crates/sdk-core/src/protosext/mod.rs +2 -2
  115. package/sdk-core/crates/sdk-core/src/replay/mod.rs +14 -5
  116. package/sdk-core/crates/sdk-core/src/telemetry/metrics.rs +183 -198
  117. package/sdk-core/crates/sdk-core/src/telemetry/mod.rs +3 -281
  118. package/sdk-core/crates/sdk-core/src/test_help/integ_helpers.rs +35 -16
  119. package/sdk-core/crates/sdk-core/src/test_help/unit_helpers.rs +3 -6
  120. package/sdk-core/crates/sdk-core/src/worker/activities/activity_heartbeat_manager.rs +1 -0
  121. package/sdk-core/crates/sdk-core/src/worker/activities/local_activities.rs +11 -14
  122. package/sdk-core/crates/sdk-core/src/worker/activities.rs +16 -19
  123. package/sdk-core/crates/sdk-core/src/worker/client/mocks.rs +11 -5
  124. package/sdk-core/crates/sdk-core/src/worker/client.rs +104 -86
  125. package/sdk-core/crates/sdk-core/src/worker/heartbeat.rs +10 -14
  126. package/sdk-core/crates/sdk-core/src/worker/mod.rs +1175 -241
  127. package/sdk-core/crates/sdk-core/src/worker/nexus.rs +150 -23
  128. package/sdk-core/crates/sdk-core/src/worker/slot_provider.rs +2 -2
  129. package/sdk-core/crates/sdk-core/src/worker/tuner/fixed_size.rs +2 -2
  130. package/sdk-core/crates/sdk-core/src/worker/tuner/resource_based.rs +25 -27
  131. package/sdk-core/crates/sdk-core/src/worker/tuner.rs +64 -44
  132. package/sdk-core/crates/sdk-core/src/worker/workflow/driven_workflow.rs +9 -3
  133. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/patch_state_machine.rs +5 -8
  134. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/upsert_search_attributes_state_machine.rs +21 -22
  135. package/sdk-core/crates/sdk-core/src/worker/workflow/machines/workflow_machines.rs +28 -4
  136. package/sdk-core/crates/sdk-core/src/worker/workflow/managed_run.rs +20 -41
  137. package/sdk-core/crates/sdk-core/src/worker/workflow/mod.rs +50 -9
  138. package/sdk-core/crates/sdk-core/src/worker/workflow/run_cache.rs +4 -7
  139. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_extraction.rs +2 -4
  140. package/sdk-core/crates/sdk-core/src/worker/workflow/wft_poller.rs +8 -9
  141. package/sdk-core/crates/sdk-core/src/worker/workflow/workflow_stream.rs +1 -3
  142. package/sdk-core/crates/sdk-core/tests/activities_procmacro.rs +6 -0
  143. package/sdk-core/crates/sdk-core/tests/activities_trybuild/basic_pass.rs +54 -0
  144. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.rs +18 -0
  145. package/sdk-core/crates/sdk-core/tests/activities_trybuild/invalid_self_type_fail.stderr +5 -0
  146. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.rs +14 -0
  147. package/sdk-core/crates/sdk-core/tests/activities_trybuild/missing_context_fail.stderr +5 -0
  148. package/sdk-core/crates/sdk-core/tests/activities_trybuild/multi_arg_pass.rs +48 -0
  149. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_input_pass.rs +14 -0
  150. package/sdk-core/crates/sdk-core/tests/activities_trybuild/no_return_type_pass.rs +19 -0
  151. package/sdk-core/crates/sdk-core/tests/cloud_tests.rs +14 -5
  152. package/sdk-core/crates/sdk-core/tests/common/activity_functions.rs +55 -0
  153. package/sdk-core/crates/sdk-core/tests/common/mod.rs +281 -236
  154. package/sdk-core/crates/sdk-core/tests/common/workflows.rs +41 -28
  155. package/sdk-core/crates/sdk-core/tests/global_metric_tests.rs +9 -14
  156. package/sdk-core/crates/sdk-core/tests/heavy_tests/fuzzy_workflow.rs +73 -66
  157. package/sdk-core/crates/sdk-core/tests/heavy_tests.rs +306 -268
  158. package/sdk-core/crates/sdk-core/tests/integ_tests/async_activity_client_tests.rs +230 -0
  159. package/sdk-core/crates/sdk-core/tests/integ_tests/client_tests.rs +94 -57
  160. package/sdk-core/crates/sdk-core/tests/integ_tests/data_converter_tests.rs +381 -0
  161. package/sdk-core/crates/sdk-core/tests/integ_tests/ephemeral_server_tests.rs +37 -38
  162. package/sdk-core/crates/sdk-core/tests/integ_tests/heartbeat_tests.rs +49 -40
  163. package/sdk-core/crates/sdk-core/tests/integ_tests/metrics_tests.rs +447 -300
  164. package/sdk-core/crates/sdk-core/tests/integ_tests/pagination_tests.rs +50 -45
  165. package/sdk-core/crates/sdk-core/tests/integ_tests/polling_tests.rs +157 -157
  166. package/sdk-core/crates/sdk-core/tests/integ_tests/queries_tests.rs +103 -89
  167. package/sdk-core/crates/sdk-core/tests/integ_tests/update_tests.rs +609 -463
  168. package/sdk-core/crates/sdk-core/tests/integ_tests/visibility_tests.rs +80 -62
  169. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_heartbeat_tests.rs +389 -265
  170. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_tests.rs +250 -185
  171. package/sdk-core/crates/sdk-core/tests/integ_tests/worker_versioning_tests.rs +52 -49
  172. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_client_tests.rs +180 -0
  173. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/activities.rs +437 -327
  174. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_external.rs +82 -58
  175. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/cancel_wf.rs +56 -30
  176. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/child_workflows.rs +364 -251
  177. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/client_interactions.rs +552 -0
  178. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/continue_as_new.rs +110 -46
  179. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/determinism.rs +243 -149
  180. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/eager.rs +98 -32
  181. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/local_activities.rs +1475 -1040
  182. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/modify_wf_properties.rs +73 -43
  183. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/nexus.rs +402 -245
  184. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/patches.rs +343 -207
  185. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/queries.rs +415 -0
  186. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/replay.rs +96 -36
  187. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/resets.rs +155 -140
  188. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/signals.rs +183 -113
  189. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/stickyness.rs +85 -44
  190. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/timers.rs +142 -48
  191. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/upsert_search_attrs.rs +73 -56
  192. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests.rs +365 -242
  193. package/sdk-core/crates/sdk-core/tests/main.rs +22 -16
  194. package/sdk-core/crates/sdk-core/tests/manual_tests.rs +233 -187
  195. package/sdk-core/crates/sdk-core/tests/runner.rs +4 -6
  196. package/sdk-core/crates/sdk-core/tests/shared_tests/mod.rs +73 -27
  197. package/sdk-core/crates/sdk-core/tests/shared_tests/priority.rs +107 -84
  198. package/sdk-core/crates/sdk-core/tests/workflows_procmacro.rs +6 -0
  199. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.rs +26 -0
  200. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/async_query_fail.stderr +5 -0
  201. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/basic_pass.rs +49 -0
  202. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/minimal_pass.rs +21 -0
  203. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.rs +26 -0
  204. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/mut_query_fail.stderr +5 -0
  205. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.rs +21 -0
  206. package/sdk-core/crates/sdk-core/tests/workflows_trybuild/sync_run_fail.stderr +5 -0
  207. package/sdk-core/crates/sdk-core-c-bridge/Cargo.toml +8 -1
  208. package/sdk-core/crates/sdk-core-c-bridge/include/temporal-sdk-core-c-bridge.h +37 -26
  209. package/sdk-core/crates/sdk-core-c-bridge/src/client.rs +180 -87
  210. package/sdk-core/crates/sdk-core-c-bridge/src/lib.rs +89 -5
  211. package/sdk-core/crates/sdk-core-c-bridge/src/metric.rs +10 -16
  212. package/sdk-core/crates/sdk-core-c-bridge/src/runtime.rs +59 -67
  213. package/sdk-core/crates/sdk-core-c-bridge/src/testing.rs +10 -10
  214. package/sdk-core/crates/sdk-core-c-bridge/src/tests/context.rs +57 -22
  215. package/sdk-core/crates/sdk-core-c-bridge/src/tests/mod.rs +108 -12
  216. package/sdk-core/crates/sdk-core-c-bridge/src/tests/utils.rs +9 -52
  217. package/sdk-core/crates/sdk-core-c-bridge/src/worker.rs +74 -91
  218. package/sdk-core/rustfmt.toml +2 -1
  219. package/src/client.rs +206 -289
  220. package/src/helpers/try_into_js.rs +88 -2
  221. package/src/metrics.rs +277 -35
  222. package/src/runtime.rs +94 -45
  223. package/src/testing.rs +9 -16
  224. package/src/worker.rs +86 -68
  225. package/ts/native.ts +39 -3
  226. package/sdk-core/crates/client/src/workflow_handle/mod.rs +0 -212
  227. package/sdk-core/crates/common/src/errors.rs +0 -85
  228. package/sdk-core/crates/common/tests/worker_task_types_test.rs +0 -129
  229. package/sdk-core/crates/macros/LICENSE.txt +0 -21
  230. package/sdk-core/crates/sdk/src/activity_context.rs +0 -238
  231. package/sdk-core/crates/sdk/src/app_data.rs +0 -37
  232. package/sdk-core/crates/sdk-core/tests/integ_tests/activity_functions.rs +0 -5
  233. package/sdk-core/crates/sdk-core/tests/integ_tests/workflow_tests/appdata_propagation.rs +0 -61
@@ -1,13 +1,10 @@
1
- use crate::{
2
- common::{CoreWfStarter, eventually},
3
- integ_tests::activity_functions::echo,
4
- };
1
+ use crate::common::{CoreWfStarter, activity_functions::StdActivities, eventually};
5
2
  use std::time::Duration;
6
- use temporalio_client::{NamespacedClient, WorkflowOptions, WorkflowService};
3
+ use temporalio_client::{NamespacedClient, WorkflowStartOptions, grpc::WorkflowService};
7
4
  use temporalio_common::{
8
5
  protos::{
9
6
  coresdk::{
10
- AsJsonPayloadExt, workflow_commands::CompleteWorkflowExecution, workflow_completion,
7
+ workflow_commands::CompleteWorkflowExecution, workflow_completion,
11
8
  workflow_completion::WorkflowActivationCompletion,
12
9
  },
13
10
  temporal::api::{
@@ -18,11 +15,10 @@ use temporalio_common::{
18
15
  },
19
16
  },
20
17
  },
21
- worker::{
22
- WorkerDeploymentOptions, WorkerDeploymentVersion, WorkerTaskTypes, WorkerVersioningStrategy,
23
- },
18
+ worker::{WorkerDeploymentOptions, WorkerDeploymentVersion, WorkerTaskTypes},
24
19
  };
25
- use temporalio_sdk::{ActivityOptions, WfContext};
20
+ use temporalio_macros::{workflow, workflow_methods};
21
+ use temporalio_sdk::{ActivityOptions, WorkflowContext, WorkflowResult};
26
22
  use temporalio_sdk_core::test_help::WorkerTestHelpers;
27
23
  use tokio::join;
28
24
  use tonic::IntoRequest;
@@ -37,16 +33,12 @@ async fn sets_deployment_info_on_task_responses(#[values(true, false)] use_defau
37
33
  deployment_name: deploy_name.clone(),
38
34
  build_id: "1.0".to_string(),
39
35
  };
40
- starter
41
- .worker_config
42
- .versioning_strategy(WorkerVersioningStrategy::WorkerDeploymentBased(
43
- WorkerDeploymentOptions {
44
- version: version.clone(),
45
- use_worker_versioning: true,
46
- default_versioning_behavior: VersioningBehavior::AutoUpgrade.into(),
47
- },
48
- ))
49
- .task_types(WorkerTaskTypes::workflow_only());
36
+ starter.sdk_config.deployment_options = WorkerDeploymentOptions {
37
+ version: version.clone(),
38
+ use_worker_versioning: true,
39
+ default_versioning_behavior: VersioningBehavior::AutoUpgrade.into(),
40
+ };
41
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
50
42
  let core = starter.get_worker().await;
51
43
  let client = starter.get_client().await;
52
44
 
@@ -77,7 +69,7 @@ async fn sets_deployment_info_on_task_responses(#[values(true, false)] use_defau
77
69
  let desc_resp = eventually(
78
70
  async || {
79
71
  client
80
- .get_client()
72
+ .connection()
81
73
  .clone()
82
74
  .describe_worker_deployment(
83
75
  DescribeWorkerDeploymentRequest {
@@ -96,7 +88,7 @@ async fn sets_deployment_info_on_task_responses(#[values(true, false)] use_defau
96
88
 
97
89
  #[allow(deprecated)]
98
90
  client
99
- .get_client()
91
+ .connection()
100
92
  .clone()
101
93
  .set_worker_deployment_current_version(
102
94
  SetWorkerDeploymentCurrentVersionRequest {
@@ -153,31 +145,19 @@ async fn activity_has_deployment_stamp() {
153
145
  let wf_name = "activity_has_deployment_stamp";
154
146
  let mut starter = CoreWfStarter::new(wf_name);
155
147
  let deploy_name = format!("deployment-{}", starter.get_task_queue());
156
- starter
157
- .worker_config
158
- .versioning_strategy(WorkerVersioningStrategy::WorkerDeploymentBased(
159
- WorkerDeploymentOptions {
160
- version: WorkerDeploymentVersion {
161
- deployment_name: deploy_name.clone(),
162
- build_id: "1.0".to_string(),
163
- },
164
- use_worker_versioning: true,
165
- default_versioning_behavior: VersioningBehavior::AutoUpgrade.into(),
166
- },
167
- ));
148
+ starter.sdk_config.deployment_options = WorkerDeploymentOptions {
149
+ version: WorkerDeploymentVersion {
150
+ deployment_name: deploy_name.clone(),
151
+ build_id: "1.0".to_string(),
152
+ },
153
+ use_worker_versioning: true,
154
+ default_versioning_behavior: VersioningBehavior::AutoUpgrade.into(),
155
+ };
156
+ starter.sdk_config.register_activities(StdActivities);
168
157
  let mut worker = starter.worker().await;
169
158
  let client = starter.get_client().await;
170
- worker.register_wf(wf_name.to_owned(), |ctx: WfContext| async move {
171
- ctx.activity(ActivityOptions {
172
- activity_type: "echo_activity".to_string(),
173
- start_to_close_timeout: Some(Duration::from_secs(5)),
174
- input: "hi!".as_json_payload().expect("serializes fine"),
175
- ..Default::default()
176
- })
177
- .await;
178
- Ok(().into())
179
- });
180
- worker.register_activity("echo_activity", echo);
159
+
160
+ worker.register_workflow::<ActivityHasDeploymentStampWf>();
181
161
  let submitter = worker.get_submitter_handle();
182
162
  let shutdown_handle = worker.inner_mut().shutdown_handle();
183
163
 
@@ -185,7 +165,7 @@ async fn activity_has_deployment_stamp() {
185
165
  let desc_resp = eventually(
186
166
  async || {
187
167
  client
188
- .get_client()
168
+ .connection()
189
169
  .clone()
190
170
  .describe_worker_deployment(
191
171
  DescribeWorkerDeploymentRequest {
@@ -204,7 +184,7 @@ async fn activity_has_deployment_stamp() {
204
184
 
205
185
  #[allow(deprecated)]
206
186
  client
207
- .get_client()
187
+ .connection()
208
188
  .clone()
209
189
  .set_worker_deployment_current_version(
210
190
  SetWorkerDeploymentCurrentVersionRequest {
@@ -219,12 +199,13 @@ async fn activity_has_deployment_stamp() {
219
199
  .await
220
200
  .unwrap();
221
201
 
202
+ let task_queue = starter.get_task_queue().to_owned();
203
+ let workflow_id = starter.get_wf_id();
222
204
  submitter
223
205
  .submit_wf(
224
- starter.get_wf_id(),
225
206
  wf_name.to_owned(),
226
207
  vec![],
227
- WorkflowOptions::default(),
208
+ WorkflowStartOptions::new(task_queue, workflow_id).build(),
228
209
  )
229
210
  .await
230
211
  .unwrap();
@@ -252,3 +233,25 @@ async fn activity_has_deployment_stamp() {
252
233
  // TODO: Can't actually verify this at the moment as the deployment options are not transferred
253
234
  // to the event.
254
235
  }
236
+
237
+ #[workflow]
238
+ #[derive(Default)]
239
+ struct ActivityHasDeploymentStampWf;
240
+
241
+ #[workflow_methods]
242
+ impl ActivityHasDeploymentStampWf {
243
+ #[run(name = "activity_has_deployment_stamp")]
244
+ async fn run(ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
245
+ let _ = ctx
246
+ .start_activity(
247
+ StdActivities::echo,
248
+ "hi!".to_string(),
249
+ ActivityOptions {
250
+ start_to_close_timeout: Some(Duration::from_secs(5)),
251
+ ..Default::default()
252
+ },
253
+ )
254
+ .await;
255
+ Ok(())
256
+ }
257
+ }
@@ -0,0 +1,180 @@
1
+ use crate::common::{CoreWfStarter, eventually, rand_6_chars};
2
+ use futures::TryStreamExt;
3
+ use std::{collections::HashSet, time::Duration};
4
+ use temporalio_client::{
5
+ UntypedWorkflow, WorkflowCountOptions, WorkflowListOptions, WorkflowStartOptions,
6
+ WorkflowTerminateOptions, errors::WorkflowStartError,
7
+ };
8
+ use temporalio_common::{data_converters::RawValue, worker::WorkerTaskTypes};
9
+ use temporalio_macros::{workflow, workflow_methods};
10
+ use temporalio_sdk::{WorkflowContext, WorkflowResult};
11
+
12
+ #[workflow]
13
+ #[derive(Default)]
14
+ struct EmptyWorkflow;
15
+
16
+ #[workflow_methods]
17
+ impl EmptyWorkflow {
18
+ #[run]
19
+ async fn run(_ctx: &mut WorkflowContext<Self>) -> WorkflowResult<()> {
20
+ Ok(())
21
+ }
22
+ }
23
+
24
+ #[rstest::rstest]
25
+ #[case::no_limit(None)]
26
+ #[case::with_limit(Some(2))]
27
+ #[tokio::test]
28
+ async fn list_workflows(#[case] limit: Option<usize>) {
29
+ let test_name = "list_workflows_returns_started_workflows";
30
+ let mut starter = CoreWfStarter::new(test_name);
31
+ starter.sdk_config.task_types = WorkerTaskTypes::workflow_only();
32
+ let client = starter.get_client().await;
33
+ let mut worker = starter.worker().await;
34
+ worker.register_workflow::<EmptyWorkflow>();
35
+
36
+ let suffix = rand_6_chars();
37
+ let num_workflows = 5;
38
+ let task_queue = starter.get_task_queue().to_owned();
39
+ let mut started_workflow_ids = Vec::new();
40
+ let mut expected_run_ids = Vec::new();
41
+
42
+ for i in 0..num_workflows {
43
+ let wf_id = format!("{test_name}_{suffix}_{i}");
44
+ started_workflow_ids.push(wf_id.clone());
45
+ let handle = worker
46
+ .submit_workflow(
47
+ EmptyWorkflow::run,
48
+ (),
49
+ WorkflowStartOptions::new(task_queue.clone(), wf_id).build(),
50
+ )
51
+ .await
52
+ .unwrap();
53
+ expected_run_ids.push(handle.info().run_id.clone());
54
+ }
55
+
56
+ worker.run_until_done().await.unwrap();
57
+
58
+ let results = eventually(
59
+ || {
60
+ let client = client.clone();
61
+ let expected_ids: HashSet<_> = started_workflow_ids.iter().cloned().collect();
62
+ let task_queue = task_queue.clone();
63
+ let expected_count = limit.unwrap_or(num_workflows);
64
+ async move {
65
+ let query = format!("TaskQueue = '{task_queue}'");
66
+ let opts = match limit {
67
+ Some(l) => WorkflowListOptions::builder().limit(l).build(),
68
+ None => WorkflowListOptions::default(),
69
+ };
70
+ let stream = client.list_workflows(query, opts);
71
+ let results: Vec<_> = stream.try_collect().await.expect("No errors");
72
+
73
+ if results.len() != expected_count {
74
+ return Err(format!(
75
+ "Expected {} workflows, got {}",
76
+ expected_count,
77
+ results.len()
78
+ ));
79
+ }
80
+
81
+ let found_ids: HashSet<_> = results.iter().map(|w| w.id().to_owned()).collect();
82
+ if !found_ids.is_subset(&expected_ids) {
83
+ return Err(format!(
84
+ "Found unexpected workflow IDs. Expected subset of: {:?}, Found: {:?}",
85
+ expected_ids, found_ids
86
+ ));
87
+ }
88
+
89
+ Ok(results)
90
+ }
91
+ },
92
+ Duration::from_secs(10),
93
+ )
94
+ .await
95
+ .unwrap();
96
+
97
+ // Verify accessor fields are populated
98
+ for wf in &results {
99
+ assert!(
100
+ started_workflow_ids.contains(&wf.id().to_owned()),
101
+ "Workflow ID {} not in started list",
102
+ wf.id()
103
+ );
104
+ assert!(!wf.run_id().is_empty(), "run_id should be populated");
105
+ assert_eq!(wf.task_queue(), task_queue, "task_queue mismatch");
106
+ assert!(wf.start_time().is_some(), "start_time should be populated");
107
+ assert!(
108
+ !wf.workflow_type().is_empty(),
109
+ "workflow_type should be populated"
110
+ );
111
+ }
112
+
113
+ // Verify count_workflows works too
114
+ let workflow_count = eventually(
115
+ || {
116
+ let client = client.clone();
117
+ let task_queue = task_queue.clone();
118
+ async move {
119
+ let query = format!("TaskQueue = '{task_queue}'");
120
+ let count = client
121
+ .count_workflows(&query, WorkflowCountOptions::default())
122
+ .await
123
+ .unwrap();
124
+ if count.count() != num_workflows {
125
+ return Err(format!(
126
+ "Expected {} workflows, got {}",
127
+ num_workflows,
128
+ count.count()
129
+ ));
130
+ }
131
+ Ok(count.count())
132
+ }
133
+ },
134
+ Duration::from_secs(10),
135
+ )
136
+ .await
137
+ .unwrap();
138
+ assert!(workflow_count == num_workflows);
139
+ }
140
+
141
+ #[tokio::test]
142
+ async fn already_started_error_contains_run_id() {
143
+ let test_name = "already_started_error_contains_run_id";
144
+ let mut starter = CoreWfStarter::new(test_name);
145
+ let client = starter.get_client().await;
146
+ let task_queue = starter.get_task_queue().to_owned();
147
+ let wf_id = format!("{test_name}_{}", rand_6_chars());
148
+
149
+ let handle = client
150
+ .start_workflow(
151
+ UntypedWorkflow::new(test_name),
152
+ RawValue::empty(),
153
+ WorkflowStartOptions::new(task_queue.clone(), wf_id.clone()).build(),
154
+ )
155
+ .await
156
+ .unwrap();
157
+ let first_run_id = handle.run_id().unwrap().to_string();
158
+
159
+ let err = client
160
+ .start_workflow(
161
+ UntypedWorkflow::new(test_name),
162
+ RawValue::empty(),
163
+ WorkflowStartOptions::new(task_queue, wf_id).build(),
164
+ )
165
+ .await
166
+ .err()
167
+ .expect("duplicate wfid should error");
168
+
169
+ match err {
170
+ WorkflowStartError::AlreadyStarted { run_id, .. } => {
171
+ assert_eq!(run_id.as_deref(), Some(first_run_id.as_str()));
172
+ }
173
+ other => panic!("Expected AlreadyStarted, got: {other}"),
174
+ }
175
+
176
+ handle
177
+ .terminate(WorkflowTerminateOptions::default())
178
+ .await
179
+ .unwrap();
180
+ }