Skip to content

Commit 9f7e628

Browse files
mjameswhclaude
andauthored
Validate deployment options and test worker with versioning off and custom build ID (#400)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent e339de0 commit 9f7e628

2 files changed

Lines changed: 57 additions & 0 deletions

File tree

temporalio/lib/temporalio/worker.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -514,6 +514,12 @@ def _initialize_from_options
514514
raise ArgumentError, 'Must have at least one activity or workflow'
515515
end
516516

517+
if !@options.deployment_options.use_worker_versioning &&
518+
@options.deployment_options.default_versioning_behavior != VersioningBehavior::UNSPECIFIED
519+
raise ArgumentError,
520+
'default_versioning_behavior must be UNSPECIFIED when use_worker_versioning is false'
521+
end
522+
517523
should_enforce_versioning_behavior =
518524
@options.deployment_options.use_worker_versioning &&
519525
@options.deployment_options.default_versioning_behavior == VersioningBehavior::UNSPECIFIED

temporalio/test/worker_workflow_versioning_test.rb

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -480,6 +480,57 @@ def test_default_build_id
480480
end
481481
end
482482

483+
def test_deployment_options_without_versioning
484+
build_id = 'my-custom-build-id-1.0'
485+
worker = Temporalio::Worker.new(
486+
client: env.client,
487+
task_queue: "tq-#{SecureRandom.uuid}",
488+
workflows: [NoVersioningAnnotationWorkflow],
489+
deployment_options: Temporalio::Worker::DeploymentOptions.new(
490+
version: Temporalio::WorkerDeploymentVersion.new(
491+
deployment_name: "deployment-#{SecureRandom.uuid}",
492+
build_id: build_id
493+
),
494+
use_worker_versioning: false
495+
)
496+
)
497+
498+
worker.run do
499+
handle = env.client.start_workflow(
500+
NoVersioningAnnotationWorkflow,
501+
id: "no-versioning-build-id-#{SecureRandom.uuid}",
502+
task_queue: worker.task_queue
503+
)
504+
handle.result
505+
506+
events = handle.fetch_history.events
507+
has_build_id = events.any? do |event|
508+
event.workflow_task_completed_event_attributes &&
509+
event.workflow_task_completed_event_attributes.worker_version&.build_id == build_id
510+
end
511+
assert has_build_id, 'Expected custom build ID to appear in workflow history'
512+
end
513+
end
514+
515+
def test_rejects_versioning_behavior_when_versioning_off
516+
err = assert_raises(ArgumentError) do
517+
Temporalio::Worker.new(
518+
client: env.client,
519+
task_queue: "tq-#{SecureRandom.uuid}",
520+
workflows: [NoVersioningAnnotationWorkflow],
521+
deployment_options: Temporalio::Worker::DeploymentOptions.new(
522+
version: Temporalio::WorkerDeploymentVersion.new(
523+
deployment_name: "deployment-#{SecureRandom.uuid}",
524+
build_id: '1.0'
525+
),
526+
use_worker_versioning: false,
527+
default_versioning_behavior: Temporalio::VersioningBehavior::AUTO_UPGRADE
528+
)
529+
)
530+
end
531+
assert_includes err.message, 'default_versioning_behavior must be UNSPECIFIED'
532+
end
533+
483534
def wait_until_worker_deployment_visible(client, version)
484535
assert_eventually do
485536
res = client.workflow_service.describe_worker_deployment(

0 commit comments

Comments
 (0)