Developer How-To¶
Step-by-step procedures for common development tasks.
Add a New Machine¶
Complete procedure to add support for a new machine.
Step 1: Create Component¶
Create component directory:
mkdir -p templates/newmachine-pipeline
Choose template base:
For SLURM machines: Copy
templates/dane-pipeline/template.ymlFor Flux machines: Copy
templates/tioga-pipeline/template.yml
Create
templates/newmachine-pipeline/template.yml:Replace all instances of source machine name with new machine name:
# Example: If copying from dane sed 's/dane/newmachine/g; s/DANE/NEWMACHINE/g' \ templates/dane-pipeline/template.yml > \ templates/newmachine-pipeline/template.yml
Update machine-specific details:
Runner tags
Scheduler commands (if different)
Default allocation parameters
Environment setup
Step 2: Update Base Pipeline¶
Add machine rules to templates/base-pipeline/template.yml:
# Add after other machine rules
.newmachine:
rules:
- if: '$ON_NEWMACHINE == "OFF"'
when: never
- when: on_success
Step 3: Create Legacy Implementation¶
For backward compatibility:
Create
pipelines/newmachine.ymlby copying similar machineReplace machine names throughout
Test legacy include syntax works
Step 4: Update Customization Templates¶
Add to
customization/subscribed-pipelines.yml:# NewMachine newmachine-up-check: extends: [.newmachine, .machine-check] variables: ASSOCIATED_CHILD_PIPELINE: "newmachine-build-and-test" newmachine-build-and-test: needs: [newmachine-up-check] extends: [.newmachine, .build-and-test] variables: CI_MACHINE: "newmachine" trigger: include: - local: '.gitlab/custom-jobs.yml' - project: 'radiuss/radiuss-shared-ci' ref: '${SHARED_CI_REF}' file: 'pipelines/newmachine.yml' - local: '.gitlab/jobs/newmachine.yml'
Add to
customization/custom-jobs-and-variables.yml:# NewMachine allocation parameters NEWMACHINE_SHARED_ALLOC: "--nodes=1 --time=30" NEWMACHINE_JOB_ALLOC: "--nodes=1"
Step 5: Update Documentation¶
Update
README.mdat repository root:Add subsection under
## Components:### NewMachine Pipeline Provides CI templates for NewMachine (SLURM, Intel CPUs). **Usage:** ```yaml include: - component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/newmachine-pipeline@v2026.02.2 inputs: job_cmd: "./build-and-test.sh" ``` [View component inputs →](https://lc.llnl.gov/gitlab/radiuss/radiuss-shared-ci/-/components/newmachine-pipeline)
Do not list inputs - they appear automatically on component page
Add to
docs/sphinx/reference/components/machine-pipelines.rst:Add section describing the new machine with:
Hardware description (CPU/GPU)
Scheduler type
Common allocation parameters
Example usage
Update machine lists in:
docs/sphinx/getting_started/choosing-your-path.rstdocs/sphinx/user_guide/quick-reference.rstdocs/sphinx/getting_started/five-minute-setup.rst(if appropriate)
Add
ON_NEWMACHINEto variable tables
Step 6: Test Implementation¶
Commit changes to development branch:
git checkout -b add-newmachine-support git add templates/newmachine-pipeline/ pipelines/newmachine.yml git add customization/ examples/ docs/ git commit -m "Add NewMachine support" git push origin add-newmachine-support
Wait for GitHub to LC GitLab mirror sync (5-30 minutes)
Test in project:
include: - component: .../newmachine-pipeline@add-newmachine-support inputs: job_cmd: "./test.sh" shared_alloc: "--nodes=1" job_alloc: "--nodes=1"
Verify:
Machine check executes
Jobs run successfully
Allocations work correctly
GitHub status reports
Reproducer prints correctly
Step 7: Submit Changes¶
Update
CHANGELOG.md:## [Unreleased] ### Added - NewMachine support (SLURM/Flux, CPU/GPU description)
Open pull request on GitHub with:
Description of new machine
Hardware/scheduler details
Test results
Links to test pipeline runs
Add a Utility Component¶
Procedure for adding non-machine components (like draft-pr-filter).
Step 1: Create Component¶
Create directory:
mkdir -p templates/utility-feature-name
Create
templates/utility-feature-name/template.yml:spec: inputs: required_input: type: string description: "What this input does" --- # Component implementation feature-job: stage: prerequisites tags: [shell, oslic] script: - echo "Doing something with ${{ inputs.required_input }}"
Step 2: Add Documentation¶
Add to
docs/sphinx/reference/components/utility-components.rstUpdate
README.mdat repository root:Add subsection under
## Componentswith:What the component does
YAML usage example
Link to published component (do not list inputs)
Example:
### Utility: Feature Name Brief description of what this utility does. **Usage:** ```yaml include: - component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/utility-feature-name@v2026.02.2 inputs: required_input: "value" ``` [View component inputs →](https://lc.llnl.gov/gitlab/radiuss/radiuss-shared-ci/-/components/utility-feature-name)
Update examples if needed
Step 3: Test and Submit¶
Test in development branch
Update CHANGELOG.md
Submit pull request
Update Component Version¶
Procedure for making version updates.
For Breaking Changes¶
Update component spec:
spec: inputs: new_required_input: # New required input is breaking type: string
Update legacy implementation to match
Document in
CHANGELOG.md:### Breaking Changes - Component now requires `new_required_input` ### Migration ```yaml inputs: new_required_input: "value" # Add this ```
Update all examples and documentation
For Non-Breaking Changes¶
Add optional inputs (with defaults):
spec: inputs: new_optional_input: type: string default: "default_value"
Update
CHANGELOG.mdunder Added or ChangedUpdate examples to show new functionality
Update Examples¶
When updating example files for new version.
Procedure¶
Update version references in:
examples/example-gitlab-ci.ymlexamples/example-custom-jobs.ymlexamples/example-jobs-*.yml
Find and replace:
cd examples/ sed -i 's/@v2026.02.2/@v2026.03.0/g' *.yml
Update
customization/*.ymlref values:cd customization/ sed -i 's/v2026.02.2/v2026.03.0/g' *.yml
Verify changes and test
Build Documentation¶
Procedure to build docs locally.
Setup¶
cd docs
# Create virtual environment (one time)
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
Build¶
# Build documentation
sphinx-build -b html sphinx _build/html
# Open in browser
open _build/html/index.html
Rebuild After Changes¶
# Clean previous build
rm -rf _build
# Rebuild
sphinx-build -b html sphinx _build/html
Check for Warnings¶
Look for Sphinx warnings during build:
Broken cross-references
Missing files in toctree
Invalid RST syntax
Fix warnings before submitting changes.
Troubleshooting¶
For development issues, see Developer Troubleshooting.
Additional Resources¶
RADIUSS Shared CI Explained - Architecture and design
Contributing - Contribution guidelines
Developer Troubleshooting - Common development issues