Skip to content

Contributing

Setup

git clone https://github.com/earthobservations/rucola
cd rucola
uv sync --all-groups

Development workflow

poe format            # auto-format with ruff
poe lint              # check formatting and linting
poe type              # type-check with ty
poe test              # fast unit tests (default)
poe test-slow         # full pipeline tests
poe test-all          # everything including DWD integration tests
poe check             # lint + type + audit + test

Running specific test groups

poe test-unit         # pure function tests, no I/O
poe test-slow         # tests that run the full 6-step procedure
poe test-integration  # tests that call the DWD API (requires network)

Security and hygiene

poe audit             # scan dependencies for vulnerabilities (uv audit)
poe deptry            # check for unused/missing dependencies
poe zizmor            # audit GitHub Actions workflows

Project layout

src/rucola/
├── __init__.py          # Rucola, RunConfig — public API and 6-step procedure
├── _algorithms.py       # haversine, Q-series, neighbor selection, correction
├── _homogeneity.py      # SNHT, Buishand, Pettitt, Worsley, Easterling-Peterson
├── _normalization.py    # NormalizationConfig, Normalizer
├── _preprocessing.py    # winsorize_outliers, compute_annual_totals/means
└── _results.py          # DetectionResult, HomogenizationResult, serialization

Pull requests

  • Target the main branch
  • All CI checks must pass (lint, type, tests)
  • Add tests for new behaviour — aim to keep coverage above 70 %
  • Update CHANGELOG.md under [Unreleased]