@@ -32,7 +32,7 @@ use crate::{
32
32
runtime:: { Runtime , RuntimeExt } ,
33
33
} ;
34
34
35
- pub fn init ( cx : & mut neon :: prelude :: ModuleContext ) -> neon :: prelude :: NeonResult < ( ) > {
35
+ pub fn init ( cx : & mut ModuleContext ) -> NeonResult < ( ) > {
36
36
cx. export_function ( "newWorker" , worker_new) ?;
37
37
cx. export_function ( "workerValidate" , worker_validate) ?;
38
38
@@ -412,19 +412,27 @@ mod config {
412
412
api:: worker:: {
413
413
ActivitySlotKind , LocalActivitySlotKind , PollerBehavior as CorePollerBehavior ,
414
414
SlotKind , WorkerConfig , WorkerConfigBuilder , WorkerConfigBuilderError ,
415
- WorkflowSlotKind ,
415
+ WorkerDeploymentOptions as CoreWorkerDeploymentOptions ,
416
+ WorkerDeploymentVersion as CoreWorkerDeploymentVersion , WorkflowSlotKind ,
416
417
} ,
418
+ protos:: temporal:: api:: enums:: v1:: VersioningBehavior as CoreVersioningBehavior ,
417
419
} ;
418
420
419
- use bridge_macros:: TryFromJs ;
420
-
421
421
use super :: custom_slot_supplier:: CustomSlotSupplierOptions ;
422
+ use crate :: helpers:: TryIntoJs ;
423
+ use bridge_macros:: TryFromJs ;
424
+ use neon:: context:: Context ;
425
+ use neon:: object:: Object ;
426
+ use neon:: prelude:: JsResult ;
427
+ use neon:: types:: JsObject ;
428
+ use temporal_sdk_core:: api:: worker:: WorkerVersioningStrategy ;
422
429
423
430
#[ derive( TryFromJs ) ]
424
431
pub struct BridgeWorkerOptions {
425
432
identity : String ,
426
433
build_id : String ,
427
434
use_versioning : bool ,
435
+ worker_deployment_options : Option < WorkerDeploymentOptions > ,
428
436
task_queue : String ,
429
437
namespace : String ,
430
438
tuner : WorkerTuner ,
@@ -453,14 +461,44 @@ mod config {
453
461
} ,
454
462
}
455
463
464
+ #[ derive( TryFromJs ) ]
465
+ pub struct WorkerDeploymentOptions {
466
+ version : WorkerDeploymentVersion ,
467
+ use_worker_versioning : bool ,
468
+ default_versioning_behavior : VersioningBehavior ,
469
+ }
470
+
471
+ #[ derive( TryFromJs ) ]
472
+ pub struct WorkerDeploymentVersion {
473
+ build_id : String ,
474
+ deployment_name : String ,
475
+ }
476
+
477
+ #[ derive( TryFromJs ) ]
478
+ pub enum VersioningBehavior {
479
+ Pinned ,
480
+ AutoUpgrade ,
481
+ }
482
+
456
483
impl BridgeWorkerOptions {
457
484
pub ( crate ) fn into_core_config ( self ) -> Result < WorkerConfig , WorkerConfigBuilderError > {
458
485
// Set all other options
459
486
let mut builder = WorkerConfigBuilder :: default ( ) ;
460
487
builder
461
488
. client_identity_override ( Some ( self . identity ) )
462
- . worker_build_id ( self . build_id )
463
- . use_worker_versioning ( self . use_versioning )
489
+ . versioning_strategy ( {
490
+ if let Some ( dopts) = self . worker_deployment_options {
491
+ WorkerVersioningStrategy :: WorkerDeploymentBased ( dopts. into ( ) )
492
+ } else if self . use_versioning {
493
+ WorkerVersioningStrategy :: LegacyBuildIdBased {
494
+ build_id : self . build_id ,
495
+ }
496
+ } else {
497
+ WorkerVersioningStrategy :: None {
498
+ build_id : self . build_id ,
499
+ }
500
+ }
501
+ } )
464
502
. task_queue ( self . task_queue )
465
503
. namespace ( self . namespace )
466
504
. tuner ( self . tuner . into_core_config ( ) ?)
@@ -498,6 +536,56 @@ mod config {
498
536
}
499
537
}
500
538
539
+ impl From < WorkerDeploymentOptions > for CoreWorkerDeploymentOptions {
540
+ fn from ( val : WorkerDeploymentOptions ) -> Self {
541
+ CoreWorkerDeploymentOptions {
542
+ version : val. version . into ( ) ,
543
+ use_worker_versioning : val. use_worker_versioning ,
544
+ default_versioning_behavior : Some ( val. default_versioning_behavior . into ( ) ) ,
545
+ }
546
+ }
547
+ }
548
+
549
+ impl From < WorkerDeploymentVersion > for CoreWorkerDeploymentVersion {
550
+ fn from ( val : WorkerDeploymentVersion ) -> Self {
551
+ CoreWorkerDeploymentVersion {
552
+ build_id : val. build_id ,
553
+ deployment_name : val. deployment_name ,
554
+ }
555
+ }
556
+ }
557
+
558
+ impl From < CoreWorkerDeploymentVersion > for WorkerDeploymentVersion {
559
+ fn from ( val : CoreWorkerDeploymentVersion ) -> Self {
560
+ WorkerDeploymentVersion {
561
+ build_id : val. build_id ,
562
+ deployment_name : val. deployment_name ,
563
+ }
564
+ }
565
+ }
566
+
567
+ impl TryIntoJs for WorkerDeploymentVersion {
568
+ type Output = JsObject ;
569
+
570
+ fn try_into_js < ' cx > ( self , cx : & mut impl Context < ' cx > ) -> JsResult < ' cx , Self :: Output > {
571
+ let obj = cx. empty_object ( ) ;
572
+ let bid = self . build_id . try_into_js ( cx) ?;
573
+ obj. set ( cx, "buildId" , bid) ?;
574
+ let dn = self . deployment_name . try_into_js ( cx) ?;
575
+ obj. set ( cx, "deploymentName" , dn) ?;
576
+ Ok ( obj)
577
+ }
578
+ }
579
+
580
+ impl From < VersioningBehavior > for CoreVersioningBehavior {
581
+ fn from ( val : VersioningBehavior ) -> Self {
582
+ match val {
583
+ VersioningBehavior :: Pinned => CoreVersioningBehavior :: Pinned ,
584
+ VersioningBehavior :: AutoUpgrade => CoreVersioningBehavior :: AutoUpgrade ,
585
+ }
586
+ }
587
+ }
588
+
501
589
#[ derive( TryFromJs ) ]
502
590
#[ allow( clippy:: struct_field_names) ]
503
591
pub ( super ) struct WorkerTuner {
@@ -613,7 +701,7 @@ mod custom_slot_supplier {
613
701
use tracing:: warn;
614
702
615
703
use crate :: helpers:: * ;
616
-
704
+ use crate :: worker :: config :: WorkerDeploymentVersion ;
617
705
// Custom Slot Supplier ////////////////////////////////////////////////////////////////////////////
618
706
619
707
pub ( super ) struct SlotSupplierBridge < SK : SlotKind + Send + Sync + ' static > {
@@ -639,7 +727,11 @@ mod custom_slot_supplier {
639
727
slot_type : SK :: kind ( ) . into ( ) ,
640
728
task_queue : ctx. task_queue ( ) . to_string ( ) ,
641
729
worker_identity : ctx. worker_identity ( ) . to_string ( ) ,
642
- worker_build_id : ctx. worker_build_id ( ) . to_string ( ) ,
730
+ worker_deployment_version : ctx
731
+ . worker_deployment_version ( )
732
+ . as_ref ( )
733
+ . cloned ( )
734
+ . map ( Into :: into) ,
643
735
is_sticky : ctx. is_sticky ( ) ,
644
736
} ;
645
737
@@ -680,7 +772,11 @@ mod custom_slot_supplier {
680
772
slot_type : SK :: kind ( ) . into ( ) ,
681
773
task_queue : ctx. task_queue ( ) . to_string ( ) ,
682
774
worker_identity : ctx. worker_identity ( ) . to_string ( ) ,
683
- worker_build_id : ctx. worker_build_id ( ) . to_string ( ) ,
775
+ worker_deployment_version : ctx
776
+ . worker_deployment_version ( )
777
+ . as_ref ( )
778
+ . cloned ( )
779
+ . map ( Into :: into) ,
684
780
is_sticky : ctx. is_sticky ( ) ,
685
781
} ;
686
782
@@ -809,7 +905,7 @@ mod custom_slot_supplier {
809
905
slot_type : SlotKindType ,
810
906
task_queue : String ,
811
907
worker_identity : String ,
812
- worker_build_id : String ,
908
+ worker_deployment_version : Option < WorkerDeploymentVersion > ,
813
909
is_sticky : bool ,
814
910
}
815
911
0 commit comments