Never miss a backport again — automatic ABI checking for ROS 2 core repos (prototype ready)

Hi ROS community! :waving_hand:

Have you ever debugged a problem on Humble or Jazzy for hours… only to discover the fix already existed on rolling, but was never backported? :weary_face: You’re not alone — and I’d like to fix this systematically.

:confounded_face: The pain

In principle, all bug fixes should be backported to the supported downstream distributions — precisely because they are fixes. Today, however, this depends entirely on the maintainer’s manual effort and judgment, so backports happen on a need-to-do or requested basis rather than automatically and systematically.
One of the key blockers: it’s not always easy to tell whether a fix is ABI compatible with released distributions just by looking at the source code. This depends on developer skill and experience.
And too often, community developers hit a bug on a released distro, dig all the way down to the root cause, and only then find the fix was already merged to rolling — so they have to request the backport themselves. That’s wasted effort for everyone. :hourglass_not_done:

Making this automatic would save significant time for maintainers, developers, and users alike. Original discussion: ros2/rclcpp#2555

:sparkles: The prototype (working today!)

I built this as two GitHub Actions:

:wrench: libabigail-action — generic, repo-agnostic. Diffs two shared libraries with libabigail’s abidiff. Useful for any C/C++ project, not just ROS!

:robot: ros2-abi-action — the ROS-aware layer. For every PR it:

  • builds the package twice (target branch + PR head) in the matching distro container :building_construction:
  • runs the binary ABI diff
  • applies REP-0009 policy automatically: strict :cross_mark: for released distros, advisory :warning: for rolling
  • surfaces results as a sticky PR comment, ABI compatible :white_check_mark: / ABI break :collision: labels, and a pass/fail check

Maintainers can decide on backports at a glance. And the per-repo integration is a ~10-line workflow file, so rclcpp, rcl, rcutils, rmw and friends can all share the same setup. :tada:

:warning: Small print: an ABI compatible label is information, not an obligation to backport — behavioral changes can still surprise users even when ABI is intact. And this is binary ABI only; header templates/inlines still need human eyes. :eyes:

:folded_hands: I’d love your feedback

  1. Does this approach make sense for ROS 2 core repos? Concerns about CI cost or noise? :money_with_wings:
  2. Tooling: libabigail vs. the older abi-compliance-checker (used by industrial_ci / auto-abi-checker) — experiences? :hammer_and_wrench:
  3. Should we go further and wire the ABI compatible label into the Mergify backport flow? :repeat_button:
  4. Would community packages benefit from this as a shared reusable workflow too? :globe_showing_europe_africa:

Comments, use cases, and contributions all very welcome! :rocket:

Tomoya

7 Likes