Skip to content

Commit 5f04399

Browse files
committed
Add configuration for gitlab CI
1 parent 6218f38 commit 5f04399

4 files changed

Lines changed: 208 additions & 0 deletions

File tree

.gitlab/.gitlab-ci.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
variables:
2+
CUSTOM_CI_BUILDS_DIR: "/usr/workspace/$$USER/libROM_gitlab_runner"
3+
4+
GIT_STRATEGY: fetch
5+
GIT_SUBMODULE_STRATEGY: recursive
6+
GIT_DEPTH: 1
7+
GIT_SUBMODULE_DEPTH: 1
8+
9+
DEFAULT_BRANCH: master
10+
11+
ALLOC_NAME: ${CI_PROJECT_NAME}_ci_${CI_PIPELINE_ID}
12+
ALLOC_QUEUE: pci
13+
ALLOC_TIME: 30
14+
ALLOC_BANK: asccasc
15+
16+
TEST_SCRIPT: .gitlab/run_tests.sh
17+
18+
ON_LASSEN: "OFF"
19+
#ON_DANE: "OFF"
20+
21+
stages:
22+
- allocate
23+
- build
24+
- release
25+
26+
workflow:
27+
rules:
28+
# skip running branch pipelines if a MR is open for the branch
29+
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS && $CI_PIPELINE_SOURCE == "push"
30+
when: never
31+
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
32+
- if: $CI_PIPELINE_SOURCE == 'web'
33+
- if: $CI_COMMIT_TAG
34+
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
35+
36+
include:
37+
# This include is required for LC with Gitlab 17+
38+
# Refer to https://hpc.llnl.gov/technical-bulletins/bulletin-568
39+
- project: 'lc-templates/id_tokens'
40+
file: 'id_tokens.yml'
41+
- .gitlab/runners/lassen.yml
42+
- .gitlab/runners/dane.yml
43+
44+
# Define actual CI jobs here:
45+
dane_gcc_12_1_1:
46+
variables:
47+
MODULE_LIST: cmake gcc/12.1.1
48+
extends: .job_on_dane
49+
50+
lassen_gcc_12_2_1:
51+
variables:
52+
MODULE_LIST: cmake/3.23.1 gcc/12.2.1
53+
extends: .job_on_lassen

