Skip to content

Commit e47c084

Browse files
authored
enable ABI compatibility action check. (#3262)
* enable ABI compatibility action check. Signed-off-by: Tomoya.Fujita <fujita.tomoya@triorb.co.jp> * adjust the build mode into source build, since this requires core changes. Signed-off-by: Tomoya.Fujita <fujita.tomoya@triorb.co.jp> * chore: retrigger CI Signed-off-by: Tomoya.Fujita <fujita.tomoya@triorb.co.jp> --------- Signed-off-by: Tomoya.Fujita <fujita.tomoya@triorb.co.jp>
1 parent 2e5a8b9 commit e47c084

1 file changed

Lines changed: 65 additions & 0 deletions

File tree

.github/workflows/abi.yaml

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# This workflow checks ABI compatibility of the shared libraries built from
2+
# this repository on every PR:
3+
#
4+
# - librclcpp.so (rclcpp)
5+
# - librclcpp_action.so (rclcpp_action)
6+
# - libcomponent_manager.so (rclcpp_components)
7+
# - librclcpp_lifecycle.so (rclcpp_lifecycle)
8+
#
9+
# It uses the reusable ros2-abi-action workflow, which:
10+
# 1. resolves the ROS 2 distro from the PR's target branch (rolling/lyrical/kilted/jazzy/humble),
11+
# 2. builds all listed packages twice (once against the target branch, once
12+
# against the PR head) with -g -Og so DWARF debug info is present; a single
13+
# colcon invocation builds the union of the dependency closures exactly once,
14+
# 3. with build-mode: source, imports the distro's ros2.repos and builds
15+
# against today's source tree instead of the released binaries; this is
16+
# required for core repositories like rclcpp, whose dependencies (rcl,
17+
# rmw, ...) are usually ahead of the released Debian packages. The
18+
# incremental strategy starts from the nightly source-built underlay
19+
# image (ros-abi:<distro>-source) and recompiles only what moved since,
20+
# 4. expands the soname glob and delegates the binary ABI diff to
21+
# fujitatomoya/libabigail-action (abidiff), one job per library,
22+
# 5. applies REP-0009 policy automatically: released distros (humble/jazzy/kilted/lyrical)
23+
# fail on an incompatible ABI break, rolling is advisory only,
24+
# 6. surfaces per-library verdicts as sticky PR comments, labels, and a pass/fail check.
25+
#
26+
# Paired changes in other repositories (e.g. an rcl PR this PR depends on) are
27+
# declared by the PR author in the PR description and applied to the PR side
28+
# of the build:
29+
#
30+
# Depends-On: ros2/rcl#1234
31+
#
32+
# See https://github.com/fujitatomoya/ros2-abi-action for details.
33+
name: abi
34+
35+
on:
36+
pull_request:
37+
branches: [ "rolling", "lyrical", "kilted", "jazzy", "humble" ]
38+
39+
# Allows you to run this workflow manually from the Actions tab.
40+
workflow_dispatch:
41+
42+
jobs:
43+
abi:
44+
permissions:
45+
contents: read
46+
pull-requests: write
47+
issues: write
48+
uses: fujitatomoya/ros2-abi-action/.github/workflows/check.yml@main
49+
with:
50+
# Colcon package names to build (whitespace-separated); no single package
51+
# depends on all the others, so list every package in this repository.
52+
package: rclcpp rclcpp_action rclcpp_components rclcpp_lifecycle
53+
# Shared libraries produced by the packages above. The glob matches all
54+
# libraries in the install tree; tests are not built (BUILD_TESTING=OFF),
55+
# so no test-only libraries are picked up.
56+
soname: "lib*.so"
57+
# rclcpp is a ROS 2 core repository: its dependencies are developed on
58+
# source branches ahead of the released binaries, so build against the
59+
# distro's ros2.repos source tree (nightly-cached, incremental) instead
60+
# of the binary underlay.
61+
build-mode: source
62+
# auto -> distro derived from the PR target branch.
63+
distro: auto
64+
# auto -> REP-0009: strict on released distros, advisory on rolling.
65+
policy: auto

0 commit comments

Comments
 (0)