5-Minute Quick Start¶
Get a basic RADIUSS Shared CI pipeline running in 5 minutes.
Important
Before starting, ensure you’ve completed the Prerequisites checklist.
Overview¶
This guide will set up a minimal CI pipeline that:
Checks if Dane machine is available
Runs a single build/test job on Dane
Reports status to GitHub
You can expand this later to add more machines and jobs.
Step 1: Create Files¶
In your project root, create the required directory structure:
cd /path/to/your/project
mkdir -p .gitlab/jobs
You’ll create three files:
.gitlab-ci.yml- Main pipeline configuration.gitlab/jobs/dane.yml- Dane-specific jobsscripts/build-and-test.sh- Your build/test script (if you don’t have one)
Step 2: Main Pipeline File¶
Create .gitlab-ci.yml in your project root:
###############################################################################
# RADIUSS Shared CI - Minimal Component-Based Setup
###############################################################################
# Required: Define stages
stages:
- prerequisites
- build-and-test
# Configuration variables
variables:
# GitHub project info
GITHUB_PROJECT_NAME: "myproject" # ← CHANGE THIS
GITHUB_PROJECT_ORG: "LLNL" # ← CHANGE THIS if needed
# Build command (use your actual script path)
JOB_CMD:
value: "./scripts/build-and-test.sh"
expand: false
# Optional: Service user
LLNL_SERVICE_USER: "" # Set if using service account
# Optional: Git submodules
GIT_SUBMODULE_STRATEGY: recursive # or "none" if no submodules
# Include RADIUSS Shared CI components
include:
# Base orchestration component
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/base-pipeline@v2026.02.2
inputs:
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
github_token: $GITHUB_STATUS_TOKEN
# Machine availability check
dane-up-check:
extends: [.dane, .machine-check]
variables:
ASSOCIATED_CHILD_PIPELINE: "dane-build-and-test"
# Dane build and test pipeline
dane-build-and-test:
needs: [dane-up-check]
extends: [.dane, .build-and-test]
trigger:
include:
# Dane machine component
- component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/dane-pipeline@v2026.02.2
inputs:
job_cmd: $JOB_CMD
shared_alloc: "--reservation=ci --nodes=1 --exclusive --time=30"
job_alloc: "--reservation=ci --nodes=1"
github_project_name: $GITHUB_PROJECT_NAME
github_project_org: $GITHUB_PROJECT_ORG
llnl_service_user: $LLNL_SERVICE_USER
# Your Dane-specific jobs
- local: '.gitlab/jobs/dane.yml'
Required changes:
Line 13: Change
"myproject"to your GitHub project nameLine 14: Change
"LLNL"if your org is differentLine 18: Change with your actual build and test command
Step 3: Dane Jobs File¶
Create .gitlab/jobs/dane.yml:
###############################################################################
# Dane Machine Jobs
###############################################################################
# Minimal job - inherits everything from .job_on_dane template
basic-build:
extends: .job_on_dane
That’s it! This creates one job that runs your JOB_CMD on Dane.
Add more jobs with different configurations using variables, for example:
# Multiple compiler jobs
gcc-build:
extends: .job_on_dane
variables:
COMPILER: "gcc"
COMPILER_VERSION: "11.0.0"
clang-build:
extends: .job_on_dane
variables:
COMPILER: "clang"
COMPILER_VERSION: "14.0.0"
COMPILER and COMPILER_VERSION variables are now accessible to your
script’s environment.
Note
RADIUSS projects that leverage radiuss-shared-ci typically use Spack in the build script and pass the spack spec as a variable.
Step 4: Build Script (Optional)¶
If you don’t have a build/test script yet, create scripts/build-and-test.sh:
#!/bin/bash
set -e # Exit on first error
echo "Building and testing project..."
# Example: Load environment
module load ${COMPILER}/${COMPILER_VERSION}
module load cmake/3.25
# Example: Configure
cmake -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_COMPILER=g++
# Example: Build
cmake --build build -j8
# Example: Test
cd build
ctest --output-on-failure
echo "Build and test completed successfully!"
Make it executable:
chmod +x scripts/build-and-test.sh
Note
The content of this script is entirely project dependent. Adapt it to your project’s actual build system (CMake, Make, Spack, etc.).
Step 5: Configure GitHub Token¶
In LC GitLab, add your GitHub token as a CI/CD variable:
Navigate to your GitLab project settings:
https://lc.llnl.gov/gitlab/<your-org>/<your-project>/-/settings/ci_cdExpand “Variables” section
Click “Add variable”
Configure:
Key:
GITHUB_STATUS_TOKENValue: (paste your GitHub personal access token)
Type: Variable
Protected: ☑ (recommended)
Masked: ☑ (recommended)
Expand variable reference: ☐ (unchecked)
Click “Add variable”
Warning
Never commit your token to Git! Always set it as a CI/CD variable.
Step 6: Commit and Push¶
Add and commit your new files:
git add .gitlab-ci.yml .gitlab/jobs/dane.yml scripts/build-and-test.sh
git commit -m "Add RADIUSS Shared CI configuration
- Configure component-based CI for Dane
- Add basic build/test job
- Include build script"
git push origin <your-branch>
Step 7: Verify in GitLab¶
After pushing (and waiting for GitHub → GitLab mirroring):
View Pipeline: Go to your LC GitLab project → CI/CD → Pipelines
Check Stages:
┌─────────────────┐ ┌──────────────────┐ │ prerequisites │ ──→ │ build-and-test │ │ │ │ │ │ dane-up-check ✓ │ │ dane-build-and- │ │ │ │ test (child) ⟳ │ └─────────────────┘ └──────────────────┘
View Child Pipeline: Click on
dane-build-and-testto see the actual build job(s)Check GitHub: Go to your GitHub PR/commit and verify CI status appears
What Just Happened?¶
Let’s break down what you created:
Parent Pipeline (.gitlab-ci.yml):
Defines two stages:
prerequisitesandbuild-and-testIncludes
base-pipelinecomponent for orchestration templatesCreates
dane-up-checkjob to verify Dane is availableCreates
dane-build-and-testtrigger that spawns a child pipeline
Child Pipeline (triggered for Dane):
Includes
dane-pipelinecomponent with templates for DaneIncludes your
.gitlab/jobs/dane.ymlwith actual jobsJobs run within a shared allocation on Dane
Each job executes your
JOB_CMDin the appropriate environment
Reporting:
Overall status of the parent pipeline (depending on child pipeline success) is reported to GitHub automatically via native integration.
Machine-specific status is reported both by machine check jobs (RADIUSS Shared CI feature) and by the corresponding child pipelines via native integration.
You see both statuses on GitHub PR/commit.
Note
The machine check and child pipeline status reports are independent but both use the same reporting context. This allows native child pipelines reports to override a failure in the machine check when a machine returns as available after an initial failure without multiplying the reports (machine checks don’t report successes to reduce the number of statuses).
Next Steps¶
Now that you have a basic pipeline running, you can:
- Add More Machines:
Copy the
dane-up-checkanddane-build-and-testsections, changingdaneto other machines (matrix,corona,tioga, etc.)See: Choosing Your Path
- Add More Jobs:
Edit
.gitlab/jobs/dane.ymlto add more jobs with different configurations (compilers, build types, etc.)- Customize Allocations:
Adjust
shared_allocandjob_allocparameters to your actual needs.- Add Utilities:
Include
utility-draft-pr-filterto skip CI on draft PRs- Enable Performance Testing:
Add the
performance-pipelinecomponent and performance jobs
Get Help¶
Troubleshooting: Troubleshooting
Quick reference: Quick Reference
Full setup documentation: Setup CI with Components
GitHub issues: https://github.com/LLNL/radiuss-shared-ci/issues
See also
Choosing Your Path - Decide which machines and features to enable
Core Concepts - Understand the architecture
Migrating to GitLab CI Components - Migrate from legacy setup