Skip to content

FIX: FilterMLS now requires reordering of field registration #482

FIX: FilterMLS now requires reordering of field registration

FIX: FilterMLS now requires reordering of field registration #482

Workflow file for this run

# Based on GTSAM file (by @ProfFan)
name: CI Build colcon
on: [push]
jobs:
build_docker: # On Linux, iterates on all ROS 1 and ROS 2 distributions.
runs-on: ubuntu-latest
env:
DEBIAN_FRONTEND: noninteractive
strategy:
matrix:
# 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:
# Humble Hawksbill (May 2022 - May 2027)
- docker_image: ubuntu:jammy
ros_distribution: humble
use_ros2-testing: false
- docker_image: ubuntu:jammy
ros_distribution: humble
use_ros2-testing: true
# Jazzy (2024 - ??)
- docker_image: ubuntu:noble
ros_distribution: jazzy
use_ros2-testing: false
- docker_image: ubuntu:noble
ros_distribution: jazzy
use_ros2-testing: true
# Rolling Ridley (No End-Of-Life)
#- docker_image: ubuntu:noble
# ros_distribution: rolling
# use_ros2-testing: false
- docker_image: ubuntu:noble
ros_distribution: rolling
use_ros2-testing: true
# Same as above, but disable TBB
- docker_image: ubuntu:noble
ros_distribution: rolling
use_ros2-testing: true
disable_tbb: true
- docker_image: ubuntu:noble
ros_distribution: rolling
use_ros2-testing: true
coverage_run: true
container:
image: ${{ matrix.docker_image }}
steps:
- name: Install Git
run: |
apt-get update
apt-get install -y git
git --version # should be >= 2.18
- name: Checkout (with submodules)
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: recursive
- name: setup ROS environment
uses: ros-tooling/setup-ros@v0.7
with:
required-ros-distributions: ${{ matrix.ros_distribution }}
use-ros2-testing: ${{ matrix.use_ros2-testing }}
- name: Install rosdep dependencies
run: |
. /opt/ros/*/setup.sh
rosdep update
rosdep install --from-paths . --ignore-src -r -y
- name: Install lcov for coverage analysis
if: matrix.coverage_run == true
run: |
apt-get update
apt-get install -y lcov
- name: Build with colcon
run: |
. /opt/ros/*/setup.sh
EXTRA_CMAKE_ARGS=""
# 1. Check for TBB flag
if [ "${{ matrix.disable_tbb }}" = "true" ]; then
echo "Disabling TBB..."
EXTRA_CMAKE_ARGS="$EXTRA_CMAKE_ARGS -DMP2PICP_USE_TBB=OFF"
fi
# 2. Inject Coverage Build Type
if [ "${{ matrix.coverage_run }}" = "true" ]; then
echo "Enabling Coverage build type..."
# This flag forces the use of the gcov flags defined in CMakeLists.txt
EXTRA_CMAKE_ARGS="$EXTRA_CMAKE_ARGS -DCMAKE_BUILD_TYPE=Coverage"
fi
env
MAKEFLAGS="-j2" colcon build \
--symlink-install \
--parallel-workers 2 \
--event-handlers console_direct+ \
--cmake-args $EXTRA_CMAKE_ARGS
- name: Run unit tests
run: |
. /opt/ros/*/setup.sh
# Run tests regardless of coverage setting, as they are required to generate the .gcda files
colcon test --event-handlers console_direct+
colcon test-result --verbose
- name: Generate coverage report
if: matrix.coverage_run == true
run: |
# 1. Capture coverage data across the entire workspace.
# --ignore-errors mismatch fixes geninfo parsing errors
# --rc geninfo_unexecuted_blocks=1 fixes warnings about unexecuted blocks
lcov --capture --directory . --output-file coverage.info \
--ignore-errors mismatch --rc geninfo_unexecuted_blocks=1
# 2. Filter the report: Remove all files outside of your source code
lcov --remove coverage.info '*/3rdparty/*' --ignore-errors unused --output-file coverage_filtered.info
lcov --remove coverage_filtered.info '*/tests/*' --ignore-errors unused --output-file coverage_filtered.info
lcov --remove coverage_filtered.info '*/apps/*' --ignore-errors unused --output-file coverage_filtered.info
lcov --remove coverage_filtered.info '*/mola_common/*' --ignore-errors unused --output-file coverage_filtered.info
lcov --remove coverage_filtered.info '/opt/ros/*' --ignore-errors unused --output-file coverage_filtered.info
lcov --remove coverage_filtered.info '/usr/*' --ignore-errors unused --output-file coverage_filtered.info
# 3. Print a summary to the log
echo "--- Coverage Summary for MP2P-ICP Core ---"
lcov --list coverage_filtered.info
echo "------------------------------------------"
- name: Upload coverage to Codecov
if: matrix.coverage_run == true
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: ./coverage_filtered.info
name: codecov-mp2p-icp-colcon
flags: colcon,rolling,gcc