Commit Graph

70 Commits

Author SHA1 Message Date
Akhil Velagapudi 222cced75e Simplify Component properties -> KiCad footprint properties pipeline (#256)
* Dedup PhysicalValue

We had 2 different PhysicalValue structs in pcb-sch and pcb-zen-core
just to avoid adding starlark deps to pcb-sch. I don't think its worth
it.

* Use rust_decimal_macros

Factor out some duplicate code

* Add proper enum -> String attr support

* Add config("mpn") to generated components for compat

* Format list component properties nicely when exporting to kicad

* Format physical value, enum, list kicad properties in compiler

* Don't rely on __attr__ values

Handle typed, stringified component properties directly.

* Title case kicad properties
2025-10-30 16:08:48 -04:00
Akhil Velagapudi 680373c88b Fix wasm build regression (#254)
My last PR added a transitive dependency on pcb-kicad to pcb-zen-wasm,
which caused the wasm build to fail.

Build wasm bundle in CI to prevent future regressions.
2025-10-30 00:27:39 -04:00
Akhil Velagapudi 30778a6561 Use kicad-cli for fallback bom instead of symbol parsing (#253)
* Use kicad-cli for fallback bom instead of symbol parsing

* Add snapshot test
2025-10-29 22:31:20 -04:00
Diode Robot eeec06e65c Release v0.2.17 2025-10-27 22:37:58 +00:00
Diode Robot c00854e37f Release v0.2.16 2025-10-23 03:44:12 +00:00
Lenny Khazan 14ed225337 fix 3d model embedding (#247)
* fix 3d model embedding

* update order

* fix order
2025-10-22 21:52:59 -04:00
Diode Robot 08f391bf84 Release v0.2.15 2025-10-22 17:08:09 +00:00
Akhil Velagapudi d02f6e4b5c Add HTML fab drawing to release (#245)
* Add HTML fab drawing to release

Writing to manufacturing/fab_drawing.html.

* Only show inner copper weight if it makes sense
2025-10-21 19:36:32 -04:00
Diode Robot 5340d35cd7 Release v0.2.14 2025-10-21 18:58:55 +00:00
Akhil Velagapudi ef4f3693c5 Add pcb mcp (#240)
* Add mcp support for search_component, add_component

* Add get_zener_docs, fix add_component

* Update help snapshot
2025-10-21 13:33:10 -04:00
Akhil Velagapudi 606fc140cb Add pcb auth, pcb scan, pcb search (#236)
* Add pcb auth, pcb scan

* Allow overriding APP, API urls

* Add pcb-scan crate

* Add pcb search

* Move all api stuff into separate crate

* Follow redirects, minor ux improvements

* Update snapshot

* Fix clippy lints

* Update lock file

* Download + extract images by default

* Use datasheel urls from download response

* Add pcb auth refresh

* Use use search API, do more work in parallel

* Dedup code

* Generate correct .zen file using template

* Remove unnecessary code

* Embed step file into kicad_mod

* Synchronize auth token refresh

* Switch to single datasheet url

Also normaize line endings.

* Fix step embedding

* Sanitize names, upgrade footprints
2025-10-20 23:24:45 -04:00
Diode Robot 89f70b64e0 Release v0.2.13 2025-10-17 19:06:44 +00:00
Diode Robot 14a74ddf91 Release v0.2.12 2025-10-15 19:38:29 +00:00
Akhil Velagapudi 78b63cd9c1 [ENG-102] Auto assign netclasses by matching impedances (#232)
* Sync units, board_config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Parse netclasses

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Auto assign netclasses by matching impedances

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Only match net -> SE, DiffPair -> diff

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-15 09:45:47 -04:00
Diode Robot 2ae2d9c084 Release v0.2.11 2025-10-15 00:42:40 +00:00
Akhil Velagapudi 08460191ad Fix bug where hijacked interfaces didn't have default values (#231)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-14 18:39:01 -04:00
Diode Robot 23e08ef2ee Release v0.2.10 2025-10-14 15:28:00 +00:00
Akhil Velagapudi fe7441b7f4 Deferred child module evaluation (#226)
* Deferred child module evaluation

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Require load_resolver

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Avoid unsafe {}

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Define imports at top of file

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add minimal repro

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add custom enum impl with structural type checking

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Bump starlark-rust to use stable record type ids

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove repro/ contents

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Delete copy_value, deep copy

Also, migrate testbench to use deferred eval.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix Symbol type ID stability for config defaults

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-13 11:59:14 -04:00
Diode Robot 992a3c6934 Release v0.2.9 2025-10-09 17:18:58 +00:00
Akhil Velagapudi 4634c160ab Fix an issue where the gltf optimizer would lose color data (#220)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-09 10:47:25 -04:00
Diode Robot 1b271a690c Release v0.2.8 2025-10-08 03:09:27 +00:00
Akhil Velagapudi 0a77bbaa43 Add GLB export w/ gltfpacking (#218)
* Add GLB export w/ gltfpacking

Also separate 3d model exports into multiple tasks

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Switch to gltfpack-sys lib

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Bump gltfpack to drop cmake dependency

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-07 20:28:24 -04:00
Diode Robot 0c7b1bf1ba Release v0.2.7 2025-10-06 14:35:41 +00:00
Davide Asnaghi 6e6e65daf9 Release v0.2.6 (#211) 2025-10-05 04:18:49 +02:00
Akhil Velagapudi a877cfd530 Use git worktrees for more efficient dep fetching (#206)
Loading multiple versions/refs from the same repository required
separate full clones. This was slow, wasted disk space, and network
bandwidth despite having 90%+ content overlap in some cases.

Use git worktrees with a shared bare repository as the object store.
Each version gets a lightweight working directory that references the
same underlying git objects.

Also use a .lock file to avoid race conditions.

Cache Structure:
  ~/.cache/pcb/github/{user}/{repo}/
  ├── .repo/             # Shared bare repo
  ├── .repo.lock         # Lock file
  ├── v0.2.7/            # Worktree
  └── v0.2.10/           # Worktree

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 00:15:01 -04:00
Akhil Velagapudi 4dd6bd1027 Release v0.2.5 (#202) 2025-10-02 18:04:51 -04:00
Lenny Khazan 8356e663ff Release v0.2.4 (#197) 2025-10-01 18:02:20 -04:00
Akhil Velagapudi d84cb60c6f Release v0.2.3 (#194) 2025-10-01 14:54:48 -04:00
Lenny Khazan 71fc380f32 v0.2.2 (#192) 2025-10-01 10:37:55 -04:00
Akhil Velagapudi a2ffe8f823 Release v0.2.1 (#189) 2025-09-30 11:47:56 -04:00
Akhil Velagapudi ac8434ff42 Board-level configuration (#188)
* Add `builtin.add_board_config`

Sets constraints

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Enable json extension

Useful for debugging

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* More compact config mapping

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add predefined sizes support to board config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make all board config fields optional, add merging

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add netclass support to board config

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add stackup support, sexpr library

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Patch stackup on `pcb layout`

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Sync board config by default

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix deep_merge

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Document board config feature

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Flatten netclasses

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add base configurations

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove unused _is_new_board

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Move board_config.zen to examples/

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use pcb-sexpr

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Replace --dont-sync with --sync (default true)

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-29 15:57:15 -04:00
Akhil Velagapudi eeabb9dcca Release v0.2.0 (#184) 2025-09-25 13:48:11 -04:00
Akhil Velagapudi 92c512e21d Release v0.2.0-prerelease.12 (#181) 2025-09-23 23:27:50 -04:00
Akhil Velagapudi 83bb82e474 Add canonicalize cache to default file provider (#179)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 18:05:13 -04:00
Akhil Velagapudi a857f2b5c6 Release v0.2.0-prerelease.11 (#173) 2025-09-22 11:21:40 -04:00
Akhil Velagapudi 9ab57fd8f4 Release v0.2.0-prerelease.10 (#168) 2025-09-19 17:16:45 -04:00
Akhil Velagapudi 5ad3c7effb [ENG-1] Add language-level physical values to do math (#161)
* Add PhysicalValue Rust + Starlark types

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add more units

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add Voltage

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add physical value math

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Moar units

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Macroify

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Moar unit math stuff

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Move define_physical_unit macros

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add physical relationship tests

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add __str__

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Parse celsius, fahrenheit temps

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Hijack units.zen and swap with builtins

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add builtin

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* For unsupported ops, output dimensionless

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix starlark-rust dep

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix __str__ type annotation

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove unused record fields

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Remove unused imports in tests/path.rs

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add physical value to schematic

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make physical value str conv lossless

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add back __{}__ typed properties in pcb

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix tests

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add with_tolerance, with_unit

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add physical value <> string math

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Allow all bin ops on custom type

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Parse "ohms"

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add dimensioned units

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add dimensionless casting, allow with_unit(None)

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Allow constructing physical value with just number pos arg

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Bump starlark-rust

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-19 17:12:41 -04:00
Desmond Mehta 803b5d5ebb update ruff v0.4.10 -> 0.13.0 to fix nix flake (#158) 2025-09-15 18:10:59 -04:00
Diode Robot 13f9f480e8 Bump axoupdater to 0.9 (#157)
cargo-dist fails if it's out of date:
https://github.com/diodeinc/pcb/actions/runs/17744277736/job/50425561145.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
Co-authored-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-15 15:45:17 -04:00
Akhil Velagapudi df4a534376 Release v0.2.0-prerelease.9 (#155) 2025-09-15 15:09:13 -04:00
Akhil Velagapudi 63c3ab1127 Auto update pcb (#149)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-11 15:03:07 -04:00
Akhil Velagapudi 0745f379c7 Add pcb sch position loading/saving to wasm, lsp (#147)
* Add pcb sch position loading/saving to wasm, lsp

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix ordering

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-10 14:08:00 -04:00
Akhil Velagapudi 0ca2f604ba Replace buildifier with ruff fmt (#146)
buildifier doesn't support f-strings, which we use in a bunch of places.
We also run fmt after `pcb upgrade`, and it's a bit annoying that it
fails due to a buildifier error.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-08 23:22:10 -04:00
Akhil Velagapudi 0d27d10293 Release v0.2.0-prerelease.8 (#143) 2025-09-05 23:30:09 -04:00
Akhil Velagapudi 0c2c87c338 [DIO-352] Add TestBench() support (#129)
* Add TestBench

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add checks

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add net -> ports dict

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add port -> pin dict

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Provide component properties to check fns

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Update spec, fix spans on check failures

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use check(), error() to fail checks instead of return value

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add ModuleView to group check fn args

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add component_values field, expose more typed values

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fully switch to ComponentValues in check fn

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use ModuleValue directly

Delete ModuleView

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add at() support for module which can return sub-module or component

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Rename testbench.rs -> test_bench.rs

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Move bench_test_cases to test-workspaces/bench

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Print "checks passed" log to eprintln

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make .nets and .components functions

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add schematic to graph conversion, path finding

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add external net support to path finding

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Don't use bool ret for matchers

Use error(), check()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add path.matches()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add samples

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Moar samples

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Update spec.mdx

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Consolidate seq matchers test code

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add suppress_errors

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add lm5163q1 example

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add test_cases, inputs arg to check fns

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Update bmi270 example to use path.matches()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use more path.matches()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add span for path.matches()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add pcb test

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Print stuff only to stderr

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Output test results in TAP or json

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* "testbench" -> "test_bench"

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add table output format for pcb test

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Tolerate non-callable inputs to "checks"

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add tuple checks support for renaming check fns

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add snapshot tests

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Make max_depth optional

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-04 22:30:30 -04:00
Lenny Khazan b8501ad511 bump version (#130) 2025-08-30 09:30:47 -04:00
Akhil Velagapudi 64725d3768 Release v0.2.0-prerelease.6 (#121) 2025-08-26 12:28:28 -07:00
Yishen Chen b4aa47b114 Add pcb sim to setup spice simulation from schematics (#56) 2025-08-26 12:06:04 -04:00
Akhil Velagapudi 9ae327b645 Add pcb tag (#117)
* Add `pcb tag`

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add `--force` flag to `pcb tag`

Also, remove the version ordering validation.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-25 22:45:58 -07:00
Akhil Velagapudi ae7766a8a6 Add warnings for unstable refs in load(), Module() (#105)
* Refactor diagnostics for warnings support

- Add render trait
- Render warnings after errors
- Reuse build code across build, layout

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Delete bundle

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix clippy lints

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add git ref metadata

3 stages to fetch_remote:
- Ensure remote is in cache
- Add appropriate symlinks
- Classify + store ref metadata

Some code cleanup:
- Factored out some git clone dupe code
- Centralized git operations in git.rs

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Warn on unstable refs

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add "-Dwarnings" flag to error on warnings

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Warn on unstable refs in Module()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add snapshot tests for warnings

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix span detection for chained Module()

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add ResolveContext, dedup resolve code

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Use spec history for better alias warnings

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add pcb.toml spans

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add type-erased error storage to Diagnostic

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix bug with load() span detection

The previous logic would just attempt to match by path, but if there are
multiple load() statements in a single file with the same path, then
find_load_span_for_path with always return the first.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Added diagnostics passes

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Add LSP-specific pass to filter out some warnings

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix rebase conflicts

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

* Fix unstable ref detection logic

If we clone by tag and the tag exists in the git repo, it's a stable
ref. Same with commit.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-25 15:45:51 -07:00