Add docker file that builds against crystal release for use in testing the crystal-devel branch#562
Add docker file that builds against crystal release for use in testing the crystal-devel branch#5626 commits merged intomasterfrom unknown repository
Conversation
|
Oh. I should note that is currently doesn't work on either My plan is to merge everything up to the API breaking change from yesterday over to crystal-devel and then test with this dockerfile. |
Move ARG insertion after rosdep to preserve more caching layers
Seems necessary when sourcing a colcon workspace that was first initialized using the debian ros2 install, as opposed to parent workspace installed from the ros2 nightly fat archives.
ruffsl
left a comment
There was a problem hiding this comment.
I added some changes to the ARGs and entypoint
Also * fixing a syntax error on if statement * moving rm nav2_system_test/COLCON_IGNORE before rosdep call
| WORKDIR $NAV2_WS/src | ||
| COPY ./ navigation2/ | ||
|
|
||
| # delete nav2_system_tests/COLCON_IGNORE before running rosdep, otherwise it |
There was a problem hiding this comment.
Is this true? I've never known rosdep to care what a COLCON_IGNORE file is or what it means. I think it just recurses the --from-paths looking for package.xml files. Our CI Dockerfile is setup similarly.
Moving this arg and logic to before the rosdep install would needlessly break the build caching layers when switching system tests on and off.
Searching the rosdep github repo for any mentioning of COLCON_IGNORE returns nothing:
https://github.com/ros-infrastructure/rosdep/search?q=COLCON_IGNORE&unscoped_q=COLCON_IGNORE
There was a problem hiding this comment.
It's true that the build breaks if the rm is done after the rosdep call. It breaks because it can't find the gazebo_ros_pkgs which are the additional dependency that the nav2_system_test package brings in.
I'll admit that I'm assuming the underlying root cause.
There was a problem hiding this comment.
I created a minimal docker to experiment with.
FROM ros:crystal
# install ROS2 dependencies
RUN apt-get update && apt-get install -q -y \
build-essential \
cmake \
git \
python3-colcon-common-extensions \
python3-vcstool \
wget \
&& rm -rf /var/lib/apt/lists/*
# copy ros package repo
ENV NAV2_WS /opt/nav2_ws
RUN mkdir -p $NAV2_WS/src
WORKDIR $NAV2_WS/src
COPY ./ navigation2/
With the COLCON_IGNORE file in place, I get the following output from rosdep
> rosdep install -s -q -y --from-paths src --ignore-src
#[apt] Installation commands:
apt-get install -y -qq libboost-all-dev
apt-get install -y -qq ros-crystal-launch-testing
apt-get install -y -qq ros-crystal-behaviortree-cpp
apt-get install -y -qq libbullet-dev
apt-get install -y -qq libsdl1.2-dev
apt-get install -y -qq libsdl-image1.2-dev
apt-get install -y -qq ros-crystal-yaml-cpp-vendor
apt-get install -y -qq ros-crystal-map-msgs
apt-get install -y -qq ros-crystal-tf2-sensor-msgs
apt-get install -y -qq libpcl-dev
apt-get install -y -qq ros-crystal-laser-geometry
apt-get install -y -qq ros-crystal-angles
If I delete the COLCON_IGNORE file
> rosdep install -s -q -y --from-paths src --ignore-src
#[apt] Installation commands:
apt-get install -y -qq ros-crystal-launch-testing
apt-get install -y -qq ros-crystal-gazebo-ros-pkgs
apt-get install -y -qq ros-crystal-angles
apt-get install -y -qq ros-crystal-behaviortree-cpp
apt-get install -y -qq libboost-all-dev
apt-get install -y -qq ros-crystal-map-msgs
apt-get install -y -qq ros-crystal-tf2-sensor-msgs
apt-get install -y -qq libpcl-dev
apt-get install -y -qq ros-crystal-laser-geometry
apt-get install -y -qq libbullet-dev
apt-get install -y -qq libsdl1.2-dev
apt-get install -y -qq libsdl-image1.2-dev
apt-get install -y -qq ros-crystal-yaml-cpp-vendor
You'll see ros-crystal-gazebo-ros-pkgs is missing from the first list, so rosdep results in different action depending on whether the file is there or not. How it does that without ever actually referencing the file, I don't know.
There was a problem hiding this comment.
Ok, it looks like rosdep is using catkin's find_packages to loop search for packages, and thus the transitive ignore.
|
I believe the circle CI build failure is because the branch is off an old version of master. I'll rebase and verify the build after the review is done to avoid messing up the history. |
|
I've been thinking and realized rather than creating a new dockerfile for each release, we could template a dockerfile for building against any given release, e.g by using ARG FROM_IMAGE=ros
FROM $FROM_IMAGE
...https://www.jeffgeerling.com/blog/2017/use-arg-dockerfile-dynamic-image-specification ROS_DISTRO=crystal
docker build \
--tag rosplanning/navigation2:${ROS_DISTRO}-devel \
--build-arg ros:${ROS_DISTRO}We then add custom build phase hooks to override build command in the automated Docker Hub repo so that it uses the correct base image when build a docker image tag for each added devel branch. /hooks/buildhttps://docs.docker.com/docker-hub/builds/advanced/#override-build-test-or-push-commands I'll work up a separate PR for this. |
|
I've asked the circleci folks on a issue of perhaps a missing feature: |
|
@ruffsl Lacking direct support from CircleCI, it looks like we can get the information from the Github API if we can get at least the PR number from CircleCI. ie. For this PR, this command line seems to do the trick |
…ts in the MPPI controller (ros-navigation#562) * Update Migration guide Signed-off-by: Ayush Singh <64409716+Ayush1285@users.noreply.github.com> * Update configuration guide for MPPI Signed-off-by: Ayush Singh <64409716+Ayush1285@users.noreply.github.com> --------- Signed-off-by: Ayush Singh <64409716+Ayush1285@users.noreply.github.com>
Basic Info
Description of contribution in a few bullet points
rosdepto bring in dependencies. It is intended to be used to test the crystal-devel branch, and maybe make a crystal dockerhub image.