Skip to content

test: run real external-update and notify path in multi-repo e2e#119

Merged
joshua-temple merged 3 commits into
mainfrom
test/e2e-real-external-notify
Jun 11, 2026
Merged

test: run real external-update and notify path in multi-repo e2e#119
joshua-temple merged 3 commits into
mainfrom
test/e2e-real-external-notify

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

Problem

The multi-repo e2e harness was simulation-dominant. The generated external-update.yaml,
the cascade external update verb, and the satellite notify step were never executed:
cross-repo dispatch recorded external state straight into an in-memory ExecutionContext
and the final assertions read it back from the same place, so the external/notify product
surface had no real coverage.

Fix

  • Generate real workflows per repo. MultiRepoHarness.CreateRepo now writes the manifest to
    .github/manifest.yaml (the CLI default; it previously wrote a path the CLI never reads)
    carrying both config and state, then runs cascade generate-workflow for each repo,
    reusing the single-repo generate/localize/converge machinery.
  • Drive the real verb. Cross-repo dispatch now runs the primary's external-update.yaml
    under act with the inputs the satellite would send. The real cascade external update
    verb writes state.<env>.external.<name> back to the primary's manifest in gitea, and the
    final assertions read that committed manifest instead of in-memory state.
  • Assert the real notify step content. For each notifying satellite, the generated
    orchestrate.yaml is read from gitea and checked for the dispatch step targeting the
    primary's external-update workflow.
  • Product fix: the generated external-update.yaml ran the update verb (which commits and
    pushes the manifest) without first setting a git identity, which aborts on a clean runner.
    It now emits a Configure Git step before the verb, matching the other state-writing
    workflows.

The live cross-repo dispatch network hop is a no-op against gitea (it does not implement the
Actions dispatch API), so the harness bridges it by invoking the primary's external-update
workflow directly with the same inputs. The network hop itself is real-GitHub validation
material and is documented as residue in the harness.

Verification

  • go build ./..., go vet ./e2e/..., golangci-lint run ./e2e/... and
    ./internal/generate/... all clean.
  • Three multi-repo scenarios pass under act with real manifest-read assertions:
    satellite-notifies-primary, external-state-promotion, mixed-deploys. The rollback scenario
    still passes against the real manifest. Product generate tests and harness unit tests green.

…o e2e

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple joshua-temple merged commit 55e400e into main Jun 11, 2026
6 checks passed
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