Skip to content
Snippets Groups Projects
.gitlab-ci.yml 3.72 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

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:
Nicolas Richart's avatar
Nicolas Richart committed
      - environment: [jed]
        slurm_options: ["-c 72 -p jed -q jed"]
        stack: ["pinot-noir"]
      # - environment: [izar]
      #   slurm_options: ['-c 40 --gres gpu:2']
      #   apptainer_options: ['-nv']
Nicolas Richart's avatar
Nicolas Richart committed
      # - environment: [helvetios]
      #   slurm_options: ["-c 36"]
      #   stack: ["pinot-noir"]
Nicolas Richart's avatar
Nicolas Richart committed
  tags:
    - ${environment}
    - stack
  variables:
    COMMAND_OPTIONS_SBATCH: ${slurm_options}
Nicolas Richart's avatar
Nicolas Richart committed
    STACK_CONFIG: ${CI_PROJECT_DIR}/stacks/${stack}/config.json
    STACK_LOCATION: $(jq -r .stack.mount_point ${STACK_CONFIG})
    APPTAINER_EXEC_OPTIONS: ${apptainer_options} --bind ${BUILDCACHE}:/buildcache:rw --bind ${CI_PROJECT_DIR}:${STACK_LOCATION}
    SPACK_USER_CACHE_PATH: "/tmp/spack_cache_${CI_JOB_ID}"
    SPACK_USER_CONFIG_PATH: "/tmp/spack_user_${CI_JOB_ID}"
    BUILDCACHE: "/work/scitas-ge/richart/ci/buildcache"
Nicolas Richart's avatar
Nicolas Richart committed
    LOG_LEVEL: 3
Nicolas Richart's avatar
Nicolas Richart committed
  cache:
    key: ${environment}-spack-cache
Nicolas Richart's avatar
Nicolas Richart committed
    policy: pull-push
Nicolas Richart's avatar
Nicolas Richart committed
    paths:
      - spack/
Nicolas Richart's avatar
Nicolas Richart committed
      - stack/
      - stacks/${stack}/compiler_definitions.yaml
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
  before_script:
    - git config --global --add --bool advice.detachedHead false
Nicolas Richart's avatar
Nicolas Richart committed
  script:
    - ci/setup_spack.sh

spack:install_compilers:
Nicolas Richart's avatar
Nicolas Richart committed
  stage: compilers
    - .parallel_job
  script:
    - ci/install_compilers.sh
    - spack/bin/spack -e stacks/${stack} config blame compilers
  after_script:
    - if [ ! -e spack-install.xml ]; then
      echo "{}" > spack-install.xml
  artifacts:
    reports:
      junit: spack-install.xml
Nicolas Richart's avatar
Nicolas Richart committed
  needs:
    - 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
  script:
Nicolas Richart's avatar
Nicolas Richart committed
    - source stack_env.sh
    - spack/bin/spack -e ${SPACK_SYSTEM_CONFIG_PATH} config blame
    - spack/bin/spack -e ${SPACK_SYSTEM_CONFIG_PATH} concretize
Nicolas Richart's avatar
Nicolas Richart committed
  needs:
Nicolas Richart's avatar
Nicolas Richart committed
    - job: spack:install_compilers
  artifacts:
Nicolas Richart's avatar
Nicolas Richart committed
    paths:
Nicolas Richart's avatar
Nicolas Richart committed
      - stacks/${stack}/spack.lock
Nicolas Richart's avatar
Nicolas Richart committed
  timeout: 2h
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
  script:
Nicolas Richart's avatar
Nicolas Richart committed
    - source stack_env.sh
    - spack/bin/spack -e ${SPACK_SYSTEM_CONFIG_PATH} install
      --log-file spack-install.xml
      --log-format junit
      --only-concrete
      --fail-fast
      --show-log-on-error
    - spack/bin/spack -e ${SPACK_SYSTEM_CONFIG_PATH} buildcache create
      --update-index
      --key EDC904DCE3D2E84E
      /buildcache
  after_script:
    - if [ ! -e spack-install.xml ]; then
      echo "{}" > spack-install.xml
Nicolas Richart's avatar
Nicolas Richart committed
  needs:
    - job: spack:concretize
  artifacts:
    reports:
Nicolas Richart's avatar
Nicolas Richart committed
      junit: spack-install.xml
Nicolas Richart's avatar
Nicolas Richart committed
  timeout: 10h

spack:mksquashfs:
  stage: deploy
  extends:
    - .spack_cache
    - .parallel_job
  script:
    - "mksquashfs ${CI_PROJECT_DIR} 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:
    - job: spack:install
  timeout: 10h