Skip to content

Multi-project Workspaces

BoardReadyOps discovers every .kicad_pro under the workspace root by default. That allows a hardware monorepo to keep firmware, tooling, and multiple KiCad projects together while a single run reports project-attributed findings.

Built-in discovery skips generated and dependency folders such as node_modules/, .git/, dist/, and coverage/.

Configure Project Overrides

Project entries match either a project directory or a .kicad_pro path. They layer project-local settings over the workspace config for that project only.

version: 1
rules:
  manufacturing.outputs-present:
    required: [gerber, drill]
projects:
  - path: hardware/mainboard
    rules:
      manufacturing.outputs-present:
        severity: critical
  - path: hardware/prototype
    mode: warn
    bom: hardware/prototype/bom/prototype.csv
fail-on: high

The mainboard override does not affect prototype findings. BOM, pinmap, variant, mode, and rule settings stay scoped to the matched project context while global settings remain available as defaults.

Filter One Project

Use --project when a local edit or CI job should check one board from a larger workspace.

boardreadyops run . --project hardware/mainboard
boardreadyops check manufacturing.outputs-present . --project hardware/mainboard
boardreadyops run . --project hardware/mainboard/mainboard.kicad_pro

Directory filters discover every .kicad_pro below that directory. File filters run exactly the referenced project path.

Bound Concurrent Work

BoardReadyOps checks project contexts concurrently. The default worker count follows the available CPU parallelism; --concurrency caps it for shared CI runners or especially expensive KiCad-backed checks.

boardreadyops run . --concurrency 2

Report ordering remains deterministic after concurrent execution.

Read Project Attribution

JSON findings identify their owning project directly:

{
  "ruleId": "release.revision-set",
  "project": "hardware/mainboard/mainboard.kicad_pro",
  "resource": {
    "path": "hardware/mainboard/mainboard.kicad_pcb",
    "kind": "pcb"
  }
}

Use project rather than guessing ownership from resource.path when aggregating findings across a monorepo.