diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a03b48bfd..e009a7ecc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -322,3 +322,5 @@ jobs: secrets: ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }} VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }} + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index c0e7f23e4..a80bd4d73 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -15,7 +15,12 @@ on: VERCEL_TOKEN: required: false description: The Vercel token. Required if 'publish_target' is set. - + VERCEL_ORG_ID: + required: false + description: The Vercel token. Required if 'publish_target' is set. + VERCEL_PROJECT_ID: + required: false + description: The Vercel token. Required if 'publish_target' is set. env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -62,10 +67,11 @@ jobs: - name: Publish docs if: ${{ inputs.publish_target }} + env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} run: | npx vercel deploy packages/docs/build \ -t '${{ secrets.VERCEL_TOKEN }}' \ - --name typescript \ - --scope temporal \ --yes \ ${{ inputs.publish_target == 'prod' && '--prod' || '' }} diff --git a/packages/common/src/internal-non-workflow/codec-types.ts b/packages/common/src/internal-non-workflow/codec-types.ts index 1e866c480..3fe4d6313 100644 --- a/packages/common/src/internal-non-workflow/codec-types.ts +++ b/packages/common/src/internal-non-workflow/codec-types.ts @@ -23,12 +23,14 @@ export type ReplaceNested = T extends (...args: any[] ? T : [keyof T] extends [never] ? T - : T extends { [k: string]: ToReplace } - ? { - [P in keyof T]: ReplaceNested; - } - : T extends ToReplace - ? ReplaceWith | Exclude - : { + : T extends Record // Special exception for nexusHeader. + ? T + : T extends { [k: string]: ToReplace } + ? { [P in keyof T]: ReplaceNested; - }; + } + : T extends ToReplace + ? ReplaceWith | Exclude + : { + [P in keyof T]: ReplaceNested; + }; diff --git a/packages/core-bridge/Cargo.lock b/packages/core-bridge/Cargo.lock index 395bf3c3b..111edac79 100644 --- a/packages/core-bridge/Cargo.lock +++ b/packages/core-bridge/Cargo.lock @@ -480,18 +480,18 @@ dependencies = [ [[package]] name = "derive_more" -version = "1.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a9b99b9cbbe49445b21764dc0625032a89b145a2642e67603e1c936f5458d05" +checksum = "093242cf7570c207c83073cf82f79706fe7b8317e98620a47d5be7c3d8497678" dependencies = [ "derive_more-impl", ] [[package]] name = "derive_more-impl" -version = "1.0.0" +version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" +checksum = "bda628edc44c4bb645fbe0f758797143e4e07926f7ebf4e9bdfbd3d2ce621df3" dependencies = [ "proc-macro2", "quote", @@ -809,23 +809,25 @@ checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" [[package]] name = "governor" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0746aa765db78b521451ef74221663b57ba595bf83f75d0ce23cc09447c8139f" +checksum = "be93b4ec2e4710b04d9264c0c7350cdd62a8c20e5e4ac732552ebb8f0debe8eb" dependencies = [ "cfg-if", "dashmap", "futures-sink", "futures-timer", "futures-util", + "getrandom 0.3.2", "no-std-compat", "nonzero_ext", "parking_lot", "portable-atomic", "quanta", - "rand 0.8.5", + "rand 0.9.1", "smallvec", "spinning_top", + "web-time", ] [[package]] @@ -1201,15 +1203,6 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.14.0" @@ -1308,9 +1301,9 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lru" -version = "0.12.5" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234cf4f4a04dc1f57e24b96cc0cd600cf2af460d4161ac5ecdd0af8e1f3b2a38" +checksum = "227748d55f2f0ab4735d87fd623798cb6b664512fe979705f829c9f81c934465" dependencies = [ "hashbrown 0.15.2", ] @@ -1522,19 +1515,48 @@ dependencies = [ "thiserror 1.0.69", ] +[[package]] +name = "opentelemetry" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "570074cc999d1a58184080966e5bd3bf3a9a4af650c3b05047c2621e7405cd17" +dependencies = [ + "futures-core", + "futures-sink", + "js-sys", + "once_cell", + "pin-project-lite", + "thiserror 1.0.69", +] + +[[package]] +name = "opentelemetry-http" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6351496aeaa49d7c267fb480678d85d1cd30c5edb20b497c48c56f62a8c14b99" +dependencies = [ + "async-trait", + "bytes", + "http", + "opentelemetry 0.26.0", + "reqwest", +] + [[package]] name = "opentelemetry-otlp" -version = "0.17.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b925a602ffb916fb7421276b86756027b37ee708f9dce2dbdcc51739f07e727" +checksum = "29e1f9c8b032d4f635c730c0efcf731d5e2530ea13fa8bef7939ddc8420696bd" dependencies = [ "async-trait", "futures-core", "http", - "opentelemetry", + "opentelemetry 0.26.0", + "opentelemetry-http", "opentelemetry-proto", "opentelemetry_sdk", "prost", + "reqwest", "thiserror 1.0.69", "tokio", "tonic", @@ -1543,11 +1565,10 @@ dependencies = [ [[package]] name = "opentelemetry-prometheus" version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc4191ce34aa274621861a7a9d68dbcf618d5b6c66b10081631b61fd81fbc015" +source = "git+https://github.com/open-telemetry/opentelemetry-rust.git?rev=e911383#e91138351a689cd21923c15eb48f5fbc95ded807" dependencies = [ "once_cell", - "opentelemetry", + "opentelemetry 0.26.0", "opentelemetry_sdk", "prometheus", "protobuf", @@ -1555,11 +1576,11 @@ dependencies = [ [[package]] name = "opentelemetry-proto" -version = "0.7.0" +version = "0.26.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee9f20bff9c984511a02f082dc8ede839e4a9bf15cc2487c8d6fea5ad850d9" +checksum = "c9d3968ce3aefdcca5c27e3c4ea4391b37547726a70893aab52d3de95d5f8b34" dependencies = [ - "opentelemetry", + "opentelemetry 0.26.0", "opentelemetry_sdk", "prost", "tonic", @@ -1567,9 +1588,9 @@ dependencies = [ [[package]] name = "opentelemetry_sdk" -version = "0.24.1" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "692eac490ec80f24a17828d49b40b60f5aeaccdfe6a503f939713afd22bc28df" +checksum = "d2c627d9f4c9cdc1f21a29ee4bfbd6028fcb8bcf2a857b43f3abdf72c9c862f3" dependencies = [ "async-trait", "futures-channel", @@ -1577,7 +1598,7 @@ dependencies = [ "futures-util", "glob", "once_cell", - "opentelemetry", + "opentelemetry 0.26.0", "percent-encoding", "rand 0.8.5", "serde_json", @@ -1795,7 +1816,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "be769465445e8c1474e9c5dac2018218498557af32d9ed057325ec9a41ae81bf" dependencies = [ "heck", - "itertools 0.14.0", + "itertools", "log", "multimap", "once_cell", @@ -1815,7 +1836,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a56d757972c98b346a9b766e3f02746cde6dd1cd1d1d563472929fdd74bec4d" dependencies = [ "anyhow", - "itertools 0.14.0", + "itertools", "proc-macro2", "quote", "syn", @@ -2095,6 +2116,7 @@ checksum = "d19c46a6fdd48bc4dab94b6103fccc55d34c67cc0ad04653aad4ea2a07cd7bbb" dependencies = [ "base64", "bytes", + "futures-channel", "futures-core", "futures-util", "http", @@ -2519,9 +2541,9 @@ dependencies = [ [[package]] name = "sysinfo" -version = "0.32.1" +version = "0.33.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c33cd241af0f2e9e3b5c32163b873b29956890b5342e6745b917ce9d490f4af" +checksum = "4fc858248ea01b66f19d8e8a6d55f41deaf91e9d495246fd01368d99935c6c01" dependencies = [ "core-foundation-sys", "libc", @@ -2571,11 +2593,10 @@ dependencies = [ "hyper", "hyper-util", "parking_lot", - "prost-types", "slotmap", "temporal-sdk-core-api", "temporal-sdk-core-protos", - "thiserror 1.0.69", + "thiserror 2.0.12", "tokio", "tonic", "tower 0.5.2", @@ -2605,10 +2626,10 @@ dependencies = [ "http-body-util", "hyper", "hyper-util", - "itertools 0.13.0", + "itertools", "lru", "mockall", - "opentelemetry", + "opentelemetry 0.26.0", "opentelemetry-otlp", "opentelemetry-prometheus", "opentelemetry_sdk", @@ -2618,7 +2639,7 @@ dependencies = [ "prometheus", "prost", "prost-wkt-types", - "rand 0.8.5", + "rand 0.9.1", "reqwest", "ringbuf", "rustfsm", @@ -2631,12 +2652,11 @@ dependencies = [ "temporal-client", "temporal-sdk-core-api", "temporal-sdk-core-protos", - "thiserror 1.0.69", + "thiserror 2.0.12", "tokio", "tokio-stream", "tokio-util", "tonic", - "tonic-build", "tracing", "tracing-subscriber", "url", @@ -2651,12 +2671,11 @@ dependencies = [ "async-trait", "derive_builder", "derive_more", - "opentelemetry", + "opentelemetry 0.26.0", "prost", - "prost-types", "serde_json", "temporal-sdk-core-protos", - "thiserror 1.0.69", + "thiserror 2.0.12", "tonic", "tracing-core", "url", @@ -2671,14 +2690,13 @@ dependencies = [ "derive_more", "prost", "prost-build", - "prost-types", "prost-wkt", "prost-wkt-build", "prost-wkt-types", - "rand 0.8.5", + "rand 0.9.1", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.12", "tonic", "tonic-build", "uuid", @@ -2693,7 +2711,7 @@ dependencies = [ "log", "neon", "once_cell", - "opentelemetry", + "opentelemetry 0.24.0", "parking_lot", "prost", "prost-types", @@ -2993,17 +3011,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - [[package]] name = "tracing-subscriber" version = "0.3.19" @@ -3016,11 +3023,9 @@ dependencies = [ "parking_lot", "regex", "sharded-slab", - "smallvec", "thread_local", "tracing", "tracing-core", - "tracing-log", ] [[package]] diff --git a/packages/core-bridge/sdk-core b/packages/core-bridge/sdk-core index dd37e2946..97093c5ea 160000 --- a/packages/core-bridge/sdk-core +++ b/packages/core-bridge/sdk-core @@ -1 +1 @@ -Subproject commit dd37e2946a385090ded0fc3312180027002d4b16 +Subproject commit 97093c5ea4b0d933513f4c8999f7960f0c16f05f diff --git a/packages/core-bridge/src/conversions.rs b/packages/core-bridge/src/conversions.rs index a60b716ef..4af913e62 100644 --- a/packages/core-bridge/src/conversions.rs +++ b/packages/core-bridge/src/conversions.rs @@ -504,6 +504,7 @@ impl ObjectHandleConversionsExt for Handle<'_, JsObject> { temporal_sdk_core::ephemeral_server::EphemeralExe::CachedDownload { version: exec_version, dest_dir, + ttl: None, } } "existing-path" => { diff --git a/packages/core-bridge/src/conversions/slot_supplier_bridge.rs b/packages/core-bridge/src/conversions/slot_supplier_bridge.rs index 16748d97b..ae46a37c0 100644 --- a/packages/core-bridge/src/conversions/slot_supplier_bridge.rs +++ b/packages/core-bridge/src/conversions/slot_supplier_bridge.rs @@ -271,6 +271,10 @@ impl SlotSupplierBridge { SlotKindType::Workflow => "workflow", SlotKindType::Activity => "activity", SlotKindType::LocalActivity => "local-activity", + SlotKindType::Nexus => { + // This won't get hit as we'll not even try to run a Nexus poller + panic!("Nexus is not yet implemented"); + } }); context.set(cx, "slotType", slottype)?; let tq = cx.string(task_queue); diff --git a/packages/core-bridge/src/worker.rs b/packages/core-bridge/src/worker.rs index 8f58fcb08..d1cfc28f5 100644 --- a/packages/core-bridge/src/worker.rs +++ b/packages/core-bridge/src/worker.rs @@ -6,7 +6,7 @@ use std::{cell::RefCell, sync::Arc}; use temporal_sdk_core::replay::HistoryForReplay; use temporal_sdk_core::{ api::{ - errors::{CompleteActivityError, CompleteWfError, PollActivityError, PollWfError}, + errors::{CompleteActivityError, CompleteWfError, PollError}, Worker as CoreWorkerTrait, }, protos::{ @@ -181,8 +181,8 @@ async fn handle_poll_workflow_activation_request( } Err(err) => { send_error(channel, callback, move |cx| match err { - PollWfError::ShutDown => make_named_error_from_error(cx, SHUTDOWN_ERROR, err), - PollWfError::TonicError(_) => make_named_error_from_error(cx, TRANSPORT_ERROR, err), + PollError::ShutDown => make_named_error_from_error(cx, SHUTDOWN_ERROR, err), + PollError::TonicError(_) => make_named_error_from_error(cx, TRANSPORT_ERROR, err), }); } } @@ -208,10 +208,8 @@ pub async fn handle_poll_activity_task_request( } Err(err) => { send_error(channel, callback, move |cx| match err { - PollActivityError::ShutDown => make_named_error_from_error(cx, SHUTDOWN_ERROR, err), - PollActivityError::TonicError(_) => { - make_named_error_from_error(cx, TRANSPORT_ERROR, err) - } + PollError::ShutDown => make_named_error_from_error(cx, SHUTDOWN_ERROR, err), + PollError::TonicError(_) => make_named_error_from_error(cx, TRANSPORT_ERROR, err), }); } } diff --git a/packages/worker/src/workflow-codec-runner.ts b/packages/worker/src/workflow-codec-runner.ts index bc2b5ebbb..2fc43100b 100644 --- a/packages/worker/src/workflow-codec-runner.ts +++ b/packages/worker/src/workflow-codec-runner.ts @@ -72,7 +72,7 @@ export class WorkflowCodecRunner { cancelWorkflow: job.cancelWorkflow ? { ...job.cancelWorkflow, - details: await decodeOptional(this.codecs, job.cancelWorkflow.details), + details: null, // Not supported yet } : null, doUpdate: job.doUpdate @@ -126,6 +126,16 @@ export class WorkflowCodecRunner { : null, } : null, + resolveNexusOperationStart: job.resolveNexusOperationStart + ? ((() => { + throw new Error('Nexus is not yet implemented'); + }) as any) + : null, + resolveNexusOperation: job.resolveNexusOperation + ? ((() => { + throw new Error('Nexus is not yet implemented'); + }) as any) + : null, resolveChildWorkflowExecution: job.resolveChildWorkflowExecution ? { ...job.resolveChildWorkflowExecution, @@ -316,6 +326,12 @@ export class WorkflowCodecRunner { }, } : undefined, + scheduleNexusOperation: command.scheduleNexusOperation + ? { + ...command.scheduleNexusOperation, + nexusHeader: command.scheduleNexusOperation.nexusHeader ?? undefined, + } + : undefined, } ) ?? [] ) diff --git a/packages/workflow/src/internals.ts b/packages/workflow/src/internals.ts index 93f8fd598..c92f5e4f7 100644 --- a/packages/workflow/src/internals.ts +++ b/packages/workflow/src/internals.ts @@ -523,6 +523,16 @@ export class Activator implements ActivationHandler { } } + public resolveNexusOperationStart(_activation: coresdk.workflow_activation.IResolveNexusOperationStart): void { + // This will never be called as we can't produce Nexus-related commands anyway + throw new Error('Nexus is not yet implemented'); + } + + public resolveNexusOperation(_activation: coresdk.workflow_activation.IResolveNexusOperation): void { + // This will never be called as we can't produce Nexus-related commands anyway + throw new Error('Nexus is not yet implemented'); + } + public resolveChildWorkflowExecutionStart( activation: coresdk.workflow_activation.IResolveChildWorkflowExecutionStart ): void {