Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions docs/platform_management_plan/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@ Platform Management Plan

.. toctree::
:titlesonly:
:glob:
:caption: Role Assignments

role_assignment/platform_safety_engineer
role_assignment/platform_safety_manager
role_assignment/platform_security_manager
role_assignment/platform_quality_manager

role_assignment/*
214 changes: 208 additions & 6 deletions docs/platform_management_plan/release_management.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ This document implements parts of the :need:`wp__platform_mgmt`.
Purpose
+++++++

The release management plan describes how releases of the SW platform and modules are performed in the S-CORE project.
The release management plan describes how releases of the SW platform and modules are performed in the S-CORE project. It
starts with a general description of a release and its scope, then describes the continuous releases in an 8-week cycle.

Objectives and scope
++++++++++++++++++++
Expand All @@ -39,6 +40,7 @@ Goal of this plan is to describe
* which types of releases exist
* how these are planned and executed
* how they are identified
* what is integrated and who is responsible

Approach
++++++++
Expand Down Expand Up @@ -69,8 +71,8 @@ defined in :need:`doc__project_mgt_plan`.
For an official release also consider `Eclipse Project Handbook - Releases <https://www.eclipse.org/projects/handbook/#release-releases>`_.


Release Planning and Execution
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
General Release Planning and Execution
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Generally release planning and execution is described in :need:`wf__rel_mod_rel_note` process.
It is part of project planning and therefore also documented with the same means. Generally a release
Expand All @@ -81,7 +83,8 @@ Before every release there will be a phase in which, for the features to be rele
updates will be allowed but only bug fixes, addition of tests and quality improvements.
This period will be planned by the technical leads in the milestone planning. There is no general
time-span defined for this, but for the first releases a period of four weeks is recommended as good practice.
With increasing maturity of the modules it is expected that this period can be reduced.
The continuous release for S-CORE will be discussed in the next section. With increasing maturity of the modules
it is expected that this period can be reduced. Also when they are not part of the continuous releases.

As defined in the process, the releases on module and platform level need to be coordinated.
Major version updates denote API incompatibility, so the modules in a platform release are expected to have the same
Expand Down Expand Up @@ -135,9 +138,208 @@ Identification
4. Pre-Release Versions

* Use pre-release versions for features or fixes that are not yet ready for production.
* Format: MAJOR.MINOR.PATCH-<pre-release-tag>, e.g., 1.0.0-alpha, 1.0.0-beta.
* Format: MAJOR.MINOR.PATCH-<pre-release-tag>, e.g., ``1.0.0-alpha``, ``1.0.0-beta``.

5. Tagging Releases

* Tag each release in the repository with the version number.
* Format: vMAJOR.MINOR.PATCH, e.g., v1.3.0.
* Format: vMAJOR.MINOR.PATCH, e.g., ``v1.3.0``.


Continuous Release Planning and Execution
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Release interval (see :ref:`pmp_pm_release`) between S-CORE product increments can be divided into two phases:

**Development phase (6 weeks) :**

#. Common release requirements definition
#. Internal communication
#. Features' implementations and improvements
#. Tooling release
#. Code freeze

**Integration phase (2 weeks) :**
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggestion: Rename "Integration phase" to "Release phase"
Since we have continuous integration in place, calling this the "Integration phase" seems a bit inconsistent. Would it make more sense to rename it to "Release phase"? This would better reflect what's actually happening at this stage

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have continuous integration? Like, is that still a goal? Is there a way to make it work while relying on explicit releases for score releases? Does it even make sense? e.g. when continuous is green, it does not mean that some module will actually release that version.

Sorry if this is destructive. But if we cannot re-agree on the goals, then we don't need to bother with the technical details.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See also #1815

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's still a goal to have CI. I think CI makes sense, even if modules will not release from what you have on main, it does not matter, You still have continous feedback what happens on main of all modules, incompatilbities etc. And at the end, in most cases release will be around the main when branchof point for it happens.

OFC reality may later validate us being wrong above, then we adapt ;)


#. Release branch creation
#. Integration of the modules
#. Release notes
#. Release candidate
#. Release creation

Common release requirements definition
--------------------------------------

At the beginning, the overall scope and general requirements for the modules are discussed during
release team meeting and agreed upon within the S-CORE community, providing clear goals for what must be achieved.
The scope should define requirements such as:

* Tooling versions
* Used toolchains
* Supported platforms

rather than specific features' implementation scopes.
Full list of tools can be found in the :need:`doc__tool_evaluation_list`.
The scope will be defined in Github issue with sub-issues for every participating Module to track progress.

Based on the operating system definitions documented in the :ref:`comp_doc_os`
the Reference Integration Team will only maintain functional/certifiable level OSs as part of the release,
while community OSs will be prepared and maintained by the OS module Maintainers. *Code freeze* applies to OSs as well.

.. note::

Performed by: Project Leads and S-CORE community


Internal Communication
----------------------

Project Leads present scope during Tech Alignment call for final discussion and then send a communication
via mailing list to inform about the scope of upcomming release.

.. note::

Performed by: Project Leads

Features' implementations and improvements
------------------------------------------

During the development phase, the community works on new features and improvements to the Modules.
Changes are reviewed by Commiters and Module Maintainers.

.. note::

Performed by: S-CORE community and Module Maintainers

Tooling release
---------------

S-CORE tools, toolchains and other dependencies which are listed in the following Bazel MODULE files
located in reference integration repository:

* ``bazel_common/score_gcc_toolchains.MODULE.bazel``
* ``bazel_common/score_modules_tooling.MODULE.bazel``
* ``bazel_common/score_qnx_toolchains.MODULE.bazel``
* ``bazel_common/score_rust_toolchains.MODULE.bazel``

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about quality toolings like linters/sanitizers/ req. traceability tooling
So repos like score_cpp_policies, etc.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would refer to all of them as "tools" in general. Linters, traceability etc. are located currently in score_modules_tooling. If there are new tools that need to be added for the release they can be included in one of those files or new one within bazel_common/

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Okay so you want to distinguish toolchains vs tools? Why? What is the benefit of this differentiation?

are released at the end of the development phase the latest.
During the integration phase, no changes other than necessary bug fixes are allowed to give time to the Modules to rebase
their dependencies and prepare their *code freeze*. This implies that tools must prepare a release in-time before the integration phase.

.. note::

Performed by: Module Maintainers

Code freeze
-----------
At the end of development phase, each Module must provide a hash of the commit that represents a *code freeze*
Copy link
Copy Markdown

@rmaddikery rmaddikery Mar 16, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

each Module must provide a hash

povide who and how?

Also why?
considering the Module Maintainers prepare a Pull Request?

Copy link
Copy Markdown
Contributor

@pawelrutkaq pawelrutkaq Mar 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Check line 240 (who)

and serves as a candidate for release. The hash can be from the **main** or **dedicated release** branch.

.. note::

Performed by: Module Maintainers

Release branch creation
-----------------------

The integration phase begins with the creation of a **release branch** in the ``reference_integration`` repository
originating from current **main**.

.. note::

Performed by: Reference Integration Team

Integration of the Modules
--------------------------

Module Maintainers prepare a Pull Request to that branch with updates to the ``known_good.json`` file,
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

known_good.json pins commit hashes per module but does not verify inter module dependency. I faced this challenge when trying to integrate datarouter that needed fixing hashed for unrelated modules. E.g.: scrample and persistency. The current process allows discovering issues during the integration phase; the last leg which is too late to coordinate a fix acoss depending module teams.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rmaddikery there is ongoing work that during the development phase, ref_int will have CI of latest modules build automatically and deliver feedback so all divergence and breaking changes are catched daily.

pointing to the hash of their *code freeze*. They may update other JSON fields for their Module as needed.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we work on PRs / Hashes here? I though we use bzl_mod in all repos. Then all that needs to be done is a check did bzl_mod version change in last 8 weeks. If not that module did not have an updates to contribute in the next release.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reference_integration goal is to provide continuous integration so every push to main branch of any module triggers an update in ref_int. If there are no issues the hash is bumped.
This way on main branch of ref_int we always have newest hash of the module that simply works here.

For the releases we want to switch to certain version from bazel registry. It doesnt have to be newest version. It is up to module owners to decide which version will be integrated for the score release. Thats why we need a PR with that information directly from the module owner.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm okay, but shouldn't the rule rather be for the module owners: Do not push to bazel registry what shall not be integrated in proper releases (or if you to tag it "unsafe" or something alike)" 🤔

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Module owner can do the release whenever they want. They can create 5 releases during Development Phase - all are technically correct but they want to use middle one for release.
Same with bugfix releases, we need to fix something in the old release - which version of the module do we pick?

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes but the 'central' release should not impose code freezes on those modules and their individual release strategy.

It should be the other way around. If a module has a release they want (or are 'forced' ) to integrate in the central release they should open a PR that bumps the bzl_mod version in the central release repository (and fixes breaking changes in other modules [either in those directly or via patch]).

This way no extra work induced on modules unless they drive the integration which also aligns their resource planing

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But this point is exactly about that

  • modules do releases to bcr how they like,
  • When the score release is done, they put/say which release to pick
    • if there are breaking API changes, yes then others has to be aligned (whichever way)
    • The above shall be known upfront by CI/CD so we dont get to know it only during release of S-CORE but once this happens (this is WIP currently)

Automated workflows will build and test to provide clear feedback directly in the PR.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering about the workflow here – if module maintainers have already specified the hash/version to use, what's the benefit of having them also create a PR? It seems like this could be streamlined by having the integration team handle PR creation, which would reduce review burden and help us move faster. Thoughts?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where maintainers specified a version? With a PR we have clear message which version shall be used + approvals system out of the box.
How otherwise would you collect information about versions from each of the modules?

If there are any issues, Module Maintainers can either push fixes to their **dedicated release** branch
and update the hash in the PR accordingly, or provide patches (see :ref:`ref_int_patching-label`).

.. note::

Performed by: Module Maintainers

Release notes
-------------

Project Leads create a branch ``release/version`` with new release notes in ``score_platform`` repository following template: :need:`doc__platform_release_note`.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cant we finally move the release notes to ref int? 😆

Module Maintainers create a Pull Request to that branch with updates to the release notes,
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Personally I hate this practice. Why do we deviate here from normal workflows as we have EVERYWHERE. We integrate on main branch, not on some PR branch.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#2671 (comment) I would simply apply the linked comment, move notes into ref_int (this is what we announce over Linkedin and other channels anyway) and then all this is not needed and simpler.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should link the definition of "module maintainers"

describing the changes in their Module for the release.
Once all Modules are updated Project Leads approve the release notes and create ``score_platform`` release.

.. note::

Performed by: Module Maintainers and Project Leads

Release candidate
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe the big question here is whether modules should even create releases. Are they "just" part of S-CORE and we can forgo all this crazy overhead and integration phases. Or are they releaseable on their own and score ist just integrating them. It seems we aim for both, which is fine. But we must understand that we'll neither have full efficient CI nor independent modules.

-----------------

Once all Modules are merged with their *code freeze*, Module Maintainers create a tag on that exact hash following the S-CORE release process,
and ensure that the new release is present in S-CORE's ``bazel_registry``.
The Reference Integration Team prepares a final Pull Request and replaces all hashes with the dedicated release versions.

This pull request has additional workflow checking that every Maintainer has approved the PR signing off their Module's release candidate.
The approval of the Project Lead is required and from the Quality Manager for the formal aspects as well.
There is an additional ``.rst`` file listing every Module and GitHub ID of the Maintainer responsible.

.. note::

Performed by: Reference Integration Team and Module Maintainers

Release creation
----------------

Once all previous steps are completed Reference Integration Team triggers the release creation workflow in ``release_integration``.
An automated verification process of the release begins which includes building, testing, deploying documentation and checking that
every Module has been correctly signed-off by its Maintainer. If any issue is found, the release creation process is stopped.
Once the process is aborted, the Reference Integration Team investigates the issue and works with the relevant Module Maintainer to fix it
or if the issue is severe decides, together with the Project Leads, to postpone the release. If the issue is fixed, the release creation process can be triggered again.
When successfully completed the release and its downloadable assets are ready for distribution.

.. note::

Performed by: Reference Integration Team


Opting out of a release
-----------------------

Module Maintainers may decide that their Module will not be released with a new version for the S-CORE Product Increment.
In that case currently integrated version can be used. However, they must still ensure that the Module remains compatible with
the S-CORE release and does not fail any workflows.

If Module Maintainers cannot adapt to the newest release requirements or any S-CORE community member discovers a showstopper
for the upcoming release, they must communicate it promptly to the Project Leads and other community members.
Following discussion and impact analysis, a decision is made regarding whether to postpone or skip the S-CORE release,
and the planning is updated accordingly.

.. _ref_int_patching-label:

Patching Module
---------------

Module Maintainers prepare ``.patch`` file(s) and place them in the ``/patches/MODULE_NAME`` directory.
The patch filename must clearly indicate what it addresses.
For multiple issues, it is preferred to create multiple patches rather than a single patch addressing all issues.

A patch might be need to fix issues after the release of the module is allready in bazel registry and there is
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a process what shall happen to these patch file after release? I suppose in most cases these patches shall be integrated into the module repository and then removed from the reference integration.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes exactly

no time for another release. Or if its only minor and it's decided to avoid therefore another release.
Comment on lines +328 to +329
Copy link
Copy Markdown
Member

@AlexanderLanin AlexanderLanin Mar 17, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Explaining non trivial / non build-script patches in regards to safety will be quite impossible?!


Target releases definition
--------------------------

Based on the operating system definitions documented in the `OS module <https://eclipse-score.github.io/score/main/modules/os/operating_systems/docs/index.html>`_,
the Reference Integration Team defines which OSs will be maintained as part of the release:

* **Functional/Certifiable level OSs** - maintained by the Reference Integration Team and included in the release
* **Community OSs** - prepared and maintained by the OS module Maintainers during the integration phase

Only changes to functional/certifiable level OSs are considered until the *code freeze*.
Community OS updates can be prepared by the OS Maintainer during the release phase if needed.

.. note::

Performed by: Reference Integration Team and OS module Maintainers
Loading