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

stages:
  - environment
  - 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:
  BUILDCACHE: "/scratch/richart/buildcache"
  SPACK_PATH: "/work/scitas-ge/richart/ci_cache/spack"
  STACK_PATH: "/work/scitas-ge/richart/ci_cache/stack"
  SPACK_DISABLE_LOCAL_CONFIG: "true"
  SPACK_USER_CACHE_PATH: "/tmp/spack_cache"
Nicolas Richart's avatar
Nicolas Richart committed

# ------------------------------------------------------------------------------
.parallel_job:
Nicolas Richart's avatar
Nicolas Richart committed
  image: registry.c4science.ch/scitas-stack/rhel:9.3
Nicolas Richart's avatar
Nicolas Richart committed
  parallel:
    matrix:
      - environment: [helvetios]
        slurm_options: ["-c 36"]
      # - environment: [jed]
      # - environment: [izar]
      #   slurm_options: ['-c 40 --gres gpu:2']
      #   apptainer_options: ['-nv']
  tags:
    - ${environment}
    - stack
  variables:
    COMMAND_OPTIONS_SBATCH: ${slurm_options}
    APPTAINER_EXEC_OPTIONS: ${apptainer_options} --bind ${BUILDCACHE}:/buildcache:rw --bind ${SPACK_PATH}:/spack:rw --bind ${STACK_PATH}:/stack:rw --writable-tmpfs
Nicolas Richart's avatar
Nicolas Richart committed
# ------------------------------------------------------------------------------
spack:setup:
  stage: environment
Nicolas Richart's avatar
Nicolas Richart committed
  extends:
Nicolas Richart's avatar
Nicolas Richart committed
    - .parallel_job
  script:
    - SPACK_VERSION=$(jq -r .spack.version config.json)

    - |
      if [ ! -d /spack/spack ]; then
        git clone https://github.com/spack/spack.git -b $SPACK_VERSION /spack/spack
      else
        cd /spack/spack
        git fetch
        git checkout $SPACK_VERSION
Nicolas Richart's avatar
Nicolas Richart committed
      fi

Nicolas Richart's avatar
Nicolas Richart committed
    - /spack/spack/bin/spack gpg trust $GPG_PRIVATE_KEY

    - |
      mkdir -p /stack/extra_repos/

      EXTERNAL_REPOS=$(jq -r '.spack.repos | keys[]' config.json)
Nicolas Richart's avatar
Nicolas Richart committed

      echo "Repos: ${EXTERNAL_REPOS}"

      for repo in ${EXTERNAL_REPOS}
      do
Nicolas Richart's avatar
Nicolas Richart committed
        repo_branch=$(jq -r ".spack.repos.\"${repo}\".branch" config.json)
        if [ ! -d /stack/extra_repos/${repo} ]; then
Nicolas Richart's avatar
Nicolas Richart committed
          url_branch=$(jq -r ".spack.repos.\"${repo}\".url" config.json)
          git clone -b ${repo_branch} ${url_branch} /stack/extra_repos/$repo
        else
          cd /stack/extra_repos/$repo
          git fetch
          git checkout ${repo_branch}
Nicolas Richart's avatar
Nicolas Richart committed
    - |
      if [ ! -d /buildcache/build_cache ]; then
        /spack/spack/bin/spack gpg publish -d /buildcache
      fi



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
  script:
    - /spack/spack/bin/spack -e . concretize
Nicolas Richart's avatar
Nicolas Richart committed
  needs:
    - job: spack:setup
  artifacts:
Nicolas Richart's avatar
Nicolas Richart committed
    paths:
      - spack.lock

spack:install:
  stage: install
Nicolas Richart's avatar
Nicolas Richart committed
  extends:
Nicolas Richart's avatar
Nicolas Richart committed
    - .parallel_job
  script:
Nicolas Richart's avatar
Nicolas Richart committed
    - /spack/spack/bin/spack -e . install
Nicolas Richart's avatar
Nicolas Richart committed
      --log-file spack-install.xml
      --log-format junit
      --only-concrete
      --fail-fast
      --show-log-on-error
      --use-cache
  needs:
    - job: spack:concretize
  artifacts:
    reports:
Nicolas Richart's avatar
Nicolas Richart committed
      junit: spack-install.xml