From 34718c2e55bb13240bc94533ebca3e87429657f8 Mon Sep 17 00:00:00 2001 From: Wouter Deconinck <wdconinc@gmail.com> Date: Sun, 22 Jan 2023 05:41:25 +0000 Subject: [PATCH] feat: push build cache to eic-spack mirror on eics3 --- .gitlab-ci.yml | 4 ++++ containers/jug/dev.Dockerfile | 44 ++++++++++++++++++++++++++++------- spack.yaml | 1 + 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 89cbfd657..e392d8ec0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -275,6 +275,8 @@ jug_dev:default: --build-arg EICSPACK_CHERRYPICKS="${EICSPACK_CHERRYPICKS}" --build-arg S3_ACCESS_KEY="${S3_ACCESS_KEY}" --build-arg S3_SECRET_KEY="${S3_SECRET_KEY}" + --build-arg S3RW_ACCESS_KEY="${S3RW_ACCESS_KEY}" + --build-arg S3RW_SECRET_KEY="${S3RW_SECRET_KEY}" --build-arg CACHE_BUST=${PACKAGE_HASH} --build-arg INTERNAL_TAG=${INTERNAL_TAG} --build-arg JUG_VERSION=${INTERNAL_TAG}-$(git rev-parse HEAD) @@ -292,6 +294,8 @@ jug_dev:default: --build-arg EICSPACK_CHERRYPICKS="${EICSPACK_CHERRYPICKS}" --build-arg S3_ACCESS_KEY="${S3_ACCESS_KEY}" --build-arg S3_SECRET_KEY="${S3_SECRET_KEY}" + --build-arg S3RW_ACCESS_KEY="${S3RW_ACCESS_KEY}" + --build-arg S3RW_SECRET_KEY="${S3RW_SECRET_KEY}" --build-arg CACHE_BUST=${PACKAGE_HASH} --build-arg INTERNAL_TAG=${INTERNAL_TAG} --build-arg JUG_VERSION=${INTERNAL_TAG}-$(git rev-parse HEAD) diff --git a/containers/jug/dev.Dockerfile b/containers/jug/dev.Dockerfile index 695bcf6d7..e75424fab 100644 --- a/containers/jug/dev.Dockerfile +++ b/containers/jug/dev.Dockerfile @@ -61,6 +61,7 @@ RUN declare -A arch=( \ RUN --mount=type=cache,target=/var/cache/spack-mirror \ export PATH=$PATH:$SPACK_ROOT/bin \ && spack mirror add docker /var/cache/spack-mirror \ + && spack buildcache update-index -d /var/cache/spack-mirror \ && spack mirror list ## Setup eic-spack buildcache mirrors (FIXME: leaks credentials into layer) @@ -68,16 +69,16 @@ ARG S3_ACCESS_KEY="" ARG S3_SECRET_KEY="" RUN --mount=type=cache,target=/var/cache/spack-mirror \ export PATH=$PATH:$SPACK_ROOT/bin \ - && if [ -n $S3_ACCESS_KEY ] ; then \ + && if [ -n "${S3_ACCESS_KEY}" ] ; then \ spack mirror add --scope site \ - --s3-endpoint-url https://dtn01.sdcc.bnl.gov:9000 \ - --s3-access-key-id ${S3_ACCESS_KEY} \ - --s3-access-key-secret ${S3_SECRET_KEY} \ + --s3-endpoint-url https://eics3.sdcc.bnl.gov:9000 \ + --s3-access-key-id "${S3_ACCESS_KEY}" \ + --s3-access-key-secret "${S3_SECRET_KEY}" \ eic-spack s3://eictest/EPIC/spack \ ; fi \ && spack mirror list -## This variable will change whenevery either spack.yaml or our spack package +## This variable will change whenever either spack.yaml or our spack package ## overrides change, triggering a rebuild ARG CACHE_BUST="hash" ARG CACHE_NUKE="" @@ -112,7 +113,7 @@ RUN rm -r /usr/local \ ## or intermittently to keep the buildcache step from taking too much time ## ## Update the local build cache if needed. Consists of 3 steps: -## 1. Remove the B010 network buildcache (silicon) +## 1. Remove the eic-spack buildcache on S3 ## 2. Get a list of all packages, and compare with what is already on ## the buildcache (using package hash) ## 3. Add packages that need to be added to buildcache if any @@ -125,15 +126,16 @@ RUN --mount=type=cache,target=/var/cache/spack-mirror \ || spack install -j64 --no-check-signature \ || spack install -j64 --no-check-signature \ || status=$? \ + && spack mirror rm --scope site eic-spack \ && [ -z "${CACHE_NUKE}" ] \ || rm -rf /var/cache/spack-mirror/build_cache/* \ && mkdir -p /var/cache/spack-mirror/build_cache \ && spack buildcache update-index -d /var/cache/spack-mirror \ && spack buildcache list --allarch --very-long \ | sed '/^$/d;/^--/d;s/@.\+//;s/\([a-z0-9]*\) \(.*\)/\2\/\1/' \ - | sort > tmp.buildcache.txt \ + | sort > buildcache.local.txt \ && spack find --format {name}/{hash} | sort \ - | comm -23 - tmp.buildcache.txt \ + | comm -23 - buildcache.local.txt \ | xargs --no-run-if-empty \ spack buildcache create --allow-root --only package --unsigned \ --directory /var/cache/spack-mirror \ @@ -141,6 +143,32 @@ RUN --mount=type=cache,target=/var/cache/spack-mirror \ && spack clean -a \ && exit $status +## Update the S3 build cache (without local cache mount) +ARG S3RW_ACCESS_KEY="" +ARG S3RW_SECRET_KEY="" +RUN cd /opt/spack-environment \ + && source $SPACK_ROOT/share/spack/setup-env.sh \ + && spack env activate . \ + && if [ -n "${S3RW_ACCESS_KEY}" ] ; then \ + spack mirror add --scope site \ + --s3-endpoint-url https://dtn01.sdcc.bnl.gov:9000 \ + --s3-access-key-id "${S3RW_ACCESS_KEY}" \ + --s3-access-key-secret "${S3RW_SECRET_KEY}" \ + eic-spack s3://eictest/EPIC/spack \ + && spack mirror list \ + && spack buildcache list --allarch --very-long \ + | sed '/^$/d;/^--/d;s/@.\+//;s/\([a-z0-9]*\) \(.*\)/\2\/\1/' \ + | sort > buildcache.eic-spack.txt \ + && spack find --format {name}/{hash} | sort \ + | comm -23 - buildcache.eic-spack.txt \ + | xargs --no-run-if-empty \ + spack buildcache create --allow-root --only package --unsigned \ + --mirror-name eic-spack \ + --rebuild-index \ + && spack mirror rm --scope site eic-spack \ + ; fi \ + && spack mirror list + ## Extra post-spack steps: ## - Python packages COPY requirements.txt /usr/local/etc/requirements.txt diff --git a/spack.yaml b/spack.yaml index f91a51300..8bd9c499d 100644 --- a/spack.yaml +++ b/spack.yaml @@ -39,6 +39,7 @@ spack: - prmon@3.0.2 +plot - pythia8@8.306 +fastjet - python@3.10.8 + - py-boto3@1.18.12 - py-numpy@1.23.4 - py-pip@22.2.2 - py-toml@0.10.2 -- GitLab