Skip to content

feat: deploy the updated component on external update#213

Merged
joshua-temple merged 1 commit into
mainfrom
feat/deploy-on-update
Jun 17, 2026
Merged

feat: deploy the updated component on external update#213
joshua-temple merged 1 commit into
mainfrom
feat/deploy-on-update

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

Problem

The external-update receiver records a new component version into ci.state.<env>.external.<deploy_name> but stops there. Absorbing an upstream bump does not deploy the component, so the new version sits recorded but unreleased until a separate pipeline run.

Fix

Add an opt-in, additive on_update.deploy.workflow field to each external deploy. When set, the generated receiver workflow emits a scoped deploy_<name> job (needs: update) that runs that component's reusable deploy workflow in the SAME run, gated on the update job succeeding and on inputs.deploy_name matching the component. The deploy is scoped to the updated component only, never a full pipeline re-run, and shares the receiver run id for deterministic correlation.

Absent on_update the output is byte-identical to today (record-only). Per-component concurrency, the state-token checkout, and the application-level commit retry in the update verb are all preserved unchanged.

Verification

  • go build ./..., go test ./..., golangci-lint run ./... green
  • e2e module go build + go vet green
  • New generator unit tests (scoped-job wiring, record-only byte-identical back-compat, determinism, local-path), config parse + validation tests
  • New e2e/scenarios/multi-repo/external-update-deploys-component.yaml
  • Schema (all copies) + configuration docs updated
  • Dogfood regen committed (no drift)

When an external deploy declares on_update.deploy.workflow, the generated
external-update receiver emits a scoped deploy_<name> job that runs
synchronously in the same receiver run after the slot is recorded. The job
needs the update job, is gated on its success and on inputs.deploy_name, and
calls the declared reusable workflow with the recorded environment, sha,
version, and deploy_name, inheriting secrets.

Absent on_update keeps the receiver record-only and byte-identical to before:
no deploy job is generated. on_update.deploy is reusable-workflow only and its
workflow path is required when the block is present.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple joshua-temple merged commit 09769ba into main Jun 17, 2026
12 of 13 checks passed
@joshua-temple joshua-temple deleted the feat/deploy-on-update branch June 17, 2026 22:49
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