From 184479a08cdeb6483b8ffe858c265e1e151d33a6 Mon Sep 17 00:00:00 2001 From: Ruffin Date: Thu, 13 Aug 2020 11:58:26 -0700 Subject: [PATCH] Update Dockerfiles and CI (#1942) * Use colcon to check for build failure instead of canary file * Simplify if case for shell * Move extra dockerfiles to docker related folder * Update Dockerfile location * Stage refactor * Use build kit * Update underlay and overlay build * Dockerfile tweek * Rename underlay .repos file * Remove uneeded key * Clone matching distro branch by default * Add optional directive to RUN colcon test * Add comments * Skip the use of symlinks * Roll back to nightly image with all rmws now that connext is fixed * Add slam_toolbox to skipped rosdep keys * Set DEBIAN_FRONTEND env to noninteractive * Update to tag foxy * Updated to latest codecov orb --- .circleci/config.yml | 22 ++- .dockerhub/debug/Dockerfile | 1 - .dockerhub/debug/hooks/build | 2 +- .../distro.Dockerfile | 31 ++- .dockerhub/release/Dockerfile | 1 - .dockerhub/release/hooks/build | 4 +- .dockerhub/source.Dockerfile | 177 ++++++++++++++++++ Dockerfile | 26 ++- doc/process/PreReleaseChecklist.md | 2 +- tools/initial_ros_setup.sh | 2 +- tools/skip_keys.txt | 2 +- tools/source.Dockerfile | 168 ----------------- ...ros2_dependencies.repos => underlay.repos} | 0 13 files changed, 226 insertions(+), 212 deletions(-) delete mode 120000 .dockerhub/debug/Dockerfile rename tools/release.Dockerfile => .dockerhub/distro.Dockerfile (82%) delete mode 120000 .dockerhub/release/Dockerfile create mode 100644 .dockerhub/source.Dockerfile delete mode 100644 tools/source.Dockerfile rename tools/{ros2_dependencies.repos => underlay.repos} (100%) diff --git a/.circleci/config.yml b/.circleci/config.yml index 22310b440b4..e506051fd00 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,6 +1,6 @@ version: 2.1 orbs: - codecov: codecov/codecov@1.0.5 + codecov: codecov/codecov@1.1.1 _commands: common_commands: &common_commands @@ -103,16 +103,17 @@ _commands: name: Build Workspace | << parameters.workspace >> working_directory: << parameters.workspace >> command: | - if [ -d install ] && [ ! -f build_failed ] + BUILD_UNFINISHED=$(colcon list --packages-skip-build-finished) + BUILD_FAILED=$(colcon list --packages-select-build-failed) + if [ -n "$BUILD_UNFINISHED" ] || [ -n "$BUILD_FAILED" ] then - echo "Skipping Build" - else . << parameters.underlay >>/install/setup.sh rm -rf build install log colcon build \ --symlink-install \ --mixin << parameters.mixins >> - rm -f build_failed + else + echo "Skipping Build" fi - save_to_cache: key: << parameters.key >> @@ -192,16 +193,16 @@ _steps: name: Post Checkout command: | if ! cmp \ - $OVERLAY_WS/src/navigation2/tools/ros2_dependencies.repos \ - $UNDERLAY_WS/ros2_dependencies.repos >/dev/null 2>&1 + $OVERLAY_WS/src/navigation2/tools/underlay.repos \ + $UNDERLAY_WS/underlay.repos >/dev/null 2>&1 then echo "Cleaning Underlay" rm -rf $UNDERLAY_WS/* - cp $OVERLAY_WS/src/navigation2/tools/ros2_dependencies.repos \ - $UNDERLAY_WS/ros2_dependencies.repos + cp $OVERLAY_WS/src/navigation2/tools/underlay.repos \ + $UNDERLAY_WS/underlay.repos mkdir -p $UNDERLAY_WS/src vcs import $UNDERLAY_WS/src \ - < $UNDERLAY_WS/ros2_dependencies.repos + < $UNDERLAY_WS/underlay.repos fi install_underlay_dependencies: &install_underlay_dependencies install_dependencies: @@ -320,6 +321,7 @@ _environments: MAKEFLAGS: "-j 1 -l 2" RCUTILS_CONSOLE_STDOUT_LINE_BUFFERED: "0" RETEST_UNTIL_PASS: "2" + DEBIAN_FRONTEND: "noninteractive" executors: debug_exec: diff --git a/.dockerhub/debug/Dockerfile b/.dockerhub/debug/Dockerfile deleted file mode 120000 index 36c49d2a30c..00000000000 --- a/.dockerhub/debug/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -../../Dockerfile \ No newline at end of file diff --git a/.dockerhub/debug/hooks/build b/.dockerhub/debug/hooks/build index 310fbbd87b0..671d5e3f3d7 100755 --- a/.dockerhub/debug/hooks/build +++ b/.dockerhub/debug/hooks/build @@ -12,4 +12,4 @@ docker build \ --build-arg FAIL_ON_BUILD_FAILURE \ --build-arg UNDERLAY_MIXINS \ --build-arg OVERLAY_MIXINS \ - --file ./Dockerfile ../../. + --file ../../Dockerfile ../../. diff --git a/tools/release.Dockerfile b/.dockerhub/distro.Dockerfile similarity index 82% rename from tools/release.Dockerfile rename to .dockerhub/distro.Dockerfile index 2b89b534008..1f91fd11463 100644 --- a/tools/release.Dockerfile +++ b/.dockerhub/distro.Dockerfile @@ -6,14 +6,14 @@ # # Example build command: # export DOCKER_BUILDKIT=1 -# export FROM_IMAGE="ros:eloquent" +# export FROM_IMAGE="ros:foxy" # export OVERLAY_MIXINS="release ccache" -# docker build -t nav2:release_branch \ +# docker build -t nav2:foxy \ # --build-arg FROM_IMAGE \ # --build-arg OVERLAY_MIXINS \ -# -f release_branch.Dockerfile ./ +# -f distro.Dockerfile ../ -ARG FROM_IMAGE=ros:eloquent +ARG FROM_IMAGE=ros:foxy ARG OVERLAY_WS=/opt/overlay_ws # multi-stage for caching @@ -43,6 +43,7 @@ RUN mkdir -p /tmp/opt && \ # multi-stage for building FROM $FROM_IMAGE AS builder +ARG DEBIAN_FRONTEND=noninteractive # edit apt for caching RUN cp /etc/apt/apt.conf.d/docker-clean /etc/apt/ && \ @@ -88,15 +89,13 @@ RUN sed --in-place \ 's|^source .*|source "$OVERLAY_WS/install/setup.bash"|' \ /ros_entrypoint.sh -# ARG RUN_TESTS -# ARG FAIL_ON_TEST_FAILURE -# RUN if [ -z "$RUN_TESTS" ]; then \ -# colcon test \ -# --mixin $OVERLAY_MIXINS \ -# --ctest-args --test-regex "test_.*"; \ -# if [ -z "$FAIL_ON_TEST_FAILURE" ]; then \ -# colcon test-result; \ -# else \ -# colcon test-result || true; \ -# fi \ -# fi +# test overlay build +ARG RUN_TESTS +ARG FAIL_ON_TEST_FAILURE=Ture +RUN if [ -n "$RUN_TESTS" ]; then \ + . $OVERLAY_WS/install/setup.sh && \ + colcon test \ + --mixin $OVERLAY_MIXINS \ + && colcon test-result \ + || ([ -z "$FAIL_ON_TEST_FAILURE" ] || exit 1) \ + fi diff --git a/.dockerhub/release/Dockerfile b/.dockerhub/release/Dockerfile deleted file mode 120000 index 36c49d2a30c..00000000000 --- a/.dockerhub/release/Dockerfile +++ /dev/null @@ -1 +0,0 @@ -../../Dockerfile \ No newline at end of file diff --git a/.dockerhub/release/hooks/build b/.dockerhub/release/hooks/build index 5f9dd7e7579..50bc737ca60 100755 --- a/.dockerhub/release/hooks/build +++ b/.dockerhub/release/hooks/build @@ -1,7 +1,7 @@ #!/bin/bash set -ex -export FROM_IMAGE=osrf/ros2:nightly +export FROM_IMAGE=osrf/ros2:nightly-rmw-nonfree export FAIL_ON_BUILD_FAILURE="" export UNDERLAY_MIXINS="release ccache" export OVERLAY_MIXINS="release ccache" @@ -12,4 +12,4 @@ docker build \ --build-arg FAIL_ON_BUILD_FAILURE \ --build-arg UNDERLAY_MIXINS \ --build-arg OVERLAY_MIXINS \ - --file ./Dockerfile ../../. + --file ../../Dockerfile ../../. diff --git a/.dockerhub/source.Dockerfile b/.dockerhub/source.Dockerfile new file mode 100644 index 00000000000..0d3b6a7ba49 --- /dev/null +++ b/.dockerhub/source.Dockerfile @@ -0,0 +1,177 @@ +# syntax=docker/dockerfile:experimental + +# Use experimental buildkit for faster builds +# https://github.com/moby/buildkit/blob/master/frontend/dockerfile/docs/experimental.md +# Use `--progress=plain` to use plane stdout for docker build +# +# Example build command: +# This determines which version of the ROS2 code base to pull +# export ROS2_BRANCH=main +# export DOCKER_BUILDKIT=1 +# docker build \ +# --tag nav2:source \ +# --file source.Dockerfile ../ +# +# Omit the `--no-cache` if you know you don't need to break the cache. +# We're only building on top of a ros2 devel image to get the basics +# prerequisites installed such as the apt source, rosdep, etc. We don't want to +# actually use any of the ros release packages. Instead we are going to build +# everything from source in one big workspace. + +ARG FROM_IMAGE=osrf/ros2:devel +ARG UNDERLAY_WS=/opt/underlay_ws +ARG OVERLAY_WS=/opt/overlay_ws + +# multi-stage for caching +FROM $FROM_IMAGE AS cacher + +# clone ros2 source +ARG ROS2_BRANCH=master +ARG ROS2_REPO=https://github.com/ros2/ros2.git +WORKDIR $ROS2_WS/src +RUN git clone $ROS2_REPO -b $ROS2_BRANCH && \ + vcs import ./ < ros2/ros2.repos && \ + find ./ -name ".git" | xargs rm -rf + +# clone underlay source +ARG UNDERLAY_WS +WORKDIR $UNDERLAY_WS/src +COPY ./tools/underlay.repos ../ +RUN vcs import ./ < ../underlay.repos && \ + find ./ -name ".git" | xargs rm -rf + +# copy overlay source +ARG OVERLAY_WS +WORKDIR $OVERLAY_WS/src +COPY ./ ./ros-planning/navigation2 +RUN colcon list --names-only | cat > ../packages.txt + +# remove skiped packages +WORKDIR /opt +RUN find ./ \ + -name "AMENT_IGNORE" -o \ + -name "CATKIN_IGNORE" -o \ + -name "COLCON_IGNORE" \ + | xargs dirname | xargs rm -rf || true && \ + colcon list --paths-only \ + --packages-skip-up-to \ + $(cat $OVERLAY_WS/packages.txt | xargs) \ + | xargs rm -rf + +# copy manifests for caching +RUN mkdir -p /tmp/opt && \ + find ./ -name "package.xml" | \ + xargs cp --parents -t /tmp/opt + +# multi-stage for building +FROM $FROM_IMAGE AS builder +ARG DEBIAN_FRONTEND=noninteractive + +# edit apt for caching +RUN cp /etc/apt/apt.conf.d/docker-clean /etc/apt/ && \ + echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' \ + > /etc/apt/apt.conf.d/docker-clean + +# install packages +RUN --mount=type=cache,target=/var/cache/apt \ + --mount=type=cache,target=/var/lib/apt \ + apt-get update && apt-get install -q -y \ + ccache \ + libasio-dev \ + libtinyxml2-dev \ + && rosdep update + +ENV ROS_VERSION=2 \ + ROS_PYTHON_VERSION=3 + +# install ros2 dependencies +WORKDIR $ROS2_WS +COPY --from=cacher /tmp/$ROS2_WS ./ +COPY ./tools/skip_keys.txt /tmp/ +RUN --mount=type=cache,target=/var/cache/apt \ + --mount=type=cache,target=/var/lib/apt \ + apt-get update && rosdep install -q -y \ + --from-paths src \ + --ignore-src \ + --skip-keys " \ + $(cat /tmp/skip_keys.txt | xargs) \ + " + +# build ros2 source +COPY --from=cacher $ROS2_WS ./ +ARG ROS2_MIXINS="release ccache" +RUN --mount=type=cache,target=/root/.ccache \ + colcon build \ + --symlink-install \ + --mixin $ROS2_MIXINS + +# install underlay dependencies +ARG UNDERLAY_WS +WORKDIR $UNDERLAY_WS +COPY --from=cacher /tmp/$UNDERLAY_WS ./ +RUN --mount=type=cache,target=/var/cache/apt \ + --mount=type=cache,target=/var/lib/apt \ + . $ROS2_WS/install/setup.sh && \ + apt-get update && rosdep install -q -y \ + --from-paths src \ + $ROS2_WS/src \ + --ignore-src \ + --skip-keys " \ + $(cat /tmp/skip_keys.txt | xargs) \ + " + +# build underlay source +COPY --from=cacher $UNDERLAY_WS ./ +ARG UNDERLAY_MIXINS="release ccache" +RUN --mount=type=cache,target=/root/.ccache \ + . $ROS2_WS/install/setup.sh && \ + colcon build \ + --symlink-install \ + --mixin $UNDERLAY_MIXINS + +# install overlay dependencies +ARG OVERLAY_WS +WORKDIR $OVERLAY_WS +COPY --from=cacher /tmp/$OVERLAY_WS ./ +RUN --mount=type=cache,target=/var/cache/apt \ + --mount=type=cache,target=/var/lib/apt \ + . $UNDERLAY_WS/install/setup.sh && \ + apt-get update && rosdep install -q -y \ + --from-paths src \ + $ROS2_WS/src \ + $UNDERLAY_WS/src \ + --ignore-src \ + --skip-keys " \ + $(cat /tmp/skip_keys.txt | xargs) \ + " + +# build overlay source +COPY --from=cacher $OVERLAY_WS ./ +ARG OVERLAY_MIXINS="release ccache" +RUN --mount=type=cache,target=/root/.ccache \ + . $UNDERLAY_WS/install/setup.sh && \ + colcon build \ + --symlink-install \ + --mixin $OVERLAY_MIXINS + +# restore apt for docker +RUN mv /etc/apt/docker-clean /etc/apt/apt.conf.d/ && \ + rm -rf /var/lib/apt/lists/ + +# source overlay from entrypoint +ENV UNDERLAY_WS $UNDERLAY_WS +ENV OVERLAY_WS $OVERLAY_WS +RUN sed --in-place \ + 's|^source .*|source "$OVERLAY_WS/install/setup.bash"|' \ + /ros_entrypoint.sh + +# test overlay build +ARG RUN_TESTS +ARG FAIL_ON_TEST_FAILURE=Ture +RUN if [ -n "$RUN_TESTS" ]; then \ + . $OVERLAY_WS/install/setup.sh && \ + colcon test \ + --mixin $OVERLAY_MIXINS \ + && colcon test-result \ + || ([ -z "$FAIL_ON_TEST_FAILURE" ] || exit 1) \ + fi diff --git a/Dockerfile b/Dockerfile index 0767205c601..bc0eb6287ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,8 @@ FROM $FROM_IMAGE AS cacher # clone underlay source ARG UNDERLAY_WS WORKDIR $UNDERLAY_WS/src -COPY ./tools/ros2_dependencies.repos ../ -RUN vcs import ./ < ../ros2_dependencies.repos && \ +COPY ./tools/underlay.repos ../ +RUN vcs import ./ < ../underlay.repos && \ find ./ -name ".git" | xargs rm -rf # copy overlay source @@ -35,6 +35,7 @@ RUN mkdir -p /tmp/opt && \ # multi-stage for building FROM $FROM_IMAGE AS builder +ARG DEBIAN_FRONTEND=noninteractive # install CI dependencies RUN apt-get update && apt-get install -q -y \ @@ -65,10 +66,7 @@ RUN . /opt/ros/$ROS_DISTRO/setup.sh && \ --symlink-install \ --mixin $UNDERLAY_MIXINS \ --event-handlers console_direct+ \ - || touch build_failed && \ - if [ -f build_failed ] && [ -n "$FAIL_ON_BUILD_FAILURE" ]; then \ - exit 1; \ - fi + || ([ -z "$FAIL_ON_BUILD_FAILURE" ] || exit 1) # install overlay dependencies ARG OVERLAY_WS @@ -91,10 +89,7 @@ RUN . $UNDERLAY_WS/install/setup.sh && \ colcon build \ --symlink-install \ --mixin $OVERLAY_MIXINS \ - || touch build_failed && \ - if [ -f build_failed ] && [ -n "$FAIL_ON_BUILD_FAILURE" ]; then \ - exit 1; \ - fi + || ([ -z "$FAIL_ON_BUILD_FAILURE" ] || exit 1) # source overlay from entrypoint ENV UNDERLAY_WS $UNDERLAY_WS @@ -102,3 +97,14 @@ ENV OVERLAY_WS $OVERLAY_WS RUN sed --in-place \ 's|^source .*|source "$OVERLAY_WS/install/setup.bash"|' \ /ros_entrypoint.sh + +# test overlay build +ARG RUN_TESTS +ARG FAIL_ON_TEST_FAILURE=Ture +RUN if [ -n "$RUN_TESTS" ]; then \ + . $OVERLAY_WS/install/setup.sh && \ + colcon test \ + --mixin $OVERLAY_MIXINS \ + && colcon test-result \ + || ([ -z "$FAIL_ON_TEST_FAILURE" ] || exit 1) \ + fi diff --git a/doc/process/PreReleaseChecklist.md b/doc/process/PreReleaseChecklist.md index 74f4f92ca04..01b5c14c62b 100644 --- a/doc/process/PreReleaseChecklist.md +++ b/doc/process/PreReleaseChecklist.md @@ -31,7 +31,7 @@ to compare against ROS2 main. We want to ensure the correct version of all our dependencies have been released to the branch we are targeting. To do that, we skip the -`ros2_dependencies.repos` install step and rely solely on rosdep to install +`underlay.repos` install step and rely solely on rosdep to install everything. There is a dockerfile to do that as well, so run diff --git a/tools/initial_ros_setup.sh b/tools/initial_ros_setup.sh index 5e633e20378..4be3a5f0ab1 100755 --- a/tools/initial_ros_setup.sh +++ b/tools/initial_ros_setup.sh @@ -65,7 +65,7 @@ download_ros2_dependencies() { echo "Downloading the dependencies workspace" mkdir -p ros2_nav_dependencies_ws/src cd ros2_nav_dependencies_ws - vcs import src < ${CWD}/navigation2_ws/src/navigation2/tools/ros2_dependencies.repos + vcs import src < ${CWD}/navigation2_ws/src/navigation2/tools/underlay.repos return_to_root_dir } diff --git a/tools/skip_keys.txt b/tools/skip_keys.txt index 0875072611b..8285089c341 100644 --- a/tools/skip_keys.txt +++ b/tools/skip_keys.txt @@ -1,7 +1,7 @@ console_bridge fastcdr fastrtps -libopensplice67 libopensplice69 rti-connext-dds-5.3.1 +slam_toolbox urdfdom_headers \ No newline at end of file diff --git a/tools/source.Dockerfile b/tools/source.Dockerfile deleted file mode 100644 index fe346c528e6..00000000000 --- a/tools/source.Dockerfile +++ /dev/null @@ -1,168 +0,0 @@ -# This dockerfile expects to be contained in the /navigation2 root folder for file copy -# -# Example build command: -# This determines which version of the ROS2 code base to pull -# export ROS2_BRANCH=main -# docker build \ -# --no-cache \ -# --tag nav2:full_ros_build \ -# --file full_ros_build.Dockerfile ./ -# -# Omit the `--no-cache` if you know you don't need to break the cache. -# We're only building on top of a ros2 devel image to get the basics -# prerequisites installed such as the apt source, rosdep, etc. We don't want to -# actually use any of the ros release packages. Instead we are going to build -# everything from source in one big workspace. - -ARG FROM_IMAGE=osrf/ros2:devel - -# multi-stage for caching -FROM $FROM_IMAGE AS cache - -# clone underlay source -ENV UNDERLAY_WS /opt/underlay_ws -RUN mkdir -p $UNDERLAY_WS/src -WORKDIR $UNDERLAY_WS -COPY ./tools/ros2_dependencies.repos ./ -RUN vcs import src < ros2_dependencies.repos - -# copy overlay source -ENV OVERLAY_WS /opt/overlay_ws -RUN mkdir -p $OVERLAY_WS/src -WORKDIR $OVERLAY_WS -COPY ./ src/navigation2 - -# copy manifests for caching -WORKDIR /opt -RUN find ./ -name "package.xml" | \ - xargs cp --parents -t /tmp && \ - find ./ -name "COLCON_IGNORE" | \ - xargs cp --parents -t /tmp - -# multi-stage for building -FROM $FROM_IMAGE AS build - -# install packages -RUN apt-get update && apt-get install -q -y \ - libasio-dev \ - libtinyxml2-dev \ - wget \ - && rm -rf /var/lib/apt/lists/* - -ARG ROS2_BRANCH=main -ENV ROS2_BRANCH=$ROS2_BRANCH -ENV ROS_VERSION=2 \ - ROS_PYTHON_VERSION=3 - -WORKDIR $ROS2_WS - -# get ros2 source code -RUN wget https://raw.githubusercontent.com/ros2/ros2/$ROS2_BRANCH/ros2.repos \ - && vcs import src < ros2.repos - -# get skip keys -COPY ./tools/skip_keys.txt ./ - -RUN rosdep update - -# copy underlay manifests -COPY --from=cache /tmp/underlay_ws src/underlay -RUN cd src/underlay && colcon list --names-only | \ - cat > packages.txt && \ - cd ../../ && colcon list --names-only \ - --packages-up-to \ - $(cat src/underlay/packages.txt | xargs) | \ - cat > packages.txt - -# install underlay dependencies -RUN apt-get update && rosdep install -y \ - --from-paths src \ - --ignore-src \ - --skip-keys \ - "$(cat skip_keys.txt | xargs)" \ - src/underlay \ - && rm -rf /var/lib/apt/lists/* - -# build ros2 source -ARG ROS2_MIXINS="release" -RUN colcon build \ - --symlink-install \ - --mixin \ - $ROS2_MIXINS \ - --packages-up-to \ - $(cat src/underlay/packages.txt | xargs) \ - --packages-skip \ - $(cat src/underlay/packages.txt | xargs) \ - --cmake-args --no-warn-unused-cli - -# copy underlay source -COPY --from=cache /opt/underlay_ws src/underlay - -# build underlay source -ARG UNDERLAY_MIXINS="release" -RUN colcon build \ - --symlink-install \ - --mixin \ - $UNDERLAY_MIXINS \ - --packages-up-to \ - $(cat src/underlay/packages.txt | xargs) \ - --packages-skip-build-finished \ - --cmake-args --no-warn-unused-cli - -# copy overlay manifests -COPY --from=cache /tmp/overlay_ws src/overlay -RUN cd src/overlay && colcon list --names-only | \ - cat > packages.txt && \ - cd ../../ && colcon list --names-only \ - --packages-up-to \ - $(cat src/overlay/packages.txt | xargs) | \ - cat > packages.txt - -# install overlay dependencies -RUN apt-get update && rosdep install -y \ - --from-paths src \ - --ignore-src \ - --skip-keys \ - "$(cat skip_keys.txt | xargs)" \ - src/overlay \ - && rm -rf /var/lib/apt/lists/* - -# build ros2 source -RUN colcon build \ - --symlink-install \ - --mixin \ - $ROS2_MIXINS \ - --packages-up-to \ - $(cat src/overlay/packages.txt | xargs) \ - --packages-skip \ - $(cat src/overlay/packages.txt | xargs) \ - --packages-skip-build-finished \ - --cmake-args --no-warn-unused-cli - -# copy overlay source -COPY --from=cache /opt/overlay_ws src/overlay - -# build overlay source -ARG OVERLAY_MIXINS="build-testing-on release" -RUN colcon build \ - --symlink-install \ - --mixin \ - $OVERLAY_MIXINS \ - --packages-up-to \ - $(cat src/overlay/packages.txt | xargs) \ - --packages-skip-build-finished \ - --cmake-args --no-warn-unused-cli - -# test overlay source -ARG RUN_TESTS -ARG FAIL_ON_TEST_FAILURE -RUN if [ ! -z "$RUN_TESTS" ]; then \ - colcon test \ - --packages-select \ - $(cat src/overlay/packages.txt | xargs); \ - if [ ! -z "$FAIL_ON_TEST_FAILURE" ]; then \ - colcon test-result; \ - else \ - colcon test-result || true; \ - fi \ - fi diff --git a/tools/ros2_dependencies.repos b/tools/underlay.repos similarity index 100% rename from tools/ros2_dependencies.repos rename to tools/underlay.repos