Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 22 additions & 25 deletions ci/ci-common.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,44 +15,42 @@ stages:
- TAG_IMAGE=`echo ${BASE_IMAGE##*/} | sed 's/[:]//g'`
- TAG_APTGET=`echo ${EXTRA_APTGET} | sha256sum - | head -c 6`
- TAG_COMPILER=`echo ${COMPILER}_CXX${CXXSTD} | sed 's/[@]//g'`
- TAG_DOCKERFILE=`sha256sum $DOCKERFILE | head -c 16`
- TAG_DOCKERFILE=`sha256sum $DOCKERFILE | head -c 12`
- TAG_SPACK=`echo $SPACK_COMMIT | tail -c 11`
- TAG_SPACK_PACKAGES=`echo $SPACK_PACKAGES_COMMIT | tail -c 11`
- TAG_SPACK_BUILDCACHE=`echo $SPACK_BUILDCACHE | tail -c 11`
- TAG_REPO=`find $SPACK_DLAF_FORTRAN_REPO -type f -exec sha256sum {} \; | sha256sum - | head -c 16`
- TAG_ENVIRONMENT=`cat $SPACK_ENVIRONMENT $COMMON_SPACK_ENVIRONMENT | sha256sum | head -c 16`
- TAG=${TAG_IMAGE}-${TAG_APTGET}-${TAG_COMPILER}-MKL${USE_MKL}-${TAG_DOCKERFILE}-${TAG_SPACK}-${TAG_SPACK_PACKAGES}-${TAG_SPACK_BUILDCACHE}-${TAG_REPO}-${TAG_ENVIRONMENT}
- export PERSIST_IMAGE_NAME=$BUILD_IMAGE:$TAG
- echo "BUILD_IMAGE=$PERSIST_IMAGE_NAME" > build.env
- echo "USE_MKL=$USE_MKL" >> build.env
- TAG_ALPS_CLUSTER_CONFIG=`echo $ALPS_CLUSTER_CONFIG_COMMIT | head -c 8`
- TAG_REPO=`find $SPACK_DLAF_FORTRAN_REPO -type f -exec sha256sum {} \; | sha256sum - | head -c 12`
- TAG_ENVIRONMENT=`cat $SPACK_ENVIRONMENT $COMMON_SPACK_ENVIRONMENT | sha256sum | head -c 12`
- TAG=${TAG_IMAGE}-${TAG_APTGET}-${TAG_COMPILER}-MKL${USE_MKL}-${TAG_DOCKERFILE}-${TAG_SPACK}-${TAG_SPACK_PACKAGES}-${TAG_ALPS_CLUSTER_CONFIG}-${TAG_REPO}-${TAG_ENVIRONMENT}
- export PERSIST_IMAGE_NAME=$DEPS_IMAGE:$TAG
- echo "DEPS_IMAGE=$PERSIST_IMAGE_NAME" > build.env
- 'echo "INFO: Building image $PERSIST_IMAGE_NAME"'
- 'echo "INFO: Using NUM_CORES_BUILD_DEPS=$NUM_CORES_BUILD_DEPS"'
artifacts:
reports:
dotenv: build.env
variables:
SPACK_COMMIT: 2e7168b4cfe9222a94becf0c2c5b401f513181ec
SPACK_PACKAGES_COMMIT: 629e6f0ba34621177de7bc7f8e35dca8e780e7cc
SPACK_BUILDCACHE: develop-2025-06-01
SPACK_COMMIT: 73eaea13f381e3495299284856fd02a64e1d154c # v1.0.0
SPACK_PACKAGES_COMMIT: 7aff9dd7017886ac70d2f565516bc78124b3d30d # 2025-08-07
ALPS_CLUSTER_CONFIG_COMMIT: 57d5c2f39e4f0cf6acc8779dcaedc1e90264d639
SPACK_DLAF_FORTRAN_REPO: ./spack
DOCKER_BUILD_ARGS: '[
"BASE_IMAGE",
"BUILDKIT_INLINE_CACHE=1",
"SPACK_COMMIT",
"SPACK_PACKAGES_COMMIT",
"SPACK_BUILDCACHE",
"ALPS_CLUSTER_CONFIG_COMMIT",
"EXTRA_APTGET",
"COMPILER",
"SPACK_ENVIRONMENT",
"COMMON_SPACK_ENVIRONMENT",
"SPACK_DLAF_FORTRAN_REPO",
"NUM_PROCS=$NUM_CORES_BUILD_DEPS"
]'
DOCKERFILE: ci/docker/build.Dockerfile
BASE_IMAGE: docker.io/ubuntu:22.04
DOCKERFILE: ci/containers/build.Containerfile
BASE_IMAGE: docker.io/ubuntu:24.04
EXTRA_APTGET: ""
USE_MKL: "OFF"
COMMON_SPACK_ENVIRONMENT: ci/docker/common.yaml
COMMON_SPACK_ENVIRONMENT: ci/containers/common.yaml

