diff --git a/.github/actions/docker-build-and-push/action.yaml b/.github/actions/docker-build-and-push/action.yaml index bc22829e70e..d81e73f5042 100644 --- a/.github/actions/docker-build-and-push/action.yaml +++ b/.github/actions/docker-build-and-push/action.yaml @@ -64,6 +64,19 @@ runs: run: echo "date=$(date +'%Y%m%d')" >> $GITHUB_OUTPUT shell: bash + - name: Docker meta for autoware:core + id: meta-core + uses: docker/metadata-action@v5 + with: + images: ghcr.io/${{ github.repository_owner }}/${{ inputs.target-image }} + tags: | + type=raw,value=core-${{ inputs.platform }} + type=raw,value=core-${{ steps.date.outputs.date }}-${{ inputs.platform }} + type=ref,event=tag,prefix=core-,suffix=-${{ inputs.platform }} + bake-target: docker-metadata-action-core + flavor: | + latest=false + - name: Docker meta for autoware:core-devel id: meta-core-devel uses: docker/metadata-action@v5 @@ -246,6 +259,7 @@ runs: push: true files: | docker/docker-bake.hcl + ${{ steps.meta-core.outputs.bake-file }} ${{ steps.meta-core-devel.outputs.bake-file }} ${{ steps.meta-universe-sensing-perception-devel.outputs.bake-file }} ${{ steps.meta-universe-sensing-perception.outputs.bake-file }} diff --git a/docker/Dockerfile b/docker/Dockerfile index b4b56698a9e..3bf20bf5d5a 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -28,6 +28,9 @@ COPY src/core /autoware/src/core RUN rosdep update && /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} \ > /rosdep-core-depend-packages.txt \ && cat /rosdep-core-depend-packages.txt +RUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} --dependency-types=exec \ + > /rosdep-core-exec-depend-packages.txt \ + && cat /rosdep-core-exec-depend-packages.txt COPY src/universe/external /autoware/src/universe/external COPY src/universe/autoware.universe/common /autoware/src/universe/autoware.universe/common @@ -43,7 +46,7 @@ COPY src/universe/autoware.universe/visualization /autoware/src/universe/autowar RUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} \ > /rosdep-universe-visualization-depend-packages.txt \ && cat /rosdep-universe-visualization-depend-packages.txt -RUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} \ +RUN /autoware/resolve_rosdep_keys.sh /autoware/src ${ROS_DISTRO} --dependency-types=exec \ > /rosdep-universe-visualization-exec-depend-packages.txt \ && cat /rosdep-universe-visualization-exec-depend-packages.txt @@ -405,6 +408,32 @@ COPY --from=universe-devel /opt/autoware /opt/autoware ENTRYPOINT ["/ros_entrypoint.sh"] CMD ["/bin/bash"] +# hadolint ignore=DL3006 +FROM $AUTOWARE_BASE_IMAGE AS core +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ARG ROS_DISTRO +ARG LIB_DIR + +# Set up runtime environment +COPY --from=rosdep-depend /rosdep-core-exec-depend-packages.txt /tmp/rosdep-core-exec-depend-packages.txt +# hadolint ignore=SC2002 +RUN --mount=type=ssh \ + --mount=type=cache,target=/var/cache/apt,sharing=locked \ + ./setup-dev-env.sh -y --module all --no-nvidia --no-cuda-drivers --runtime openadkit \ + && pip uninstall -y ansible ansible-core \ + && apt-get update \ + && cat /tmp/rosdep-core-exec-depend-packages.txt | xargs apt-get install -y --no-install-recommends \ + && /autoware/cleanup_system.sh $LIB_DIR $ROS_DISTRO + +COPY --from=core-devel /opt/autoware /opt/autoware + +# Copy bash aliases +COPY docker/etc/.bash_aliases /root/.bash_aliases +RUN echo "source /opt/autoware/setup.bash" > /etc/bash.bashrc + +ENTRYPOINT ["/ros_entrypoint.sh"] +CMD ["/bin/bash"] + # hadolint ignore=DL3006 FROM $AUTOWARE_BASE_IMAGE AS universe-sensing-perception SHELL ["/bin/bash", "-o", "pipefail", "-c"] diff --git a/docker/Dockerfile.svg b/docker/Dockerfile.svg index bbbb9a89d74..eb12d09a560 100644 --- a/docker/Dockerfile.svg +++ b/docker/Dockerfile.svg @@ -3,45 +3,45 @@ - - + + 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 - - + + @@ -50,9 +50,9 @@ fill="none" stroke="#333333" stroke-dasharray="5,2" - d="M161,-632.44C161,-632.44 41,-632.44 41,-632.44 35,-632.44 29,-626.44 29,-620.44 29,-620.44 29,-608.44 29,-608.44 29,-602.44 35,-596.44 41,-596.44 41,-596.44 161,-596.44 161,-596.44 167,-596.44 173,-602.44 173,-608.44 173,-608.44 173,-620.44 173,-620.44 173,-626.44 167,-632.44 161,-632.44" + d="M161,-430.92C161,-430.92 41,-430.92 41,-430.92 35,-430.92 29,-424.92 29,-418.92 29,-418.92 29,-406.92 29,-406.92 29,-400.92 35,-394.92 41,-394.92 41,-394.92 161,-394.92 161,-394.92 167,-394.92 173,-400.92 173,-406.92 173,-406.92 173,-418.92 173,-418.92 173,-424.92 167,-430.92 161,-430.92" /> - $BASE_IMAGE + $BASE_IMAGE @@ -60,15 +60,15 @@ - rosdep-depend + rosdep-depend external_image_0->stage_0 - - + + @@ -76,15 +76,15 @@ - rosdep-universe-visualization-depend + rosdep-universe-visualization-depend stage_0->stage_1 - - + + @@ -92,15 +92,15 @@ - rosdep-universe-sensing-perception-depend + rosdep-universe-sensing-perception-depend stage_0->stage_2 - - + + @@ -108,16 +108,16 @@ - rosdep-universe-localization-mapping-depend + rosdep-universe-localization-mapping-depend stage_0->stage_3 - - - + + + @@ -125,15 +125,15 @@ - rosdep-universe-planning-control-depend + rosdep-universe-planning-control-depend stage_0->stage_4 - - + + @@ -141,19 +141,16 @@ - rosdep-universe-vehicle-system-depend + rosdep-universe-vehicle-system-depend stage_0->stage_5 - - + + + @@ -161,15 +158,15 @@ - rosdep-universe-depend + rosdep-universe-depend stage_0->stage_6 - - + + @@ -177,15 +174,15 @@ - core-devel + core-devel stage_0->stage_7 - - + + @@ -193,95 +190,94 @@ - universe-common-devel + universe-common-devel stage_0->stage_8 - - + + - + - stage_15 + stage_18 - universe-visualization-devel + core - + - stage_1->stage_15 - - + stage_0->stage_18 + + - + - stage_23 + stage_15 - universe-visualization + universe-visualization-devel - - - stage_1->stage_23 - + + + stage_1->stage_15 + + - + - stage_10 + stage_24 - universe-sensing-perception-devel + universe-visualization - + - stage_2->stage_10 - - + stage_1->stage_24 + - + - stage_11 + stage_10 - universe-sensing-perception-devel-cuda + universe-sensing-perception-devel - - - stage_2->stage_11 - - - + + + stage_2->stage_10 + + - + - stage_18 + stage_11 - universe-sensing-perception + universe-sensing-perception-devel-cuda - - - stage_2->stage_18 - - + + + stage_2->stage_11 + + @@ -289,442 +285,479 @@ - universe-sensing-perception-cuda + universe-sensing-perception stage_2->stage_19 - - + + - + + stage_20 + + universe-sensing-perception-cuda + + + + stage_2->stage_20 + + + + + stage_12 - universe-localization-mapping-devel + universe-localization-mapping-devel - + stage_3->stage_12 - - + + - - - stage_20 + + + stage_21 - universe-localization-mapping + universe-localization-mapping - - - stage_3->stage_20 - - + + + stage_3->stage_21 + + - + stage_13 - universe-planning-control-devel + universe-planning-control-devel - + stage_4->stage_13 - - + + - - - stage_21 + + + stage_22 - universe-planning-control + universe-planning-control - - - stage_4->stage_21 - - + + + stage_4->stage_22 + + - + stage_14 - universe-vehicle-system-devel + universe-vehicle-system-devel - + stage_5->stage_14 - - + + - - - stage_22 + + + stage_23 - universe-vehicle-system + universe-vehicle-system - - - stage_5->stage_22 - - + + + stage_5->stage_23 + + - + stage_16 - universe-devel + universe-devel - + stage_6->stage_16 - - + + - + stage_17 - universe-devel-cuda + universe-devel-cuda - + stage_6->stage_17 - - + + - - - stage_24 + + + stage_25 - universe + universe - - - stage_6->stage_24 - - - + + + stage_6->stage_25 + + + - - - stage_25 + + + stage_26 - universe-cuda + universe-cuda - - - stage_6->stage_25 + + + stage_6->stage_26 - + stage_7->stage_8 - - + + + + + + stage_7->stage_18 + + - + stage_8->stage_15 - - + + - + stage_8->stage_10 - - + + - + stage_8->stage_12 - - + + - + stage_8->stage_13 - - + + - + stage_8->stage_14 - - + + - + stage_8->stage_16 - - + + - + stage_9 - universe-common-devel-cuda + universe-common-devel-cuda - + stage_8->stage_9 - - + + - - - stage_15->stage_23 + + + stage_15->stage_24 + + + + + + stage_15->stage_16 - - - - - stage_15->stage_16 - - + - + stage_10->stage_11 - - + + - - - stage_10->stage_18 - - + + + stage_10->stage_19 + + - + stage_10->stage_16 - - + + - - - stage_11->stage_19 - - + + + stage_11->stage_20 + + - + stage_11->stage_17 - - + + - - - stage_12->stage_20 - - + + + stage_12->stage_21 + + - + stage_12->stage_16 - - + + - - - stage_13->stage_21 - - + + + stage_13->stage_22 + + - + stage_13->stage_16 - - + + - - - stage_14->stage_22 - - + + + stage_14->stage_23 + + - + stage_14->stage_16 - - + + - + stage_16->stage_17 - - + + - - - stage_16->stage_24 - - + + + stage_16->stage_25 + + - - - stage_17->stage_25 - - + + + stage_17->stage_26 + + - + external_image_1 - $AUTOWARE_BASE_IMAGE + $AUTOWARE_BASE_IMAGE - + external_image_1->stage_7 - - + + - - - external_image_1->stage_23 + + + external_image_1->stage_18 + + + + + + external_image_1->stage_24 - - + + - - - external_image_1->stage_18 - - - - - - external_image_1->stage_20 - - + + + external_image_1->stage_19 + + - + external_image_1->stage_21 - - + + - + external_image_1->stage_22 - - + + + - + - external_image_1->stage_24 - - - - - + external_image_1->stage_23 + + + + + + external_image_1->stage_25 + + + + + - + stage_9->stage_11 - - + + - + stage_9->stage_17 - - + + - + external_image_2 - $AUTOWARE_BASE_CUDA_IMAGE - - - - external_image_2->stage_19 - - - - - - external_image_2->stage_25 - - - + d="M1408.75,-860.92C1408.75,-860.92 1195.5,-860.92 1195.5,-860.92 1189.5,-860.92 1183.5,-854.92 1183.5,-848.92 1183.5,-848.92 1183.5,-836.92 1183.5,-836.92 1183.5,-830.92 1189.5,-824.92 1195.5,-824.92 1195.5,-824.92 1408.75,-824.92 1408.75,-824.92 1414.75,-824.92 1420.75,-830.92 1420.75,-836.92 1420.75,-836.92 1420.75,-848.92 1420.75,-848.92 1420.75,-854.92 1414.75,-860.92 1408.75,-860.92" + /> + $AUTOWARE_BASE_CUDA_IMAGE + + + + external_image_2->stage_20 + + + + + + external_image_2->stage_26 + + + diff --git a/docker/README.md b/docker/README.md index 1d6d96b8789..4f4b5c32b8c 100644 --- a/docker/README.md +++ b/docker/README.md @@ -92,6 +92,7 @@ The ROS dependency package list files will be generated. These files will be used in the subsequent stages: - `core-devel` +- `core` - `universe-common` - `universe-COMPONENT-devel` (e.g. `universe-sensing-perception-devel`) - `universe-COMPONENT` (e.g. `universe-sensing-perception`) @@ -104,6 +105,10 @@ By generating only the package list files and copying them to the subsequent sta This stage installs the dependency packages based on `/rosdep-core-depend-packages.txt` and builds the packages under the `core` directory of `autoware.repos`. +### `core` + +This stage is an Autoware Core runtime container. It only includes the dependencies given by `/rosdep-core-exec-depend-packages.txt` and the binaries built in the `core-devel` stage. + ### `universe-common-devel` This stage installs the dependency packages based on `/rosdep-universe-common-depend-packages.txt` and builds the packages under the following directories of `autoware.repos`: diff --git a/docker/docker-bake.hcl b/docker/docker-bake.hcl index 600b47108be..df32d0908f2 100644 --- a/docker/docker-bake.hcl +++ b/docker/docker-bake.hcl @@ -1,5 +1,6 @@ group "default" { targets = [ + "core", "core-devel", "universe-sensing-perception-devel", "universe-sensing-perception", @@ -17,6 +18,7 @@ group "default" { } // For docker/metadata-action +target "docker-metadata-action-core" {} target "docker-metadata-action-core-devel" {} target "docker-metadata-action-universe-sensing-perception-devel" {} target "docker-metadata-action-universe-sensing-perception" {} @@ -31,6 +33,12 @@ target "docker-metadata-action-universe-visualization" {} target "docker-metadata-action-universe-devel" {} target "docker-metadata-action-universe" {} +target "core" { + inherits = ["docker-metadata-action-core"] + dockerfile = "docker/Dockerfile" + target = "core" +} + target "core-devel" { inherits = ["docker-metadata-action-core-devel"] dockerfile = "docker/Dockerfile"