Replace build-all.sh shell script with a Rust xtask workspace member.
Uses cargo-zigbuild + zig as a universal cross-linker -- no VMs, no
containers, no root required.
Produces all three release binaries from a single FreeBSD machine:
anvil-X.Y.Z-freebsd-x86_64.tar.gz (native cargo build)
anvil-X.Y.Z-linux-x86_64.tar.gz (cargo zigbuild)
anvil-X.Y.Z-windows-x86_64.zip (cargo zigbuild)
Commands:
cargo xtask --fix install zig, zip, cargo-zigbuild, rustup targets
cargo xtask --check verify all dependencies
cargo xtask build all three binaries + SHA256SUMS
cargo xtask --clean remove cross-compile artifacts
cargo xtask --suffix rc1 build with version suffix
Also converts Cargo.toml to a workspace (members: anvil, xtask).
build-all.sh retained as a thin wrapper around cargo xtask.
- Remove build/upload/monitor subcommands (projects are self-contained)
- Remove ctrlc dependency (only used by removed monitor watch mode)
- Update next-steps messaging to reference project scripts directly
- Add 'anvil refresh [DIR] [--force]' to update project scripts
to latest templates without touching user code
- Fix Windows port detection: replace fragile findstr/batch TOML
parsing with proper comment-skipping logic; add _detect_port.ps1
helper for reliable JSON-based port detection via PowerShell
- Add .anvil.local for machine-specific config (gitignored)
- 'anvil devices --set [PORT] [-d DIR]' saves port + VID:PID
- 'anvil devices --get [-d DIR]' shows saved port status
- VID:PID tracks USB devices across COM port reassignment
- Port resolution: -p flag > VID:PID > saved port > auto-detect
- Uppercase normalization for Windows COM port names
- Update all .bat/.sh templates to read from .anvil.local
- Remove port entries from .anvil.toml (no machine-specific config in git)
- Add .anvil.local to .gitignore template
- Expand 'anvil devices' output with VID:PID, serial number, and
usage instructions
Single-binary CLI that scaffolds testable Arduino projects, compiles,
uploads, and monitors serial output. Templates embed a hardware
abstraction layer, Google Mock infrastructure, and CMake-based host
tests so application logic can be verified without hardware.
Commands: new, doctor, setup, devices, build, upload, monitor
39 Rust tests (21 unit, 18 integration)
Cross-platform: Linux and Windows