From f1c19295c3b76db3e84b53476d5a895810aaafcd Mon Sep 17 00:00:00 2001 From: David Vadovszki Date: Thu, 30 Jul 2026 13:53:44 -0600 Subject: [PATCH 1/3] Move build tooling from Humble to Jazzy The cherry-pick onto jazzy-picknik carried the fork's build tooling over unchanged, so it still targeted Humble on Ubuntu 22.04. - Dockerfile: osrf/ros:humble-desktop-full -> jazzy-desktop-full, rmw-cyclonedds-cpp and setup.sh paths retargeted - entrypoint.sh: source /opt/ros/jazzy - CI + pre-commit: ubuntu-22.04 -> ubuntu-24.04, push trigger and the clang-tidy branch guard humble -> jazzy-picknik, setup-python 3.10 -> 3.12 to match Noble - README: state that this branch targets Jazzy Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Gv6KUgyufFTvcUgVhLFAGo --- .github/workflows/ci.yaml | 12 ++++++------ .github/workflows/pre-commit.yaml | 6 +++--- Dockerfile | 6 +++--- README.md | 2 +- entrypoint.sh | 2 +- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 2bf56247f..408dc8fa1 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -8,7 +8,7 @@ on: # Run when a commit is pushed to main push: branches: - - humble + - jazzy-picknik permissions: # Allow reading the source code @@ -19,7 +19,7 @@ permissions: jobs: build-ws: name: Build colcon workspace - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Checkout source uses: actions/checkout@v4 @@ -54,14 +54,14 @@ jobs: needs: # Ensure the test job runs after the build job finishes instead of attempting to run in parallel - build-ws - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 container: # Run on the Docker image we tagged and pushed to a private repo in the job above image: ghcr.io/picknikrobotics/fuse:${{ github.run_id }} steps: - name: Unit test workspace run: | - . /opt/ros/humble/setup.sh + . /opt/ros/jazzy/setup.sh . /colcon_ws/install/local_setup.sh colcon test --event-handlers console_direct+ --packages-select-regex fuse* working-directory: /colcon_ws @@ -74,12 +74,12 @@ jobs: working-directory: /colcon_ws clang_tidy: - if: github.ref != 'refs/heads/humble' + if: github.ref != 'refs/heads/jazzy-picknik' needs: # Ensure the test job runs after the build job finishes instead of attempting to run in parallel - build-ws name: clang-tidy - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 container: # Run on the Docker image we tagged and pushed to a private repo in the job above image: ghcr.io/picknikrobotics/fuse:${{ github.run_id }} diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 09a1197f8..0529d619c 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -7,17 +7,17 @@ on: pull_request: push: branches: - - humble + - jazzy-picknik jobs: pre-commit: name: Format - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: '3.10' + python-version: '3.12' - uses: pre-commit/action@v3.0.1 id: precommit - name: Upload pre-commit changes diff --git a/Dockerfile b/Dockerfile index d2117eb8b..1056308bd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Docker setup that's used for CI. -FROM osrf/ros:humble-desktop-full +FROM osrf/ros:jazzy-desktop-full SHELL ["/bin/bash", "-c"] @@ -13,7 +13,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ clang-tidy \ python3-vcstool \ # use cyclonedds instead of fastdds - ros-humble-rmw-cyclonedds-cpp + ros-jazzy-rmw-cyclonedds-cpp # Create the colcon ws. For now, copy the source files into the workspace # so that we don't have to deal with cloning this repo, which is private. @@ -24,7 +24,7 @@ WORKDIR /colcon_ws RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ --mount=type=cache,target=/var/lib/apt,sharing=locked \ apt-get update && apt-get upgrade -y && \ - . /opt/ros/humble/setup.sh && \ + . /opt/ros/jazzy/setup.sh && \ rosdep install --from-paths src -y --ignore-src && \ # tf2_2d testing build fails due to upstream tf2 changes, it seems colcon build --mixin compile-commands coverage-gcc coverage-pytest diff --git a/README.md b/README.md index ba29500da..2047aa5fb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Welcome to PickNik Robotics's fork of fuse! -This branch is for ROS Humble. +This branch is for ROS Jazzy. ## Getting Started diff --git a/entrypoint.sh b/entrypoint.sh index 5d7f28470..f593fcff1 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/bash -source /opt/ros/humble/setup.bash +source /opt/ros/jazzy/setup.bash if [ -f /colcon_ws/install/local_setup.bash ] then From f4887a7ae134d5e0c92536a340d776224b526ff8 Mon Sep 17 00:00:00 2001 From: David Vadovszki Date: Thu, 30 Jul 2026 14:01:34 -0600 Subject: [PATCH 2/3] Fix clang-format violations from the Jazzy replay The pre-commit clang-format hook (pinned at v14.0.6) failed on five files inherited by jazzy-picknik. fuse_variables/test/test_load_device_id.cpp: my conflict resolution during the replay hand-wrapped the UUID aggregate initializers. clang-format fills to the column limit instead, so the continuation lines were re-wrapped. fuse_core/{graph,message_buffer,timestamp_manager,transaction}.hpp: upstream jazzy's Boost 1.90 any_range workaround (locusrobotics/fuse#424) indents the guarded include; this fork's clang-format config wants it flush. Verified by running clang-format 14.0.6 over the whole tree: these five files are the complete set, no others drift. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Gv6KUgyufFTvcUgVhLFAGo --- fuse_core/include/fuse_core/graph.hpp | 2 +- .../include/fuse_core/message_buffer.hpp | 2 +- .../include/fuse_core/timestamp_manager.hpp | 2 +- fuse_core/include/fuse_core/transaction.hpp | 2 +- fuse_variables/test/test_load_device_id.cpp | 28 +++++++++---------- 5 files changed, 18 insertions(+), 18 deletions(-) diff --git a/fuse_core/include/fuse_core/graph.hpp b/fuse_core/include/fuse_core/graph.hpp index c9ecbe72c..3f2550b8f 100644 --- a/fuse_core/include/fuse_core/graph.hpp +++ b/fuse_core/include/fuse_core/graph.hpp @@ -50,7 +50,7 @@ // As a workaround, include the add_const.hpp header before any_range.hpp or any_iterator.hpp #include #if BOOST_VERSION >= 108800 && BOOST_VERSION < 109100 - #include +#include #endif #include #include diff --git a/fuse_core/include/fuse_core/message_buffer.hpp b/fuse_core/include/fuse_core/message_buffer.hpp index 7182334b4..142702009 100644 --- a/fuse_core/include/fuse_core/message_buffer.hpp +++ b/fuse_core/include/fuse_core/message_buffer.hpp @@ -41,7 +41,7 @@ // As a workaround, include the add_const.hpp header before any_range.hpp or any_iterator.hpp #include #if BOOST_VERSION >= 108800 && BOOST_VERSION < 109100 - #include +#include #endif #include #include diff --git a/fuse_core/include/fuse_core/timestamp_manager.hpp b/fuse_core/include/fuse_core/timestamp_manager.hpp index 32db01e50..ce48ef588 100644 --- a/fuse_core/include/fuse_core/timestamp_manager.hpp +++ b/fuse_core/include/fuse_core/timestamp_manager.hpp @@ -42,7 +42,7 @@ // As a workaround, include the add_const.hpp header before any_range.hpp or any_iterator.hpp #include #if BOOST_VERSION >= 108800 && BOOST_VERSION < 109100 - #include +#include #endif #include #include diff --git a/fuse_core/include/fuse_core/transaction.hpp b/fuse_core/include/fuse_core/transaction.hpp index 081d09d13..0d703017d 100644 --- a/fuse_core/include/fuse_core/transaction.hpp +++ b/fuse_core/include/fuse_core/transaction.hpp @@ -44,7 +44,7 @@ // As a workaround, include the add_const.hpp header before any_range.hpp or any_iterator.hpp #include #if BOOST_VERSION >= 108800 && BOOST_VERSION < 109100 - #include +#include #endif #include #include diff --git a/fuse_variables/test/test_load_device_id.cpp b/fuse_variables/test/test_load_device_id.cpp index 8f8732067..bcc6d729c 100644 --- a/fuse_variables/test/test_load_device_id.cpp +++ b/fuse_variables/test/test_load_device_id.cpp @@ -71,48 +71,48 @@ TEST_F(TestLoadDeviceId, LoadDeviceId) auto node = rclcpp::Node::make_shared("id1_node"); node->declare_parameter("device_id", std::string("01234567-89AB-CDEF-0123-456789ABCDEF")); fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF } }; + fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id2_node"); node->declare_parameter("device_id", std::string("01234567-89ab-cdef-0123-456789abcdef")); fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF } }; + fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id3_node"); node->declare_parameter("device_id", std::string("0123456789ABCDEF0123456789ABCDEF")); fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF } }; + fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id4_node"); node->declare_parameter("device_id", std::string("0123456789abcdef0123456789abcdef")); fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF } }; + fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id5_node"); node->declare_parameter("device_id", std::string("{01234567-89ab-cdef-0123-456789abcdef}")); fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF } }; + fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id6_node"); node->declare_parameter("device_id", std::string("{01234567-89AB-CDEF-0123-456789ABCDEF}")); fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, - 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF } }; + fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, + 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { @@ -124,8 +124,8 @@ TEST_F(TestLoadDeviceId, LoadDeviceId) auto node = rclcpp::Node::make_shared("name_node"); node->declare_parameter("device_name", std::string("Test")); fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x5B, 0x23, 0x43, 0x6D, 0x8E, 0x7C, 0x51, 0xCF, - 0x81, 0x62, 0x5C, 0xD5, 0xFD, 0x37, 0x9E, 0xCF } }; + fuse_core::UUID expected = { { 0x5B, 0x23, 0x43, 0x6D, 0x8E, 0x7C, 0x51, 0xCF, 0x81, 0x62, 0x5C, 0xD5, 0xFD, 0x37, + 0x9E, 0xCF } }; EXPECT_EQ(expected, actual); } { From a78388643183e7871394687e2b29d3827acf922c Mon Sep 17 00:00:00 2001 From: David Vadovszki Date: Thu, 30 Jul 2026 14:28:01 -0600 Subject: [PATCH 3/3] Satisfy misc-const-correctness in test_load_device_id.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit clang-tidy runs only on files a PR touches. Reformatting this file in the previous commit pulled it into scope for the first time, surfacing 17 pre-existing misc-const-correctness findings: the eight `actual`/`expected` UUID pairs and `ret` in main. These predate this branch — they came over with the Humble replay — but the job is blocking, so they are fixed here rather than deferred. Declarations only; no behavioural change. Re-ran clang-format 14.0.6 afterwards since the added `const` pushed the initializer wrapping. Verified: clean build (0 warnings) and 849 tests, 0 failures, unchanged. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01Gv6KUgyufFTvcUgVhLFAGo --- fuse_variables/test/test_load_device_id.cpp | 48 ++++++++++----------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/fuse_variables/test/test_load_device_id.cpp b/fuse_variables/test/test_load_device_id.cpp index bcc6d729c..be4c222ec 100644 --- a/fuse_variables/test/test_load_device_id.cpp +++ b/fuse_variables/test/test_load_device_id.cpp @@ -70,49 +70,49 @@ TEST_F(TestLoadDeviceId, LoadDeviceId) { auto node = rclcpp::Node::make_shared("id1_node"); node->declare_parameter("device_id", std::string("01234567-89AB-CDEF-0123-456789ABCDEF")); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, - 0xCD, 0xEF } }; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, + 0xAB, 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id2_node"); node->declare_parameter("device_id", std::string("01234567-89ab-cdef-0123-456789abcdef")); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, - 0xCD, 0xEF } }; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, + 0xAB, 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id3_node"); node->declare_parameter("device_id", std::string("0123456789ABCDEF0123456789ABCDEF")); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, - 0xCD, 0xEF } }; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, + 0xAB, 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id4_node"); node->declare_parameter("device_id", std::string("0123456789abcdef0123456789abcdef")); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, - 0xCD, 0xEF } }; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, + 0xAB, 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id5_node"); node->declare_parameter("device_id", std::string("{01234567-89ab-cdef-0123-456789abcdef}")); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, - 0xCD, 0xEF } }; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, + 0xAB, 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("id6_node"); node->declare_parameter("device_id", std::string("{01234567-89AB-CDEF-0123-456789ABCDEF}")); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, - 0xCD, 0xEF } }; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = { { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0x01, 0x23, 0x45, 0x67, 0x89, + 0xAB, 0xCD, 0xEF } }; EXPECT_EQ(expected, actual); } { @@ -123,16 +123,16 @@ TEST_F(TestLoadDeviceId, LoadDeviceId) { auto node = rclcpp::Node::make_shared("name_node"); node->declare_parameter("device_name", std::string("Test")); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = { { 0x5B, 0x23, 0x43, 0x6D, 0x8E, 0x7C, 0x51, 0xCF, 0x81, 0x62, 0x5C, 0xD5, 0xFD, 0x37, - 0x9E, 0xCF } }; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = { { 0x5B, 0x23, 0x43, 0x6D, 0x8E, 0x7C, 0x51, 0xCF, 0x81, 0x62, 0x5C, 0xD5, 0xFD, + 0x37, 0x9E, 0xCF } }; EXPECT_EQ(expected, actual); } { auto node = rclcpp::Node::make_shared("none_node"); node->declare_parameter("some_other_parameter", 1); - fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); - fuse_core::UUID expected = fuse_core::uuid::NIL; + const fuse_core::UUID actual = fuse_variables::loadDeviceId(*node); + const fuse_core::UUID expected = fuse_core::uuid::NIL; EXPECT_EQ(expected, actual); } } @@ -142,7 +142,7 @@ int main(int argc, char** argv) { rclcpp::init(argc, argv); testing::InitGoogleTest(&argc, argv); - int ret = RUN_ALL_TESTS(); + int const ret = RUN_ALL_TESTS(); rclcpp::shutdown(); return ret; }