ReleaseBoard configuration is validated against a JSON Schema (Draft 7) located at:
src/releaseboard/config/schema.json
The schema enforces:
- Required fields (
release,repositories) - Type constraints (strings, integers, arrays)
- Value ranges (month 1–12, year 2000–2100)
- Enum values (theme: light/dark/system)
- Pattern validation (hex colors, layer IDs)
- No additional properties at any level
- Optional
authorsection with all-optional fields (name, role, url, tagline, copyright)
Config is validated in two phases:
Structural validation against the JSON Schema using jsonschema.Draft7Validator.
Business rule checks that go beyond schema:
- Layer reference validation: all repository
layerfields must reference defined layers
The layers array supports the following fields:
| Field | Type | Required | Description |
|---|---|---|---|
id |
string | ✅ | Unique layer identifier |
label |
string | ✅ | Display label |
branch_pattern |
string | - | Layer-level branch pattern override |
repository_root_url |
string | - | Root URL prefix for repositories in this layer (used when a repository does not specify an explicit url) |
color |
string | - | Hex color for badges and charts |
order |
integer | - | Display order (lower = first) |
The optional layout section controls dashboard section ordering and layout templates.
| Field | Type | Required | Description |
|---|---|---|---|
default_template |
string | - | Active layout template (default, executive, release-manager, engineering, compact, or user-created name) |
section_order |
array of strings | - | Ordered list of visible section IDs: score, metrics, charts, filters, attention, layer-{id}, summary |
enable_drag_drop |
boolean | - | Enable drag-and-drop section reordering (default true) |
All fields are optional. additionalProperties is false - no extra keys allowed.
Validation errors include the JSON path to the problem:
release.target_month: 13 is greater than the maximum of 12
settings.theme: 'rainbow' is not one of ['light', 'dark', 'system']
repositories[2].layer: 'backend' is not defined in layers
Point your JSON editor to the schema for autocompletion:
{
"$schema": "./src/releaseboard/config/schema.json",
"release": { ... }
}from releaseboard.config.schema import validate_config, validate_config_strict
errors = validate_config(data) # Returns list of error strings
validate_config_strict(data) # Raises ConfigValidationError