Skip to content

ABI/API Compliance Checker in github workflow #2555

Open

Description

@fujitatomoya

Feature request

Feature description

Integrate ABI/API compliance checker in github workflow to check ABI compatibility for every PR to see if the fix can be backported automatically with label.

Background

In principle, all bug fixes should be backported to the supported downstream distributions, precisely because they are fixes. Today, however, this backport decision and process depends entirely on the maintainer's manual effort and judgment, so it happens on a need-to-do or requested basis rather than automatically and systematically. (we can find comments requesting or asking for the backport to released distribution.)
One of the key blockers is that it is not always easy to tell whether a fix is ABI compatible with the released distributions. Currently, for every PR, we (developers and maintainers) check the ABI compatibility by looking at the source code, but sometimes it is hard to tell for sure, and this depends on the developer's skill and experience. (I personally run ABI compliance checker to make sure for this.)
We can also see cases where community developers hit a problem on a released distribution, spend time debugging it down to the root cause, and only then discover that the fix already exists on the rolling/development branch but was never backported. They then have to request the backport themselves. This is a waste of effort for everyone involved.
To avoid this burden and keep the high quality of ROS distributions, it would be nice to have an ABI compliance checker automatically run against every PR, so that we can know whether the fix is ABI compatible via a tag or label provided by the workflow. Making this process more automatic and systematic would save significant time for maintainers, developers, and users alike.

Note

This ABI Compatible or Backport-able tag is an additional information for maintainers, says this does not mean we have to backport the fix to already released distros.
Although ABI is compatible, different behavior or significant different user-experience should be avoided breaking the user space.

https://github.com/ros-industrial/industrial_ci/tree/masterv and https://github.com/osrf/auto-abi-checker/tree/master are similar approach against this issue, but they use https://github.com/lvc/abi-compliance-checker that is out dated for a long time. i would suggest we can rely on https://sourceware.org/libabigail/ that looks well maintained and supported.

Implementation considerations

  • we can integrate https://sourceware.org/libabigail/ to github workflow. (or any other tools or recommendation?)
  • build target branch and PR branch or repo to check the ABI compatibility for every commits.
  • new label ABI compatible needs to be introduced and tagged by workflow.

I am creating this issue on rclcpp (because that is where i can find this situation most.) but the following core repositories can have the same ABI checker CI.

flowchart TD
    A[PR / Every Commit] -->|workflow| B[ABI Compliance Check]
    B --> C{ABI Compatible?}
    C -->|Yes| D[Tag / Label]
    D --> E[Code Review]
    C -->|No / Not Required| E[Code Review / Approval]
    C -->|ABI Compatible Required?| A[PR / Every Commit]
    E -->|Mergifyio| F[Backport Process]
Loading

after all, i think this will do some good for ROS users, developers and maintainers to accelerate the development process and ROS quality.

Tomoya,

Activity

  1. ros-discourse commented on Jun 8, 2024

    @ros-discourse

    This issue has been mentioned on ROS Discourse. There might be relevant details there:

    https://discourse.ros.org/t/abi-api-compliance-checker-in-github-workflow/38141/1

  2. clalancette commented on Jun 11, 2024

    @clalancette
    Contributor

    I think that this is a good idea, though we'll have to be careful with it. In particular, in rolling we allow ABI breaks at any time, while the released distributions don't allow ABI breaks. We'll have to have configuration for that.

    In addition, we have some ABI testing already available on the ROS buildfarm, though we haven't tested or enabled it since Galactic. In particular, on your rosdistro repositories, you can add test_abi: true, which will do...something (see https://github.com/ros/rosdistro/blob/73d2581901d80429f1c9e371d2bf5de500d1d7dd/foxy/distribution.yaml#L4628). So I think we should start by seeing what happens if we enable that (also, maybe @j-rivero , @nuclearsandwich , or @cottsay can shed some light on what that does, if anything).

  3. fujitatomoya commented on May 29, 2026

    @fujitatomoya
    CollaboratorAuthor

    https://github.com/ros-industrial/industrial_ci/tree/masterv and https://github.com/osrf/auto-abi-checker/tree/master are similar approach against this issue, but they use https://github.com/lvc/abi-compliance-checker that is out dated for a long time. i would suggest we can rely on https://sourceware.org/libabigail/ that looks well maintained and supported.

  4. fujitatomoya commented on Aug 16, 2026

    @fujitatomoya
    CollaboratorAuthor

    i have developed PoC actions,

    see how it works,

    more verification is required.

  5. self-assigned this
    on Aug 18, 2026
  6. fujitatomoya commented on Oct 14, 2026

    @fujitatomoya
    CollaboratorAuthor

    development log.

    the abi compliance checker is now online for rolling, the followings are the related PRs.

    Note

    if we want to backport the action to detect ABI compliance, we need to backport the above PR except tagging the backport labeling.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions