No description
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Mike 'Fuzzy' Partin 2d19811451
Some checks failed
CI / lint (pull_request) Successful in 35s
CI / test (pull_request) Successful in 49s
Generate Artifacts / generate (push) Failing after 8m50s
fix: update schematic generation to use retries instead of auto_stub
2026-05-05 07:28:42 -07:00
.forgejo/workflows feat: add schematic image generation for circuits 2026-05-05 03:35:22 -07:00
circuits.d feat: add dc operating point simulation with ngspice fallback 2026-05-05 01:17:59 -07:00
docs docs: add KiCad compatibility matrix document 2026-05-04 01:06:36 -07:00
generated chore: add gitkeep file to generated directory 2026-05-05 01:20:08 -07:00
schemas fix: update resistor values to string format and expand reference pattern 2026-05-05 00:54:11 -07:00
scripts feat: post PR comment with artifact generation summary 2026-05-03 23:09:58 -07:00
src/circuitci fix: update schematic generation to use retries instead of auto_stub 2026-05-05 07:28:42 -07:00
tests fix: update transistor symbol mapping to Q_NPN_BCE 2026-05-05 01:57:35 -07:00
.gitignore ci: parallelize lint/test jobs, add apt caching in merge workflow 2026-05-04 22:21:21 -07:00
.pre-commit-config.yaml feat: add pre-commit hooks for code quality and formatting 2026-05-03 02:35:22 -07:00
.python-version feat: initialize circuitci project with python packaging and dependencies 2026-05-03 02:25:29 -07:00
pyproject.toml chore: suppress SyntaxWarnings from third-party libs in pytest output 2026-05-04 22:30:58 -07:00
README.md docs: add project README with quick start and overview 2026-05-04 22:11:08 -07:00
ROADMAP.md docs: mark Phase 6 completed tasks in ROADMAP 2026-05-04 22:21:44 -07:00
uv.lock feat: implement circuit simulation with pyspice and lcapy integration 2026-05-03 06:14:26 -07:00

circuitci

CI/CD for electronics. Define circuits as YAML/JSON — circuitci generates KiCad netlists, schematics, BOM CSVs, runs PySpice simulations, and validates results against expected behavior.

Quick Start

# Install dependencies
uv sync --all-groups

# Set KiCad symbol path (KiCad 8/9 symbols required)
export KICAD9_SYMBOL_DIR=/usr/share/kicad/symbols

# Generate artifacts for all circuits
uv run python -m circuitci generator

Output lands in generated/<circuit_name>/:

  • <name>.py — SKiDL script
  • <name>_bom.csv — Bill of Materials
  • <name>.net — KiCad netlist
  • <name>.kicad_sch — KiCad schematic

Add a Circuit

mkdir -p circuits.d/my_circuit

Create circuits.d/my_circuit/circuit.yaml with a BOM and netlist. See docs/input-format.md for the full spec.

Documentation

How It Works

circuit.yaml/json  ──→  SKiDL script  ──→  .net netlist
                                        ──→  .kicad_sch schematic
                    ──→  BOM CSV
                    ──→  PySpice simulation  ──→  validation report
                    ──→  Lcapy symbolic analysis

Triggered by pushes to circuits.d/ — CI runs lint+tests on PRs, artifact generation runs on merge to main and pushes to the assets branch.

Requirements

  • Python 3.12+
  • KiCad 8 or 9 symbol libraries (kicad-symbols)
  • ngspice (optional, for simulation)