Skip to content

feat(release-automation): continue rc/alpha numbering across a repo split via seeded_from - #442

Merged
hdamker merged 3 commits into
camaraproject:mainfrom
hdamker:feat/seeded-from-tooling-support
Sep 4, 2026
Merged

feat(release-automation): continue rc/alpha numbering across a repo split via seeded_from#442
hdamker merged 3 commits into
camaraproject:mainfrom
hdamker:feat/seeded-from-tooling-support

Conversation

@hdamker

@hdamker hdamker commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

What type of PR is this?

enhancement/feature

What this PR does / why we need it:

Adds an optional seeded_from section to release-plan.yaml (schema already added in ReleaseManagement#660) that declares a one-time, hand-typed fact when an API is split into a new repository: the last rc/alpha version already published for that API in its predecessor repository. VersionCalculator.calculate_versions_for_plan folds the declared last_rc_api_version/last_alpha_api_version in as one virtual entry alongside this repository's own release history when computing the next extension number, so a brand-new split-off repository continues numbering (e.g. 1.2.0-rc.3 to 1.2.0-rc.4) instead of restarting at rc.1 and colliding with an unrelated, earlier rc.1. Public releases are unaffected since they never read history or the seed. Separately, when an API's CHANGELOG comparison baseline can't be resolved from this repository's own history and that API is listed under seeded_from, the Release Review PR now adds a [!NOTE] alert pointing at the predecessor repository/tag, since cross-repo CHANGELOG history stays a manual step regardless of this change.

  • Continues rc/alpha extension numbering across a repository split without a manual bridging release.
  • Read-only, one-time declared fact: no live cross-repo lookups, no change to how self-history is scanned.
  • Surfaces a pointer to the predecessor repository whenever the CHANGELOG comparison baseline can't be resolved locally.

Which issue(s) this PR fixes:

Fixes #441

Special notes for reviewers:

Two files are intentionally untouched: shared-actions/create-snapshot/action.yml already passes the full release-plan.yaml dict through to calculate_versions_for_plan, and release-plan.yaml's target_api_version is base-version-only (the extension is always auto-calculated, never hand-typed), so there is no PR-time value to validate against seeded_from beyond what the schema already enforces in resolve-release-history.py/release_history.py. validation/schemas/release-plan-schema.yaml is a manual copy of the ReleaseManagement#660 schema (this repo doesn't fetch it live) - a future drift between the two needs to be caught by hand. End-to-end verified against a real (non-fork) mirror repository seeded from QualityOnDemand's actual qos-profiles history, confirming 1.2.0-rc.3 to 1.2.0-rc.4 through the real create-snapshot GitHub Action, not just unit tests.

Changelog input

 release-note
Add an optional `seeded_from` field to release-plan.yaml so a repository split continues an API's rc/alpha pre-release numbering from its predecessor instead of restarting at rc.1.

Additional documentation

This section can be blank.

docs

…lculation

Repository splits move APIs into a new repo whose own release history is
empty, so pre-release numbering would otherwise restart at rc.1/alpha.1 and
collide with versions already published in the predecessor repo (e.g.
QoSProfiles r1.1 vs QualityOnDemand's qos-profiles). version_calculator.py
now reads release-plan.yaml's seeded_from.apis[].last_rc_api_version /
last_alpha_api_version and folds the matching value in as one virtual
history entry, matching the schema shipped in ReleaseManagement PR #660.
…ANGELOG baseline resolves

A repo-split API's first release(s) have no self-history, so _get_compare_base always returns N/A regardless of seeding -- correct per design (cross-repo CHANGELOG diffing stays manual), but N/A gives the codeowner no hint that a real baseline exists in the predecessor repo. The Release Review PR now adds a one-line note pointing at seeded_from.repository/release_tag whenever an API has no comparison_baseline and was listed under seeded_from.apis, regardless of release status (rc/alpha/public alike).
… alert

Plain blockquote text was easy to miss in the Release Review PR body. GitHub's > [!NOTE] alert syntax renders it with a colored icon and border, matching how similar callouts already look elsewhere in CAMARA repos.
@hdamker hdamker added enhancement New feature or request release automation Related to the implementation or introduction of new release automation labels Sep 2, 2026
@hdamker

hdamker commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Needed for QosProfiles, including into tooling release v0.10.0

@hdamker
hdamker merged commit 7abdd7a into camaraproject:main Sep 4, 2026
8 checks passed
@hdamker
hdamker deleted the feat/seeded-from-tooling-support branch September 4, 2026 06:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request release automation Related to the implementation or introduction of new release automation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Preserve pre-release version continuity when an API is split into a new repository

1 participant