35 Commits

Author SHA1 Message Date
akhilles a8f13c4ec8 Disable path snapshot tests in windows
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-29 15:58:07 -04:00
akhilles 1d0f51ad0a Error on unsupported metadata types
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-29 15:58:07 -04:00
akhilles 2abd3c93d5 Add snapshot tests
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-29 15:58:07 -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 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
Lenny Khazan bd642654d6 pcb vendor --ignore-errors (#170)
* `pcb vendor --ignore-errors`

* update snapshot
2025-09-21 14:44:19 -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
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 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
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
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 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 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 0ee48ef792 Require --board in pcb tag (#136)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-09-04 22:31:10 -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
Akhil Velagapudi af92d81ee2 Fix fetching a commit from a non-default branch (#119)
* Fix fetching a commit from a non-default branch

Previously, we would do a shallow clone of the default branch and then
attempt to checkout the commit. This doesn't work if the commit is not
on the default branch.

Also, allow specifying short hash (len 7).

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

* Remove left over dbg

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-26 10:00:27 -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 27e91cf0a3 Add Path() with allow_not_exist support (#118)
* Combine LoadSpec::Path and LoadSpec::Workspace

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

* Add allow_not_exist flag

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

* Add Path() with allow_not_exist support

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

* Allow vendoring of directories

Use shared vendoring code in pcb vendor/release.

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

* Add pcb release test

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-26 08:42:00 -07: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
Akhil Velagapudi 3b2f8f1a08 Copy all tracked files to release src (#115)
* Build after release in snapshot tests

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

* Copy all tracked files to release src/

Remove the filtering that I added, it's not needed. This can be further
simplified in the future by merging tracked_local_files into
path_to_spec.

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

* Do offline build of staged sources

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

* Do --offline builds in release + build tests

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

* Error on local deps outside workspace when vendoring

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

* Track local pcb.toml files

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-25 10:39:10 -07:00
Akhil Velagapudi dcdec1262c Make pcb release and pcb bom -f json consistent (#114)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-24 18:12:36 -07:00
Akhil Velagapudi 96582b2714 Standardize pcb info paths (#108)
`pcb info` would mix and match absolute vs relative paths for workspace
root and board .zen paths. Enforce consistent behavior:
- Workspace root: always show full canonical path
- Board paths: always relative to workspace root

Also, removed the removed redundant directory field.

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-23 15:53:37 -07:00
Akhil Velagapudi b76e7eb53d [DIO-347] Fix workspace-relative loads in local paths (#107)
* Add regression test for "//" dep in local path

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

* Resolve "effective_workspace_root" (with cache)

Which is different from overall "workspace_root".

Do this once at the top instead of at multiple downstream sites.

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-23 13:25:09 -07:00
Akhil Velagapudi f3ee7fb3a9 Serialize bom as list (#103)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-22 10:45:21 -07:00
Akhil Velagapudi 9549fca231 [DIO-334] Switch to <board_name>/<version> tags (#102)
* Switch to `<board_name>/<version>` tags

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

* Fix bug where .source.zip wasn't used for source-only releases

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

* Make tag -> board matching case-insensitive

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

* Sanitize cli version

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

* Add git helpers to sandbox

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-22 09:31:14 -07:00
Akhil Velagapudi 0da1d57a35 [DIO-333] Add --source-only releases, schema_version (#101)
* Add --source-only flag to `pcb release`

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

* Add schema version to metadata.json

This'll help with migrations. Rename existing "version" field to
"git_version" to disambiguate.

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

* Add pcb release snapshot tests

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

* Sanitize git hashes

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

* Sanitize arch, platform, user

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

* Use flat schema version

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-22 07:50:46 -07:00
Akhil Velagapudi 4c4213aa48 Export pre-aggregated, unmatched bom w/ path as key (#100)
* Export pre-aggregated BOM w/ path as key

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

* Add pcb bom snapshot tests

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

* Update existing snapshot

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

* Rename bom/unmatched.json to bom/design_bom.json

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-21 18:48:37 -07:00
Akhil Velagapudi 44c73baf2d [DIO-319] Add board config to pcb.toml, pcb info (#92)
* Add board config to pcb.toml, pcb info

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

* Choose first board (when sorted) as fallback default

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

* Add secondary heuristics pass to detect boards without pcb.toml

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

* Update snapshots

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

* Don't allow malformed pcb.toml

Empty pcb.toml is fine.

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

* Don't copy .pcb/cache into test fixture

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

* Replace test-workspace with snapshot tests of pcb info

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-21 15:20:16 -07:00
Akhil Velagapudi 9a1930c2c5 pcb cli-level testing (#96)
* Add sandbox

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

* Add dir snapshotting

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

* Add branch support, snapshot_dir

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

* Add snapshot testing of stdout/stderr

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

* Only use local files for workspace root detection

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

* Add bom, release tests

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

* Add pcb vendor snapshot test

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

* Sanitize linux tmp dir paths

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

* Ignore some tests on Windows

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

* Reuse dep fetching code from pcb-zen

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

* Fix download race condition

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

* Bump lock file

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

* Specify default branch

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

* Suppress 3d export logs to stdout

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

---------

Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
2025-08-21 13:52:38 -07:00