feat(api): add stable build ID override via spec.workerOptions.buildID #177
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds support for user-controlled build IDs via
spec.workerOptions.buildID, enabling rolling updates for non-workflow code changes while preserving new deployment creation for workflow code changes.Problem
With PINNED versioning strategy and long-running workflows, any pod spec change (image tag, env vars, resources) generates a new build ID, causing deployment proliferation.
Result: 10-15 active deployments running simultaneously, causing resource waste and operational complexity.
Solution
Allow users to set a stable build ID via
spec.workerOptions.buildID. When the build ID is stable but pod spec changes, trigger a rolling update instead of creating a new deployment.Key Changes
BuildIDfield toWorkerOptionsstruct in API typesComputeBuildIDto use spec field instead of annotationDrift Detection
When
spec.workerOptions.buildIDis set, the controller detects spec drift by directly comparing the deployed pod spec with the desired spec.Currently monitored fields:
Not currently monitored: env vars, volumes, commands (documented in BuildID field comment)
When drift is detected: Controller triggers a rolling update of the existing deployment (preserves same build ID).
Usage
Behavior Matrix
Backwards Compatibility
spec.workerOptions.buildIDis explicitly setNote on CRD Changes
The CRD regeneration includes some unrelated changes from controller-gen (default values for name fields,
x-kubernetes-map-typeannotations). These are standard regeneration artifacts when runningmake manifestsand don't affect functionality.Test plan
go test ./internal/k8s/... ./internal/planner/... -vpasses