.build_common:
extends: .container-builder
Expand All @@ -62,19 +60,14 @@ stages:
- 'echo $DOCKERHUB_TOKEN | podman login docker.io -u $DOCKERHUB_USERNAME --password-stdin'
- 'echo "INFO: Using NUM_CORES_BUILD_DLAF_FORTRAN=$NUM_CORES_BUILD_DLAF_FORTRAN"'
after_script:
- podman run -v $PWD/ci/ctest_to_gitlab.sh:/ctest_to_gitlab.sh $DEPLOY_IMAGE /ctest_to_gitlab.sh "$DEPLOY_IMAGE" "$THREADS_MAX_PER_TASK" "$THREADS_PER_NODE" "$SLURM_CONSTRAINT" "$RUNNER" > pipeline.yml
- podman run -v $PWD/ci/ctest_to_gitlab.sh:/ctest_to_gitlab.sh $DLAFF_IMAGE /ctest_to_gitlab.sh "$DLAFF_IMAGE" "$THREADS_MAX_PER_TASK" "$THREADS_PER_NODE" "$SLURM_CONSTRAINT" "$RUNNER" > pipeline.yml
variables:
PERSIST_IMAGE_NAME: $DEPLOY_IMAGE
PERSIST_IMAGE_NAME: $DLAFF_IMAGE
DOCKER_BUILD_ARGS: '[
"BUILD_IMAGE",
"DEPLOY_BASE_IMAGE",
"EXTRA_APTGET_DEPLOY",
"USE_MKL",
"DEPS_IMAGE",
"NUM_PROCS=$NUM_CORES_BUILD_DLAF_FORTRAN"
]'
DOCKERFILE: ci/docker/deploy.Dockerfile
DEPLOY_BASE_IMAGE: docker.io/ubuntu:22.04
EXTRA_APTGET_DEPLOY: ""
DOCKERFILE: ci/containers/deploy.Containerfile
artifacts:
paths:
- pipeline.yml
Expand All @@ -92,3 +85,7 @@ stages:
strategy: depend
forward:
pipeline_variables: true
# FIXME: Workaround until CE provides a full MPI replacement
# Default is PMI2, but we use Cray-MPICH from the base image
variables:
SLURM_MPI_TYPE: cray_shasta
53 changes: 27 additions & 26 deletions ci/docker/build.Dockerfile → ci/containers/build.Containerfile
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
ARG BASE_IMAGE=ubuntu:22.04
ARG BASE_IMAGE=ubuntu:24.04
FROM $BASE_IMAGE

# Set JFrog autoclean policy
LABEL com.jfrog.artifactory.retention.maxDays="21"

ENV DEBIAN_FRONTEND=noninteractive \
PATH="$PATH:/opt/spack/bin:/opt/libtree" \
PATH="$PATH:/opt/spack/bin" \
SPACK_COLOR=always
ENTRYPOINT []

CMD [ "/bin/bash" ]
SHELL ["/bin/bash", "-c"]

