Skip to content

Amend ADR 0012: publish current stable from a release branch #273

Description

@arbrandes

Description

ADR 0012 specifies that the current stable codebase lives on an n.x branch (for instance a literal 1.x) and that stable releases are published from it. While implementing the Verawood stable releases (#244) we found this is not achievable with semantic-release.

A branch whose name matches the maintenance pattern (N.x, N.N.x) is classified by semantic-release as a maintenance branch. Maintenance branches can only publish patches to a major that has already shipped; they cannot originate a major's first stable release. With only 1.0.0-alpha.* prereleases in history, the 1.x maintenance range collapses to the empty >=1.0.0 <1.0.0 and 1.0.0 cannot be published (EINVALIDNEXTVERSION). There is also a bootstrap deadlock: 1.x cannot reach 1.0.0 until a higher 2.0.0-alpha line exists, while main cannot bump to 2.0.0-alpha until a stable 1.0.0 baseline exists.

The proposed amendment is to publish the current stable from a long-lived release branch instead. A release branch is a true release branch in semantic-release terms: it owns the latest dist-tag and can graduate the alphas to 1.0.0 in a single push, with no placeholder branch and no deadlock. The configuration reduces to a release entry plus a main prerelease entry.

The n.x branches are retained, but only to maintain superseded majors. When main's breaking work is ready to become the next major, an n.x branch is cut from release to keep patching the outgoing major, and main graduates onto release as the new current stable. Because the outgoing major has already shipped by then, the n.x maintenance branch works cleanly. This matches semantic-release's intended branch lifecycle.

Update ADR 0012 (section 3 and the related backport wording) to describe release as the current-stable branch and n.x branches as maintenance for superseded majors.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Fields

No fields configured for Feature.

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions