Skip to content
Merged
221 changes: 169 additions & 52 deletions .gitlab-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,42 +11,36 @@
# at Lawrence Livermore National Laboratory (LLNL).
# This entire pipeline is LLNL-specific
#
# Important note: This file is a template provided by llnl/radiuss-shared-ci.
# Remains to set variable values, change the reference to the radiuss-shared-ci
# repo, opt-in and out optional features. The project can then extend it with
# additional stages.
# This file uses GitLab CI Components from radiuss-shared-ci (requires GitLab 17.0+).
# Components provide better versioning, type-safe inputs, and cleaner syntax.
#
# In addition, each project should copy over and complete:
# - .gitlab/custom-jobs-and-variables.yml
# - .gitlab/subscribed-pipelines.yml
#
# The jobs should be specified in a file local to the project,
# - .gitlab/jobs/${CI_MACHINE}.yml
# or generated (see LLNL/Umpire for an example).
# In addition, each project should have:
# - .gitlab/custom-jobs.yml - Job templates for child pipelines
# - .gitlab/custom-variables.yml - Machine-specific variables
# - .gitlab/jobs/${CI_MACHINE}.yml - Machine-specific job definitions
###############################################################################

###############################################################################
# VARIABLES
###############################################################################

# We define the following GitLab pipeline variables:
variables:
##### LC GITLAB CONFIGURATION
# Use the umdev LLNL service user to run CI. This prevents from running
# pipelines as an actual user.

# LC GITLAB CONFIGURATION
# Use an LLNL service user to run CI. This prevents from running pipelines as
# an actual user.
LLNL_SERVICE_USER: ""
# Use the service user workspace. Solves permission issues, stores everything
# at the same location whoever triggers a pipeline.
# CUSTOM_CI_BUILDS_DIR: ""
# Submodules: We don't need to fetch dependencies handled by Spack.
# Optimize submodules usage: only fetch the ones we need.
# Note: We don't need to fetch dependencies handled by Spack.
GIT_SUBMODULE_STRATEGY: normal
GIT_SUBMODULE_DEPTH: 1
GIT_SUBMODULE_UPDATE_FLAGS: --jobs 2
GIT_SUBMODULE_PATHS: scripts/radiuss-spack-configs scripts/uberenv

##### PROJECT VARIABLES
# We build the projects in the CI clone directory.
# Used in script/gitlab/build_and_test.sh script.
# TODO: add a clean-up mechanism.
BUILD_ROOT: ${CI_PROJECT_DIR}

##### SHARED_CI CONFIGURATION
# SHARED_CI CONFIGURATION
# Required information about GitHub repository
GITHUB_PROJECT_NAME: "CARE"
GITHUB_PROJECT_ORG: "LLNL"
Expand All @@ -56,41 +50,164 @@ variables:
JOB_CMD:
value: "./scripts/gitlab/build_and_test.sh"
expand: false
# Override the pattern describing branches that will skip the "draft PR filter
# test". Add protected branches here. See default value in
# preliminary-ignore-draft-pr.yml.
# ALWAYS_RUN_PATTERN: ""

# We organize the build-and-test stage with sub-pipelines. Each sub-pipeline
# corresponds to a test batch on a given machine.
###############################################################################
# MAIN PIPELINE STAGES
###############################################################################
# IMPORTANT: You must define stages yourself to allow customization.
# The following stages are REQUIRED by RADIUSS Shared CI components:

# High level stages
stages:
- prerequisites
- build-and-test
- prerequisites # Required: machine availability checks
- build-and-test # Required: build and test jobs

# Template for jobs triggering a build-and-test sub-pipeline:
.build-and-test:
stage: build-and-test
trigger:
include:
- local: '.gitlab/custom-jobs-and-variables.yml'
- project: 'radiuss/radiuss-shared-ci'
ref: 'v2025.09.1'
file: 'pipelines/${CI_MACHINE}.yml'
- artifact: '${CI_MACHINE}-jobs.yml'
job: 'generate-job-lists'
strategy: depend
forward:
pipeline_variables: true
###############################################################################
# INCLUDES
###############################################################################

include:
# Sets ID tokens for every job using `default:`
- project: 'lc-templates/id_tokens'
file: 'id_tokens.yml'
# [Optional] checks preliminary to running the actual CI test
#- project: 'radiuss/radiuss-shared-ci'
# ref: 'v2025.09.1'
# file: 'utilities/preliminary-ignore-draft-pr.yml'
# pipelines subscribed by the project
- local: '.gitlab/subscribed-pipelines.yml'

# Base pipeline templates and utilities
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/base-pipeline@v2025.12.0
inputs:
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
github_token: $GITHUB_TOKEN

# Local custom variables (used for component inputs and forwarded to child pipelines)
- local: '.gitlab/custom-variables.yml'

###############################################################################
# MACHINE PIPELINES
###############################################################################
# We organize the build-and-test stage with sub-pipelines. Each sub-pipeline
# corresponds to a test batch on a given machine.
#
# Note: .machine-check template is provided by the base-pipeline component
# and includes better error handling, validation, and GitHub status reporting.
# Trigger a build-and-test pipeline for each machine.
# Comment out the machine blocks you don't need.

# One job to generate the job list for all the subpipelines
generate-job-lists:
stage: prerequisites
tags: [shell, oslic]
variables:
RADIUSS_JOBS_PATH: "scripts/radiuss-spack-configs/gitlab/radiuss-jobs"
LOCAL_JOBS_PATH: ".gitlab/jobs"
script:
- cat ${RADIUSS_JOBS_PATH}/dane.yml ${LOCAL_JOBS_PATH}/dane.yml > dane-jobs.yml
- cat ${RADIUSS_JOBS_PATH}/matrix.yml ${LOCAL_JOBS_PATH}/matrix.yml > matrix-jobs.yml
- cat ${RADIUSS_JOBS_PATH}/corona.yml ${LOCAL_JOBS_PATH}/corona.yml > corona-jobs.yml
- cat ${RADIUSS_JOBS_PATH}/tioga.yml ${LOCAL_JOBS_PATH}/tioga.yml > tioga-jobs.yml
- cat ${RADIUSS_JOBS_PATH}/tuolumne.yml ${LOCAL_JOBS_PATH}/tuolumne.yml > tuolumne-jobs.yml
artifacts:
paths:
- dane-jobs.yml
- matrix-jobs.yml
- corona-jobs.yml
- tioga-jobs.yml
- tuolumne-jobs.yml

# DANE
dane-up-check:
extends: [.dane, .machine-check]

dane-build-and-test:
extends: [.dane, .build-and-test]
needs: [dane-up-check, generate-job-lists]
trigger:
include:
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/dane-pipeline@v2025.12.0
inputs:
job_cmd: $JOB_CMD
shared_alloc: $DANE_SHARED_ALLOC
job_alloc: $DANE_JOB_ALLOC
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
- local: '.gitlab/custom-jobs.yml'
- artifact: 'dane-jobs.yml'
job: 'generate-job-lists'

# MATRIX
matrix-up-check:
extends: [.matrix, .machine-check]

matrix-build-and-test:
extends: [.matrix, .build-and-test]
needs: [matrix-up-check, generate-job-lists]
trigger:
include:
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/matrix-pipeline@v2025.12.0
inputs:
job_cmd: $JOB_CMD
shared_alloc: $MATRIX_SHARED_ALLOC
job_alloc: $MATRIX_JOB_ALLOC
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
- local: '.gitlab/custom-jobs.yml'
- artifact: 'matrix-jobs.yml'
job: 'generate-job-lists'

# CORONA
corona-up-check:
extends: [.corona, .machine-check]

corona-build-and-test:
extends: [.corona, .build-and-test]
needs: [corona-up-check, generate-job-lists]
trigger:
include:
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/corona-pipeline@v2025.12.0
inputs:
job_cmd: $JOB_CMD
shared_alloc: $CORONA_SHARED_ALLOC
job_alloc: $CORONA_JOB_ALLOC
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
- local: '.gitlab/custom-jobs.yml'
- artifact: 'corona-jobs.yml'
job: 'generate-job-lists'

# TIOGA
tioga-up-check:
extends: [.tioga, .machine-check]

tioga-build-and-test:
extends: [.tioga, .build-and-test]
needs: [tioga-up-check, generate-job-lists]
trigger:
include:
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/tioga-pipeline@v2025.12.0
inputs:
job_cmd: $JOB_CMD
shared_alloc: $TIOGA_SHARED_ALLOC
job_alloc: $TIOGA_JOB_ALLOC
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
- local: '.gitlab/custom-jobs.yml'
- artifact: 'tioga-jobs.yml'
job: 'generate-job-lists'

# TUOLUMNE
tuolumne-up-check:
extends: [.tuolumne, .machine-check]

tuolumne-build-and-test:
extends: [.tuolumne, .build-and-test]
needs: [tuolumne-up-check, generate-job-lists]
trigger:
include:
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/tuolumne-pipeline@v2025.12.0
inputs:
job_cmd: $JOB_CMD
shared_alloc: $TUOLUMNE_SHARED_ALLOC
job_alloc: $TUOLUMNE_JOB_ALLOC
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
- local: '.gitlab/custom-jobs.yml'
- artifact: 'tuolumne-jobs.yml'
job: 'generate-job-lists'
87 changes: 0 additions & 87 deletions .gitlab/custom-jobs-and-variables.yml

This file was deleted.

37 changes: 37 additions & 0 deletions .gitlab/custom-jobs.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
###############################################################################
# Copyright (c) 2020-25, Lawrence Livermore National Security, LLC and CARE
# project contributors. See the CARE LICENSE file for details.
#
# SPDX-License-Identifier: BSD-3-Clause
###############################################################################

# This file defines JOB TEMPLATES ONLY.
# It is included in CHILD pipelines (via trigger: include:) to provide
# templates that your jobs can extend.

###############################################################################
# JOB CUSTOMIZATION TEMPLATES
###############################################################################

# Configuration shared by build and test jobs specific to this project.
# Not all configuration can be shared. Here projects can fine tune the
# CI behavior.
.custom_job:
artifacts:
reports:
junit: junit.xml
name: "${CI_PROJECT_NAME}-${CI_MACHINE}-${CI_JOB_NAME}-${CI_PIPELINE_ID}"
paths:
- ./*.cmake

.reproducer_vars:
script:
- |
echo -e "
# Required variables \n
export MODULE_LIST=\"${MODULE_LIST}\" \n
export SPEC=\"${SPEC//\"/\\\"}\" \n
# Allow to set job script for debugging (only this differs from CI) \n
export DEBUG_MODE=true \n
# Using the CI build cache is optional and requires a token. Set it like so: \n
# export REGISTRY_TOKEN=\"<your token here>\" \n"
Loading