Contributing¶
This guide covers how to contribute to RADIUSS Shared CI.
Getting Started¶
Fork and Clone¶
Fork repository on GitHub: https://github.com/LLNL/radiuss-shared-ci
Clone your fork:
git clone https://github.com/YOUR_USERNAME/radiuss-shared-ci.git cd radiuss-shared-ci
Add upstream remote:
git remote add upstream https://github.com/LLNL/radiuss-shared-ci.git
Development Workflow¶
Create feature branch from
main:git checkout main git pull upstream main git checkout -b feature/my-feature
Make changes with clear commits
Test changes (see Testing section below)
Push to your fork:
git push origin feature/my-feature
Open pull request on GitHub
Testing Changes¶
Component Testing¶
Test component changes in actual project:
Push branch to GitHub:
git push origin feature/my-feature
Wait for mirror sync to LC GitLab (5-30 minutes)
Update test project to use development branch:
include: - component: $CI_SERVER_FQDN/radiuss/radiuss-shared-ci/dane-pipeline@feature/my-feature inputs: job_cmd: "./test.sh" shared_alloc: "--nodes=1" job_alloc: "--nodes=1"
Run full pipeline and verify:
All machines work correctly
Jobs execute successfully
GitHub status updates appear
Reproducer instructions print correctly
Documentation Testing¶
Build documentation locally:
cd docs
# Create virtual environment
python3 -m venv venv
source venv/bin/activate
# Install dependencies
pip install -r requirements.txt
# Build documentation
sphinx-build -b html sphinx _build/html
# Open in browser
open _build/html/index.html # macOS
# Or: xdg-open _build/html/index.html # Linux
deactivate
Check for:
Sphinx warnings in build output
Broken cross-references
Proper formatting and rendering
Valid code examples
Legacy Testing¶
If changes affect legacy implementation, test with include-based setup:
include:
- project: 'radiuss/radiuss-shared-ci'
ref: 'feature/my-feature'
file: 'pipelines/dane.yml'
Code Guidelines¶
YAML Style¶
Use 2-space indentation
Consistent naming:
job_on_<machine>,ON_<MACHINE>Document component inputs with descriptions
Add comments for complex logic
Component Structure¶
Components should follow this structure:
# templates/component-name/template.yml
spec:
inputs:
input_name:
type: string
description: "Clear description of what this input does"
default: "value" # Optional
---
# Component implementation
.template_name:
# Template definition
Documentation Style¶
Use clear, concise language
Provide working code examples
Use cross-references:
:doc:`file`and:ref:`label`Follow existing documentation structure
Pull Request Process¶
Before Submitting¶
[ ] Changes tested in actual project
[ ] Documentation updated if needed
[ ] CHANGELOG.md updated for user-facing changes
[ ] Code follows style guidelines
Submitting PR¶
Write clear PR description:
What problem does this solve?
What changes were made?
How was it tested?
Any breaking changes?
Link related issues if applicable
Request review from maintainers
Review Process¶
Maintainers will:
Review code and documentation
Test changes if needed
Provide feedback
Approve when ready
Address feedback by:
Making requested changes
Pushing to same branch (PR updates automatically)
Responding to comments
Merging¶
Maintainers will merge when:
All feedback addressed
Tests pass
Documentation complete
At least one approval
Component Catalog and README¶
The repository README.md serves as the catalog entry for GitLab CI/CD Catalog.
README Structure (GitLab Guidelines)¶
Following GitLab’s recommendations, the README should include:
- Summary
Start with summary of capabilities that components provide
- Table of Contents (for multiple components)
Help users quickly jump to specific component details
- ## Components Section
With subsections like
### Component Namefor each componentFor each component:
Describe what the component does
Add at least one YAML example showing usage
Link to published component (inputs appear automatically on component page)
Do not duplicate input documentation - use
spec:inputs:descriptionin component
- ## Contribute Section
Include if contributions are welcome
- Additional Documentation
For complex components, create Markdown file in component directory and link from README
When Adding Components¶
Add new component to README with:
Subsection under
## ComponentsClear description of what it does
YAML usage example
Link to published component in catalog
Do not list inputs (they appear automatically)
Example structure:
### NewMachine Pipeline
Provides CI templates for NewMachine (SLURM scheduler, 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)
Release Process¶
Version Updates¶
When preparing release, update version references in:
docs/sphinx/conf.py- SetreleasevariableREADME.md- Update example version tags and version referencesexamples/*.yml- Update component versionscustomization/*.yml- Update ref versions
Changelog¶
Update CHANGELOG.md with:
- Added
New features and capabilities
- Changed
Changes to existing functionality
- Fixed
Bug fixes
- Breaking Changes
Changes requiring user action
- Migration Notes
How to update from previous version
Creating Release¶
Maintainers create releases:
# Tag and push
git tag v2026.03.0
git push origin v2026.03.0
Components automatically publish to GitLab CI/CD Catalog when tagged.
Announcement¶
After release:
Create GitHub release with changelog
Notify projects using RADIUSS Shared CI
Update any external documentation
Getting Help¶
Questions About Contributing¶
Open discussion in issue before major changes
Ask in PR if uncertain about implementation
Check existing code for examples and patterns
Reporting Issues¶
When reporting issues, include:
Clear description of problem
Steps to reproduce
Expected vs actual behavior
Relevant configuration files
Error messages and logs
GitLab and RADIUSS Shared CI versions
Feature Requests¶
When requesting features, describe:
Use case and motivation
Proposed solution (if any)
Alternative approaches considered
Impact on existing functionality
Code of Conduct¶
Be respectful and professional
Provide constructive feedback
Focus on code and ideas, not people
Welcome newcomers
Additional Resources¶
Developer How-To - Step-by-step procedures
RADIUSS Shared CI Explained - Architecture overview
Developer Troubleshooting - Common development issues