Skip to content

feat(e2e): execute per-component promote workflows and assert component-scoped state - #519

Merged
joshua-temple merged 1 commit into
mainfrom
feat/promote-e2e
Jul 8, 2026
Merged

joshua-temple merged 1 commit into
mainfrom
feat/promote-e2e

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

Problem

Per-component promotion state (#517) and per-component promote workflows (#518) are in place, but the act+gitea harness could only run the flat promote.yaml and assert flat state.<env>. Proving per-component promotion isolation end-to-end needs the harness to run a named component's workflow and assert state.components.<name>.<env>.

Fix

  • A promote or orchestrate step takes an optional component. Empty runs promote.yaml/orchestrate.yaml and asserts state.<env> exactly as before (byte-identical). Named runs promote-<name>.yaml/orchestrate-<name>.yaml and asserts state.components.<name>.<env>.
  • State sync parses the components subtree into composite keys so a component-scoped expectation reads the owning node; the flat path is untouched.
  • New scenario 51-component-promote-isolation.yaml: seeds and promotes one component through the ladder, asserts a sibling component's recorded state stays byte-unchanged across that cycle, then advances the sibling independently.

Verification

go build ./..., go test ./... (2585 pass), golangci-lint run ./... clean; e2e build+vet clean; byte-identical baseline gate green. New scenario passes locally in the act+gitea harness (Per-Component_Promotion_Isolation, 39.7s); the single-component regression scenario Two_Environment_Happy_Path also passes locally (54.7s), confirming the flat path is unchanged.

Refs #290, #291.

…nt-scoped state

The harness can now target a specific component's generated workflow and assert its recorded state. A promote or orchestrate step takes an optional component: an empty component runs the flat promote.yaml/orchestrate.yaml and asserts state.<env> exactly as before (byte-identical); a named component runs promote-<name>.yaml/orchestrate-<name>.yaml and asserts state.components.<name>.<env>. State sync parses the components subtree into composite keys so a component-scoped expectation reads the owning node. A new scenario seeds and promotes one component through the ladder, asserts a sibling component's recorded state stays byte-unchanged across that cycle, then advances the sibling independently, proving per-component promotion isolation end-to-end in the act and gitea run.

Refs #290, #291.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple
joshua-temple merged commit caee266 into main Jul 8, 2026
20 checks passed
@joshua-temple
joshua-temple deleted the feat/promote-e2e branch July 8, 2026 06:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant