This action sets up a ROS and ROS 2 environment for use in actions, so that:
- ROS 2 latest development branch builds from source,
- non-EOL (End Of Life) distribution of ROS 2 builds from source,
- any ROS, and ROS 2 package depending on non-EOL distribution builds from source
The action will not install ROS, or ROS 2, by default. To install a ROS binary distribution, pass a value to required-ros-distributions
(see example below).
apt-get update
is flaky on bare metal GitHub actions Linux workers relying on the GitHub APT mirrors.
It is recommended to run setup-ros
in a Docker container.
See jobs.<job_id>.container
documentation.
An alternative approach is to edit APT sources on the bare metal worker (see #80 for details).
This GitHub action aims for strict REP-3 and REP-2000 compliance. This action supports all non-EOL ROS distributions, on all Tier-1 platforms. In particular, this action supports macOS, and Microsoft Windows.
For macOS, and Microsoft Windows, the OS version specified in the REPs may not be available as a GitHub Hosted runners. In this case, this GitHub action CI runs the closest available worker environment.
Users requiring exact REP compliance should run the action on a self-hosted runner.
This problem does not apply to Linux workers, where Docker can ensure that the action runs the Linux distribution specified by the REPs.
The action installs the following command-line tools:
colcon
rosdep
vcs
It also performs the following actions:
- On Linux:
- Setting the locale to
en_US.UTF-8
and, the timezone to UTC - GCC and clang default APT packages
- Registering the Open Robotics APT repository
- Installing ROS, and ROS 2 system dependencies using APT
- Setting the locale to
- On macOS:
- On Microsoft Windows:
- Installing ROS, and ROS 2 system dependencies using Chocolatey
The dependencies installed by this package include ROS 2 DDS vendor packages,
such as FastRTPS, OpenSplice, and RTI Connext.
See src/package_manager/*.ts
for the complete list.
See action.yml.
This action is under active developement, and compatibility between releases
is not yet guaranteed.
Please do not use ros-tooling/setup-ros@master
.
Instead, pin your workflows to a particular release:
ros-tooling/setup-ros@0.0.16
.
The default behavior is to only install development tools. No ROS binary distribution is installed in this case. This setup should be used when ROS is build entirely from source.
steps:
- uses: ros-tooling/setup-ros@0.0.16
- run: vcs --help
It is possible to iterate on OS X, and Windows from the same job (build
).
Ubuntu requires its own separate workflow as additional configuration is
required for Docker.
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macOS-latest, windows-latest]
steps:
- name: Setup ROS
uses: ros-tooling/setup-ros@0.0.16
- run: vcs --help
build_docker:
runs-on: ubuntu-latest
container:
image: ubuntu:bionic
steps:
- name: Setup ROS
uses: ros-tooling/setup-ros@0.0.16
- run: vcs --help
One or more ROS distributions can be installed simultaneously
by passing multiple values to required-ros-distributions
.
This setup is necessary to use the ROS1/ROS2 bridge:
ros1_bridge.
build_docker:
runs-on: ubuntu-latest
container:
image: ubuntu:bionic
steps:
- uses: ros-tooling/setup-ros@0.0.16
with:
required-ros-distributions: melodic dashing
- run: "source /opt/ros/dashing/setup.bash && ros2 run --help"
- run: "source /opt/ros/melodic/setup.bash && rosnode --help"
This workflow illustrates how to spawn one job per ROS release, for every supported platform.
The workflow test
is iterating on all ROS 2 distributions, on OS X, and Windows.
The workflow test_docker
is iterating on all ROS, and ROS 2 distributions, for all
supported Ubuntu distributions, using Docker.
The test matrix associates each distribution with one Docker image.
This is required to ensure that the appropriate Ubuntu container is used.
For instance, Kinetic requires xenial
, but all other distributions require bionic
.
jobs:
test: # Docker is not supported on OS X, and Windows.
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [macOS-latest, windows-latest]
ros_distribution: # Only include ROS 2 distributions, as ROS 1 does not support OS X, and Windows.
- dashing
- eloquent
steps:
- uses: ros-tooling/setup-ros@0.0.16
with:
required-ros-distributions: ${{ matrix.ros_distribution }}
- run: vcs --help
test_docker: # On Linux, iterates on all ROS 1, and ROS 2 distributions.
runs-on: ubuntu-latest
strategy:
matrix:
ros_distribution:
- kinetic
- melodic
- dashing
- eloquent
# Define the Docker image(s) associated with each ROS distribution.
# The include syntax allows additional variables to be defined, like
# docker_image in this case. See documentation:
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#example-including-configurations-in-a-matrix-build
#
# Platforms are defined in REP 3, and REP 2000:
# https://ros.org/reps/rep-0003.html
# https://ros.org/reps/rep-2000.html
include:
# Kinetic Kame (May 2016 - May 2021)
- docker_image: ubuntu:xenial
ros_distribution: kinetic
# Setting ros_version is helpful to customize the workflow
# depending on whether a ROS 1, or ROS 2 is being tested.
# See 'if: ros_version ==' below for an example.
ros_version: 1
# Melodic Morenia (May 2018 - May 2023)
- docker_image: ubuntu:bionic
ros_distribution: melodic
ros_version: 1
# Dashing Diademata (May 2019 - May 2021)
- docker_image: ubuntu:bionic
ros_distribution: dashing
ros_version: 2
# Eloquent Elusor (November 2019 - November 2020)
- docker_image: ubuntu:bionic
ros_distribution: eloquent
ros_version: 2
steps:
- uses: ros-tooling/setup-ros@0.0.16
with:
required-ros-distributions: ${{ matrix.ros_distribution }}
- run: "source /opt/ros/${{ matrix.ros_distribution }}/setup.bash && rosnode --help"
if: ros_version == 1
- run: "source /opt/ros/${{ matrix.ros_distribution }}/setup.bash && ros2 run --help"
if: ros_version == 2
On Linux workers, an alternative to setup-ros
is to run actions on a
Docker container where ROS is pre-installed.
See Open Robotics DockerHub page, for instance.
The scripts and documentation in this project are released under the Apache 2