Skip to content

Add CI Workflow - #71

Merged
cole-wilson merged 23 commits into
andy/nixfrom
cole/ci
Aug 31, 2026
Merged

Add CI Workflow#71
cole-wilson merged 23 commits into
andy/nixfrom
cole/ci

Conversation

@cole-wilson

Copy link
Copy Markdown
Member

No description provided.

@cole-wilson
cole-wilson marked this pull request as draft August 30, 2026 09:08
@cole-wilson
cole-wilson marked this pull request as ready for review August 31, 2026 04:23
github-actions[bot]

This comment was marked as outdated.

@github-actions
github-actions Bot dismissed their stale review August 31, 2026 05:14

outdated suggestion

github-actions[bot]

This comment was marked as outdated.

@github-actions
github-actions Bot dismissed their stale review August 31, 2026 05:16

outdated suggestion

github-actions[bot]

This comment was marked as outdated.

@github-actions
github-actions Bot dismissed their stale review August 31, 2026 05:18

outdated suggestion

github-actions[bot]

This comment was marked as outdated.

@github-actions
github-actions Bot dismissed their stale review August 31, 2026 05:29

outdated suggestion

github-actions[bot]

This comment was marked as outdated.

@palouse-robosub palouse-robosub deleted a comment from github-actions Bot Aug 31, 2026
@github-actions
github-actions Bot dismissed their stale review August 31, 2026 05:55

outdated suggestion

@github-actions

Copy link
Copy Markdown

Cpp-Linter Report ⚠️

Some files did not pass the configured checks!

