From a97dd76c62393e1b4c8b755db3c88ec028aa5e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eric=20M=C3=BCller?= <mueller@kip.uni-heidelberg.de> Date: Tue, 4 Feb 2025 14:30:51 +0100 Subject: [PATCH] feat(CI): add build-esd-image_JUSUF --- .gitlab-ci.yml | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6b7b273d..4ad58d7c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -264,6 +264,65 @@ sync-esd-image: - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH == "experimental_rel" || $CI_COMMIT_BRANCH =~ /^ebrains/) && $CI_PROJECT_PATH =~ /platform\/esd\/ebrains-spack-builds/ && $CI_PIPELINE_SOURCE != "schedule" when: manual +# build test on JUSUF login node +build-esd-image_JUSUF: + stage: build + tags: + - esd_image_JUSUF + variables: + CI_SPACK_ENV: esd + SPACK_JOBS: 4 + # we access the branch-specific cache here (and also update it!) + OCI_CACHE_PREFIX: ${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_COMMIT_BRANCH}_jusuf + UPDATE_SPACK_OCI_CACHES: false + OCI_IMAGE_PREFIX: ${HARBOR_HOST}/${HARBOR_PROJECT}/${CI_COMMIT_BRANCH}_jusuf/image + INSTALLATION_ROOT: /esd + SANDBOX_ROOT_RELATIVE: esd_image + TMPDIR: /dev/shm/ecm_gitlab_ci + SANDBOX_ROOT: ${TMPDIR}/${SANDBOX_ROOT_RELATIVE} + SYSTEMNAME: image-jusuf + script: + # create a sandbox/image for performing an spack install inside based on some base image/install + - rm -rf $TMPDIR + - mkdir $TMPDIR || true + - apptainer build --fix-perms --force --sandbox ${SANDBOX_ROOT}/ docker://${BUILD_ENV_DOCKER_IMAGE} + # run installation script inside future container environment + # => DAG concretization, subsequent cache access + fetching and actual build should be separate steps + - mkdir --mode=0777 -p ${SANDBOX_ROOT}/${INSTALLATION_ROOT} + # begin of fixup for JUSUF + - mkdir --mode=0777 -p ${SANDBOX_ROOT}/p + - mkdir --mode=0777 -p ${SANDBOX_ROOT}/etc/FZJ + # end of fixup for JUSUF + - apptainer exec --writable --bind ${CI_PROJECT_DIR}:${INSTALLATION_ROOT} --cwd ${INSTALLATION_ROOT} ${SANDBOX_ROOT} bash ./install_spack_env.sh $SPACK_JOBS $INSTALLATION_ROOT ${INSTALLATION_ROOT} $CI_SPACK_ENV "" $UPDATE_SPACK_OCI_CACHES $OCI_CACHE_PREFIX + - echo "export SYSTEMNAME=${SYSTEMNAME}" >> ${SANDBOX_ROOT}/.singularity.d/env/90-environment.sh + - echo ". ${INSTALLATION_ROOT}/vendor/spack/var/spack/environments/${CI_SPACK_ENV}/load_env.sh" >> ${SANDBOX_ROOT}/.singularity.d/env/90-environment.sh + # begin of fixup for JUSUF + - rm -rf ${SANDBOX_ROOT}/p + - rm -rf ${SANDBOX_ROOT}/etc/FZJ + # end of fixup for JUSUF + # preparing to assemble the image: move in the CI project contents... + - shopt -s dotglob + - find . -maxdepth 1 -and -not -name "." -and -not -name "${SANDBOX_ROOT_RELATIVE}" -exec mv -t ${SANDBOX_ROOT}/${INSTALLATION_ROOT} {} \; + # convert to SIF image file + - apptainer build latest.sif "${SANDBOX_ROOT}" + after_script: + - mkdir -p $CI_PROJECT_DIR/spack_logs/installed $CI_PROJECT_DIR/spack_logs/not_installed + # for succesfully installed packages: keep the spack logs for any package modified during this CI job + - PKG_DIR=${SANDBOX_ROOT}/${INSTALLATION_ROOT}/spack/opt/spack/**/linux-ubuntu20.04-x86_64/gcc-10.3.0 + - if cd $PKG_DIR; then find . \( -name ".spack" -o -name ".build" \) -exec cp -r --parents "{}" $CI_PROJECT_DIR/spack_logs/installed \;; fi + # for not succesfully installed packages: also keep the spack logs for any packages that failed + - if cd /tmp/$(whoami)/spack-stage/; then find . -maxdepth 2 \( -name "*.txt" -o -name ".install_time_tests" \) -exec cp -r --parents "{}" $CI_PROJECT_DIR/spack_logs/not_installed \;; fi + artifacts: + paths: + - spack_logs + when: always + timeout: 2 days + rules: + # branches that update the gitlab-runner upstream (read-only) installation and the spack OCI caches + - if: $CI_PIPELINE_SOURCE != "schedule" && $CI_PIPELINE_SOURCE != "merge_request_event" + #- if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH == "experimental_rel" || $CI_COMMIT_BRANCH =~ /^ebrains/) && $CI_PROJECT_PATH =~ /platform\/esd\/ebrains-spack-builds/ && $CI_PIPELINE_SOURCE != "schedule" + # when: manual + # update gitlab-runner upstream (read-only) installation sync-gitlab-spack-instance: stage: build -- GitLab