218 Commits

Author SHA1 Message Date
Akhil Velagapudi a2ffe8f823 Release v0.2.1 (#189) v0.2.1 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 5aff6c7e45 Use mirrored kicad image (#187)
* Use mirrored kicad image

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

* Add comment for how to sync

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-25 17:32:25 -04:00
Akhil Velagapudi 71984e70af Try ubicloud runners (#185)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-25 15:53:51 -04:00
Akhil Velagapudi 49163707bc Bump dist, drop brew, npm support (#183)
* Bump dist, drop brew, npm support

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

* Use large runners

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
v0.2.0
2025-09-25 13:57:06 -04:00
Akhil Velagapudi eeabb9dcca Release v0.2.0 (#184) 2025-09-25 13:48:11 -04:00
Akhil Velagapudi 632eb6278b Don't auto-update in CI (#182)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 23:54:13 -04:00
Akhil Velagapudi 92c512e21d Release v0.2.0-prerelease.12 (#181) v0.2.0-prerelease.12 2025-09-23 23:27:50 -04:00
Akhil Velagapudi d9bfb02551 Unified caching for load(), Module() (#180)
* Simplify eval error wrapping

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

* Simply Module() span resolution

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

* Unified caching for load(), Module()

This simplifies the code and improves the performance substantially.

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 23:19:39 -04:00
Akhil Velagapudi dcca0defe8 Add physical value comparison,.with_value() (#177)
* Add compare, equals support to PhysicalValue

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

* Fix inconsistent attr data

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

* fixup! Add compare, equals support to PhysicalValue

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

* Add PhysicalValue builtin, add .with_value()

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 16:30:19 -07: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 6d1e1893a0 Prioritize new net names over old net names (#178)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 17:47:25 -04:00
Akhil Velagapudi 3145c214ac Fix unstable ref warning performance regression (#176)
* Generate unstable ref warnings after cache check

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

* Don't suppress introspection diagnostics

This is not relevant because we only raise diagnostics once per "load".
So, if introspection does transient loads, those diagnostics will be
forever suppressed if not raised during introspection.

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-23 11:01:40 -04:00
Akhil Velagapudi e00ea920ed Add support for kicad schematic bom as fallback (#174)
* Make path optional in board config

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

* Delete read-only staged files

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

* Parse kicad schematic bom

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

* Use last segment of package

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

* Add kicad bom fallback to `pcb bom`

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
v0.2.0-prerelease.11
2025-09-22 17:29:36 -04:00
Akhil Velagapudi 9aa712ad66 Fail gracefully when current file has no spec (#175)
* Fail gracefully when current file has no spec

LSP should never panic. Just propagate the error to the client. This
should just be a transient state. Also, remove redundant file existence
check.

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

* Ignore non-existent paths when vendoring

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-22 17:29:27 -04:00
Akhil Velagapudi a857f2b5c6 Release v0.2.0-prerelease.11 (#173) 2025-09-22 11:21:40 -04:00
Akhil Velagapudi acac11ae21 Re-tag "latest" on push to main (#171)
Currently, we only delete + push the release. But the release still points to the old tag.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-22 09:51:53 -04:00
Akhil Velagapudi 63cfd96660 Parse lowercase "hz" as Hertz (#172)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-22 09:51:35 -04:00
Akhil Velagapudi 332128e034 Make load(), Module() case-sensitive (#169)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-21 15:05:08 -04:00
Lenny Khazan bd642654d6 pcb vendor --ignore-errors (#170)
* `pcb vendor --ignore-errors`

* update snapshot
2025-09-21 14:44:19 -04:00
Akhil Velagapudi 9ab57fd8f4 Release v0.2.0-prerelease.10 (#168) v0.2.0-prerelease.10 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
Akhil Velagapudi 142256987f Publish pcb cli from main (#167)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-19 16:42:02 -04:00
Akhil Velagapudi 7337a1cc57 Mark files as read-only when vendoring (#166)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-19 15:36:55 -04:00
Desmond Mehta 6903bf39cd package with kicad python in nix flake (#165)
* update ruff v0.4.10 -> 0.13.0 to fix nix flake

* package with kicad python in nix flake
2025-09-19 15:30:34 -04:00
Akhil Velagapudi 654e66ca48 Standardize file walking in all pcb subcommands (#164)
* Ignore vendor/ dir in pcb fmt

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

* Standardize file walking

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-19 14:40:01 -04:00
Diode Robot fc990625c0 Add kicad version to metadata.json (#163)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
Co-authored-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-19 13:11:40 -04:00
Akhil Velagapudi 132a9cb68c Don't add prefix to old net names (#162)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-19 11:50:48 -04:00
Akhil Velagapudi dceb75b5f3 Generate warnings if Path() paths don't exist (#160)
* Add Path() to spec

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

* Raise warning if path does not exist

Related to DIO-375.

Even if the path doesn't exist during initial development, it should not
be checked into the registry in this state.

We can run registry CI with -Dwarnings to catch this.

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

* Generate warnings if Path() paths don't exist

Even if allow_not_exists, warnings are useful (DIO-375).

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

* Release should fail if path missing

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-16 18:12:38 -04:00
Akhil Velagapudi 5b6824f223 Add board_name to metadata.json (#159)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-16 13:24:56 -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
Akhil Velagapudi 8e9c355a3f Disallow dots in names (#150)
* Disallow dots in names

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

* Bump stdlib

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

* Simplify is_instance_position

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

* Update snapshot

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-15 18:06:28 -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>
v0.2.0-prerelease.9
2025-09-15 15:45:17 -04:00
Lenny Khazan ace6984ecd Always include all layout logs (#156) 2025-09-15 15:29:45 -04:00
Akhil Velagapudi df4a534376 Release v0.2.0-prerelease.9 (#155) 2025-09-15 15:09:13 -04:00
Akhil Velagapudi aec6b8f083 Fix bug where orphaned nets were filtered out (#154)
* Don't filter out orphaned nets

They're still needed for resolving positions, net renames.

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

* Use scoped key to do remapping

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-15 15:07:07 -04:00
Akhil Velagapudi d5a2bc10e0 Revert #144, use moved() (#153)
* Revert "Revert net naming changes (#144)"

This reverts commit 51e5066276.

* Don't change net name prefix case

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

* Register moved() directives for new net names

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

* Dedup get_component_prefix

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

* Don't change case of net names

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

* Update netlist tests

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

* Skip warnings for auto-generated directives

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-14 22:14:19 -04:00
Akhil Velagapudi bb0898dbef Add moved() directive (#152)
* Add pcb:sch comments to test board

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

* Add moved() directive

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

* Include moved paths in Schematic

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

* Repair footprints, groups in layout

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

* Update docs

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

* Compute remapper data *before* processing positions

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

* Add warnings if old path exists or new path doesn't

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

* Add snapshot tests for moved()

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-14 21:15:37 -04:00
Akhil Velagapudi f4359ca00e Parse position data, include it in netlist (#151)
* Include position data in netlist

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

* Add snapshot tests of netlist pos data

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

* Switch to symbol positions

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-12 10:44:44 -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 03b8792d8c [DIO-367] Validate net, interface, component, module names (#148)
* Validate net, interface, component, module names

Don't allow whitespace or special characters.

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

* Allow dots for now

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-10 14:04:25 -04:00
Akhil Velagapudi 0760ecaec4 Add basic BOM matching API (#145)
* Add EvalConfig, reuse pcb_zen::eval

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

* Add Bom struct with multiple views

This also limits the public API of Bom to just json() and
ungrouped_json().

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

* Add bom rule matching

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

* Add basic BOM matching API

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

* Address PR comments

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

* Add multiple offers to matching rule

Also added package to matching key

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

* Add matched_by, make package required

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-09 00:24:55 -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 51e5066276 Revert net naming changes (#144)
* Revert "Don't suffix field net name for single-net instances (#140)"

This reverts commit 1742334863.

* Revert "Fix hierarchical net naming (#135)"

This reverts commit 23cca690a8.
v0.2.0-prerelease.8
2025-09-06 17:31:25 -04:00
Akhil Velagapudi 0d27d10293 Release v0.2.0-prerelease.8 (#143) 2025-09-05 23:30:09 -04:00
Akhil Velagapudi 19062d9d56 Build test release on pcb tag (#142)
Also build with -Dwarnings in `pcb release`

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-05 23:15:44 -04:00
Akhil Velagapudi dbc3ab31e6 Make pcb tag and pcb release consistent (#139)
* Make pcb tag and pcb release consistent

Before:
  pcb tag --board <BOARD> --version <VERSION> [PATH]
  pcb release <zen_path>  # inconsistent - used file path

After:
  pcb tag --board <BOARD> --version <VERSION> [PATH]
  pcb release --board <BOARD> [PATH]  # now consistent

Also, prefix the board name so that the folders + zip file names are
easier to grok.

Before:
  - Staging: .pcb/releases/MyBoard/v1.0.0/
  - Zip: .pcb/releases/MyBoard/v1.0.0.zip (just v1.0.0.zip, not MyBoard.v1.0.0.zip)

After:
  - Staging: .pcb/releases/MyBoard-v1.0.0/
  - Zip: .pcb/releases/MyBoard-v1.0.0.zip

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

* Add find_board_by_name method

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

* Only print structured data to stdout

Only print json if -f json. Print human-friendly table otherwise.

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-05 22:44:14 -04:00
Akhil Velagapudi ec94b7e6dd Sync orphaned zones, vias, polygons (#141)
* Sync orphaned zones, vias, polygons

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

* Ruff format

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-05 17:21:17 -04:00
Akhil Velagapudi 1742334863 Don't suffix field net name for single-net instances (#140)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-05 10:56:57 -04:00