From 7e2b316fc58d2574670f061f4c4016999ba0af91 Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wdconinc@gmail.com>
Date: Thu, 5 Sep 2024 16:05:56 +0000
Subject: [PATCH] feat: remove staging layer in container build

---
 containers/jug/dev.Dockerfile | 79 +++++++++++++----------------------
 spack.sh                      |  6 +++
 2 files changed, 36 insertions(+), 49 deletions(-)

diff --git a/containers/jug/dev.Dockerfile b/containers/jug/dev.Dockerfile
index f59d3d8d0..807d5377c 100644
--- a/containers/jug/dev.Dockerfile
+++ b/containers/jug/dev.Dockerfile
@@ -6,7 +6,7 @@ ARG RUNTIME_IMAGE="debian_stable_base"
 ARG INTERNAL_TAG="testing"
 
 ## ========================================================================================
-## STAGE0: spack image
+## STAGE 0: spack image
 ## EIC spack image with spack and eic-spack repositories
 ## ========================================================================================
 FROM ${DOCKER_REGISTRY}${BUILDER_IMAGE}:${INTERNAL_TAG} as spack
@@ -56,6 +56,7 @@ if [ -n "${SPACK_CHERRYPICKS}" ] ; then
     fi
   done
 fi
+git -C $SPACK_ROOT gc --prune=all --aggressive
 sed -i 's/timeout=60/timeout=None/' $SPACK_ROOT/lib/spack/spack/stage.py
 ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash /usr/bin/docker-shell
 ln -s $SPACK_ROOT/share/spack/docker/entrypoint.bash /usr/bin/interactive-shell
@@ -132,7 +133,7 @@ EOF
 
 
 ## ========================================================================================
-## STAGE1: builder
+## STAGE 1: builder
 ## EIC builder image with spack environment
 ## ========================================================================================
 FROM spack as builder
@@ -157,6 +158,7 @@ make --jobs ${jobs} --keep-going --directory /opt/spack-environment \
   SPACK_ENV=${SPACK_ENV} \
   BUILDCACHE_OCI_PROMPT="eicweb" \
   BUILDCACHE_OCI_FINAL="ghcr"
+spack gc --yes-to-all
 spack find --long --no-groups \
 | sed -e '1,/Installed packages/d;s/\([^@]*\).*/\1/g' \
 | uniq -D -f1 | grep -v -w -e "\(epic\|py-pip\|py-cython\)" \
@@ -208,6 +210,7 @@ spack concretize --fresh --force
 make --jobs ${jobs} --keep-going --directory /opt/spack-environment \
   SPACK_ENV=${SPACK_ENV} \
   BUILDCACHE_OCI_FINAL="eicweb"
+spack gc --yes-to-all
 spack find --long --no-groups \
 | sed -e '1,/Installed packages/d;s/\([^@]*\).*/\1/g' \
 | uniq -D -f1 | grep -v -w -e "\(epic\|py-pip\|py-cython\)" \
@@ -241,35 +244,16 @@ set -e
 spack env activate --sh --dir ${SPACK_ENV} > /etc/profile.d/z10_spack_environment.sh
 EOF
 
-## make sure we have the entrypoints setup correctly
-ENTRYPOINT []
-CMD ["bash", "--rcfile", "/etc/profile", "-l"]
-USER 0
-WORKDIR /
-
-
-## ========================================================================================
-## STAGE 2: staging image with unnecessariy packages removed and stripped binaries
-## ========================================================================================
-FROM builder as staging
-
-# Garbage collect in environment
-RUN spack -e ${SPACK_ENV} gc -y
-
-# Garbage collect in git
-#RUN git -C $SPACK_ROOT gc --prune=all --aggressive
-
-## Bugfix to address issues loading the Qt5 libraries on Linux kernels prior to 3.15
-## See
-#https://askubuntu.com/questions/1034313/ubuntu-18-4-libqt5core-so-5-cannot-open-shared-object-file-no-such-file-or-dir
-## and links therin for more info
+## Fixup /opt/detector/epic-git.fcf90937193c983c0af2acf1251e01f2e2c3a259_main
 RUN <<EOF
