Skip to content

feat: reserve canary and blue-green deploy fields on rollout - #231

Merged
joshua-temple merged 1 commit into
mainfrom
feat/reserve-canary-bluegreen
Jun 21, 2026
Merged

joshua-temple merged 1 commit into
mainfrom
feat/reserve-canary-bluegreen

Conversation

@joshua-temple

@joshua-temple joshua-temple commented Jun 21, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Issue #1 asked to reserve canary and blue-green deploy controls in the manifest. An earlier draft added a separate strategy: block with sibling canary:/blue_green: sub-blocks on each deploy. That collided with the repo's already-canonical reservation: RolloutConfig (rollout:) at internal/config/schema_v1.go already models type: rolling|canary|blue_green with reserved canary and blue_green sub-blocks, and the schema comment states there is no shared strategy: block. Two surfaces for the same concept would have been redundant and contradicted that comment.

Fix

Converge onto the canonical rollout surface. The useful fields from #1 are reserved by enriching the existing rollout.canary block, additively and omitempty:

  • percent (int, 1..100) single initial canary weight
  • bake_time (Go duration string) soak before promotion
  • promote_callback / rollback_callback local callback workflow paths

rollout.blue_green keeps its existing switch field as the cutover workflow path (issue #1's cutover_callback is the same concept; no duplicate field is added). No strategy: surface is introduced.

These are reserved shape only: the generator does not read them, so generated workflow bytes are identical whether the fields are present or absent. Because the change is additive, schema_version is unchanged.

Verification

  • go build ./..., go test ./... (1475 pass), golangci-lint run ./... (no issues) all green.
  • e2e module builds and vets clean; new scenario e2e/scenarios/23-canary-bluegreen-reserved.yaml exercises a canary and a blue-green rollout and proves regeneration produces no drift (verify exit 0).
  • Validation tests cover percent range, bake_time duration parsing, and callback-path safety via the existing helper. A generator test asserts byte-identical output with vs without the new fields populated. The three JSON schema copies are regenerated in sync.
  • Docs: versioning.md documents the enriched rollout reserved shape and reaffirms there is no strategy: block.

Closes #1

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple
joshua-temple force-pushed the feat/reserve-canary-bluegreen branch from 21dbf60 to 27793e4 Compare June 21, 2026 03:05
@joshua-temple joshua-temple changed the title feat: reserve canary and blue-green deploy schema shape feat: reserve canary and blue-green deploy fields on rollout Jun 21, 2026
@joshua-temple
joshua-temple enabled auto-merge (squash) June 21, 2026 03:10
@joshua-temple
joshua-temple merged commit f4b965f into main Jun 21, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: canary / blue-green deploy strategy modeling

1 participant