Contributing¶
Thank you for your interest in contributing to DRLS! This guide covers the development workflow, build commands, testing, and code standards.
Development Setup¶
See the Dev Setup Guide for complete environment setup instructions.
Quick Start¶
Build Commands¶
Java/Scala (Core)¶
Note
Requires Java 21. Set JAVA_HOME if needed.
Python¶
Rust Workspace (Backend + Operators)¶
Requires Python 3.12+ with drls[dev] installed (PyO3 needs Python headers for the ui-server crate).
React Frontend¶
gRPC Stubs¶
Testing¶
Python Unit Tests¶
End-to-End Tests¶
E2E tests require a running Spark + Ray cluster:
Rust Tests¶
Frontend Lint¶
Linting and Formatting¶
All code must pass lint checks before merging. The CI pipeline enforces these automatically.
Python — Ruff¶
Configuration in python/pyproject.toml:
- Rules: E, F, W, I, UP, B
- Line length: 120
- Ignored: E501, E741, UP007
Java/Scala — Checkstyle + Spotless¶
- Java: google-java-format
- Scala: scalafmt 3.8.3
Rust — Clippy¶
Frontend — ESLint + Prettier¶
CI Pipeline¶
The CI runs 7 parallel jobs on every push and pull request:
| Job | What it does |
|---|---|
maven-build |
Build JVM modules (Java 21) |
maven-lint |
Checkstyle + Spotless check |
python-tests |
Unit tests with pytest |
python-lint |
Ruff check + format check |
ui-build |
ESLint + Prettier + Vite build |
rust-build |
Clippy + tests + release build |
docs-build |
MkDocs strict build |
Pull Request Process¶
-
Create a feature branch from
main: -
Make your changes and ensure all relevant lint/test checks pass locally.
-
Push and open a pull request against
main. -
All CI checks must pass before merge.
Branch Naming¶
| Prefix | Use |
|---|---|
feature/ |
New features |
fix/ |
Bug fixes |
docs/ |
Documentation changes |
refactor/ |
Code refactoring |
Project Structure¶
drls/
core/ # JVM modules (Maven, Java/Scala)
python/ # Python package
rust/ # Rust workspace
crates/
ui-server/ # Axum REST server + PyO3 (embedded Python)
shared/ # Shared CRD types (Pipeline, Notebook)
pipeline-operator/ # Pipeline orchestrator (kube-rs)
marimo-operator/ # Notebook lifecycle operator (kube-rs)
ui/
frontend/ # React + Vite + TypeScript
backend/ # Symlink → rust/crates/ui-server/
proto/ # gRPC definitions (optional server)
examples/ # Example scripts
docs/ # Documentation (MkDocs)
License¶
By contributing, you agree that your contributions will be licensed under the same terms as the project:
- Core, CLI, agentic tools: Apache License 2.0
- UI (Rust backend + React frontend): BSL / Proprietary