1- ARG FROM_IMAGE=ros:eloquent
1+ ARG FROM_IMAGE=ros:foxy
2+ ARG UNDERLAY_WS=/opt/underlay_ws
3+ ARG OVERLAY_WS=/opt/overlay_ws
24
35# multi-stage for caching
4- FROM $FROM_IMAGE AS cache
6+ FROM $FROM_IMAGE AS cacher
7+
8+ # copy underlay source
9+ ARG UNDERLAY_WS
10+ WORKDIR $UNDERLAY_WS/src
11+ COPY ./ ./ros2-rust/ros2_rust
512
613# clone overlay source
7- ENV OVERLAY_WS /opt/overlay_ws
8- RUN mkdir -p $OVERLAY_WS/src
9- WORKDIR $OVERLAY_WS
10- COPY ./ros2_rust.repos ./
11- RUN vcs import src < ros2_rust.repos
12- COPY ./ src/ros2-rust/ros2_rust
14+ ARG OVERLAY_WS
15+ WORKDIR $OVERLAY_WS/src
16+ COPY ./ros2_rust.repos ../
17+ RUN vcs import ./ < ../ros2_rust.repos && \
18+ find ./ -name ".git" | xargs rm -rf
1319
1420# copy manifests for caching
1521WORKDIR /opt
16- RUN find ./ -name "package.xml" | \
17- xargs cp --parents -t /tmp
18- # find ./ -name "COLCON_IGNORE" | \
19- # xargs cp --parents -t /tmp
22+ RUN mkdir -p /tmp/opt && \
23+ find ./ -name "package.xml" | \
24+ xargs cp --parents -t /tmp/opt && \
25+ find ./ -name "COLCON_IGNORE" | \
26+ xargs cp --parents -t /tmp/opt || true
2027
2128# multi-stage for building
22- FROM $FROM_IMAGE AS build
29+ FROM $FROM_IMAGE AS builder
30+ ARG DEBIAN_FRONTEND=noninteractive
2331
2432# install CI dependencies
2533RUN apt-get update && apt-get install -q -y \
@@ -31,23 +39,11 @@ RUN apt-get update && apt-get install -q -y \
3139 wget \
3240 && rm -rf /var/lib/apt/lists/*
3341
34- # copy overlay manifests
35- ENV OVERLAY_WS /opt/overlay_ws
36- COPY --from=cache /tmp/overlay_ws $OVERLAY_WS
37- WORKDIR $OVERLAY_WS
38-
39- # install overlay dependencies
40- RUN . /opt/ros/$ROS_DISTRO/setup.sh && \
41- apt-get update && rosdep install -q -y \
42- --from-paths src \
43- --ignore-src \
44- && rm -rf /var/lib/apt/lists/*
45-
46- # install rust
42+ # install rust dependencies
4743ENV RUSTUP_HOME=/usr/local/rustup \
4844 CARGO_HOME=/usr/local/cargo \
4945 PATH=/usr/local/cargo/bin:$PATH \
50- RUST_VERSION=1.41.1
46+ RUST_VERSION=1.45.2
5147RUN set -eux; \
5248 wget -O rustup-init "https://sh.rustup.rs" ; \
5349 chmod +x rustup-init; \
@@ -60,17 +56,61 @@ RUN set -eux; \
6056 cargo --version; \
6157 rustc --version;
6258
63- # copy overlay source
64- COPY --from=cache $OVERLAY_WS ./
59+ # install underlay dependencies
60+ ARG UNDERLAY_WS
61+ WORKDIR $UNDERLAY_WS
62+ COPY --from=cacher /tmp/$UNDERLAY_WS ./
63+ RUN . /opt/ros/$ROS_DISTRO/setup.sh && \
64+ apt-get update && rosdep install -q -y \
65+ --from-paths src \
66+ --ignore-src \
67+ && rm -rf /var/lib/apt/lists/*
68+
69+ # build underlay source
70+ COPY --from=cacher $UNDERLAY_WS ./
71+ ARG UNDERLAY_MIXINS="release ccache"
72+ ARG FAIL_ON_BUILD_FAILURE=True
73+ RUN . /opt/ros/$ROS_DISTRO/setup.sh && \
74+ colcon build \
75+ --symlink-install \
76+ --mixin $UNDERLAY_MIXINS \
77+ --event-handlers console_direct+ \
78+ || ([ -z "$FAIL_ON_BUILD_FAILURE" ] || exit 1)
79+
80+ # install overlay dependencies
81+ ARG OVERLAY_WS
82+ WORKDIR $OVERLAY_WS
83+ COPY --from=cacher /tmp/$OVERLAY_WS ./
84+ RUN . $UNDERLAY_WS/install/setup.sh && \
85+ apt-get update && rosdep install -q -y \
86+ --from-paths src \
87+ $UNDERLAY_WS/src \
88+ --ignore-src \
89+ && rm -rf /var/lib/apt/lists/*
6590
6691# build overlay source
92+ COPY --from=cacher $OVERLAY_WS ./
6793ARG OVERLAY_MIXINS="release ccache"
68- RUN . /opt/ros/$ROS_DISTRO /setup.sh && \
94+ RUN . $UNDERLAY_WS/install /setup.sh && \
6995 colcon build \
7096 --symlink-install \
71- --mixin $OVERLAY_MIXINS
97+ --mixin $OVERLAY_MIXINS \
98+ || ([ -z "$FAIL_ON_BUILD_FAILURE" ] || exit 1)
7299
73100# source overlay from entrypoint
101+ ENV UNDERLAY_WS $UNDERLAY_WS
102+ ENV OVERLAY_WS $OVERLAY_WS
74103RUN sed --in-place \
75104 's|^source .*|source "$OVERLAY_WS/install/setup.bash"|' \
76- /ros_entrypoint.sh
105+ /ros_entrypoint.sh
106+
107+ # test overlay build
108+ ARG RUN_TESTS
109+ ARG FAIL_ON_TEST_FAILURE=Ture
110+ RUN if [ -n "$RUN_TESTS" ]; then \
111+ . $OVERLAY_WS/install/setup.sh && \
112+ colcon test \
113+ --mixin $OVERLAY_MIXINS \
114+ && colcon test-result \
115+ || ([ -z "$FAIL_ON_TEST_FAILURE" ] || exit 1) \
116+ fi
0 commit comments