spack/share/spack/gitlab/cloud_pipelines/.gitlab-ci.yml

964 lines
30 KiB
YAML

stages: [ "generate", "build" ]
variables:
SPACK_DISABLE_LOCAL_CONFIG: "1"
SPACK_USER_CACHE_PATH: "${CI_PROJECT_DIR}/tmp/_user_cache/"
# PR_MIRROR_FETCH_DOMAIN: "https://binaries-prs.spack.io"
PR_MIRROR_FETCH_DOMAIN: "s3://spack-binaries-prs"
PR_MIRROR_PUSH_DOMAIN: "s3://spack-binaries-prs"
# PROTECTED_MIRROR_FETCH_DOMAIN: "https://binaries.spack.io"
PROTECTED_MIRROR_FETCH_DOMAIN: "s3://spack-binaries"
PROTECTED_MIRROR_PUSH_DOMAIN: "s3://spack-binaries"
default:
image: { "name": "ghcr.io/spack/e4s-ubuntu-18.04:v2021-10-18", "entrypoint": [""] }
# CI Platform-Arch
.cray_rhel_zen4:
variables:
SPACK_TARGET_PLATFORM: "cray-rhel"
SPACK_TARGET_ARCH: "zen4"
.cray_sles_zen4:
variables:
SPACK_TARGET_PLATFORM: "cray-sles"
SPACK_TARGET_ARCH: "zen4"
.darwin_x86_64:
variables:
SPACK_TARGET_PLATFORM: "darwin"
SPACK_TARGET_ARCH: "x86_64"
.darwin_aarch64:
variables:
SPACK_TARGET_PLATFORM: "darwin"
SPACK_TARGET_ARCH: "aarch64"
.linux_x86_64_v3:
variables:
SPACK_TARGET_PLATFORM: "linux"
SPACK_TARGET_ARCH: "x86_64_v3"
.linux_x86_64_v4:
variables:
SPACK_TARGET_PLATFORM: "linux"
SPACK_TARGET_ARCH: "x86_64_v4"
.linux_neoverse_v1:
variables:
SPACK_TARGET_PLATFORM: "linux"
SPACK_TARGET_ARCH: "neoverse_v1"
.linux_neoverse_v2:
variables:
SPACK_TARGET_PLATFORM: "linux"
SPACK_TARGET_ARCH: "neoverse_v2"
.linux_aarch64:
variables:
SPACK_TARGET_PLATFORM: "linux"
SPACK_TARGET_ARCH: "aarch64"
.linux_power:
variables:
SPACK_TARGET_PLATFORM: "linux"
SPACK_TARGET_ARCH: "ppc64le"
.win64-msvc2019:
variables:
SPACK_TARGET_PLATFORM: "win64"
SPACK_TARGET_ARCH: "x86_64"
########################################
# Job templates
########################################
.base-job:
variables:
PIPELINE_MIRROR_TEMPLATE: "single-src-protected-mirrors.yaml.in"
SPACK_CI_CONFIG_ROOT: "${CI_PROJECT_DIR}/share/spack/gitlab/cloud_pipelines/configs"
SPACK_CI_SCRIPTS_ROOT: "${CI_PROJECT_DIR}/share/spack/gitlab/cloud_pipelines/scripts"
rules:
- if: $SPACK_CI_DISABLE_STACKS =~ /.+/ && $SPACK_CI_STACK_NAME =~ $SPACK_CI_DISABLE_STACKS
when: never
- if: $SPACK_CI_ENABLE_STACKS =~ /.+/ && $SPACK_CI_STACK_NAME !~ $SPACK_CI_ENABLE_STACKS
when: never
- if: $CI_COMMIT_REF_NAME == "develop" || $CI_COMMIT_REF_NAME =~ /^releases\/v.*/
# Pipelines on develop/release branches only rebuild what is missing from the mirror
when: always
variables:
SPACK_PIPELINE_TYPE: "spack_protected_branch"
SPACK_COPY_BUILDCACHE: "${PROTECTED_MIRROR_PUSH_DOMAIN}/${CI_COMMIT_REF_NAME}"
SPACK_REQUIRE_SIGNING: "True"
OIDC_TOKEN_AUDIENCE: "protected_binary_mirror"
- if: $CI_COMMIT_TAG =~ /^develop-[\d]{4}-[\d]{2}-[\d]{2}$/ || $CI_COMMIT_TAG =~ /^v.*/
# Pipelines on tags (release or dev snapshots) only copy binaries from one mirror to another
when: always
variables:
SPACK_PIPELINE_TYPE: "spack_copy_only"
SPACK_COPY_BUILDCACHE: "${PROTECTED_MIRROR_PUSH_DOMAIN}/${CI_COMMIT_REF_NAME}"
PIPELINE_MIRROR_TEMPLATE: "copy-only-protected-mirrors.yaml.in"
OIDC_TOKEN_AUDIENCE: "protected_binary_mirror"
- if: $CI_COMMIT_REF_NAME =~ /^pr[\d]+_.*$/
# Pipelines on PR branches rebuild only what's missing, and do extra pruning
when: always
variables:
SPACK_PIPELINE_TYPE: "spack_pull_request"
SPACK_PRUNE_UNTOUCHED: "True"
SPACK_PRUNE_UNTOUCHED_DEPENDENT_DEPTH: "1"
# TODO: Change sync script to include target in branch name. Then we could
# TODO: have multiple types of "PR" pipeline here. It would be better if we could
# TODO: keep just this one and use a regex to capture the target branch, but so
# TODO: far gitlab doesn't support that.
PR_TARGET_REF_NAME: "develop"
PIPELINE_MIRROR_TEMPLATE: "multi-src-mirrors.yaml.in"
OIDC_TOKEN_AUDIENCE: "pr_binary_mirror"
.generate-common:
stage: generate
script:
- spack --version
- spack env activate --without-view share/spack/gitlab/cloud_pipelines/stacks/${SPACK_CI_STACK_NAME}
- spack
--config-scope "${SPACK_CI_CONFIG_ROOT}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
${CI_STACK_CONFIG_SCOPES}
compiler find
- spack
--config-scope "${SPACK_CI_CONFIG_ROOT}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
audit configs
# Command below needs to be `spack python` due to naming differences accross platforms
- spack python ${SPACK_CI_SCRIPTS_ROOT}/common/expand_vars.py
"${SPACK_CI_CONFIG_ROOT}/${PIPELINE_MIRROR_TEMPLATE}"
"${SPACK_CI_CONFIG_ROOT}/mirrors.yaml"
- spack config add -f "${SPACK_CI_CONFIG_ROOT}/mirrors.yaml"
- mkdir "${CI_PROJECT_DIR}/jobs_scratch_dir"
- spack
--config-scope "${SPACK_CI_CONFIG_ROOT}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
config blame > "${CI_PROJECT_DIR}/jobs_scratch_dir/spack.yaml.blame"
- spack -v --color=always
--config-scope "${SPACK_CI_CONFIG_ROOT}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}"
--config-scope "${SPACK_CI_CONFIG_ROOT}/${SPACK_TARGET_PLATFORM}/${SPACK_TARGET_ARCH}"
ci generate --check-index-only -j ${SPACK_CONCRETIZE_JOBS}
--artifacts-root "${CI_PROJECT_DIR}/jobs_scratch_dir"
--output-file "${CI_PROJECT_DIR}/jobs_scratch_dir/cloud-ci-pipeline.yml"
artifacts:
paths:
- "${CI_PROJECT_DIR}/jobs_scratch_dir"
- "${CI_PROJECT_DIR}/tmp/_user_cache/cache/patches"
- "${CI_PROJECT_DIR}/tmp/_user_cache/cache/providers"
- "${CI_PROJECT_DIR}/tmp/_user_cache/cache/tags"
variables:
SPACK_CONCRETIZE_JOBS: 8
KUBERNETES_CPU_REQUEST: 8000m
KUBERNETES_MEMORY_REQUEST: 16G
# avoid moving targets like branches and tags
SPACK_CONCRETIZER_REQUIRE_CHECKSUM: 1
SPACK_BACKTRACE: 1
interruptible: true
timeout: 60 minutes
retry:
max: 2
when:
- always
# Generate without tags for cases using external runners
.generate-base:
extends: [ ".base-job", ".generate-common" ]
before_script:
- uname -a || true
- grep -E 'vendor|model name' /proc/cpuinfo 2>/dev/null | sort -u || head -n10 /proc/cpuinfo 2>/dev/null || true
- nproc || true
- cat /proc/loadavg || true
- cat /proc/meminfo | grep 'MemTotal\|MemFree' || true
- . "./share/spack/setup-env.sh"
- spack arch
after_script:
- cat /proc/loadavg || true
- cat /proc/meminfo | grep 'MemTotal\|MemFree' || true
.generate-x86_64:
extends: [ ".generate-base" ]
tags: ["spack", "public", "medium", "x86_64_v3"]
.generate-aarch64:
extends: [ ".generate-base" ]
tags: ["spack", "public", "medium", "aarch64"]
.generate-neoverse_v1:
extends: [ ".generate-base" ]
tags: ["spack", "public", "medium", "aarch64", "graviton3"]
.generate-neoverse-v2:
extends: [ ".generate-base" ]
tags: ["spack", "public", "medium", "neoverse_v2"]
.generate-win64:
extends: [ ".base-job", ".generate-common" ]
before_script:
- $ErrorActionOld=$ErrorActionPreference
- $ErrorActionPreference="SilentlyContinue"
- python -c"import psutil;print(psutil.getloadavg())"
- (Get-WmiObject Win32_PhysicalMemory | measure-object Capacity -sum).sum/1kb
- $ErrorActionPreference=$ErrorActionOld
- . .\share\spack\setup-env.ps1
after_script:
- $ErrorActionOld=$ErrorActionPreference
- $ErrorActionPreference="SilentlyContinue"
- python -c"import psutil;print(psutil.getloadavg())"
- (Get-WmiObject Win32_PhysicalMemory | measure-object Capacity -sum).sum/1kb
- $ErrorActionPreference=$ErrorActionOld
tags: ["spack", "public", "medium", "x86_64-win"]
image: "ghcr.io/johnwparent/windows-server21h2:sha-1c12b61"
.build:
extends: [ ".base-job" ]
stage: build
########################################
# TEMPLATE FOR ADDING ANOTHER PIPELINE
########################################
#
# First add a new spack.yml defining the pipeline to run in
# share/spack/gitlab/cloud_pipelines/stacks/my-super-cool-stack/spack.yaml
#
# Then add the following entries at the bottom of this file.
#
# Note that when extending other jobs, gitlab does not merge lists (nor
# does it merge dictionary values in the case of key conflicts). So lists
# and duplicated dictionary keys are simply overridden. For this reason,
# you should inlclude your custom definitions at the end of the of the
# extends list.
#
########################################
# My Super Cool Pipeline
########################################
# .my-super-cool-stack:
# extends: [ ".linux_x86_64_v3" ]
# variables:
# SPACK_CI_STACK_NAME: my-super-cool-stack
# tags: [ "all", "tags", "your", "job", "needs"]
#
# my-super-cool-stack-generate:
# extends: [ ".generate", ".my-super-cool-stack" ]
#
# my-super-cool-stack-build:
# extends: [ ".build", ".my-super-cool-stack" ]
# trigger:
# include:
# - artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
# job: my-super-cool-stack-generate
# strategy: depend
# needs:
# - artifacts: True
# job: my-super-cool-stack-generate
########################################
# E4S pipeline
########################################
.e4s:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: e4s
e4s-generate:
extends: [ ".e4s", ".generate-x86_64"]
image: ghcr.io/spack/spack/ubuntu22.04-runner-amd64-gcc-11.4:2024.03.01
e4s-build:
extends: [ ".e4s", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-generate
strategy: depend
needs:
- artifacts: True
job: e4s-generate
########################################
# E4S Neoverse V2
########################################
.e4s-neoverse-v2:
extends: [ ".linux_neoverse_v2" ]
variables:
SPACK_CI_STACK_NAME: e4s-neoverse-v2
e4s-neoverse-v2-generate:
extends: [ ".e4s-neoverse-v2", ".generate-neoverse-v2" ]
image: ghcr.io/spack/spack/ubuntu22.04-runner-arm64-gcc-11.4:2024.03.01
e4s-neoverse-v2-build:
extends: [ ".e4s-neoverse-v2", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-neoverse-v2-generate
strategy: depend
needs:
- artifacts: True
job: e4s-neoverse-v2-generate
########################################
# E4S ROCm External pipeline
########################################
.e4s-rocm-external:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: e4s-rocm-external
e4s-rocm-external-generate:
extends: [ ".e4s-rocm-external", ".generate-x86_64"]
image: ghcr.io/spack/spack/ubuntu22.04-runner-amd64-gcc-11.4-rocm6.2.1:2024.10.08
e4s-rocm-external-build:
extends: [ ".e4s-rocm-external", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-rocm-external-generate
strategy: depend
needs:
- artifacts: True
job: e4s-rocm-external-generate
########################################
# E4S OneAPI Pipeline
########################################
.e4s-oneapi:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: e4s-oneapi
e4s-oneapi-generate:
extends: [ ".e4s-oneapi", ".generate-x86_64"]
image: ghcr.io/spack/spack/ubuntu22.04-runner-amd64-oneapi-2024.2:2024.09.06
e4s-oneapi-build:
extends: [ ".e4s-oneapi", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-oneapi-generate
strategy: depend
needs:
- artifacts: True
job: e4s-oneapi-generate
########################################
# E4S on Power
########################################
.e4s-power-generate-tags-and-image:
image: { "name": "ghcr.io/spack/ubuntu20.04-runner-ppc64-gcc-11.4:2023.08.01", "entrypoint": [""] }
tags: ["spack", "public", "large", "ppc64le"]
.e4s-power:
extends: [".linux_power"]
variables:
SPACK_CI_STACK_NAME: e4s-power
# Override concretization pool for metal runners
SPACK_CONCRETIZE_JOBS: 16
e4s-power-generate:
extends: [ ".e4s-power", ".generate-x86_64", ".e4s-power-generate-tags-and-image"]
e4s-power-build:
extends: [ ".e4s-power", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-power-generate
strategy: depend
needs:
- artifacts: True
job: e4s-power-generate
#########################################
# Build tests for different build-systems
#########################################
.build_systems:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: build_systems
build_systems-generate:
extends: [ ".build_systems", ".generate-x86_64"]
build_systems-build:
extends: [ ".build_systems", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: build_systems-generate
strategy: depend
needs:
- artifacts: True
job: build_systems-generate
###########################################
# Build tests for different developer tools
###########################################
.developer-tools-x86_64_v3-linux-gnu:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: developer-tools-x86_64_v3-linux-gnu
developer-tools-x86_64_v3-linux-gnu-generate:
extends: [ ".developer-tools-x86_64_v3-linux-gnu", ".generate-x86_64"]
image: ghcr.io/spack/x86_64_v3-linux-gnu:2024-12-12
developer-tools-x86_64_v3-linux-gnu-build:
extends: [ ".developer-tools-x86_64_v3-linux-gnu", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: developer-tools-x86_64_v3-linux-gnu-generate
strategy: depend
needs:
- artifacts: True
job: developer-tools-x86_64_v3-linux-gnu-generate
###########################################
# Build tests for different developer tools
# darwin
###########################################
.developer-tools-darwin:
extends: [ ".darwin_aarch64" ]
variables:
SPACK_CI_STACK_NAME: developer-tools-darwin
developer-tools-darwin-generate:
tags: [ "macos-ventura", "apple-clang-15", "aarch64-macos" ]
extends: [ ".developer-tools-darwin", ".generate-base"]
developer-tools-darwin-build:
extends: [ ".developer-tools-darwin", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: developer-tools-darwin-generate
strategy: depend
needs:
- artifacts: True
job: developer-tools-darwin-generate
#########################################
# RADIUSS
#########################################
.radiuss:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: radiuss
radiuss-generate:
extends: [ ".radiuss", ".generate-x86_64" ]
radiuss-build:
extends: [ ".radiuss", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: radiuss-generate
strategy: depend
needs:
- artifacts: True
job: radiuss-generate
########################################
# RADIUSS for AWS
########################################
.tags-x86_64_v4:
tags: ["spack", "public", "aws", "medium", "x86_64_v4"]
# Include this AFTER .*-generate in "extends" list
.radiuss-aws-overrides:
# This controls image for generate step; build step is controlled by spack.yaml
# Note that generator emits OS info for build so these should be the same.
image: { "name": "ghcr.io/spack/e4s-amazonlinux-2:v2023-03-09", "entrypoint": [""] }
.radiuss-aws:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: radiuss-aws
radiuss-aws-generate:
extends: [ ".radiuss-aws", ".generate-x86_64", ".radiuss-aws-overrides", ".tags-x86_64_v4" ]
radiuss-aws-build:
extends: [ ".radiuss-aws", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: radiuss-aws-generate
strategy: depend
needs:
- artifacts: True
job: radiuss-aws-generate
# Parallel Pipeline for aarch64 (reuses override image, but generates and builds on aarch64)
.radiuss-aws-aarch64:
extends: [ ".linux_aarch64" ]
variables:
SPACK_CI_STACK_NAME: radiuss-aws-aarch64
radiuss-aws-aarch64-generate:
extends: [ ".radiuss-aws-aarch64", ".generate-aarch64", ".radiuss-aws-overrides" ]
radiuss-aws-aarch64-build:
extends: [ ".radiuss-aws-aarch64", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: radiuss-aws-aarch64-generate
strategy: depend
needs:
- artifacts: True
job: radiuss-aws-aarch64-generate
########################################
# ECP Data & Vis SDK
########################################
.data-vis-sdk:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: data-vis-sdk
data-vis-sdk-generate:
extends: [ ".data-vis-sdk", ".generate-x86_64"]
image: ghcr.io/spack/ubuntu20.04-runner-x86_64:2023-01-01
data-vis-sdk-build:
extends: [ ".data-vis-sdk", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: data-vis-sdk-generate
strategy: depend
needs:
- artifacts: True
job: data-vis-sdk-generate
########################################
# AWS ISC Applications (x86_64)
########################################
# Call this AFTER .*-generate
.aws-isc-overrides:
# This controls image for generate step; build step is controlled by spack.yaml
# Note that generator emits OS info for build so these should be the same.
image: { "name": "ghcr.io/spack/e4s-amazonlinux-2:v2023-03-09", "entrypoint": [""] }
.aws-isc:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: aws-isc
aws-isc-generate:
extends: [ ".aws-isc", ".generate-x86_64", ".aws-isc-overrides", ".tags-x86_64_v4" ]
aws-isc-build:
extends: [ ".aws-isc", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: aws-isc-generate
strategy: depend
needs:
- artifacts: True
job: aws-isc-generate
# Parallel Pipeline for aarch64 (reuses override image, but generates and builds on aarch64)
.aws-isc-aarch64:
extends: [ ".linux_aarch64" ]
variables:
SPACK_CI_STACK_NAME: aws-isc-aarch64
aws-isc-aarch64-generate:
extends: [ ".aws-isc-aarch64", ".generate-aarch64", ".aws-isc-overrides" ]
aws-isc-aarch64-build:
extends: [ ".aws-isc-aarch64", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: aws-isc-aarch64-generate
strategy: depend
needs:
- artifacts: True
job: aws-isc-aarch64-generate
########################################
# Spack Tutorial
########################################
.tutorial:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: tutorial
tutorial-generate:
extends: [ ".tutorial", ".generate-x86_64"]
image: ghcr.io/spack/tutorial-ubuntu-22.04:v2023-10-30
tutorial-build:
extends: [ ".tutorial", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: tutorial-generate
strategy: depend
needs:
- artifacts: True
job: tutorial-generate
#######################################
# Machine Learning - Linux x86_64 (CPU)
#######################################
.ml-linux-x86_64-cpu:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: ml-linux-x86_64-cpu
ml-linux-x86_64-cpu-generate:
extends: [ ".generate-x86_64", .ml-linux-x86_64-cpu, ".tags-x86_64_v4" ]
image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2
ml-linux-x86_64-cpu-build:
extends: [ ".build", ".ml-linux-x86_64-cpu" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: ml-linux-x86_64-cpu-generate
strategy: depend
needs:
- artifacts: True
job: ml-linux-x86_64-cpu-generate
########################################
# Machine Learning - Linux x86_64 (CUDA)
########################################
.ml-linux-x86_64-cuda:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: ml-linux-x86_64-cuda
ml-linux-x86_64-cuda-generate:
extends: [ ".generate-x86_64", .ml-linux-x86_64-cuda, ".tags-x86_64_v4" ]
image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2
ml-linux-x86_64-cuda-build:
extends: [ ".build", ".ml-linux-x86_64-cuda" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: ml-linux-x86_64-cuda-generate
strategy: depend
needs:
- artifacts: True
job: ml-linux-x86_64-cuda-generate
########################################
# Machine Learning - Linux x86_64 (ROCm)
########################################
.ml-linux-x86_64-rocm:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: ml-linux-x86_64-rocm
ml-linux-x86_64-rocm-generate:
extends: [ ".generate-x86_64", .ml-linux-x86_64-rocm, ".tags-x86_64_v4" ]
image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2
ml-linux-x86_64-rocm-build:
extends: [ ".build", ".ml-linux-x86_64-rocm" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: ml-linux-x86_64-rocm-generate
strategy: depend
needs:
- artifacts: True
job: ml-linux-x86_64-rocm-generate
########################################
# Machine Learning - Linux aarch64 (CPU)
########################################
.ml-linux-aarch64-cpu:
extends: [ ".linux_aarch64" ]
variables:
SPACK_CI_STACK_NAME: ml-linux-aarch64-cpu
ml-linux-aarch64-cpu-generate:
extends: [ ".generate-aarch64", .ml-linux-aarch64-cpu ]
image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2
ml-linux-aarch64-cpu-build:
extends: [ ".build", ".ml-linux-aarch64-cpu" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: ml-linux-aarch64-cpu-generate
strategy: depend
needs:
- artifacts: True
job: ml-linux-aarch64-cpu-generate
#########################################
# Machine Learning - Linux aarch64 (CUDA)
#########################################
.ml-linux-aarch64-cuda:
extends: [ ".linux_aarch64" ]
variables:
SPACK_CI_STACK_NAME: ml-linux-aarch64-cuda
ml-linux-aarch64-cuda-generate:
extends: [ ".generate-aarch64", .ml-linux-aarch64-cuda ]
image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2
ml-linux-aarch64-cuda-build:
extends: [ ".build", ".ml-linux-aarch64-cuda" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: ml-linux-aarch64-cuda-generate
strategy: depend
needs:
- artifacts: True
job: ml-linux-aarch64-cuda-generate
#########################################
# Machine Learning - Darwin aarch64 (MPS)
#########################################
.ml-darwin-aarch64-mps:
extends: [".darwin_aarch64"]
variables:
SPACK_CI_STACK_NAME: ml-darwin-aarch64-mps
ml-darwin-aarch64-mps-generate:
tags: [ "macos-ventura", "apple-clang-15", "aarch64-macos" ]
extends: [ ".ml-darwin-aarch64-mps", ".generate-base"]
ml-darwin-aarch64-mps-build:
extends: [ ".ml-darwin-aarch64-mps", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: ml-darwin-aarch64-mps-generate
strategy: depend
needs:
- artifacts: True
job: ml-darwin-aarch64-mps-generate
########################################
# AWS ParallelCluster
########################################
.aws-pcluster-generate:
image: { "name": "ghcr.io/spack/pcluster-amazonlinux-2:v2024-10-07", "entrypoint": [""] }
# X86_64_V4 (one pipeline per target)
.aws-pcluster-x86_64_v4:
variables:
SPACK_CI_STACK_NAME: aws-pcluster-x86_64_v4
aws-pcluster-generate-x86_64_v4:
extends: [ ".linux_x86_64_v4", ".aws-pcluster-x86_64_v4", ".generate-base", ".tags-x86_64_v4", ".aws-pcluster-generate"]
before_script:
- - . "./share/spack/setup-env.sh"
# TODO: Move this to the container next time it is rebuilt
- export PATH=/home/software/spack/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeh/linux-amzn2-x86_64_v3/gcc-7.3.1/binutils-2.37-qvccg7zpskturysmr4bzbsfrx34kvazo/bin:$PATH
aws-pcluster-build-x86_64_v4:
extends: [ ".linux_x86_64_v4", ".aws-pcluster-x86_64_v4", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: aws-pcluster-generate-x86_64_v4
strategy: depend
needs:
- artifacts: True
job: aws-pcluster-generate-x86_64_v4
# Neoverse_v1 (one pipeline per target)
.aws-pcluster-neoverse_v1:
variables:
SPACK_CI_STACK_NAME: aws-pcluster-neoverse_v1
aws-pcluster-generate-neoverse_v1:
# TODO: Use updated runner tags: https://github.com/spack/spack-infrastructure/pull/694/files
extends: [ ".linux_neoverse_v1", ".aws-pcluster-neoverse_v1", ".generate-neoverse_v1", ".aws-pcluster-generate"]
before_script:
- - . "./share/spack/setup-env.sh"
# TODO: Move this to the container next time it is rebuilt
- export PATH=/home/software/spack/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeholder__/__spack_path_placeh/linux-amzn2-aarch64/gcc-7.3.1/binutils-2.37-2yxz3xsjfmesxujxtlrgcctxlyilynmp/bin:$PATH
aws-pcluster-build-neoverse_v1:
extends: [ ".linux_neoverse_v1", ".aws-pcluster-neoverse_v1", ".build" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: aws-pcluster-generate-neoverse_v1
strategy: depend
needs:
- artifacts: True
job: aws-pcluster-generate-neoverse_v1
# Cray definitions
.generate-cray:
extends: [ ".generate-common", ".base-job" ]
variables:
# Override concretization pool for metal runners
SPACK_CONCRETIZE_JOBS: 16
before_script:
- echo $PATH
- module avail
- module list
- uname -a || true
- grep -E 'vendor|model name' /proc/cpuinfo 2>/dev/null | sort -u || head -n10 /proc/cpuinfo 2>/dev/null || true
- nproc || true
- cat /proc/loadavg || true
- cat /proc/meminfo | grep 'MemTotal\|MemFree' || true
- . "./share/spack/setup-env.sh"
after_script:
- cat /proc/loadavg || true
- cat /proc/meminfo | grep 'MemTotal\|MemFree' || true
.generate-cray-rhel:
tags: [ "cray-rhel-zen4", "public" ]
extends: [ ".generate-cray" ]
.generate-cray-sles:
tags: [ "cray-sles-zen4", "public" ]
extends: [ ".generate-cray" ]
#######################################
# E4S - Cray RHEL
#######################################
.e4s-cray-rhel:
extends: [ ".cray_rhel_zen4" ]
variables:
SPACK_CI_STACK_NAME: e4s-cray-rhel
e4s-cray-rhel-generate:
extends: [ ".generate-cray-rhel", ".e4s-cray-rhel" ]
e4s-cray-rhel-build:
allow_failure: true # libsci_cray.so broken, misses DT_NEEDED for libdl.so
extends: [ ".build", ".e4s-cray-rhel" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-cray-rhel-generate
strategy: depend
needs:
- artifacts: True
job: e4s-cray-rhel-generate
#######################################
# E4S - Cray SLES
#######################################
.e4s-cray-sles:
extends: [ ".cray_sles_zen4" ]
variables:
SPACK_CI_STACK_NAME: e4s-cray-sles
e4s-cray-sles-generate:
extends: [ ".generate-cray-sles", ".e4s-cray-sles" ]
e4s-cray-sles-build:
allow_failure: true # libsci_cray.so broken, misses DT_NEEDED for libdl.so
extends: [ ".build", ".e4s-cray-sles" ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: e4s-cray-sles-generate
strategy: depend
needs:
- artifacts: True
job: e4s-cray-sles-generate
#######################################
# Windows Visualization Tools
#######################################
.windows-vis:
extends: [".win64-msvc2019"]
variables:
SPACK_CI_STACK_NAME: windows-vis
# TODO: windows runners are currently m5.2xlarge with a max 8 vCPU and 32GiB MEM
# setting request to half of the available allocation to allow room for overhead.
KUBERNETES_CPU_REQUEST: 4000m
KUBERNETES_MEMORY_REQUEST: 16G
windows-vis-generate:
extends: [ ".generate-win64", ".windows-vis" ]
windows-vis-build:
extends: [ ".build", ".windows-vis"]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: windows-vis-generate
strategy: depend
needs:
- artifacts: True
job: windows-vis-generate
#######################################
# Bootstrap x86_64-linux-gnu
#######################################
.bootstrap-x86_64-linux-gnu:
extends: [ ".linux_x86_64_v3" ]
variables:
SPACK_CI_STACK_NAME: bootstrap-x86_64-linux-gnu
bootstrap-x86_64-linux-gnu-generate:
extends: [ .generate-x86_64, .bootstrap-x86_64-linux-gnu ]
image: ghcr.io/spack/ubuntu-24.04:v2024-09-05-v2
bootstrap-x86_64-linux-gnu-build:
extends: [ .build, .bootstrap-x86_64-linux-gnu ]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: bootstrap-x86_64-linux-gnu-generate
strategy: depend
needs:
- artifacts: True
job: bootstrap-x86_64-linux-gnu-generate
#######################################
# Bootstrap aarch64-darwin
#######################################
.bootstrap-aarch64-darwin:
extends: [.darwin_aarch64]
variables:
SPACK_CI_STACK_NAME: bootstrap-aarch64-darwin
bootstrap-aarch64-darwin-generate:
tags: [macos-ventura, apple-clang-15, aarch64-macos]
extends: [.bootstrap-aarch64-darwin, .generate-base]
bootstrap-aarch64-darwin-build:
extends: [.bootstrap-aarch64-darwin, .build]
trigger:
include:
- artifact: jobs_scratch_dir/cloud-ci-pipeline.yml
job: bootstrap-aarch64-darwin-generate
strategy: depend
needs:
- artifacts: true
job: bootstrap-aarch64-darwin-generate