fix(gateway): aggregate component /logs and /bulk-data from hosted apps' fqns #1265
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
| name: CI | |
| on: | |
| pull_request: | |
| branches: [main] | |
| push: | |
| branches: [main] | |
| jobs: | |
| build-and-test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - ros_distro: humble | |
| os_image: ubuntu:jammy | |
| - ros_distro: rolling | |
| os_image: ubuntu:noble | |
| container: | |
| image: ${{ matrix.os_image }} | |
| timeout-minutes: 60 | |
| defaults: | |
| run: | |
| shell: bash | |
| steps: | |
| - name: Install Git | |
| run: | | |
| apt-get update | |
| apt-get install -y git | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up ROS 2 ${{ matrix.ros_distro }} | |
| uses: ros-tooling/setup-ros@v0.7 | |
| with: | |
| required-ros-distributions: ${{ matrix.ros_distro }} | |
| - name: Install ccache | |
| run: apt-get install -y ccache | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: /root/.cache/ccache | |
| key: ccache-${{ matrix.ros_distro }}-${{ github.sha }} | |
| restore-keys: | | |
| ccache-${{ matrix.ros_distro }}- | |
| - name: Install dependencies | |
| run: | | |
| apt-get update | |
| apt-get install -y ros-${{ matrix.ros_distro }}-test-msgs | |
| if [ "${{ matrix.ros_distro }}" = "humble" ]; then | |
| apt-get install -y ros-humble-rmw-cyclonedds-cpp | |
| fi | |
| source /opt/ros/${{ matrix.ros_distro }}/setup.bash | |
| rosdep update | |
| # Linters (clang-tidy / clang-format) are gated to the Jazzy lint job | |
| # in quality.yml, but multiple package.xml files still list them as | |
| # <test_depend>. Their rosdep keys are not registered for noble | |
| # (Rolling), which breaks rosdep install on that runner. Skip them | |
| # on every distro this workflow targets - the linters never run here. | |
| rosdep install --from-paths src --ignore-src -y \ | |
| --skip-keys "ament_cmake_clang_tidy ament_cmake_clang_format" | |
| - name: Build packages | |
| env: | |
| CCACHE_DIR: /root/.cache/ccache | |
| CCACHE_MAXSIZE: 500M | |
| CCACHE_SLOPPINESS: pch_defines,time_macros | |
| run: | | |
| source /opt/ros/${{ matrix.ros_distro }}/setup.bash | |
| colcon build --symlink-install \ | |
| --packages-skip ros2_medkit_opcua \ | |
| --cmake-args -DCMAKE_BUILD_TYPE=Release \ | |
| --event-handlers console_direct+ | |
| ccache -s | |
| - name: Run unit and integration tests | |
| timeout-minutes: 15 | |
| env: | |
| # FastRTPS 2.6 on Humble has a known use-after-free in the | |
| # discovery-teardown path (EDP::unpairWriterProxy) that segfaults | |
| # peer nodes when the gateway shuts down, so we force CycloneDDS | |
| # there. Rolling + Jazzy ship a newer FastRTPS without that bug | |
| # and hit a separate iceoryx-shared-memory crash under CycloneDDS | |
| # during shutdown ("string capacity was zero for allocated data"), | |
| # so on those distros we keep the default FastRTPS. | |
| RMW_IMPLEMENTATION: ${{ matrix.ros_distro == 'humble' && 'rmw_cyclonedds_cpp' || '' }} | |
| run: | | |
| source /opt/ros/${{ matrix.ros_distro }}/setup.bash | |
| colcon test --return-code-on-test-failure \ | |
| --packages-skip ros2_medkit_opcua \ | |
| --ctest-args -LE linter \ | |
| --event-handlers console_direct+ | |
| - name: Show test results | |
| if: always() | |
| run: colcon test-result --verbose | |
| - name: Upload test results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test-results-${{ matrix.ros_distro }} | |
| path: | | |
| log/ | |
| build/*/test_results/ | |
| jazzy-build: | |
| runs-on: ubuntu-latest | |
| container: | |
| image: ubuntu:noble | |
| timeout-minutes: 60 | |
| defaults: | |
| run: | |
| shell: bash | |
| steps: | |
| - name: Install Git | |
| run: | | |
| apt-get update | |
| apt-get install -y git | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up ROS 2 Jazzy | |
| uses: ros-tooling/setup-ros@v0.7 | |
| with: | |
| required-ros-distributions: jazzy | |
| - name: Install ccache | |
| run: apt-get install -y ccache | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: /root/.cache/ccache | |
| key: ccache-jazzy-${{ github.sha }} | |
| restore-keys: | | |
| ccache-jazzy- | |
| - name: Install dependencies | |
| run: | | |
| apt-get update | |
| apt-get install -y ros-jazzy-test-msgs | |
| source /opt/ros/jazzy/setup.bash | |
| rosdep update | |
| rosdep install --from-paths src --ignore-src -y | |
| - name: Build packages | |
| env: | |
| CCACHE_DIR: /root/.cache/ccache | |
| CCACHE_MAXSIZE: 500M | |
| CCACHE_SLOPPINESS: pch_defines,time_macros | |
| run: | | |
| source /opt/ros/jazzy/setup.bash | |
| colcon build --symlink-install \ | |
| --packages-skip ros2_medkit_opcua \ | |
| --cmake-args -DCMAKE_BUILD_TYPE=Release \ | |
| --event-handlers console_direct+ | |
| ccache -s | |
| - name: Package build artifacts | |
| run: tar cf /tmp/jazzy-build.tar build/ install/ | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: jazzy-build | |
| path: /tmp/jazzy-build.tar | |
| retention-days: 1 | |
| jazzy-test: | |
| needs: jazzy-build | |
| runs-on: ubuntu-latest | |
| container: | |
| image: ubuntu:noble | |
| timeout-minutes: 45 | |
| defaults: | |
| run: | |
| shell: bash | |
| steps: | |
| - name: Install Git | |
| run: | | |
| apt-get update | |
| apt-get install -y git | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up ROS 2 Jazzy | |
| uses: ros-tooling/setup-ros@v0.7 | |
| with: | |
| required-ros-distributions: jazzy | |
| - name: Install dependencies | |
| run: | | |
| apt-get update | |
| apt-get install -y \ | |
| ros-jazzy-test-msgs \ | |
| ros-jazzy-rmw-cyclonedds-cpp | |
| source /opt/ros/jazzy/setup.bash | |
| rosdep update | |
| rosdep install --from-paths src --ignore-src -y | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: jazzy-build | |
| - name: Extract build artifacts | |
| run: tar xf jazzy-build.tar && rm jazzy-build.tar | |
| - name: Run unit and integration tests | |
| env: | |
| # FastRTPS has a known use-after-free in discovery-teardown that | |
| # can segfault peer nodes when another node (typically the gateway) | |
| # shuts down. CycloneDDS avoids it. | |
| RMW_IMPLEMENTATION: rmw_cyclonedds_cpp | |
| run: | | |
| source /opt/ros/jazzy/setup.bash | |
| colcon test --return-code-on-test-failure \ | |
| --packages-skip ros2_medkit_opcua \ | |
| --ctest-args -LE linter \ | |
| --event-handlers console_direct+ | |
| - name: Show test results | |
| if: always() | |
| run: colcon test-result --verbose | |
| - name: Upload test results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test-results-jazzy-test | |
| path: | | |
| log/ | |
| build/*/test_results/ | |
| coverage: | |
| runs-on: ubuntu-latest | |
| container: | |
| image: ubuntu:noble | |
| timeout-minutes: 45 | |
| defaults: | |
| run: | |
| shell: bash | |
| steps: | |
| - name: Install Git | |
| run: | | |
| apt-get update | |
| apt-get install -y git | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Set up ROS 2 Jazzy | |
| uses: ros-tooling/setup-ros@v0.7 | |
| with: | |
| required-ros-distributions: jazzy | |
| - name: Install ccache | |
| run: apt-get install -y ccache | |
| - name: Cache ccache | |
| uses: actions/cache@v4 | |
| with: | |
| path: /root/.cache/ccache | |
| key: ccache-coverage-${{ github.sha }} | |
| restore-keys: | | |
| ccache-coverage- | |
| - name: Install dependencies | |
| run: | | |
| apt-get update | |
| apt-get install -y lcov ros-jazzy-test-msgs | |
| source /opt/ros/jazzy/setup.bash | |
| rosdep update | |
| rosdep install --from-paths src --ignore-src -r -y | |
| - name: Build packages with coverage | |
| env: | |
| CCACHE_DIR: /root/.cache/ccache | |
| CCACHE_MAXSIZE: 500M | |
| CCACHE_SLOPPINESS: pch_defines,time_macros | |
| run: | | |
| source /opt/ros/jazzy/setup.bash | |
| colcon build --symlink-install \ | |
| --packages-skip ros2_medkit_opcua \ | |
| --cmake-args -DCMAKE_BUILD_TYPE=Debug -DENABLE_COVERAGE=ON \ | |
| --event-handlers console_direct+ | |
| ccache -s | |
| - name: Run unit and integration tests for coverage | |
| run: | | |
| source /opt/ros/jazzy/setup.bash | |
| colcon test \ | |
| --packages-skip ros2_medkit_opcua \ | |
| --ctest-args -LE linter \ | |
| --event-handlers console_direct+ | |
| - name: Generate coverage report | |
| run: | | |
| lcov --capture --directory build --output-file coverage.raw.info \ | |
| --ignore-errors mismatch,negative,empty,gcov | |
| if [ ! -s coverage.raw.info ] || ! grep -q 'SF:' coverage.raw.info; then | |
| echo "::error::No valid coverage data found in coverage.raw.info" | |
| exit 1 | |
| fi | |
| lcov --extract coverage.raw.info \ | |
| '*/ros2_medkit/src/*/src/*' \ | |
| '*/ros2_medkit/src/*/include/*' \ | |
| --output-file coverage.extracted.info \ | |
| --ignore-errors unused,empty | |
| lcov --remove coverage.extracted.info \ | |
| '*/vendored/*' \ | |
| --output-file coverage.info \ | |
| --ignore-errors unused,empty | |
| if [ ! -s coverage.info ]; then | |
| echo "::error::Filtered coverage.info is empty - no source files matched" | |
| exit 1 | |
| fi | |
| lcov --list coverage.info | |
| genhtml coverage.info --output-directory coverage_html --ignore-errors source | |
| - name: Upload coverage HTML report as artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: coverage-report | |
| path: coverage_html/ | |
| - name: Upload coverage to Codecov | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| files: coverage.info | |
| flags: unittests,integration | |
| name: ros2_medkit-coverage | |
| fail_ci_if_error: true | |
| verbose: true | |
| notify-demos: | |
| needs: [jazzy-test] | |
| if: >- | |
| github.event_name == 'push' && | |
| github.ref == 'refs/heads/main' && | |
| needs.jazzy-test.result == 'success' | |
| runs-on: ubuntu-latest | |
| # Only Jazzy gates the dispatch. Humble failures do not block demos CI - intentional tradeoff. | |
| permissions: {} | |
| steps: | |
| - name: Trigger selfpatch_demos CI | |
| uses: peter-evans/repository-dispatch@v4 | |
| with: | |
| token: ${{ secrets.DEMOS_DISPATCH_TOKEN }} | |
| repository: selfpatch/selfpatch_demos | |
| event-type: ros2_medkit_updated | |
| client-payload: '{"sha":"${{ github.sha }}","run_url":"${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"}' |