-set -ex
-if [ -f /opt/local/lib/libQt5Core.so ] ; then
-  strip --remove-section=.note.ABI-tag /opt/local/lib/libQt5Core.so
-fi
+shopt -s nullglob
+cd /opt/detector
+for detector in epic-git.*_* ; do
+  ln -s ${detector} epic-${detector/*_/}
+done
 EOF
 
+## Fill jug_info
 RUN <<EOF
 set -ex
 spack debug report | sed "s/^/ - /" | sed "s/\* \*\*//" | sed "s/\*\*//" >> /etc/jug_info
@@ -286,15 +270,6 @@ COPY profile.d/a00_cleanup.sh /etc/profile.d
 COPY profile.d/z11_jug_env.sh /etc/profile.d
 COPY singularity.d /.singularity.d
 
-## Fixup /opt/detector/epic-git.fcf90937193c983c0af2acf1251e01f2e2c3a259_main
-RUN <<EOF
-shopt -s nullglob
-cd /opt/detector
-for detector in epic-git.*_* ; do
-  ln -s ${detector} epic-${detector/*_/}
-done
-EOF
-
 ## Add minio client into /opt/local/bin
 ADD --chmod=0755 https://dl.min.io/client/mc/release/linux-amd64/mc /opt/local/bin/mc-amd64
 ADD --chmod=0755 https://dl.min.io/client/mc/release/linux-arm64/mc /opt/local/bin/mc-arm64
@@ -308,9 +283,15 @@ for t in ${target[*]} ; do
 done
 EOF
 
+## make sure we have the entrypoints setup correctly
+ENTRYPOINT []
+CMD ["bash", "--rcfile", "/etc/profile", "-l"]
+USER 0
+WORKDIR /
+
 
 ## ========================================================================================
-## STAGE 3
+## STAGE 2
 ## Lean target image
 ## ========================================================================================
 FROM ${DOCKER_REGISTRY}${RUNTIME_IMAGE}:${INTERNAL_TAG} as runtime
@@ -320,17 +301,17 @@ LABEL maintainer="Sylvester Joosten <sjoosten@anl.gov>" \
       name="jug_xl" \
       march="$TARGETPLATFORM"
 
-## copy over everything we need from staging
-COPY --from=staging /opt/spack /opt/spack
-COPY --from=staging /opt/spack-environment /opt/spack-environment
-COPY --from=staging /opt/software /opt/software
-COPY --from=staging /opt/._local /opt/._local
-COPY --from=staging /opt/._detector /opt/._detector
-COPY --from=staging /etc/profile.d /etc/profile.d
-COPY --from=staging /etc/jug_info /etc/jug_info
-COPY --from=staging /etc/eic-env.sh /etc/eic-env.sh
-COPY --from=staging /.singularity.d /.singularity.d
-COPY --from=staging /usr/bin/docker-shell /usr/bin/docker-shell
+## copy over everything we need from builder
+COPY --from=builder /opt/spack /opt/spack
+COPY --from=builder /opt/spack-environment /opt/spack-environment
+COPY --from=builder /opt/software /opt/software
+COPY --from=builder /opt/._local /opt/._local
+COPY --from=builder /opt/._detector /opt/._detector
+COPY --from=builder /etc/profile.d /etc/profile.d
+COPY --from=builder /etc/jug_info /etc/jug_info
+COPY --from=builder /etc/eic-env.sh /etc/eic-env.sh
+COPY --from=builder /.singularity.d /.singularity.d
+COPY --from=builder /usr/bin/docker-shell /usr/bin/docker-shell
 
 ## Use spack entrypoint. NOTE: Requires `set -ex` in all multi-line scripts!
 ENV SPACK_ROOT=/opt/spack
diff --git a/spack.sh b/spack.sh
index 0e7667803..1a9adf931 100644
--- a/spack.sh
+++ b/spack.sh
@@ -25,6 +25,9 @@ d3bf1e04fca844abb7c1eeac38dda4e126c81b67
 8b2fec61f23a7b8230c0ed0378d90d04d8f590d8
 2242da65fdc06e7ac04c43613dc7795164b3a7a3
 1dc63dbea6c1d42aabf0e14b51439dcc46423e79
+3b59817ea7be35f4222dc88313734f7a30733ad7
+737b70cbbfacb3fba8054426e9b5bf8ede6d8faf
+a66586d749197841bd74e289802126f2359287a8
 ---
 ## Optional hash table with comma-separated file list
 read -r -d '' SPACK_CHERRYPICKS_FILES <<- \
@@ -49,3 +52,6 @@ read -r -d '' SPACK_CHERRYPICKS_FILES <<- \
 ## 8b2fec61f23a7b8230c0ed0378d90d04d8f590d8: hepmc3: add v3.3.0
 ## 2242da65fdc06e7ac04c43613dc7795164b3a7a3: graphviz: add through v12.1.0
 ## 1dc63dbea6c1d42aabf0e14b51439dcc46423e79: acts: add v34.1.0, v35.0.0 (identification, sycl variants changes)
+## 3b59817ea7be35f4222dc88313734f7a30733ad7: deal with TimeoutError from ssl.py
+## 737b70cbbfacb3fba8054426e9b5bf8ede6d8faf: Buildcache: remove deprecated --allow-root and preview subcommand
+## a66586d749197841bd74e289802126f2359287a8: spack buildcache push: best effort
-- 
GitLab