From afe59c710a4c06eab8cbd75ac5b93215481b42f5 Mon Sep 17 00:00:00 2001 From: Anton Krivoborodov Date: Tue, 13 May 2025 09:26:23 +0200 Subject: [PATCH 1/3] docs: rename cft to ft Rename cross-functional teams to feature teams and update the links. --- docs/contribute/contribution_request/index.rst | 2 +- docs/contribute/index.rst | 2 +- .../problem_resolution.rst | 2 +- .../project_management.rst | 14 ++++++-------- .../guidance/release_guideline.rst | 2 +- docs/process/roles/index.rst | 2 +- docs/score_releases/index.rst | 8 ++++---- 7 files changed, 15 insertions(+), 17 deletions(-) diff --git a/docs/contribute/contribution_request/index.rst b/docs/contribute/contribution_request/index.rst index cfd6851d3c..5391a5eaa9 100644 --- a/docs/contribute/contribution_request/index.rst +++ b/docs/contribute/contribution_request/index.rst @@ -78,7 +78,7 @@ Join Us in Building S-CORE Submit a contribution pitch for a specific feature request if you have a solution you'd like to share. - **Looking to Improve What's Already There?** - Contribute enhancements to existing implementations or get involved with one of our cross-functional teams (CFTs). + Contribute enhancements to existing implementations or get involved with one of our Feature Teams (FTs). We're excited to have you on board. Together, we can shape S-CORE into a platform that's not only innovative but also a joy to be a part of. diff --git a/docs/contribute/index.rst b/docs/contribute/index.rst index 5cc9e94c07..1377ebff27 100644 --- a/docs/contribute/index.rst +++ b/docs/contribute/index.rst @@ -49,7 +49,7 @@ How is S-CORE organized Eclipse S-CORE is an open source project, so everyone is welcome to contribute. Since we are organized within the Eclipse Foundation, you must have an Eclipse Foundation account to participate - please see :ref:`contribution_attribution` for details. -The project is structured into various :ref:`technical committees `, which include communities focused on specific domains and cross-functional teams responsible for defined work areas. Their meetings are public; feel free to join or review the minutes via our `GitHub Discussions `_. +The project is structured into various :ref:`technical committees `, that include communities which focus on cross-cutting topics and feature teams responsible for the implementation of specific functionalities. Their meetings are public; feel free to join or review the minutes via our `GitHub Discussions `_. Additionally, two :ref:`steering committees `, the Technical Lead Circle and the Project Lead Circle, oversee the overall steering and planning of S-CORE. diff --git a/docs/platform_management_plan/problem_resolution.rst b/docs/platform_management_plan/problem_resolution.rst index e8b5b29056..b7f77827ab 100644 --- a/docs/platform_management_plan/problem_resolution.rst +++ b/docs/platform_management_plan/problem_resolution.rst @@ -120,7 +120,7 @@ ISSUE using the Problem Template :ref:`prm_templates`. :need:`[[title]] ` is defined in the description part of the ISSUE using the Problem Template :ref:`prm_templates`. For S-CORE stakeholder use pre-defined labels -for Communities or Cross Functional Teams (Feature Owner) (under discussion, compare +for Communities or Feature Teams (Feature Owner) (under discussion, compare https://github.com/eclipse-score/score/issues/870) :need:`[[title]] ` is defined in the description part of the diff --git a/docs/platform_management_plan/project_management.rst b/docs/platform_management_plan/project_management.rst index 5ec4bc134b..06374343fe 100644 --- a/docs/platform_management_plan/project_management.rst +++ b/docs/platform_management_plan/project_management.rst @@ -84,17 +84,15 @@ Technical committees in order to achieve milestones on time. All important architectural decisions should be reported to the project as *Feature Request* to get the final approvement from the *Technical lead circle*. -* **Cross functional teams** +* **Feature Teams** - *Cross functional teams* are responsible for some piece - of work from the beginning (e.g. definition of the architecture) till the end - (e.g. integration tests) and are usually assigned to the *S-CORE* main integration project or to one particular software module. *Cross-functional teams* work independently from each other on *GitHub Issues* in the assigned software module. *Cross-functional teams* consist of the contributors, who can specify requirements, define architecture, develop source code and implement tests afterwards. *Project Leads* and *Committers* are also *Contributors* and effectively work on processing of *GitHub Issues*. + *Feature Teams* have end-to-end responsibility for specific functionalities. This includes all aspects beginning with the architecture definition to the integration test. They are usually assigned to the *S-CORE* main integration project or to one particular software module. *Feature Teams* work independently of each other on *GitHub Issues* in the assigned software module. *Feature Teams* consist of the contributors, who can specify requirements, define architecture, develop source code and implement tests afterwards. *Project Leads* and *Committers* are also *Contributors* and effectively work on processing of *GitHub Issues*. - *Cross-functional team* usually consists of the following roles: Project Lead, Safety Manager, Quality Manager, Security Manager, Committers and Contributors. Every *cross-functional* team has at least one committer who can approve and merge the Pull Requests of the Contributors. + *Feature Team* usually consists of the following roles: Project Lead, Safety Manager, Quality Manager, Security Manager, Committers and Contributors. Every *Feature Team* has at least one committer who can approve and merge the Pull Requests of the Contributors. - In case *Cross-functional team* needs to request a new repository, this can be done be extending the `otterdog configuration file `_ and creating a new PR, that should be approved by the *Eclipse Project Security Team*. + In case a *Feature Team* needs to request a new repository, this can be done be extending the `otterdog configuration file `_ and creating a new PR, that has to be approved by the *Eclipse Project Security Team*. - The *GitHub Discussions* for cross-functional teams can be found in the `Cross-functional teams section `_ of the main *S-CORE* project. + The *GitHub Discussions* for feature teams can be found in the `Feature Teams section `_ of the main *S-CORE* project. Meeting Structure ----------------- @@ -364,7 +362,7 @@ and gets assigned to one of the *Communities* for refinement. The state of the s :alt: Planning workflow :align: center -The members of the *Responsible Community* define or refine feature, process or tool requirements. They may also create feature architecture and high level component requirements for every involved software component. Depending on the feature scope, one of the cross-functional team can be requested to make a POC in the `incubation repository `_. Finally, *Responsible Community* does the break down of the corresponding *saga* to the tickets that can be assigned to the individual software modules or *communities*. +The members of the *Responsible Community* define or refine feature, process or tool requirements. They may also create feature architecture and high level component requirements for every involved software component. Depending on the feature scope, one of the feature team can be requested to make a POC in the `incubation repository `_. Finally, *Responsible Community* does the break down of the corresponding *saga* to the tickets that can be assigned to the individual software modules or *communities*. As most of the software modules will have their own separate repository, then the detailed tracking of their work will also happen inside of that repository. However, the corresponding saga of the S-CORE repository will still have a sub-issue of type epic, diff --git a/docs/process/process_areas/release_management/guidance/release_guideline.rst b/docs/process/process_areas/release_management/guidance/release_guideline.rst index 991094ce9e..a8803e1d61 100644 --- a/docs/process/process_areas/release_management/guidance/release_guideline.rst +++ b/docs/process/process_areas/release_management/guidance/release_guideline.rst @@ -38,7 +38,7 @@ Software Module Release 3. **Development and Testing**: - * According process, cross functional teams implement and test. + * According process, feature teams implement and test. * Check the :need:`wp__verification__module_ver_report` to ensure that all tests pass before proceeding to the release. * In case of failed test, evaluate and possibly justify their failure. diff --git a/docs/process/roles/index.rst b/docs/process/roles/index.rst index 5d703b594f..86a0ea6467 100644 --- a/docs/process/roles/index.rst +++ b/docs/process/roles/index.rst @@ -119,7 +119,7 @@ S-CORE development roles units. In this way the testing community takes a supportive role for unit testing -S-CORE cross functional teams +S-CORE feature teams ----------------------------- .. role:: Platform Team diff --git a/docs/score_releases/index.rst b/docs/score_releases/index.rst index 5a6fea54bd..4e525a9c1c 100644 --- a/docs/score_releases/index.rst +++ b/docs/score_releases/index.rst @@ -53,28 +53,28 @@ SW Module List - Q4 - _ - `inc_mw_com `_ - - `Communication CTF `_ + - `Communication CTF `_ * - Fixed Execution Order Framework (incl. Orchestrator) - Holger Grandy, Gerd Schäfer, Nico Hartmann, Sven Kappel, Thilo Schmitt - v0.5 - Q4 - _ - `inc_feo `_ - - `FEO CTF `_ + - `FEO CTF `_ * - Logging - Holger Grandy, Gerd Schäfer, Nico Hartmann - v0.5 - Q4 - _ - `inc_mw_log `_ - - `Logging CTF `_ + - `Logging CTF `_ * - Persistency - Gerd Schäfer, Nico Hartmann, Sven Kappel - v0.5 - Q4 - _ - `inc_mw_per `_ - - `Persistency CTF `_ + - `Persistency CTF `_ * - Integration Testing Framework - Holger Grandy - v0.5 From 11dbaf280df0087119127fbf4f95407813014230 Mon Sep 17 00:00:00 2001 From: Armin Bartsch Date: Fri, 9 May 2025 18:21:57 +0200 Subject: [PATCH 2/3] Adding rationale for fixed assignment of activities to threads. closes: none --- .../feo/_assets/example_task_chain.png | Bin 0 -> 21532 bytes .../example_task_chain_3_threads_dynamic.png | Bin 0 -> 43144 bytes ...example_task_chain_3_threads_optimized.png | Bin 0 -> 9356 bytes .../_assets/example_task_chain_5_threads.png | Bin 0 -> 12919 bytes docs/features/frameworks/feo/index.rst | 56 +++++++++++++++++- 5 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 docs/features/frameworks/feo/_assets/example_task_chain.png create mode 100644 docs/features/frameworks/feo/_assets/example_task_chain_3_threads_dynamic.png create mode 100644 docs/features/frameworks/feo/_assets/example_task_chain_3_threads_optimized.png create mode 100644 docs/features/frameworks/feo/_assets/example_task_chain_5_threads.png diff --git a/docs/features/frameworks/feo/_assets/example_task_chain.png b/docs/features/frameworks/feo/_assets/example_task_chain.png new file mode 100644 index 0000000000000000000000000000000000000000..808320b9e2f38a686cf89e7af5d674d8424eda1e GIT binary patch literal 21532 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 EUt^sA(EtDd literal 0 HcmV?d00001 diff --git a/docs/features/frameworks/feo/_assets/example_task_chain_3_threads_dynamic.png b/docs/features/frameworks/feo/_assets/example_task_chain_3_threads_dynamic.png new file mode 100644 index 0000000000000000000000000000000000000000..f42e0cef70ae8cc82669bd014e61c54296f042de GIT binary patch literal 43144 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 literal 0 HcmV?d00001 diff --git a/docs/features/frameworks/feo/_assets/example_task_chain_5_threads.png b/docs/features/frameworks/feo/_assets/example_task_chain_5_threads.png new file mode 100644 index 0000000000000000000000000000000000000000..00ced88baec54d27b5c8fdab90ec6b08a92ec01e GIT binary patch literal 12919 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 literal 0 HcmV?d00001 diff --git a/docs/features/frameworks/feo/index.rst b/docs/features/frameworks/feo/index.rst index f4a12691bc..6c459deead 100644 --- a/docs/features/frameworks/feo/index.rst +++ b/docs/features/frameworks/feo/index.rst @@ -184,8 +184,8 @@ Queuing of topics: * Queue enable and queue length are "runtime static" configuration settings -Process/Thread Mapping -====================== +Process/Thread/Activity Mapping +=============================== * An application consists of one or more processes * One of the processes is the primary process @@ -208,6 +208,50 @@ Process/Thread Mapping achieve Freedom From Interference for safety relevant applications +Static mapping of activities to threads +''''''''''''''''''''''''''''''''''''''' + +As pointed out above, FEO activities are required to be mapped to threads in a static way. +The rationale behind this requirement is: + +* Calling activity functions init(), step() and shutdown() from a single pre-defined thread + allows implementations to make use of thread-local optimizations such as thread-local variables. +* Calling an activity's step() function from different threads in different iterations of the + task chain may cause execution time jitter e.g. from unpredictable cache misses or different + properties of the processor cores the respective threads may be assigned to. +* Most importantly, a dynamic assignment of activities to threads may result in non-deterministic + variations of the task-chain execution time. + +To understand how a dynamic thread assignment can cause execution time variations, consider +the following example (sub-) task chain. + +|example_task_chain| + +Here, activity 6 depends on, i.e. must be executed after activities 1 to 5. The length of the bars +is intended to indicate the relative computation time needed by the respective activity on a +single processor core. It is assumed that all of these activities will be executed in the same process. + +In a simple approach, each of the activities 1 to 5 could be assigned to its own thread and +activity 6 could be executed subsequently in one of these threads as shown in the figure below. +Each blue "lane" indicates one thread. + +|example_task_chain_5_threads| + +If each thread runs on a separate core and execution is not interrupted by other tasks, the length of +the blue box is related to the total execution time of the task chain. + +Approximately the same total execution time can be achieved with only 3 threads (on three cores), if the +tasks are assigned in an optimized way: + +|example_task_chain_3_threads_optimized| + +If, on the other hand, activities are assigned to the same 3 threads in a dynamic way, the execution +time may vary unpredictably, because of the possibly varying execution sequence of activities, +as can be seen below. + +|example_task_chain_3_threads_dynamic| + + Lifecycle ========= @@ -383,3 +427,11 @@ timing of activities, supporting safety-critical applications in the automotive domain. In this domain the footprint of the framework is curcial especially w.r.t impact of computation load and latency. + +.. |example_task_chain| image:: _assets/example_task_chain.png + +.. |example_task_chain_5_threads| image:: _assets/example_task_chain_5_threads.png + +.. |example_task_chain_3_threads_optimized| image:: _assets/example_task_chain_3_threads_optimized.png + +.. |example_task_chain_3_threads_dynamic| image:: _assets/example_task_chain_3_threads_dynamic.png From ba464d50910389a6ea0bee99d98aba22d69e6ca1 Mon Sep 17 00:00:00 2001 From: sameer6989 Date: Mon, 12 May 2025 21:59:44 +0200 Subject: [PATCH 3/3] Add github actions linter Add workflow to lint github actions --- .github/actions/gitlint/Dockerfile | 1 + .github/actions/gitlint/action.yml | 5 ++--- .github/workflows/docs-cleanup.yml | 4 +++- .github/workflows/gitlint.yml | 2 +- .github/workflows/lint_actions.yml | 28 ++++++++++++++++++++++++++++ 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 .github/actions/gitlint/Dockerfile create mode 100644 .github/workflows/lint_actions.yml diff --git a/.github/actions/gitlint/Dockerfile b/.github/actions/gitlint/Dockerfile new file mode 100644 index 0000000000..42c4c3a4ca --- /dev/null +++ b/.github/actions/gitlint/Dockerfile @@ -0,0 +1 @@ +FROM jorisroovers/gitlint:0.19.1 diff --git a/.github/actions/gitlint/action.yml b/.github/actions/gitlint/action.yml index 418c504e4e..a5f1768baf 100644 --- a/.github/actions/gitlint/action.yml +++ b/.github/actions/gitlint/action.yml @@ -23,15 +23,14 @@ inputs: required: false runs: using: "docker" - image: "jorisroovers/gitlint:0.19.1" - entrypoint: /bin/sh + image: "Dockerfile" args: - -c - | git config --global --add safe.directory /github/workspace && \ git fetch origin +refs/heads/${{ inputs.base-branch }}:refs/remotes/origin/${{ inputs.base-branch }} && \ git fetch origin +refs/pull/${{ inputs.pr-number }}/head && \ - if ! gitlint --commits origin/${{ inputs.base-branch }}..HEAD; then \ + if ! gitlint --commits origin/${{ inputs.base-branch }}..HEAD --target=/github/workspace; then \ echo -e "\nWARNING: Your commit message does not follow the required format." && \ echo "Formatting rules: https://eclipse-score.github.io/score/main/contribute/general/git.html" && \ echo -e "To fix your commit message, run:\n" && \ diff --git a/.github/workflows/docs-cleanup.yml b/.github/workflows/docs-cleanup.yml index bea0498349..c02771e237 100644 --- a/.github/workflows/docs-cleanup.yml +++ b/.github/workflows/docs-cleanup.yml @@ -67,7 +67,9 @@ jobs: done # Remove versions.json entries without corresponding folders - jq '[.[] | select((.version | IN($folders[])))]' --argjson folders "$(ls -1 | jq -R -s -c 'split("\n")[:-1]')" versions_tmp.json > versions_tmp_clean.json + jq '[.[] | select((.version | IN($folders[])))]' \ + --argjson folders "$(find . -maxdepth 1 -mindepth 1 -type d -not -name '.*' -exec basename {} \; | jq -R -s -c 'split("\n")[:-1]')" \ + versions_tmp.json > versions_tmp_clean.json # Ensure "main" is the first entry and others sorted alphabetically jq '[.[] | select(.version != "main")] | sort_by(.version) | [{"version": "main", "url": "https://eclipse-score.github.io/score/main/"}] + .' versions_tmp_clean.json > versions.json diff --git a/.github/workflows/gitlint.yml b/.github/workflows/gitlint.yml index 01087a976a..54eab2c598 100644 --- a/.github/workflows/gitlint.yml +++ b/.github/workflows/gitlint.yml @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Run Gitlint Action diff --git a/.github/workflows/lint_actions.yml b/.github/workflows/lint_actions.yml new file mode 100644 index 0000000000..8374ff1353 --- /dev/null +++ b/.github/workflows/lint_actions.yml @@ -0,0 +1,28 @@ +# ******************************************************************************* +# Copyright (c) 2024 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 +# ******************************************************************************* + +name: YAML checks +on: + pull_request: + types: [opened, synchronize, reopened] + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Check github actions + uses: docker://rhysd/actionlint:latest + with: + args: -color