From b17202b090d5adbfcea7c6bf549b9a54da1c8524 Mon Sep 17 00:00:00 2001 From: Yutaka Kondo Date: Fri, 6 Sep 2024 22:25:35 +0900 Subject: [PATCH] feat(docker): separation from `universe-devel` stage to `universe-localization-mapping-devel` stage (#5186) * update rosdep Signed-off-by: Yutaka Kondo * update build Signed-off-by: Yutaka Kondo * fix Signed-off-by: Yutaka Kondo * fix action Signed-off-by: Yutaka Kondo * update svg Signed-off-by: Yutaka Kondo * update readme Signed-off-by: Yutaka Kondo * Revert "fix action" This reverts commit 5ecc4cc789be1dc374e58dc0bc9ca84573ade52d. --------- Signed-off-by: Yutaka Kondo --- docker/Dockerfile | 97 +++++++++++--- docker/Dockerfile.svg | 304 +++++++++++++++++++++++++----------------- docker/README.md | 9 +- 3 files changed, 263 insertions(+), 147 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 9e62ce5a02e..edb8d78ba7c 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -76,6 +76,10 @@ RUN rosdep keys --ignore-src --from-paths src \ > /rosdep-universe-common-depend-packages.txt \ && cat /rosdep-universe-common-depend-packages.txt +FROM rosdep-depend AS rosdep-universe-sensing-perception-depend +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO + COPY src/universe/autoware.universe/perception /autoware/src/universe/autoware.universe/perception COPY src/universe/autoware.universe/sensing /autoware/src/universe/autoware.universe/sensing RUN rosdep keys --ignore-src --from-paths src \ @@ -93,6 +97,24 @@ RUN rosdep keys --dependency-types=exec --ignore-src --from-paths src \ > /rosdep-universe-sensing-perception-exec-depend-packages.txt \ && cat /rosdep-universe-sensing-perception-exec-depend-packages.txt +FROM rosdep-depend AS rosdep-universe-localization-mapping-depend +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO + +COPY src/universe/autoware.universe/localization /autoware/src/universe/autoware.universe/localization +COPY src/universe/autoware.universe/map /autoware/src/universe/autoware.universe/map +RUN rosdep keys --ignore-src --from-paths src \ + | xargs rosdep resolve --rosdistro ${ROS_DISTRO} \ + | grep -v '^#' \ + | sed 's/ \+/\n/g'\ + | sort \ + > /rosdep-universe-localization-mapping-depend-packages.txt \ + && cat /rosdep-universe-localization-mapping-depend-packages.txt + +FROM rosdep-depend AS rosdep-universe-depend +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO + COPY src/launcher /autoware/src/launcher COPY src/param /autoware/src/param COPY src/sensor_component /autoware/src/sensor_component @@ -165,10 +187,10 @@ RUN --mount=type=ssh \ && cat /tmp/rosdep-universe-common-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache -# TODO(youtalk): Remove COPYs when https://github.com/autowarefoundation/autoware.universe/issues/8695 is resolved # hadolint ignore=SC1091 RUN --mount=type=cache,target=${CCACHE_DIR} \ --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/common,target=/autoware/src/universe/autoware.universe/common \ + # TODO(youtalk): Remove --mount options when https://github.com/autowarefoundation/autoware.universe/issues/8695 is resolved --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/simulator/dummy_perception_publisher,target=/autoware/src/universe/autoware.universe/simulator/dummy_perception_publisher \ --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/vehicle/autoware_vehicle_info_utils,target=/autoware/src/universe/autoware.universe/vehicle/autoware_vehicle_info_utils \ --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/external,target=/autoware/src/universe/external \ @@ -193,7 +215,7 @@ ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies -COPY --from=rosdep-depend /rosdep-universe-sensing-perception-depend-packages.txt /tmp/rosdep-universe-sensing-perception-depend-packages.txt +COPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-depend-packages.txt /tmp/rosdep-universe-sensing-perception-depend-packages.txt # hadolint ignore=SC2002 RUN --mount=type=ssh \ apt-get update \ @@ -202,8 +224,40 @@ RUN --mount=type=ssh \ # hadolint ignore=SC1091 RUN --mount=type=cache,target=${CCACHE_DIR} \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/perception,target=/autoware/src/universe/autoware.universe/perception \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/sensing,target=/autoware/src/universe/autoware.universe/sensing \ + --mount=type=bind,from=rosdep-universe-sensing-perception-depend,source=/autoware/src/universe/autoware.universe/perception,target=/autoware/src/universe/autoware.universe/perception \ + --mount=type=bind,from=rosdep-universe-sensing-perception-depend,source=/autoware/src/universe/autoware.universe/sensing,target=/autoware/src/universe/autoware.universe/sensing \ + source /opt/ros/"$ROS_DISTRO"/setup.bash \ + && source /opt/autoware/setup.bash \ + && du -sh ${CCACHE_DIR} && ccache -s \ + && colcon build --cmake-args \ + " -Wno-dev" \ + " --no-warn-unused-cli" \ + --merge-install \ + --install-base /opt/autoware \ + --mixin release compile-commands ccache \ + && du -sh ${CCACHE_DIR} && ccache -s \ + && rm -rf /autoware/build + +ENTRYPOINT ["/ros_entrypoint.sh"] +CMD ["/bin/bash"] + +FROM universe-common-devel AS universe-localization-mapping-devel +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO +ENV CCACHE_DIR="/root/.ccache" + +# Install rosdep dependencies +COPY --from=rosdep-universe-localization-mapping-depend /rosdep-universe-localization-mapping-depend-packages.txt /tmp/rosdep-universe-localization-mapping-depend-packages.txt +# hadolint ignore=SC2002 +RUN --mount=type=ssh \ + apt-get update \ + && cat /tmp/rosdep-universe-localization-mapping-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ + && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache + +# hadolint ignore=SC1091 +RUN --mount=type=cache,target=${CCACHE_DIR} \ + --mount=type=bind,from=rosdep-universe-localization-mapping-depend,source=/autoware/src/universe/autoware.universe/localization,target=/autoware/src/universe/autoware.universe/localization \ + --mount=type=bind,from=rosdep-universe-localization-mapping-depend,source=/autoware/src/universe/autoware.universe/map,target=/autoware/src/universe/autoware.universe/map \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && du -sh ${CCACHE_DIR} && ccache -s \ @@ -225,7 +279,7 @@ ARG ROS_DISTRO ENV CCACHE_DIR="/root/.ccache" # Install rosdep dependencies -COPY --from=rosdep-depend /rosdep-universe-depend-packages.txt /tmp/rosdep-universe-depend-packages.txt +COPY --from=rosdep-universe-depend /rosdep-universe-depend-packages.txt /tmp/rosdep-universe-depend-packages.txt # hadolint ignore=SC2002 RUN --mount=type=ssh \ apt-get update \ @@ -233,23 +287,22 @@ RUN --mount=type=ssh \ && apt-get autoremove -y && apt-get clean -y && rm -rf /var/lib/apt/lists/* "$HOME"/.cache COPY --from=universe-sensing-perception-devel /opt/autoware /opt/autoware +COPY --from=universe-localization-mapping-devel /opt/autoware /opt/autoware # hadolint ignore=SC1091 RUN --mount=type=cache,target=${CCACHE_DIR} \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/launcher,target=/autoware/src/launcher \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/param,target=/autoware/src/param \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/sensor_component,target=/autoware/src/sensor_component \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/sensor_kit,target=/autoware/src/sensor_kit \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/control,target=/autoware/src/universe/autoware.universe/control \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/evaluator,target=/autoware/src/universe/autoware.universe/evaluator \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/launch,target=/autoware/src/universe/autoware.universe/launch \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/localization,target=/autoware/src/universe/autoware.universe/localization \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/map,target=/autoware/src/universe/autoware.universe/map \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/planning,target=/autoware/src/universe/autoware.universe/planning \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/simulator,target=/autoware/src/universe/autoware.universe/simulator \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/system,target=/autoware/src/universe/autoware.universe/system \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/tools,target=/autoware/src/universe/autoware.universe/tools \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/universe/autoware.universe/vehicle,target=/autoware/src/universe/autoware.universe/vehicle \ - --mount=type=bind,from=rosdep-depend,source=/autoware/src/vehicle,target=/autoware/src/vehicle \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/launcher,target=/autoware/src/launcher \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/param,target=/autoware/src/param \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/sensor_component,target=/autoware/src/sensor_component \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/sensor_kit,target=/autoware/src/sensor_kit \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/control,target=/autoware/src/universe/autoware.universe/control \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/evaluator,target=/autoware/src/universe/autoware.universe/evaluator \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/launch,target=/autoware/src/universe/autoware.universe/launch \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/planning,target=/autoware/src/universe/autoware.universe/planning \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/simulator,target=/autoware/src/universe/autoware.universe/simulator \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/system,target=/autoware/src/universe/autoware.universe/system \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/tools,target=/autoware/src/universe/autoware.universe/tools \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/universe/autoware.universe/vehicle,target=/autoware/src/universe/autoware.universe/vehicle \ + --mount=type=bind,from=rosdep-universe-depend,source=/autoware/src/vehicle,target=/autoware/src/vehicle \ source /opt/ros/"$ROS_DISTRO"/setup.bash \ && source /opt/autoware/setup.bash \ && du -sh ${CCACHE_DIR} && ccache -s \ @@ -272,7 +325,7 @@ ARG LIB_DIR ARG SETUP_ARGS # Set up runtime environment and artifacts -COPY --from=rosdep-depend /rosdep-universe-sensing-perception-exec-depend-packages.txt /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt +COPY --from=rosdep-universe-sensing-perception-depend /rosdep-universe-sensing-perception-exec-depend-packages.txt /tmp/rosdep-universe-sensing-perception-exec-depend-packages.txt # hadolint ignore=SC2002 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ @@ -306,7 +359,7 @@ ARG LIB_DIR ARG SETUP_ARGS # Set up runtime environment and artifacts -COPY --from=rosdep-depend /rosdep-exec-depend-packages.txt /tmp/rosdep-exec-depend-packages.txt +COPY --from=rosdep-universe-depend /rosdep-exec-depend-packages.txt /tmp/rosdep-exec-depend-packages.txt # hadolint ignore=SC2002 RUN --mount=type=ssh \ --mount=type=cache,target=/var/cache/apt,sharing=locked \ diff --git a/docker/Dockerfile.svg b/docker/Dockerfile.svg index 82bdf254968..6975aaaf038 100644 --- a/docker/Dockerfile.svg +++ b/docker/Dockerfile.svg @@ -4,206 +4,264 @@ - - + + G - + cluster_legend - + key -FROM ...  -COPY --from=...  -RUN --mount=(.*)from=...  +FROM ...  +COPY --from=...  +RUN --mount=(.*)from=...  key2 -  -  -  +  +  +  key:e->key2:w - - + + key:e->key2:w - - + + key:e->key2:w - - + + external_image_0 - -$BASE_IMAGE + +$BASE_IMAGE stage_0 - -base + +base external_image_0->stage_0 - - + + stage_1 - -rosdep-depend + +rosdep-depend external_image_0->stage_1 - - + + - + -stage_2 - -core-devel +stage_5 + +core-devel - + -stage_0->stage_2 - - +stage_0->stage_5 + + - + -stage_6 - -universe-sensing-perception +stage_10 + +universe-sensing-perception - + -stage_0->stage_6 - - - +stage_0->stage_10 + + - + -stage_7 - -universe +stage_11 + +universe - + -stage_0->stage_7 - - +stage_0->stage_11 + + + + + + +stage_1->stage_5 + + + + + +stage_2 + +rosdep-universe-sensing-perception-depend stage_1->stage_2 - - - - - -stage_1->stage_6 - - - - - -stage_1->stage_7 - - - - - + + + - + stage_3 - -universe-common-devel + +rosdep-universe-localization-mapping-depend - + stage_1->stage_3 - - + + - + stage_4 - -universe-sensing-perception-devel + +rosdep-universe-depend - + stage_1->stage_4 - - + + - - -stage_5 - -universe-devel + + +stage_6 + +universe-common-devel - - -stage_1->stage_5 - - - - - -stage_2->stage_3 - - - - - -stage_3->stage_4 - - - - - -stage_3->stage_5 - - - - + + +stage_1->stage_6 + + + + -stage_4->stage_6 - - +stage_5->stage_6 + + - - -stage_4->stage_5 - - + + +stage_2->stage_10 + + - + + +stage_7 + +universe-sensing-perception-devel + + + +stage_2->stage_7 + + + + + +stage_8 + +universe-localization-mapping-devel + + + +stage_3->stage_8 + + + + + +stage_4->stage_11 + + + + + +stage_9 + +universe-devel + + + +stage_4->stage_9 + + + + -stage_5->stage_7 - - +stage_6->stage_7 + + + + + +stage_6->stage_8 + + + + + +stage_6->stage_9 + + + + + +stage_7->stage_10 + + + + + +stage_7->stage_9 + + + + + +stage_8->stage_9 + + + + + +stage_9->stage_11 + + diff --git a/docker/README.md b/docker/README.md index af56cd4061a..91f959b6197 100644 --- a/docker/README.md +++ b/docker/README.md @@ -54,6 +54,13 @@ This stage installs the dependency packages based on `/rosdep-universe-sensing-p This stage is a Autoware Universe Sensing/Perception runtime container. It only includes the dependencies given by `/rosdep-universe-sensing-perception-exec-depend-packages.txt` and the binaries built in the `universe-sensing-perception-devel` stage. +### `universe-localization-mapping-devel` + +This stage installs the dependency packages based on `/rosdep-universe-localization-mapping-depend-packages.txt` and build the packages under the following directories of `autoware.repos`. + +- `universe/autoware.universe/localization` +- `universe/autoware.universe/map` + ### `universe-devel` This stage installs the dependency packages based on `/rosdep-universe-depend-packages.txt` and build the remaining packages of `autoware.repos`: @@ -65,8 +72,6 @@ This stage installs the dependency packages based on `/rosdep-universe-depend-pa - `universe/autoware.universe/control` - `universe/autoware.universe/evaluator` - `universe/autoware.universe/launch` -- `universe/autoware.universe/localization` -- `universe/autoware.universe/map` - `universe/autoware.universe/planning` - `universe/autoware.universe/simulator` - `universe/autoware.universe/system`