ARG EXTRA_APTGET
Expand All @@ -15,36 +18,38 @@ RUN apt-get -yqq update && \
software-properties-common \
build-essential gfortran \
autoconf automake libssl-dev ninja-build pkg-config \
${EXTRA_APTGET} \
gawk \
python3 python3-distutils \
git tar wget curl ca-certificates gpg-agent jq tzdata \
patchelf unzip file gnupg2 libncurses-dev && \
gawk git tar \
wget curl ca-certificates gpg-agent tzdata \
python3 python3-setuptools \
glibc-tools jq strace \
patchelf unzip file gnupg2 libncurses-dev \
${EXTRA_APTGET} && \
rm -rf /var/lib/apt/lists/*

# Install libtree for packaging
RUN mkdir -p /opt/libtree && \
curl -Lfso /opt/libtree/libtree https://github.com/haampie/libtree/releases/download/v2.0.0/libtree_x86_64 && \
chmod +x /opt/libtree/libtree

# Install Spack
ARG SPACK_REPO=https://github.com/spack/spack
ARG SPACK_COMMIT
ENV SPACK_ROOT=/opt/spack-$SPACK_COMMIT
ARG SPACK_PACKAGES_REPO=https://github.com/spack/spack-packages
ARG SPACK_PACKAGES_COMMIT
ENV SPACK_PACKAGES_ROOT=/opt/spack-packages-$SPACK_PACKAGES_COMMIT
RUN mkdir -p $SPACK_ROOT \
&& curl -OL $SPACK_REPO/archive/$SPACK_COMMIT.tar.gz \
&& tar -xzvf $SPACK_COMMIT.tar.gz -C /opt && rm -f $SPACK_COMMIT.tar.gz \
&& mkdir -p $SPACK_PACKAGES_ROOT \
&& curl -OL $SPACK_PACKAGES_REPO/archive/$SPACK_PACKAGES_COMMIT.tar.gz \
&& tar -xzvf $SPACK_PACKAGES_COMMIT.tar.gz -C /opt && rm -f $SPACK_PACKAGES_COMMIT.tar.gz
RUN mkdir -p $SPACK_ROOT && \
curl -Ls "https://api.github.com/repos/spack/spack/tarball/$SPACK_COMMIT" | tar --strip-components=1 -xz -C ${SPACK_ROOT} && \
mkdir -p $SPACK_PACKAGES_ROOT && \
curl -Ls "https://api.github.com/repos/spack/spack-packages/tarball/$SPACK_PACKAGES_COMMIT" | tar --strip-components=1 -xz -C ${SPACK_PACKAGES_ROOT}

ENV PATH $SPACK_ROOT/bin:/root/.local/bin:$PATH

RUN spack repo add --scope site $SPACK_PACKAGES_ROOT/repos/spack_repo/builtin

# FIXME: Workaround until CE provides full MPI replacement
ARG ALPS_CLUSTER_CONFIG_COMMIT
ENV ALPS_CLUSTER_CONFIG_COMMIT=$ALPS_CLUSTER_CONFIG_COMMIT
RUN mkdir -p /opt/alps-cluster-config && \
curl -Ls "https://api.github.com/repos/eth-cscs/alps-cluster-config/tarball/$ALPS_CLUSTER_CONFIG_COMMIT" | \
tar --strip-components=1 -xz -C /opt/alps-cluster-config && \
spack repo add --scope site /opt/alps-cluster-config/site/spack_repo/alps

# Find compilers and define which compiler we want to use
ARG COMPILER
RUN spack external find gcc && \
Expand All @@ -68,25 +73,19 @@ RUN spack external find \
pkg-config \
xz

# Enable Spack build cache
ARG SPACK_BUILDCACHE
RUN spack mirror add ${SPACK_BUILDCACHE} https://binaries.spack.io/${SPACK_BUILDCACHE}
RUN spack mirror add develop https://binaries.spack.io/develop && \
spack buildcache keys --install --trust --force && \
spack mirror rm develop

# Add custom Spack repo
ARG SPACK_DLAF_FORTRAN_REPO
COPY $SPACK_DLAF_FORTRAN_REPO /user_repo
RUN spack repo add --scope site /user_repo

ARG SPACK_ENVIRONMENT
ARG COMMON_SPACK_ENVIRONMENT
ARG ENV_VIEW=/view

# Create Spack environment named `ci`
COPY $SPACK_ENVIRONMENT /spack_environment/spack.yaml
COPY $COMMON_SPACK_ENVIRONMENT /spack_environment/
RUN spack env create --without-view ci /spack_environment/spack.yaml
RUN spack env create --with-view ${ENV_VIEW} ci /spack_environment/spack.yaml
RUN spack -e ci concretize
RUN spack -e ci spec -lI --cover edges

Expand All @@ -96,3 +95,5 @@ RUN spack -e ci install --jobs ${NUM_PROCS} --fail-fast --only=dependencies

# Make CTest executable available
RUN ln -s `spack -e ci location -i cmake`/bin/ctest /usr/bin/ctest

RUN echo ${ENV_VIEW}/lib/ > /etc/ld.so.conf.d/dlaff.conf && ldconfig
28 changes: 19 additions & 9 deletions ci/docker/common.yaml → ci/containers/common.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,13 @@ packages:
target: [x86_64]
require:
- "platform=linux"
- "os=ubuntu22.04"
- "os=ubuntu24.04"
blas:
require: 'intel-oneapi-mkl'
lapack:
require: 'intel-oneapi-mkl'
scalapack:
require: 'intel-oneapi-mkl'
mpi:
require: 'mpich'
intel-oneapi-mkl:
require:
- 'threads=none'
Expand All @@ -30,12 +28,6 @@ packages:
openblas:
variants:
- 'threads=openmp'
mpich:
# Requirement for ABI compatibility on the test system
require:
- '@3.4.2'
variants:
- '~libxml2'
hwloc:
variants:
- '~libxml2'
Expand All @@ -46,3 +38,21 @@ packages:
# Force git as non-buildable to allow deprecated versions in environments
# https://github.com/spack/spack/pull/30040
buildable: false
# FIXME: Workaround until CE provides a full MPI replacement (as SARUS did)
mpi:
require: 'cray-mpich'
# FIXME: Workaround until CE provides a full MPI replacement (as SARUS did)
libfabric:
# Specify libfabric version to match the system version
require: '@1.22.0'
xpmem:
require:
- '~kernel-module'
cray-gtl:
buildable: True
cray-mpich:
buildable: True
cray-pals:
buildable: True
cray-pmi:
buildable: True
32 changes: 32 additions & 0 deletions ci/containers/deploy.Containerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
ARG DEPS_IMAGE
FROM $DEPS_IMAGE

# Set JFrog autoclean policy
LABEL com.jfrog.artifactory.retention.maxDays="7"
LABEL com.jfrog.artifactory.retention.maxCount="10"

ARG BUILD=/DLAF-Fortran-build
ARG SOURCE=/DLAF-Fortran
ARG BIN=${BUILD}/bin/

# Build DLA-Fortran
COPY . ${SOURCE}

SHELL ["/bin/bash", "-c"]

ARG NUM_PROCS
# Note: we force spack to build in ${BUILD} creating a link to it
RUN spack repo rm --scope site dla-future-fortran-repo && \
spack repo add ${SOURCE}/spack && \
spack -e ci develop --no-clone --path ${SOURCE} --build-directory ${BUILD} dla-future-fortran@main build_type=Debug && \
spack -e ci concretize -f && \
spack -e ci --config "config:flags:keep_werror:all" install --jobs ${NUM_PROCS} --keep-stage --verbose && \
find ${BUILD} -name CMakeFiles -exec rm -rf {} +

RUN mkdir -p ${BIN} && cp -L ${SOURCE}/ci/mpi-ctest ${BIN}
ENV PATH="${BIN}:$PATH"

# Automatically print stacktraces on segfault
ENV LD_PRELOAD=/lib/x86_64-linux-gnu/libSegFault.so

WORKDIR ${BUILD}
File renamed without changes.
File renamed without changes.
29 changes: 0 additions & 29 deletions ci/cpu/gcc11_mkl.yml

This file was deleted.

29 changes: 0 additions & 29 deletions ci/cpu/gcc11_openblas.yml

This file was deleted.

29 changes: 29 additions & 0 deletions ci/cpu/gcc13_mkl.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
include:
- local: 'ci/ci-common.yml'

cpu gcc13 mkl deps:
extends: .deps_common
variables:
COMPILER: gcc@13
SPACK_ENVIRONMENT: ci/containers/mkl.yaml
USE_MKL: "ON"
DEPS_IMAGE: $CSCS_REGISTRY_PATH/cpu-gcc13-mkl/deps

cpu gcc13 mkl build:
extends:
- .build_common
- .build_for_eiger
needs:
- cpu gcc13 mkl deps
variables:
DLAFF_IMAGE: $CSCS_REGISTRY_PATH/cpu-gcc13-mkl/dlaff:$CI_COMMIT_SHA

cpu gcc13 mkl test:
extends: .run_common
needs:
- cpu gcc13 mkl build
trigger:
include:
- artifact: pipeline.yml
job: cpu gcc13 mkl build

Loading
Loading