-
Notifications
You must be signed in to change notification settings - Fork 83
DR-005: Release strategy #2400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
olivembo
wants to merge
17
commits into
eclipse-score:main
Choose a base branch
from
etas-contrib:dr-005-branching-strategy
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
DR-005: Release strategy #2400
Changes from all commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
96e738c
Added initial version of DR-005-infra.md
olivembo 38f2a00
Added chapter numbers
olivembo a5f3aff
Shortened semver chapter
olivembo 7942367
Moved out of scope section and removed a section
olivembo f1bdf9a
Incorporated review comments and shrinked down the document
olivembo d920ed9
Update docs/design_decisions/DR-005-infra.md
olivembo 5557a13
Adressed discussion_r2681167607
olivembo 98f4e8c
Addresses review comment discussion_r2681174185
olivembo a5399bb
Addresses review comment discussion_r2681184227
olivembo 1d96828
Restructured chatper 2
olivembo 531251e
Minor changes
olivembo 34403a6
Fixed typos and inconsistencies
olivembo 26458df
Reworked chapter 3.1
olivembo 04d653d
Reworked some chapters and fixed grammar
olivembo fd4cdd7
Finalized DR-005
olivembo 6044661
Converted md to rst
olivembo ae6224d
Update docs/design_decisions/DR-005-infra.rst
olivembo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,212 @@ | ||
| .. | ||
| Copyright (c) 2026 Contributors to the Eclipse Foundation | ||
|
|
||
| See the NOTICE file(s) distributed with this work for additional | ||
| information regarding copyright ownership. | ||
|
|
||
| This program and the accompanying materials are made available under the | ||
| terms of the Apache License Version 2.0 which is available at | ||
| https://www.apache.org/licenses/LICENSE-2.0 | ||
|
|
||
| SPDX-License-Identifier: Apache-2.0 | ||
|
|
||
|
|
||
| DR-005-Infra: Development, Release and Bugfix workflows | ||
| ======================================================= | ||
|
|
||
| .. dec_rec:: Development, Release and Bugfix workflows | ||
| :id: dec_rec__infra__dev_release_bugfix | ||
| :status: accepted | ||
| :context: Infrastructure | ||
| :decision: Polyrepo release process with manifest repository | ||
|
|
||
| Date: 2026-01-08 | ||
|
|
||
|
|
||
| Context | ||
| ------- | ||
|
|
||
| This project consists of multiple independently developed modules stored in separate | ||
| repositories (polyrepo setup). | ||
|
|
||
| This ADR builds on | ||
| `DR-002 (Integration Testing in a Distributed Monolith) <./DR-002-infra.md>`_, which | ||
| establishes: | ||
|
|
||
| - the polyrepo structure, | ||
| - centralized responsibility for cross-repository integration, | ||
| - and infrastructure-owned integration tooling and processes. | ||
|
|
||
| Within that context, this ADR defines **how coordinated product releases are produced** | ||
| from independently developed and versioned modules, while allowing continuous | ||
| integration to reduce the gap between development and release. | ||
|
|
||
| Commonly referenced workflows do not fully address this problem space: | ||
|
|
||
| - **Trunk-Based Development** with standard SemVer cannot represent parallel | ||
| release streams needed for supporting multiple product versions simultaneously. | ||
| - **Gitflow** adds branching complexity without solving the versioning problem | ||
| for parallel releases in a polyrepo setup. | ||
|
|
||
| This ADR evaluates branching and versioning strategies explicitly designed for | ||
| **polyrepo systems with coordinated integration releases and continuous verification**. | ||
|
|
||
|
|
||
| Requirements and Goals | ||
| ---------------------- | ||
|
|
||
| Requirements | ||
| ^^^^^^^^^^^^ | ||
|
|
||
| Options that do not satisfy these requirements are not viable and will be rejected: | ||
|
|
||
| - Reproducible and auditable release snapshots | ||
| - During working on a release, working on the main branch should still be possible | ||
| - Working on a release branch should be always possible and not harm the development on the main branch (resp. vice versa) | ||
| - Working on a bugfix should always be possible (for any old release) | ||
| - Module developers must know how to name their released versions | ||
| - The versioning scheme must clearly indicate which product release a module version | ||
| belongs to, enabling parallel release, which essentially means the ability to | ||
| maintain previous releases. | ||
| - Explicit stabilization phases | ||
| - Continuous integration before formal releases | ||
|
|
||
| Optimization Goals | ||
| ^^^^^^^^^^^^^^^^^^ | ||
|
|
||
| Among viable options, we optimize for: | ||
|
|
||
| - Independent module lifecycles without blocking development | ||
| - A process that scales across many repositories and teams | ||
| - Minimal integration governance to coordinate releases across repositories | ||
|
|
||
|
|
||
| Options Considered | ||
| ------------------ | ||
|
|
||
| Option 3.1: Trunk-Based Development | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
|
||
| Trunk-based development is a branching model where all developers work on a single main | ||
| branch ("trunk"), integrating changes frequently—ideally daily. Feature and bugfix | ||
| development happens directly on the trunk or in very short-lived branches that are | ||
| merged back quickly. Long-lived release branches and parallel release streams are | ||
| explicitly avoided. Releases are created directly from the trunk, and if a release | ||
| branch is needed for final stabilization or a hotfix, it is kept as short-lived | ||
| as possible. Bugfixes are made on the trunk and only cherry-picked to a release | ||
| branch in rare cases where a hotfix for an older release is required. Versioning | ||
| is linear, and the model does not support parallel maintenance of multiple | ||
| product versions. | ||
|
|
||
| **Pros** | ||
|
|
||
| - Very simple and lightweight branch structure. | ||
| - Maximizes integration and fast feedback through continuous integration. | ||
| - Minimizes merge conflicts and versioning issues. | ||
|
|
||
| **Cons** | ||
|
|
||
| - Parallel maintenance of multiple product versions (e.g., for long-term support) is | ||
| not feasible. | ||
| - Not suitable for polyrepo setups that require parallel support of several releases, | ||
| as parallel release streams are not supported by design. | ||
| - Requires explicit integration governance. | ||
olivembo marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| .. note:: | ||
| The versioning and merge conflicts described in the diagram below typically | ||
olivembo marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| arise when deviating from strict trunk-based development and introducing long-lived | ||
| release branches. This is no longer considered state-of-the-art trunk-based development. | ||
|
|
||
| .. mermaid:: | ||
|
|
||
| gitGraph | ||
| commit id: "1.2.3" | ||
|
|
||
| branch release | ||
| checkout release | ||
| commit id: "1.2.3-v1.0" | ||
|
|
||
| checkout main | ||
| branch bugfix | ||
| checkout main | ||
|
|
||
| commit | ||
| commit id: "1.2.4" | ||
| commit | ||
| commit id: "1.2.6" | ||
|
|
||
| checkout bugfix | ||
| commit id: "bugfix-work" | ||
|
|
||
| checkout release | ||
| merge bugfix | ||
| commit id: "1.2.5" | ||
|
|
||
| checkout main | ||
| merge bugfix | ||
|
|
||
|
|
||
| Option 3.2: Gitflow Across Repositories | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
|
||
| Uses the Gitflow branching model where modules maintain both ``main`` and ``develop`` | ||
| branches, with release branches created for stabilization. The manifest | ||
| repository (per DR-002) creates release branches (e.g., ``release/v1.0``), and each | ||
| participating module repository creates corresponding release branches. | ||
|
|
||
| **Pros** | ||
|
|
||
| - Well-known branching model. | ||
| - Explicit ``develop`` branch separates ongoing work from release stabilization. | ||
| - Release branches provide clear stabilization phases. | ||
|
|
||
| **Cons** | ||
|
|
||
| - Parallel maintenance of multiple product versions (e.g., for long-term support) is | ||
| not feasible. | ||
| - Standard SemVer suffers from the same parallel release stream problem as Option 3.1 (version numbering conflicts). | ||
olivembo marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| - Additional overhead of maintaining separate ``develop`` branches across all repositories. | ||
| - More complex branching model increases coordination complexity in a polyrepo setup. | ||
| - Does not scale well with increasing module count. | ||
| - Requires explicit integration governance. | ||
|
|
||
|
|
||
| Option 3.3: Polyrepo Release Process with Manifest Repository and relaxed version of SemVer | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
|
|
||
| As described in | ||
| `DR-002 (Integration Testing in a Distributed Monolith) <./DR-002-infra.md>`_ there is | ||
| a dedicated manifest repository containing the "known goods sets". There is a known | ||
| good set for the latest version, but also known good sets for released versions. | ||
| The known good set specifies the exact version of each module. Additionally, we store | ||
| the hash to ensure the integrity of the version. | ||
|
|
||
| Bugfixes for previous releases are handled by checking out the corresponding commits | ||
| in the manifest and the affected modules, applying the fix, and updating the | ||
| manifest to reference the new module version. | ||
|
|
||
| **Pros** | ||
|
|
||
| - Single source of truth for product integration. | ||
| - Supports continuous verification. | ||
| - Provides reproducible releases. | ||
olivembo marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| - Scales with module count and team autonomy. | ||
| - Clear separation between development, integration, and stabilization. | ||
|
|
||
| **Cons** | ||
|
|
||
| - Requires explicit integration governance. | ||
|
|
||
|
|
||
| Decision | ||
| -------- | ||
|
|
||
| We decided for **Option 3.3**. | ||
olivembo marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
|
||
| Rationale | ||
| ^^^^^^^^^ | ||
|
|
||
| Options 3.1 and 3.2 are not feasable for parallel maintenance of multiple product | ||
| versions. | ||
|
|
||
| Option 3.3 is the only viable option as it satisfies all requirements. | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.