.gitlab/run_tests.sh

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
#!/usr/bin/env bash
2+
3+
set -o errexit
4+
set -o nounset
5+
set -o pipefail
6+
7+
modules=${MODULE_LIST:-""}
8+
mpiexec_executable=${MPIEXEC_EXECUTABLE:-"srun"}
9+
# If using flux, append "run" after the flux executable path
10+
if [[ "${mpiexec_executable}" == "flux" ]]
11+
then
12+
mpiexec_executable="$(which ${mpiexec_executable}) run"
13+
flux jobs
14+
flux resource list
15+
else
16+
mpiexec_executable="$(which ${mpiexec_executable})"
17+
fi
18+
19+
mpiexec_preflags=${MPIEXEC_PREFLAGS:-""}
20+
host=$(hostname)
21+
build_type=${BUILD_TYPE:-"Debug"}
22+
# note: toolchain file here is relative to repo root dir
23+
toolchain_file=${TOOLCHAIN_FILE:-"../cmake/toolchains/default-toss_4_x86_64_ib-librom-dev.cmake"}
24+
use_mfem=${USE_MFEM:-"Off"}
25+
use_gslib=${MFEM_USE_GSLIB:-"Off"}
26+
librom_flags=${LIBROM_FLAGS:-""}
27+
28+
basehost=${host//[[:digit:]]/}
29+
30+
echo ${host}
31+
32+
build_dir=build_${host}_${CI_PIPELINE_ID}_$(date +%F_%H_%M_%S)
33+
34+
if [[ -n ${modules} ]]
35+
then
36+
module load ${modules}
37+
fi
38+
39+
# ---- setup googletest ----
40+
DEPS_DIR="${CI_BUILD_DIR}/${basehost}_deps"
41+
echo $DEPS_DIR
42+
if [[ ! -d "${DEPS_DIR}" ]]; then
43+
mkdir ${DEPS_DIR} && cd ${DEPS_DIR}
44+
git clone https://github.com/google/googletest
45+
cd googletest && mkdir build && cd build
46+
cmake -DCMAKE_INSTALL_PREFIX=./ .. && make && make install
47+
cd ${CI_PROJECT_DIR}
48+
fi
49+
PATH=${DEPS_DIR}/googletest:${DEPS_DIR}/googletest/build:$PATH
50+
echo ${PATH}
51+
# --------------------------
52+
53+
#./scripts/compile.sh -d -r
54+
55+
mkdir ${build_dir}
56+
cd ${build_dir}
57+
pwd
58+
59+
cmake -DCMAKE_TOOLCHAIN_FILE=${toolchain_file} \
60+
-DCMAKE_BUILD_TYPE=${build_type} \
61+
-DMPIEXEC_EXECUTABLE=${mpiexec_executable} \
62+
-DMPIEXEC_PREFLAGS=${mpiexec_preflags} \
63+
-DUSE_MFEM=${use_mfem} \
64+
-DMFEM_USE_GSLIB=${use_gslib} \
65+
-DENABLE_TESTS=ON \
66+
-DLIBROM_FLAGS="${librom_flags}" ..
67+
68+
make -j
69+
70+
ctest -VV --output-on-failure

.gitlab/runners/dane.yml

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
.retry:
2+
retry:
3+
max: 2
4+
when:
5+
- runner_system_failure
6+
7+
.on_dane:
8+
extends:
9+
- .retry
10+
tags:
11+
- dane
12+
- shell
13+
rules:
14+
- if: '$ON_DANE == "OFF"'
15+
when: never
16+
- if: $CI_PIPELINE_SOURCE == "push"
17+
when: never
18+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
19+
- if: $CI_COMMIT_BRANCH == $DEFAULT_BRANCH
20+
- if: '$CI_JOB_NAME =~ /release_resources_dane/'
21+
when: always
22+
- when: on_success
23+
24+
allocate_resources_dane:
25+
variables:
26+
GIT_STRATEGY: none
27+
extends:
28+
- .on_dane
29+
stage: allocate
30+
script:
31+
- salloc -N 1 --reservation=ci -A ${ALLOC_BANK} --time=${ALLOC_TIME} --no-shell --job-name=${ALLOC_NAME}
32+
33+
release_resources_dane:
34+
variables:
35+
GIT_STRATEGY: none
36+
extends:
37+
- .on_dane
38+
stage: release
39+
script:
40+
- export JOBID=$(squeue -h --name=${ALLOC_NAME} --format=%A)
41+
- ([[ -n "${JOBID}" ]] && scancel ${JOBID})
42+
when: always
43+
44+
.job_on_dane:
45+
extends: .on_dane
46+
stage: build
47+
needs: ["allocate_resources_dane"]
48+
variables:
49+
MPIEXEC_EXECUTABLE: srun
50+
MPIEXEC_PREFLAGS: "--cpu-bind=cores -v"
51+
script:
52+
- echo "JOB NAME ${ALLOC_NAME}"
53+
- export JOBID=$(squeue -h --name=${ALLOC_NAME} --format=%A)
54+
- echo "SLURM ID ${JOBID}"
55+
- srun $( [[ -n "${JOBID}" ]] && echo "--jobid=${JOBID}" ) -N 1 -t ${ALLOC_TIME} -v --overlap ${TEST_SCRIPT}

.gitlab/runners/lassen.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
.retry:
2+
retry:
3+
max: 2
4+
when:
5+
- runner_system_failure
6+
7+
.on_lassen:
8+
extends:
9+
- .retry
10+
tags:
11+
- lassen
12+
- shell
13+
rules:
14+
- if: '$ON_LASSEN == "OFF"'
15+
when: never
16+
- if: $CI_PIPELINE_SOURCE == "push"
17+
when: never
18+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
19+
- if: $CI_COMMIT_BRANCH == $DEFAULT_BRANCH
20+
- when: on_success
21+
22+
.job_on_lassen:
23+
extends: .on_lassen
24+
stage: build
25+
needs: []
26+
variables:
27+
MPIEXEC_EXECUTABLE: jsrun
28+
MPIEXEC_PREFLAGS: "-a 1 -c 1 -g 1"
29+
script:
30+
- bsub -q ${ALLOC_QUEUE} -W ${ALLOC_TIME} -G ${ALLOC_BANK} -J ${ALLOC_NAME} -nnodes 1 -Is ${TEST_SCRIPT}

0 commit comments

Comments
 (0)