clang-tidy (v21.1.8) reports: 32 concern(s)
  • src/guppy_can/src/can_rx.cpp:82:9: warning: [clang-analyzer-security.insecureAPI.strcpy]

    Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119

       82 |         std::strcpy(ifr.ifr_name, can_net);
          |         ^~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:82:9: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
       82 |         std::strcpy(ifr.ifr_name, can_net);
          |         ^~~~~~~~~~~
  • src/guppy_can/src/can_rx.cpp:155:32: warning: [clang-analyzer-unix.BlockInCriticalSection]

    Call to blocking function 'read' inside of critical section

      155 |             const int nbytes = read(sock_, &frame, sizeof(can_frame));
          |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:152:9: note: Loop condition is true.  Entering loop body
      152 |         while (running_.load()) {
          |         ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:158:17: note: Assuming 'nbytes' is >= 0
      158 |             if (nbytes < 0) {
          |                 ^~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:158:13: note: Taking false branch
      158 |             if (nbytes < 0) {
          |             ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:166:17: note: Assuming the condition is false
      166 |             if (frame.can_id & CAN_ID_BIT_MASK)
          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:166:13: note: Taking false branch
      166 |             if (frame.can_id & CAN_ID_BIT_MASK)
          |             ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:169:13: note: Taking true branch
      169 |             if (int idx = check_id(frame.can_id); idx != -1) {
          |             ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:170:17: note: Calling 'CanRx::publish_bytes'
      170 |                 publish_bytes(idx, frame.data, frame.can_dlc);
          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:115:9: note: Calling 'Publisher::publish'
      115 |         publishers_[idx]->publish(frame);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:299:9: note: Assuming field 'intra_process_is_enabled_' is true
      299 |     if (!intra_process_is_enabled_) {
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:299:5: note: Taking false branch
      299 |     if (!intra_process_is_enabled_) {
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:307:5: note: Calling 'Publisher::publish'
      307 |     this->publish(std::move(unique_msg));
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:244:10: note: Field 'intra_process_is_enabled_' is true
      244 |     if (!intra_process_is_enabled_) {
          |          ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:244:5: note: Taking false branch
      244 |     if (!intra_process_is_enabled_) {
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:259:7: note: Assuming the condition is false
      259 |       get_subscription_count() > get_intra_process_subscription_count() || buffer_;
          |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:259:7: note: Left side of '||' is false
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:261:9: note: 'inter_process_publish_needed' is false
      261 |     if (inter_process_publish_needed) {
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:261:5: note: Taking false branch
      261 |     if (inter_process_publish_needed) {
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:269:7: note: Taking false branch
      269 |       if (buffer_) {
          |       ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:274:9: note: Calling 'Publisher::do_intra_process_ros_message_publish'
      274 |         this->do_intra_process_ros_message_publish(std::move(msg));
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:537:16: note: Entering critical section here
      537 |     auto ipm = weak_ipm_.lock();
          |                ^~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:538:5: note: Taking false branch
      538 |     if (!ipm) {
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:542:9: note: Assuming the condition is false
      542 |     if (!msg) {
          |         ^~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:542:5: note: Taking false branch
      542 |     if (!msg) {
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:274:9: note: Returning from 'Publisher::do_intra_process_ros_message_publish'
      274 |         this->do_intra_process_ros_message_publish(std::move(msg));
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/publisher.hpp:307:5: note: Returning from 'Publisher::publish'
      307 |     this->publish(std::move(unique_msg));
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:115:9: note: Returning from 'Publisher::publish'
      115 |         publishers_[idx]->publish(frame);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:117:9: note: Assuming 'g_rcutils_logging_initialized' is true
      117 |         RCLCPP_DEBUG(this->get_logger(), "0x%03X [%d] ", ids_[idx], len);
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
       99 |       (logger).get_name(), \
          |       ~~~~~~~~~~~~~~~~~~~~~~
      100 |       __VA_ARGS__); \
          |       ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~
      263 |     RCUTILS_LOG_SEVERITY_DEBUG, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      264 |     RCUTILS_LOG_CONDITION_EMPTY, RCUTILS_LOG_CONDITION_EMPTY, name, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      265 |     __VA_ARGS__)
          |     ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:77:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       77 |     RCUTILS_LOGGING_AUTOINIT; \
          |     ^~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:561:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT'
      561 |   RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR(rcutils_get_default_allocator())
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:571:26: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR'
      571 |     if (RCUTILS_UNLIKELY(!g_rcutils_logging_initialized)) { \
          |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/macros.h:133:48: note: expanded from macro 'RCUTILS_UNLIKELY'
      133 | # define RCUTILS_UNLIKELY(x) __builtin_expect((x), 0)
          |                                                ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:117:9: note: Taking false branch
      117 |         RCLCPP_DEBUG(this->get_logger(), "0x%03X [%d] ", ids_[idx], len);
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:77:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       77 |     RCUTILS_LOGGING_AUTOINIT; \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:561:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT'
      561 |   RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR(rcutils_get_default_allocator())
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:571:5: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR'
      571 |     if (RCUTILS_UNLIKELY(!g_rcutils_logging_initialized)) { \
          |     ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:117:9: note: Loop condition is false.  Exiting loop
      117 |         RCLCPP_DEBUG(this->get_logger(), "0x%03X [%d] ", ids_[idx], len);
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:77:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       77 |     RCUTILS_LOGGING_AUTOINIT; \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:561:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT'
      561 |   RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR(rcutils_get_default_allocator())
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:570:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR'
      570 |   do { \
          |   ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:117:9: note: Assuming the condition is false
      117 |         RCLCPP_DEBUG(this->get_logger(), "0x%03X [%d] ", ids_[idx], len);
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
       99 |       (logger).get_name(), \
          |       ~~~~~~~~~~~~~~~~~~~~~~
      100 |       __VA_ARGS__); \
          |       ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~
      263 |     RCUTILS_LOG_SEVERITY_DEBUG, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      264 |     RCUTILS_LOG_CONDITION_EMPTY, RCUTILS_LOG_CONDITION_EMPTY, name, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      265 |     __VA_ARGS__)
          |     ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:79:9: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       79 |     if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:117:9: note: Taking false branch
      117 |         RCLCPP_DEBUG(this->get_logger(), "0x%03X [%d] ", ids_[idx], len);
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:79:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       79 |     if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
          |     ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:117:9: note: Loop condition is false.  Exiting loop
      117 |         RCLCPP_DEBUG(this->get_logger(), "0x%03X [%d] ", ids_[idx], len);
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:76:3: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       76 |   do { \
          |   ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:117:9: note: Loop condition is false.  Exiting loop
      117 |         RCLCPP_DEBUG(this->get_logger(), "0x%03X [%d] ", ids_[idx], len);
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:93:3: note: expanded from macro 'RCLCPP_DEBUG'
       93 |   do { \
          |   ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:118:25: note: Assuming 'i' is >= 'len'
      118 |         for (int i = 0; i < len; i++)
          |                         ^~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:118:9: note: Loop condition is false. Execution continues on line 120
      118 |         for (int i = 0; i < len; i++)
          |         ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:120:9: note: Assuming 'g_rcutils_logging_initialized' is true
      120 |         RCLCPP_DEBUG(this->get_logger(), "\r\n");
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
       99 |       (logger).get_name(), \
          |       ~~~~~~~~~~~~~~~~~~~~~~
      100 |       __VA_ARGS__); \
          |       ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~
      263 |     RCUTILS_LOG_SEVERITY_DEBUG, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      264 |     RCUTILS_LOG_CONDITION_EMPTY, RCUTILS_LOG_CONDITION_EMPTY, name, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      265 |     __VA_ARGS__)
          |     ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:77:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       77 |     RCUTILS_LOGGING_AUTOINIT; \
          |     ^~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:561:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT'
      561 |   RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR(rcutils_get_default_allocator())
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:571:26: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR'
      571 |     if (RCUTILS_UNLIKELY(!g_rcutils_logging_initialized)) { \
          |                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/macros.h:133:48: note: expanded from macro 'RCUTILS_UNLIKELY'
      133 | # define RCUTILS_UNLIKELY(x) __builtin_expect((x), 0)
          |                                                ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:120:9: note: Taking false branch
      120 |         RCLCPP_DEBUG(this->get_logger(), "\r\n");
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:77:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       77 |     RCUTILS_LOGGING_AUTOINIT; \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:561:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT'
      561 |   RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR(rcutils_get_default_allocator())
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:571:5: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR'
      571 |     if (RCUTILS_UNLIKELY(!g_rcutils_logging_initialized)) { \
          |     ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:120:9: note: Loop condition is false.  Exiting loop
      120 |         RCLCPP_DEBUG(this->get_logger(), "\r\n");
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:77:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       77 |     RCUTILS_LOGGING_AUTOINIT; \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:561:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT'
      561 |   RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR(rcutils_get_default_allocator())
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging.h:570:3: note: expanded from macro 'RCUTILS_LOGGING_AUTOINIT_WITH_ALLOCATOR'
      570 |   do { \
          |   ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:120:9: note: Assuming the condition is false
      120 |         RCLCPP_DEBUG(this->get_logger(), "\r\n");
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
       99 |       (logger).get_name(), \
          |       ~~~~~~~~~~~~~~~~~~~~~~
      100 |       __VA_ARGS__); \
          |       ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^~~~~~~~~~~~~~~~~~~~~~~~~
      263 |     RCUTILS_LOG_SEVERITY_DEBUG, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      264 |     RCUTILS_LOG_CONDITION_EMPTY, RCUTILS_LOG_CONDITION_EMPTY, name, \
          |     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      265 |     __VA_ARGS__)
          |     ~~~~~~~~~~~~
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:79:9: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       79 |     if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:120:9: note: Taking false branch
      120 |         RCLCPP_DEBUG(this->get_logger(), "\r\n");
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:79:5: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       79 |     if (rcutils_logging_logger_is_enabled_for(name, severity)) { \
          |     ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:120:9: note: Loop condition is false.  Exiting loop
      120 |         RCLCPP_DEBUG(this->get_logger(), "\r\n");
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:98:5: note: expanded from macro 'RCLCPP_DEBUG'
       98 |     RCUTILS_LOG_DEBUG_NAMED( \
          |     ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:262:3: note: expanded from macro 'RCUTILS_LOG_DEBUG_NAMED'
      262 |   RCUTILS_LOG_COND_NAMED( \
          |   ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rcutils/rcutils/logging_macros.h:76:3: note: expanded from macro 'RCUTILS_LOG_COND_NAMED'
       76 |   do { \
          |   ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:120:9: note: Loop condition is false.  Exiting loop
      120 |         RCLCPP_DEBUG(this->get_logger(), "\r\n");
          |         ^
    /nix/store/72wpms9v9as0ssnkc3g2jk63ydkq1pgs-ros-env/include/rclcpp/rclcpp/logging.hpp:93:3: note: expanded from macro 'RCLCPP_DEBUG'
       93 |   do { \
          |   ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:170:17: note: Returning from 'CanRx::publish_bytes'
      170 |                 publish_bytes(idx, frame.data, frame.can_dlc);
          |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:152:9: note: Loop condition is true.  Entering loop body
      152 |         while (running_.load()) {
          |         ^
    /home/runner/work/guppy/guppy/src/guppy_can/src/can_rx.cpp:155:32: note: Call to blocking function 'read' inside of critical section
      155 |             const int nbytes = read(sock_, &frame, sizeof(can_frame));
          |                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • src/guppy_control/include/guppy_control/chassis_controller.hpp:18:10: error: [clang-diagnostic-error]

    'control_toolbox/control_toolbox/pid.hpp' file not found

       18 | #include <control_toolbox/control_toolbox/pid.hpp>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • src/guppy_control/src/t200_interface.cpp:11:5: warning: [clang-analyzer-security.insecureAPI.strcpy]

    Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119

       11 |     std::strcpy(ifr.ifr_name, can_interface_.c_str());
          |     ^~~~~~~~~~~
    /home/runner/work/guppy/guppy/src/guppy_control/src/t200_interface.cpp:11:5: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119
       11 |     std::strcpy(ifr.ifr_name, can_interface_.c_str());
          |     ^~~~~~~~~~~
  • src/guppy_localization/src/combine.cpp:45:70: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'request'

       45 |             [&](const std::shared_ptr<std_srvs::srv::Empty::Request> request,
          |                                                                      ^
  • src/guppy_localization/src/combine.cpp:46:70: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'response'

       46 |                 std::shared_ptr<std_srvs::srv::Empty::Response>      response) {
          |                                                                      ^
  • src/guppy_nav/include/guppy_nav/face_detection_behavior.hpp:66:58: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'wrapped'

       66 |     BT::NodeStatus onResultReceived(const WrappedResult& wrapped) override {
          |                                                          ^
  • src/guppy_nav/include/guppy_nav/face_detection_behavior.hpp:85:20: warning: [clang-diagnostic-inconsistent-missing-override]

    'onFeedback' overrides a member function but is not marked 'override'

       85 |     BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> feedback) {
          |                    ^
    /home/runner/work/guppy/guppy/install/behaviortree_ros2/include/behaviortree_ros2/bt_action_node.hpp:154:26: note: overridden virtual function is here
      154 |   virtual BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> /*feedback*/)
          |                          ^
  • src/guppy_nav/include/guppy_nav/face_detection_behavior.hpp:85:69: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'feedback'

       85 |     BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> feedback) {
          |                                                                     ^
  • src/guppy_nav/include/guppy_nav/move_toward_behavior.hpp:41:27: warning: [clang-diagnostic-sign-compare]

    comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long')

       41 |         for (int i = 0; i < detection.corners.size(); i++) {
          |                         ~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~
  • src/guppy_nav/include/guppy_nav/move_toward_behavior.hpp:42:35: warning: [clang-diagnostic-sign-compare]

    comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long')

       42 |             for (int j = i + 1; j < detection.corners.size(); j++) {
          |                                 ~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~
  • src/guppy_nav/include/guppy_nav/move_toward_behavior.hpp:90:58: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'wrapped'

       90 |     BT::NodeStatus onResultReceived(const WrappedResult& wrapped) override {
          |                                                          ^
  • src/guppy_nav/include/guppy_nav/move_toward_behavior.hpp:109:20: warning: [clang-diagnostic-inconsistent-missing-override]

    'onFeedback' overrides a member function but is not marked 'override'

      109 |     BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> feedback) {
          |                    ^
    /home/runner/work/guppy/guppy/install/behaviortree_ros2/include/behaviortree_ros2/bt_action_node.hpp:154:26: note: overridden virtual function is here
      154 |   virtual BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> /*feedback*/)
          |                          ^
  • src/guppy_nav/include/guppy_nav/move_toward_behavior.hpp:109:69: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'feedback'

      109 |     BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> feedback) {
          |                                                                     ^
  • src/guppy_nav/include/guppy_nav/pose_setter_behavior.hpp:78:20: warning: [clang-diagnostic-inconsistent-missing-override]

    'onFeedback' overrides a member function but is not marked 'override'

       78 |     BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> feedback) {
          |                    ^
    /home/runner/work/guppy/guppy/install/behaviortree_ros2/include/behaviortree_ros2/bt_action_node.hpp:154:26: note: overridden virtual function is here
      154 |   virtual BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> /*feedback*/)
          |                          ^
  • src/guppy_nav/include/guppy_nav/pose_setter_behavior.hpp:78:69: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'feedback'

       78 |     BT::NodeStatus onFeedback(const std::shared_ptr<const Feedback> feedback) {
          |                                                                     ^
  • src/guppy_nav/src/navigate_action_server.cpp:8:10: error: [clang-diagnostic-error]

    'rclcpp_components/register_node_macro.hpp' file not found

        8 | #include <rclcpp_components/register_node_macro.hpp>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • src/guppy_state/src/state_manager.cpp:106:5: warning: [clang-diagnostic-return-type]

    non-void function does not return a value in all control paths

      106 |     }
          |     ^
  • src/guppy_vision/src/camera_manager.cpp:22:15: warning: [clang-diagnostic-unused-variable]

    unused variable 'nodeMap'

       22 |     INodeMap& nodeMap = pCam->GetNodeMap();
          |               ^~~~~~~
  • src/guppy_vision/src/camera_manager.cpp:57:9: warning: [clang-diagnostic-unused-variable]

    unused variable 'result'

       57 |     int result = 0;
          |         ^~~~~~
  • src/guppy_vision/src/camera_manager.cpp:100:14: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'argc'

      100 | int main(int argc, char* argv[]) {
          |              ^
  • src/guppy_vision/src/camera_manager.cpp:100:26: warning: [clang-diagnostic-unused-parameter]

    unused parameter 'argv'

      100 | int main(int argc, char* argv[]) {
          |                          ^
  • src/guppy_vision/src/camera_pub.cpp:22:7: warning: [clang-diagnostic-c]

    designated initializers are a C++20 extension

       22 |     { .serial = "17473425", .position = "fl" },
          |       ^
  • src/guppy_vision/src/camera_pub.cpp:23:7: warning: [clang-diagnostic-c]

    designated initializers are a C++20 extension

       23 |     { .serial = "17473424", .position = "fr" },
          |       ^
  • src/guppy_vision/src/camera_pub.cpp:24:7: warning: [clang-diagnostic-c]

    designated initializers are a C++20 extension

       24 |     { .serial = "14406636", .position = "d"  },
          |       ^
  • src/guppy_vision/src/camera_pub.cpp:25:7: warning: [clang-diagnostic-c]

    designated initializers are a C++20 extension

       25 |     { .serial = "14406334", .position = "rl" },
          |       ^
  • src/guppy_vision/src/camera_pub.cpp:26:7: warning: [clang-diagnostic-c]

    designated initializers are a C++20 extension

       26 |     { .serial = "14406637", .position = "rr" },
          |       ^
  • src/guppy_vision/src/camera_pub.cpp:27:7: warning: [clang-diagnostic-c]

    designated initializers are a C++20 extension

       27 |     { .serial = "20188596", .position = "cl" },
          |       ^
  • src/guppy_vision/src/camera_pub.cpp:28:7: warning: [clang-diagnostic-c]

    designated initializers are a C++20 extension

       28 |     { .serial = "20188587", .position = "cr" },
          |       ^
  • src/guppy_vision/src/pnp.cpp:44:41: warning: [clang-diagnostic-sign-compare]

    comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long')

       44 |         for (int result_i = 0; result_i < msg->detections.size(); result_i++) {
          |                                ~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~
  • src/guppy_vision/src/pnp.cpp:49:30: warning: [clang-diagnostic-sign-compare]

    comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long')

       49 |                  dimension_i < detection.dimension_points.size();
          |                  ~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  • src/guppy_vision/src/pnp.cpp:56:45: warning: [clang-diagnostic-sign-compare]

    comparison of integers of different signs: 'int' and 'size_type' (aka 'unsigned long')

       56 |             for (int corner_i = 0; corner_i < detection.corners.size();
          |                                    ~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~

Have any feedback or feature suggestions? Share it here.

@cole-wilson
cole-wilson merged commit 44b1e47 into main Aug 31, 2026
4 of 6 checks passed
An error occurred while trying to automatically change base from andy/nix to main August 31, 2026 06:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants