Skip to content
Snippets Groups Projects
.gitlab-ci.yml 6.63 KiB
Newer Older
Nicolas Richart's avatar
Nicolas Richart committed
# yaml-language-server: $schema=gitlab-ci
# yaml-language-server: $format.enable=false

stages:
  - environment
Nicolas Richart's avatar
Nicolas Richart committed
  - compilers
Nicolas Richart's avatar
Nicolas Richart committed
  - concretize
  - install
  - deploy

workflow:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
      when: never
Nicolas Richart's avatar
Nicolas Richart committed
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Nicolas Richart's avatar
Nicolas Richart committed

variables:
  TERM: ansi
  CI_DATA: "/scratch/richart/ci"
Nicolas Richart's avatar
Nicolas Richart committed
.parallel_definition:
Nicolas Richart's avatar
Nicolas Richart committed
  parallel:
    matrix:
Nicolas Richart's avatar
Nicolas Richart committed
      # - environment: [jed]
      #   slurm_options: ["-c 72 -p jed -q jed"]
      #   stack: ["pinot-noir"]
      #   app_image: ["registry.c4science.ch/scitas-stack/rhel9-kuma"]
      # - environment: [helvetios]
      #   slurm_options: ["-c 36"]
      #   stack: ["pinot-noir"]
      #   app_image: ["registry.c4science.ch/scitas-stack/rhel9-kuma"]
Nicolas Richart's avatar
Nicolas Richart committed
      - environment: [kuma_h100]
        slurm_options: ["-c 64 --reservation scitas"]
Nicolas Richart's avatar
Nicolas Richart committed
        stack: ["pinot-noir-gcc"]
        apptainer_options: ['--nv']
Nicolas Richart's avatar
Nicolas Richart committed
        app_image: ["registry.c4science.ch/scitas-stack/rhel9-kuma"]
      - environment: [kuma_l40s]
        slurm_options: ["-c 64 --reservation scitas"]
Nicolas Richart's avatar
Nicolas Richart committed
        stack: ["pinot-noir-gcc"]
        apptainer_options: ['--nv']
Nicolas Richart's avatar
Nicolas Richart committed
        app_image: ["registry.c4science.ch/scitas-stack/rhel9-kuma"]
Nicolas Richart's avatar
Nicolas Richart committed
      # - environment: [izar]
Nicolas Richart's avatar
Nicolas Richart committed
      #   slurm_options: ['-c 40 --gpus 2']
Nicolas Richart's avatar
Nicolas Richart committed
      #   apptainer_options: ['-nv']
Nicolas Richart's avatar
Nicolas Richart committed
      #   stack: ["pinot-noir"]
Nicolas Richart's avatar
Nicolas Richart committed
  tags:
    - ${environment}
    - stack
  variables:
    environment: ${environment}
Nicolas Richart's avatar
Nicolas Richart committed
  image: ${app_image}
Nicolas Richart's avatar
Nicolas Richart committed
# ------------------------------------------------------------------------------
# ------------------------------------------------------------------------------
Nicolas Richart's avatar
Nicolas Richart committed
.squashfs_var:
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      variables:
Nicolas Richart's avatar
Nicolas Richart committed
        SQUASHFS_ID: ${CI_MERGE_REQUEST_IID}
Nicolas Richart's avatar
Nicolas Richart committed
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      variables:
Nicolas Richart's avatar
Nicolas Richart committed
        SQUASHFS_ID: ${CI_DEFAULT_BRANCH}
Nicolas Richart's avatar
Nicolas Richart committed
.parallel_job:
  extends:
    - .parallel_definition
Nicolas Richart's avatar
Nicolas Richart committed
    - .squashfs_var
Nicolas Richart's avatar
Nicolas Richart committed
  variables:
    MOUNT_POINT: $(jq -Mrc .stack.mount_point ${CI_PROJECT_DIR}/stacks/${stack}/config.json)
    COMMAND_OPTIONS_SBATCH: ${slurm_options}
    STACK_VERSION: $(jq -Mrc .stack.version ${CI_PROJECT_DIR}/stacks/${stack}/config.json)
    APPTAINER_EXEC_OPTIONS: >-
      ${apptainer_options}
         --cleanenv
         -H $(mktemp -d -p ${FAKEHOME}/):/home/$(id -un)
         --bind ${CI_DATA}/buildcache:${MOUNT_POINT}/buildcache
         --bind ${CI_DATA}/spack-mirror:${MOUNT_POINT}/spack-mirror
         --bind ${CI_DATA}/squashfs-cache/:/squashfs-cache
         --bind ${CI_DATA}/overlayfs:/overlayfs
         --fusemount "host:${CI_PROJECT_DIR}/ci/squashfuse_ll.sh ${CI_DATA} ${SQUASHFS_ID}-${CI_JOB_ID} ${CI_DATA}/squashfs-cache/${stack}-${environment}-${SQUASHFS_ID}.sqfs /overlayfs/lower-${SQUASHFS_ID}-${CI_JOB_ID}"
         --fusemount "container:${CI_PROJECT_DIR}/ci/fuse-overlayfs.sh ${SQUASHFS_ID}-${CI_JOB_ID} ${MOUNT_POINT}/${stack}/${environment}/${STACK_VERSION}"
Nicolas Richart's avatar
Nicolas Richart committed
  after_script:
Nicolas Richart's avatar
Nicolas Richart committed
    - if [ $CI_JOB_STATUS != "success" ]; then exit 0; fi
    - ${CI_PROJECT_DIR}/ci/update_squashfs.sh
Nicolas Richart's avatar
Nicolas Richart committed
  cache:
Nicolas Richart's avatar
Nicolas Richart committed
    key: ${stack}-${environment}-spack-cache
Nicolas Richart's avatar
Nicolas Richart committed
    policy: pull-push
Nicolas Richart's avatar
Nicolas Richart committed
# ------------------------------------------------------------------------------
Nicolas Richart's avatar
Nicolas Richart committed
# ------------------------------------------------------------------------------
spack:checkout:
Nicolas Richart's avatar
Nicolas Richart committed
  stage: .pre
Nicolas Richart's avatar
Nicolas Richart committed
    APPTAINER_EXEC_OPTIONS: --cleanenv --bind ${CI_DATA} --bind ${CI_DATA}/squashfs-cache:/squashfs-cache
Nicolas Richart's avatar
Nicolas Richart committed
  extends:
Nicolas Richart's avatar
Nicolas Richart committed
    - .parallel_definition
  before_script:
    - git config --global --add --bool advice.detachedHead false
Nicolas Richart's avatar
Nicolas Richart committed
  script:
    # - |
    #   for i in overlayfs squashfs-cache buildcache spack-mirror
    #   do
    #     if [ ! -e ${CI_DATA}/$i ]
    #     then
    #       mkdir -p ${CI_DATA}/$i
    #     fi
    #   done
Nicolas Richart's avatar
Nicolas Richart committed
  timeout: 1h

spack:setup:
  stage: environment
  extends:
    - .parallel_job
    - .spack_cache
Nicolas Richart's avatar
Nicolas Richart committed
  script:
    - ci/setup_spack.sh
Nicolas Richart's avatar
Nicolas Richart committed
  needs:
Nicolas Richart's avatar
Nicolas Richart committed
    - job: spack:checkout

spack:install_compilers:
Nicolas Richart's avatar
Nicolas Richart committed
  stage: compilers
  extends:
    - .parallel_job
    - .spack_cache
    - ci/install_compilers.sh
Nicolas Richart's avatar
Nicolas Richart committed
    - source ci/stack_env.sh
    - ${STACK_LOCATION}/spack/bin/spack -e ${environment} config blame compilers
  artifacts:
    reports:
      junit: spack-install-*.xml
Nicolas Richart's avatar
Nicolas Richart committed
  needs:
Nicolas Richart's avatar
Nicolas Richart committed
    - job: spack:setup
Nicolas Richart's avatar
Nicolas Richart committed
  timeout: 5h
Nicolas Richart's avatar
Nicolas Richart committed
spack:concretize:
  stage: concretize
Nicolas Richart's avatar
Nicolas Richart committed
  extends:
Nicolas Richart's avatar
Nicolas Richart committed
    - .parallel_job
    - .spack_cache
Nicolas Richart's avatar
Nicolas Richart committed
  script:
Nicolas Richart's avatar
Nicolas Richart committed
    - source ci/stack_env.sh

    - ${STACK_LOCATION}/spack/bin/spack -e ${environment}
          config blame | tee config-${environment}-${stack}.log

    - ${STACK_LOCATION}/spack/bin/spack -e ${environment}
          concretize | tee concretize-${environment}-${stack}.log
Nicolas Richart's avatar
Nicolas Richart committed

    - cp ${SPACK_SYSTEM_CONFIG_PATH}/spack.lock spack-${environment}-${stack}.lock
  artifacts:
Nicolas Richart's avatar
Nicolas Richart committed
    paths:
Nicolas Richart's avatar
Nicolas Richart committed
      - config-*.log
      - concretize-*.log
      - spack-*.lock
  needs:
    - job: spack:install_compilers
Nicolas Richart's avatar
Nicolas Richart committed
  timeout: 24h
Nicolas Richart's avatar
Nicolas Richart committed

spack:install:
  stage: install
Nicolas Richart's avatar
Nicolas Richart committed
  extends:
Nicolas Richart's avatar
Nicolas Richart committed
    - .parallel_job
    - .spack_cache
Nicolas Richart's avatar
Nicolas Richart committed
  script:
    - source ci/stack_env.sh
Nicolas Richart's avatar
Nicolas Richart committed
    - echo "{}" > spack-install-${environment}.xml

    - ${STACK_LOCATION}/spack/bin/spack -e ${environment} install
          --log-file spack-install-${environment}.xml
          --log-format junit
          --only-concrete
          --fail-fast
          --show-log-on-error
    - ${STACK_LOCATION}/spack/bin/spack -e ${environment} find -vl | tee spack-find-${environment}-${stack}.log
    - ${STACK_LOCATION}/spack/bin/spack -e ${environment}
          buildcache create
          --update-index
          --key EDC904DCE3D2E84E
          ${MOUNT_POINT}/buildcache
Nicolas Richart's avatar
Nicolas Richart committed
  needs:
Nicolas Richart's avatar
Nicolas Richart committed
    - job: spack:concretize
  artifacts:
Nicolas Richart's avatar
Nicolas Richart committed
      junit: spack-install-*.xml
Nicolas Richart's avatar
Nicolas Richart committed
  timeout: 72h

spack:mksquashfs:
  stage: deploy
  extends:
    - .parallel_job
    - .spack_cache
  script:
Nicolas Richart's avatar
Nicolas Richart committed
    - source ci/stack_env.sh

    - ${STACK_LOCATION}/spack/bin/spack
      -e ${environment} module
      lmod refresh --yes | tee spack-modules-${environment}-${stack}.log

    - echo "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/stack/${stack}/stack-${stack}-${environment}-${CI_COMMIT_REF_SLUG}.sqfs"
Nicolas Richart's avatar
Nicolas Richart committed
    - "mksquashfs ${STACK_LOCATION} stack-${stack}-${environment}-${CI_COMMIT_REF_SLUG}.sqfs"
    - 'curl --header "JOB-TOKEN: $CI_JOB_TOKEN" --upload-file stack-${stack}-${environment}-${CI_COMMIT_REF_SLUG}.sqfs "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/stack/${stack}/stack-${stack}-${environment}-${CI_COMMIT_REF_SLUG}.sqfs"'
  needs:
  timeout: 10h
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH