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