* 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>
* Don't cache effective workspace root
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Drop tracked_local_files, and track local files in path_to_spec
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Remove workspace_root_cache
This was a premature optimization. Unclear whether it actually helps,
but has potential to introduce bugs.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* 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>
* 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>
* sync zones and text
* add initial test for zone sync
* add zones to groups
* simpler zone test
* fix zone sync
* fix net determinism
* add more interesting test
* hack: amend tests with (0,0) positioning for now
* wip: fix nets for zones
* hack: keep old tests to make sure we don't mess up
* add zone sync
* fix sync graphics
* add complex test
* deterministic snapshot
* fix snapshots with no files
* add graphics test
* add timout
* bump timout
* reduce complexity
* move methods to virtual item
* add graphics groups
* use Duplicate
* add hatching to complex test
`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>
* 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>
* Mark vendor/ dir as alias root
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Don't consider pcb.toml files irrelevant
Use more LoadSpec helpers.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Track pcb.toml files in path_to_spec
This is enough for `pcb vendor` to pick up these files and copy them to
the vendor/ dir.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Use FileProvider::exists
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Use copied layout files as source for cad export
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Include pads, silkscreen, soldermask in CAD
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Patch text vars in .kicad_pro file
This is used for CAD export for some reason over the .kicad_pcb file.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Add [packages] to vendor/release test case
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Fix package resolution in pcb vendor/release
The TrackingLoadResolver middleware couldn't properly resolve packages.
To fix, eliminate the middleware entirely and enhance CoreLoadResolver
to handle all the necessary tracking. This is likely to reduce future
bugs as well.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Use public kicad package
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Update Cargo.lock
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Add pcb vendor
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Copy pcb.toml to release if it exists
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Use vendor dir in resolver
Add --offline support to build, layout.
Standardize behavior of find_workspace_root. Most of the callsites would
fallback on parent dir of target .zen file. We should just do that
universally to reduce conditional code paths.
Add an option to the resolve to not use the vendor dir in case that's
useful in some cases.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Drop vendor alias
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Only support pcb vendor in pcb.toml workspaces
Attempting to resolve a common workspace root from multiple zen files in
a dir without pcb.toml just got way too complicated. We can add support
for this in the future if needed.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Canonicalize zen_path
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Add pcb release command
Intentially spartan in terms of flags/arguments. All that's needed is
the path to the .zen file.
To test:
cargo run -- release crates/pcb/test-workspace/boards/TestBoard.zen
Implemented:
- Workspace root detection (even without pcb.toml)
- Git-based versioning (e.g. tag > commit hash > dirty commit hash)
- Zen source files copied into release dir (release-dir/src)
- Dependencies are vendored into release dir (release-dir/src/vendor)
- Unmatched bom is generated into release dir (release-dir/bom)
- KiCad layout dir is copied into release dir (release-dir/layout)
- Metadata file is generated into release dir (release-dir/metadata.json)
- Generated artifacts are stored in .pcb/ dir (for now) and not uploaded
TODO:
- Upload the release bundle to API server
- Add a --dry-run to generate release bundle but not upload (similar to
cargo)
- Use the vendor/ dir for dependency resolution for deterministic builds
- Add pcb vendor subcommand, --offline flag for build/layout
- Add more release artifacts (e.g. gerbers, odb, etc.)
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Fix windows compat
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Add support, test-coverage for workspace-relative loads
Assume that pcb.toml is needed for workspace-relative loads
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Use workspace root .pcb dir for staging releases
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Add structured, unmatched BOM export command
Run using `pcb bom <path/to/zen> -o json`
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Test bom command in CI
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Bump stdlib in examples from v0.2.0 to v0.2.2
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Remove default_multiplier, use struct for group key
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Use PhysicalValue to do less string parsing
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Add alternatives to group key
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
* Use DynamicFullWidth for the comfy table
Attempts to fit the table within terminal width.
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>
---------
Signed-off-by: akhilles <akhilvelagapudi@gmail.com>