Skip to content

feat(config): shared-path change semantics via extra_paths and shared_paths - #540

Merged
joshua-temple merged 1 commit into
mainfrom
feat/shared-path-change-semantics
Jul 9, 2026
Merged

joshua-temple merged 1 commit into
mainfrom
feat/shared-path-change-semantics

Conversation

@joshua-temple

Copy link
Copy Markdown
Collaborator

Problem

Per-component versioning scoped commits to a component's own path, so a change to a shared library or root config (outside every component path) bumped no component and released nothing. A busy monorepo changes shared code constantly, so this was the top product gap.

Feature

Two additive, optional fields:

  • per-component extra_paths: paths beyond the component's own that both trigger and version it;
  • top-level shared_paths: fanned into every component (rejected per-component).

Both are threaded to all three sinks so a shared change is never half-handled:

  1. Push-paths filter - the orchestrate workflow fires on a shared change.
  2. Version calc - GetCommitsForPaths includes the extra paths, so a feat!: shared commit bumps correctly.
  3. detectChanges - extra paths union into each build/deploy's non-empty triggers, so a shared change does not bump a version whose builds then skip. Empty (run-always) triggers are preserved.

Byte-identical

When both fields are unset, resolved paths, emitted output, and version calc are unchanged; single-component output stays byte-identical (baseline gate green).

Verification

Red-before/green-after unit tests: a shared-path commit bumps the consuming component (and feat!: bumps major); shared_paths fans to all; an undeclared shared path bumps nothing; detectChanges unions extra paths; resolve fan-out + byte-identical-when-unset. Full go test ./... (2686), -race, golangci-lint clean; three schema copies byte-identical; docs build. e2e scenario 56 asserts the emitted fan-out. Note: the runtime version bump is proven by the orchestrate unit tests here; the live-fleet runtime proof is Stage 3 (a shared-path wave). Also fixes a now-false merge_queue doc-comment.

Comment thread internal/orchestrate/orchestrator.go Fixed
Comment thread internal/orchestrate/orchestrator.go Fixed
…_paths

Per-component versioning scoped commits to a component's own path, so a change to a shared library or root config outside every component path bumped no component and released nothing. Add two additive, optional fields: per-component extra_paths (paths beyond the component's own that both trigger and version it) and top-level shared_paths (fanned into every component). Both are threaded to all three sinks so a shared change is not silently half-handled: the emitted push-paths filter (the workflow fires), the version calculation (GetCommitsForPaths includes the extra paths so a breaking shared commit bumps correctly), and detectChanges (extra paths union into each build and deploy's non-empty triggers, so a shared change does not bump a version whose builds then skip; empty run-always triggers are preserved). shared_paths is rejected per component. When both fields are unset the resolved paths, emitted output, and version calc are unchanged, so single-component output stays byte-identical. Also correct a now-false doc-comment about extra_triggers.merge_group.

Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
@joshua-temple
joshua-temple force-pushed the feat/shared-path-change-semantics branch from d393d56 to 3e68dcb Compare July 9, 2026 08:17
@joshua-temple
joshua-temple merged commit 74cd7c3 into main Jul 9, 2026
20 checks passed
@joshua-temple
joshua-temple deleted the feat/shared-path-change-semantics branch July 9, 2026 08:33
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.

2 participants