239 Commits

Author SHA1 Message Date
Davide Asnaghi 6e6e65daf9 Release v0.2.6 (#211) v0.2.6 2025-10-05 04:18:49 +02:00
Akhil Velagapudi 40a5ec69b1 Add pcb-tag-release script (#210)
Usage:
```
pcb-tag-release v0.2.6
```

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 22:17:37 -04:00
Akhil Velagapudi 4042c809c7 Fetch all tags and branches when updating git dependencies (#209)
The previous implementation only fetched the default refspec, which could
miss new tags, branches, or force-updated refs. This caused worktree
creation to fail when trying to check out newly published versions.

Now explicitly fetches:
- All tags (--tags)
- All branches (+refs/heads/*:refs/heads/*)
- Force-updated refs (--force)
- Prunes deleted refs (--prune, --prune-tags)

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 22:15:48 -04:00
Davide Asnaghi 58f91840a8 add support for dielectric sublayers (#208) 2025-10-05 03:25:26 +02:00
Diode Robot 2d81c942aa Only delete worktrees on pcb clean (#207)
* Only delete worktrees on `pcb clean`

Leave the bare repos as they're just stable object stores.

If `--force` is set, nuke everything.

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

* Add fast path that bypasses file locking

fslock is a bit slow on macos

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
Co-authored-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-04 01:16:53 -04: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
Lenny Khazan 03776f66f0 [ENG-84] First-party DNP support (#204)
* [ENG-84] First-party DNP support

* format
2025-10-03 11:01:35 -04:00
Lenny Khazan da5eecaf98 Fix geber export (#203) 2025-10-02 18:31:00 -04:00
Akhil Velagapudi 4dd6bd1027 Release v0.2.5 (#202) v0.2.5 2025-10-02 18:04:51 -04:00
Akhil Velagapudi 67b164f34b Add builtin.add_electrical_check (#199)
* Add builtin.add_electrical_check

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

* Add snapshot tests

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

* Add checks arg to io()

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

* le final api

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

* Allow constructing PhysicalRange with PhysicalRange value

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

* Reduce API surface, only expose check_voltage_within

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 17:57:46 -04:00
Akhil Velagapudi 56c88f23de Make TestBench() check eval lazy (#198)
* Don't alloc to get suppress_errors field

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

* Make TestBench() check eval lazy

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

* Simplify

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

* Remove evalmode

It's no longer needed as pcb build and pcb test do eval the same way
now. The only difference is post-eval.

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

* Update TestBench() spec

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

* Add a rano parse unit test

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 17:43:29 -04:00
Akhil Velagapudi 5bfe35c143 Fix single-net interface net naming (#201)
Before: check that interface has 1 field and that it is a net
After: check that interface has 1 net field (and no interfaces)

This allows for adding metadata fields without changing the net naming.
This should (hopefully) not cause that much churn because we haven't
really used metadata fields in interfaces yet.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-02 13:25:06 -04:00
Lenny Khazan e6b5ff186e First-party component manufacturer support (#200)
* Add manufacturer to component

* Parse manufacturer from symbol

* add to netlist

* cargo fmt
2025-10-02 09:24:14 -07:00
Lenny Khazan 8356e663ff Release v0.2.4 (#197) v0.2.4 2025-10-01 18:02:20 -04:00
Lenny Khazan 1b5886086a Fix for removePositions lookup (#196) 2025-10-01 17:59:44 -04:00
Akhil Velagapudi 1680e12d65 Add physical value ranges (#195)
* Dedup quantity str

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

* Switch to get_methods for builtin

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

* Add PhysicalRange

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

* Remove unused ComponentFactoryValue

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

* Document the physical range feature

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

* Add ser/de and InputValue support for ranges

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

* Ensure min <= nominal <= max

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

* Add min, nominal, max, unit attrs to physical range

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-01 16:57:01 -04:00
Akhil Velagapudi d84cb60c6f Release v0.2.3 (#194) v0.2.3 2025-10-01 14:54:48 -04:00
Akhil Velagapudi 5e669e6fcb Bunch of minor fixes from testing against read boards (#193)
- Make # of user layers configurable (defaults to 4)
- Preserve all kicad standard technical layers
- Add 0 value placeholder entries for predefined sizes
- Fix layers sexpr formatting
- Make netclass diff_pair_via_gap and priority configureable
- For "Default" netclass, modify the default
- Add better type hints

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-10-01 14:50:56 -04:00
Lenny Khazan 71fc380f32 v0.2.2 (#192) v0.2.2 2025-10-01 10:37:55 -04:00
Lenny Khazan c816722f52 Add LSP command to delete position comment (#191) 2025-10-01 10:35:57 -04:00
Akhil Velagapudi 0c7a770d44 Don't auto DNP TP* designators (#190)
Some test points may require parts.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-30 13:21:58 -04:00
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