Skip to content

Commit a38aabf

Browse files
committed
Add ROS 2 Lyrical Luth
1 parent 3176aca commit a38aabf

1 file changed

Lines changed: 29 additions & 28 deletions

File tree

.github/workflows/linux-x64-build-and-test.yml

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
runs-on: ubuntu-latest
1818
container:
1919
image: ${{ matrix.docker_image }}
20+
continue-on-error: ${{ matrix.experimental == true }}
2021
strategy:
2122
fail-fast: false
2223
matrix:
@@ -26,6 +27,7 @@ jobs:
2627
- humble
2728
- jazzy
2829
- kilted
30+
- lyrical
2931
- rolling
3032
include:
3133
# Humble Hawksbill (May 2022 - May 2027)
@@ -37,6 +39,11 @@ jobs:
3739
# Kilted Kaiju (May 2025 - Dec 2026)
3840
- docker_image: ubuntu:noble
3941
ros_distribution: kilted
42+
# Lyrical Luth (May 2026 - May 2031, beta) - allow-failure until packages stabilize
43+
- docker_image: ubuntu:26.04
44+
ros_distribution: lyrical
45+
experimental: true
46+
ros_tar_url: "https://github.com/ros2/ros2/releases/download/release-lyrical-beta-20260429-1/ros2-lyrical-2026-04-29-1-resolute-x86_64.tar.bz2"
4047
# Rolling Ridley (No End-Of-Life)
4148
- docker_image: ubuntu:noble
4249
ros_distribution: rolling
@@ -49,41 +56,46 @@ jobs:
4956
architecture: ${{ matrix.architecture }}
5057

5158
- name: Setup ROS2
52-
if: ${{ matrix.ros_distribution != 'rolling' }}
59+
if: ${{ matrix.ros_distribution != 'rolling' && matrix.ros_distribution != 'lyrical' }}
5360
uses: ros-tooling/setup-ros@v0.7
5461
with:
5562
required-ros-distributions: ${{ matrix.ros_distribution }}
5663

57-
- name: Install ROS2 Rolling Nightly
58-
if: ${{ matrix.ros_distribution == 'rolling' }}
64+
- name: Enable ROS2 apt repository (rolling / lyrical)
65+
if: ${{ matrix.ros_distribution == 'rolling' || matrix.ros_distribution == 'lyrical' }}
5966
run: |
6067
apt-get update
6168
apt-get install -y software-properties-common curl
6269
63-
# Enable required repositories (per https://docs.ros.org/en/rolling/Installation/Alternatives/Ubuntu-Install-Binary.html)
70+
# Enable required repositories (per https://docs.ros.org/en/lyrical/Installation/Ubuntu-Install-Debs.html)
6471
add-apt-repository universe
6572
ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F'"' '{print $4}')
6673
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
6774
dpkg -i /tmp/ros2-apt-source.deb
68-
69-
# Install prerequisites and apt packages BEFORE nightly tarball
7075
apt-get update
7176
apt-get install -y build-essential cmake tar bzip2 python3 python3-rosdep python3-colcon-common-extensions
72-
apt-get install -y ros-rolling-test-msgs ros-rolling-mrpt-msgs
7377
74-
# Extract nightly binary AFTER apt packages so nightly's newer libs overwrite apt's older ones
75-
curl -sL "${{ matrix.ros_tar_url }}" -o /tmp/ros2-nightly.tar.bz2
76-
mkdir -p /opt/ros/rolling
77-
tar xf /tmp/ros2-nightly.tar.bz2 --strip-components=1 -C /opt/ros/rolling
78-
rm /tmp/ros2-nightly.tar.bz2
78+
- name: Install ROS2 from binary tarball (rolling / lyrical)
79+
if: ${{ matrix.ros_distribution == 'rolling' || matrix.ros_distribution == 'lyrical' }}
80+
run: |
81+
# Install apt packages BEFORE the binary tarball
82+
apt-get install -y ros-${{ matrix.ros_distribution }}-test-msgs
83+
# mrpt_msgs may not be available for newer/beta distros (e.g. lyrical); install best-effort
84+
apt-get install -y ros-${{ matrix.ros_distribution }}-mrpt-msgs || echo "ros-${{ matrix.ros_distribution }}-mrpt-msgs not yet available, skipping"
85+
86+
# Extract binary tarball AFTER apt packages so its newer libs overwrite apt's older ones
87+
curl -sL "${{ matrix.ros_tar_url }}" -o /tmp/ros2-${{ matrix.ros_distribution }}.tar.bz2
88+
mkdir -p /opt/ros/${{ matrix.ros_distribution }}
89+
tar xf /tmp/ros2-${{ matrix.ros_distribution }}.tar.bz2 --strip-components=1 -C /opt/ros/${{ matrix.ros_distribution }}
90+
rm /tmp/ros2-${{ matrix.ros_distribution }}.tar.bz2
7991
8092
# Install any remaining runtime dependencies using rosdep
8193
rosdep init || true
8294
rosdep update
83-
rosdep install --rosdistro rolling --from-paths /opt/ros/rolling/share --ignore-src -y --skip-keys "cyclonedds fastcdr fastdds iceoryx_binding_c rmw_connextdds rti-connext-dds-7.3.0 rti-connext-dds-7.7.0 urdfdom_headers python3-pyqt6.qtsvg rosidl_buffer_py pybind11"
95+
rosdep install --rosdistro ${{ matrix.ros_distribution }} --from-paths /opt/ros/${{ matrix.ros_distribution }}/share --ignore-src -y --skip-keys "cyclonedds fastcdr fastdds iceoryx_binding_c rmw_connextdds rti-connext-dds-7.3.0 rti-connext-dds-7.7.0 urdfdom_headers python3-pyqt6.qtsvg rosidl_buffer_py pybind11"
8496
8597
- name: Install test-msgs and mrpt_msgs on Linux
86-
if: ${{ matrix.ros_distribution != 'rolling' }}
98+
if: ${{ matrix.ros_distribution != 'rolling' && matrix.ros_distribution != 'lyrical' }}
8799
run: |
88100
sudo apt install -y ros-${{ matrix.ros_distribution }}-test-msgs ros-${{ matrix.ros_distribution }}-mrpt-msgs
89101
@@ -98,18 +110,7 @@ jobs:
98110
99111
- uses: actions/checkout@v6
100112

101-
- name: Build and test rclnodejs (nightly)
102-
if: ${{ matrix.ros_distribution == 'rolling' }}
103-
run: |
104-
uname -a
105-
source /opt/ros/rolling/setup.bash
106-
npm i
107-
npm run lint
108-
npm test
109-
npm run clean
110-
111113
- name: Build and test rclnodejs
112-
if: ${{ matrix.ros_distribution != 'rolling' }}
113114
run: |
114115
uname -a
115116
source /opt/ros/${{ matrix.ros_distribution }}/setup.bash
@@ -118,10 +119,10 @@ jobs:
118119
npm test
119120
npm run clean
120121
121-
- name: Test with IDL ROS messages against rolling
122-
if: ${{ matrix.ros_distribution == 'rolling' }}
122+
- name: Test with IDL ROS messages (rolling / lyrical)
123+
if: ${{ matrix.ros_distribution == 'rolling' || matrix.ros_distribution == 'lyrical' }}
123124
run: |
124-
source /opt/ros/rolling/setup.bash
125+
source /opt/ros/${{ matrix.ros_distribution }}/setup.bash
125126
npm i
126127
npm run test-idl
127128
npm run clean

0 commit comments

Comments
 (0)