diff --git a/Dockerfile b/Dockerfile index bf470ef3..07cb6970 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,10 +15,15 @@ RUN apt-get update && apt-get install -y \ RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain 1.75.0 -y ENV PATH=/root/.cargo/bin:$PATH -# Install the colcon-cargo and colcon-ros-cargo plugins -RUN if [ "$ROS_DISTRO" = "humble" ] ; \ - then pip install --upgrade pytest && pip install colcon-ros-cargo ; \ - else pip install --break-system-packages pytest colcon-ros-cargo ; fi +COPY src/ros2_rust/docker/install_colcon_plugins.sh / +RUN ./install_colcon_plugins.sh + +COPY src/ros2_rust/docker/rosidl_rust_setup.sh / +RUN ./rosidl_rust_setup.sh RUN mkdir -p /workspace && echo "Did you forget to mount the repository into the Docker container?" > /workspace/HELLO.txt WORKDIR /workspace + +COPY src/ros2_rust/docker/rosidl_rust_entrypoint.sh / +ENTRYPOINT ["/rosidl_rust_entrypoint.sh"] +CMD ["/bin/bash"] diff --git a/docker/install_colcon_plugins.sh b/docker/install_colcon_plugins.sh new file mode 100755 index 00000000..1bcb36ee --- /dev/null +++ b/docker/install_colcon_plugins.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +if [ "$ROS_DISTRO" = "humble" ]; then + pip install --upgrade pytest + pip install colcon-ros-cargo +else + pip install --break-system-packages pytest colcon-ros-cargo +fi diff --git a/docker/rosidl_rust_entrypoint.sh b/docker/rosidl_rust_entrypoint.sh new file mode 100755 index 00000000..70a85a0a --- /dev/null +++ b/docker/rosidl_rust_entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -e + +# setup ros2 environment +source "/opt/ros/$ROS_DISTRO/setup.bash" -- + +# If we're a distro that needs the overlay built, then source it +if [ -f "/tmp/rosidl_rust_overlay/install/setup.bash" ]; then + source /tmp/rosidl_rust_overlay/install/setup.bash -- +fi + +exec "$@" diff --git a/docker/rosidl_rust_setup.sh b/docker/rosidl_rust_setup.sh new file mode 100755 index 00000000..c5b05092 --- /dev/null +++ b/docker/rosidl_rust_setup.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Depending on the ROS_DISTRO, make sure we've got rosidl_generator_rs +# sourced and available in working directory workspace + +if [ "$ROS_DISTRO" = "rolling" ]; then + apt-get update && apt-get install -y ros-$ROS_DISTRO-rosidl-generator-rs +else + # Temporarily add `rosidl_rust` to an overlay, build, and source it. + mkdir -p /tmp/rosidl_rust_overlay/src + git clone https://github.com/ros2-rust/rosidl_rust /tmp/rosidl_rust_overlay/src + + cd /tmp/rosidl_rust_overlay + + . /opt/ros/$ROS_DISTRO/setup.sh + colcon build +fi