From 729a2f7ee4c1d25674cd795c561b4e23a5c251b1 Mon Sep 17 00:00:00 2001
From: Wouter Deconinck <wdconinc@gmail.com>
Date: Wed, 1 Nov 2023 20:57:50 +0000
Subject: [PATCH] feat: install most dependencies in cachable layer, before
 adding main

---
 .gitlab-ci.yml                    |  8 ++++++--
 containers/jug/dev.Dockerfile     | 29 ++++++++++++++++++++++++-----
 spack-environment/dev/spack.yaml  |  2 ++
 spack-environment/packages.yaml   |  6 ++++++
 spack-environment/prod/spack.yaml |  2 ++
 5 files changed, 40 insertions(+), 7 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index a861ead46..e3b25f54d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -337,8 +337,12 @@ jug_dev:
                    --build-arg S3_SECRET_KEY=${S3_SECRET_KEY}
                    --build-arg JUG_VERSION=${EXPORT_TAG}-${BUILD_TYPE}-$(git rev-parse HEAD)
                    ${IF_BUILD_DEFAULT:+
-                     --build-arg JUGGLER_VERSION=${JUGGLER_VERSION}
-                     --build-arg EICRECON_VERSION=${EICRECON_VERSION}
+                     ${JUGGLER_VERSION:+--build-arg JUGGLER_VERSION=${JUGGLER_VERSION}}
+                     ${EICRECON_VERSION:+--build-arg EICRECON_VERSION=${EICRECON_VERSION}}
+                   }
+                   ${IF_BUILD_NIGHTLY:+
+                     --build-arg JUGGLER_VERSION=main
+                     --build-arg EICRECON_VERSION=main
                    }
                    --build-arg ENV=${ENV}
                    --build-arg jobs=${JOBS}
diff --git a/containers/jug/dev.Dockerfile b/containers/jug/dev.Dockerfile
index 649fbbd62..3a85c9dd9 100644
--- a/containers/jug/dev.Dockerfile
+++ b/containers/jug/dev.Dockerfile
@@ -120,11 +120,26 @@ FROM spack as builder
 ## Setup our custom environment (secret mount for write-enabled mirror)
 COPY --from=spack-environment . /opt/spack-environment/
 ARG ENV=dev
-ARG JUGGLER_VERSION="main"
+ENV SPACK_ENV=/opt/spack-environment/${ENV}
+RUN --mount=type=cache,target=/ccache,id=${TARGETPLATFORM}              \
+    --mount=type=cache,target=/var/cache/spack                          \
+    --mount=type=secret,id=mirrors,target=/opt/spack/etc/spack/mirrors.yaml \
+    source $SPACK_ROOT/share/spack/setup-env.sh                         \
+ && export CCACHE_DIR=/ccache                                           \
+ && spack buildcache update-index local                                 \
+ && spack buildcache update-index eics3rw                               \
+ && spack env activate --dir ${SPACK_ENV}                               \
+ && make --jobs ${jobs} --keep-going --directory /opt/spack-environment \
+    SPACK_ENV=${SPACK_ENV}                                              \
+    BUILDCACHE_MIRROR="local eics3rw"                                   \
+ && ccache --show-stats                                                 \
+ && ccache --zero-stats
+
+## Setup our custom environment with custom versions (on top of cached layer)
+ARG JUGGLER_VERSION=""
+ARG EICRECON_VERSION=""
 ADD https://eicweb.phy.anl.gov/api/v4/projects/EIC%2Fjuggler/repository/tree?ref=${JUGGLER_VERSION} /tmp/juggler.json
-ARG EICRECON_VERSION="main"
 ADD https://api.github.com/repos/eic/eicrecon/commits/${EICRECON_VERSION} /tmp/eicrecon.json
-ENV SPACK_ENV=/opt/spack-environment/${ENV}
 RUN --mount=type=cache,target=/ccache,id=${TARGETPLATFORM}              \
     --mount=type=cache,target=/var/cache/spack                          \
     --mount=type=secret,id=mirrors,target=/opt/spack/etc/spack/mirrors.yaml \
@@ -133,8 +148,12 @@ RUN --mount=type=cache,target=/ccache,id=${TARGETPLATFORM}              \
  && spack buildcache update-index local                                 \
  && spack buildcache update-index eics3rw                               \
  && spack env activate --dir ${SPACK_ENV}                               \
- && spack add juggler@git.${JUGGLER_VERSION}                            \
- && spack add eicrecon@git.${EICRECON_VERSION}                          \
+ && if [ -n ${JUGGLER_VERSION} ] ; then                                 \
+      spack rm juggler && spack add juggler@git.${JUGGLER_VERSION} ;    \
+    fi                                                                  \
+ && if [ -n ${EICRECON_VERSION} ] ; then                                \
+      spack rm eicrecon && spack add eicrecon@git.${EICRECON_VERSION} ; \
+    fi                                                                  \
  && make --jobs ${jobs} --keep-going --directory /opt/spack-environment \
     SPACK_ENV=${SPACK_ENV}                                              \
     BUILDCACHE_MIRROR="local eics3rw"                                   \
diff --git a/spack-environment/dev/spack.yaml b/spack-environment/dev/spack.yaml
index 4a2dcd6d6..78a174a18 100644
--- a/spack-environment/dev/spack.yaml
+++ b/spack-environment/dev/spack.yaml
@@ -23,6 +23,7 @@ spack:
     - edm4eic
     - edm4hep
     - eic-smear
+    - eicrecon
     - eigen
     - emacs
     - fastjet
@@ -37,6 +38,7 @@ spack:
     - imagemagick
     - irt
     - jana2
+    - juggler
     - lcov
     - lhapdf
     - madx
diff --git a/spack-environment/packages.yaml b/spack-environment/packages.yaml
index 768817c00..624150fac 100644
--- a/spack-environment/packages.yaml
+++ b/spack-environment/packages.yaml
@@ -89,6 +89,9 @@ packages:
   eic-smear:
     require:
     - '@1.1.12'
+  eicrecon:
+    require:
+    - '@1.6.1'
   eigen:
     require:
     - '@3.4.0'
@@ -146,6 +149,9 @@ packages:
     require:
     - '@2.1.1'
     - -ipo +podio +root +zmq
+  juggler:
+    require:
+    - '@10.1.0'
   lcov:
     require:
     - '@1.16'
diff --git a/spack-environment/prod/spack.yaml b/spack-environment/prod/spack.yaml
index 5e24e5615..1996195e8 100644
--- a/spack-environment/prod/spack.yaml
+++ b/spack-environment/prod/spack.yaml
@@ -7,6 +7,7 @@ spack:
     - cmake
     - dd4hep
     - edm4eic
+    - eicrecon
     - fastjet
     - fjcontrib
     - gaudi
@@ -15,6 +16,7 @@ spack:
     - intel-tbb
     - irt
     - jana2
+    - juggler
     - npsim -geocad
     - py-boto3
     - py-jinja2
-- 
GitLab