You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Stabilize packaging CI and temporarily disable Windows jobs (#1)
* Fix GitHub Actions bundle helper execution
* ci: allow run on all push branches
* Allow CI pushes from all branches
* Fix CI runner config and planning references
* Fix macOS dsview-sys CI issues
* Fix Windows CI build configuration
* Fix macOS ARM64 libusb include paths
* Set up MSVC environment in Windows CI
* Cache vcpkg binaries in Windows CI
* Create vcpkg cache directory in CI
* Add Windows compat header for sys time
* Temporarily disable Windows CI workflows
<action>Create one repo-local packaging helper at `tools/package-bundle.rs` or an equivalent small Rust binary that assembles release-style archives named `dsview-cli-v{version}-{target-triple}.tar.gz` on Unix and `dsview-cli-v{version}-{target-triple}.zip` on Windows. The helper must build the internal archive root `dsview-cli-v{version}-{target-triple}/` containing `dsview-cli[.exe]`, `runtime/<platform-runtime-name>`, and `resources/` with exactly the DSLogic Plus files checked by `ensure_resource_file_set()` (`DSLogicPlus.bin`, `DSLogicPlus-pgl12.bin`, and either `DSLogicPlus.fw` or `DSLogic.fw`). In the same helper flow, add an explicit per-target runtime-dependency contract for non-system shared libraries: determine which extra dynamic libraries must be bundled or explicitly declared as platform prerequisites for macOS and Windows MSVC builds, encode that rule in the package helper inputs, and make `tools/validate-bundle.rs` verify the resulting runtime payload instead of assuming the main runtime library is sufficient on every target.</action>
<action>Create one repo-local packaging helper at `tools/package-bundle.py` or an equivalent small Rust binary that assembles release-style archives named `dsview-cli-v{version}-{target-triple}.tar.gz` on Unix and `dsview-cli-v{version}-{target-triple}.zip` on Windows. The helper must build the internal archive root `dsview-cli-v{version}-{target-triple}/` containing `dsview-cli[.exe]`, `runtime/<platform-runtime-name>`, and `resources/` with exactly the DSLogic Plus files checked by `ensure_resource_file_set()` (`DSLogicPlus.bin`, `DSLogicPlus-pgl12.bin`, and either `DSLogicPlus.fw` or `DSLogic.fw`). In the same helper flow, add an explicit per-target runtime-dependency contract for non-system shared libraries: determine which extra dynamic libraries must be bundled or explicitly declared as platform prerequisites for macOS and Windows MSVC builds, encode that rule in the package helper inputs, and make `tools/validate-bundle.py` verify the resulting runtime payload instead of assuming the main runtime library is sufficient on every target.</action>
98
98
<acceptance_criteria>
99
99
- the plan implementation target includes a single documented archive naming family across CI and release flows
100
100
- the package helper assembles `runtime/` and `resources/` subdirectories under a versioned archive root rather than emitting loose files
101
101
- resource payload selection is limited to the DSLogic Plus firmware and bitstreams already required by `crates/dsview-core`
102
102
- the helper can accept the target triple and resolved runtime filename as explicit inputs so CI does not guess layout rules independently
103
-
- the packaging contract explicitly states whether additional non-system runtime dependencies must be bundled or guaranteed externally on Linux, macOS, and Windows, and `tools/validate-bundle.rs` enforces that contract
103
+
- the packaging contract explicitly states whether additional non-system runtime dependencies must be bundled or guaranteed externally on Linux, macOS, and Windows, and `tools/validate-bundle.py` enforces that contract
104
104
</acceptance_criteria>
105
105
</task>
106
106
107
107
<tasktype="auto">
108
108
<name>Backfill Wave 0 tests for runtime naming, bundle discovery, and archive validation</name>
<action>Add the Wave 0 coverage called out in `01-VALIDATION.md`: create `crates/dsview-sys/tests/runtime_packaging.rs` for target-aware runtime filename and path-shape assertions, create `crates/dsview-core/tests/bundle_discovery.rs` for executable-relative runtime/resource layout and `--resource-dir` precedence expectations, and create `tools/validate-bundle.rs` as the shared artifact validation helper that unpacks an archive, asserts `dsview-cli[.exe]`, `runtime/`, and `resources/` exist in the expected versioned root, checks the platform runtime filename plus any declared bundled companion libraries, and verifies the required DSLogic Plus resource files are present. The validator must also run the concrete no-hardware smoke commands `dsview-cli --help`, `dsview-cli devices list --help`, and one repo-owned bundle-discovery validation command or test entrypoint that proves the unpacked executable resolves bundled `runtime/` and `resources/` without requiring attached hardware.</action>
<action>Add the Wave 0 coverage called out in `01-VALIDATION.md`: create `crates/dsview-sys/tests/runtime_packaging.rs` for target-aware runtime filename and path-shape assertions, create `crates/dsview-core/tests/bundle_discovery.rs` for executable-relative runtime/resource layout and `--resource-dir` precedence expectations, and create `tools/validate-bundle.py` as the shared artifact validation helper that unpacks an archive, asserts `dsview-cli[.exe]`, `runtime/`, and `resources/` exist in the expected versioned root, checks the platform runtime filename plus any declared bundled companion libraries, and verifies the bundled `resources/` directory is present. The validator must also run the concrete no-hardware smoke commands `dsview-cli --help`, `dsview-cli devices list --help`, and one repo-owned bundle-discovery validation command or test entrypoint that proves the unpacked executable resolves bundled `runtime/` and `resources/` without requiring attached hardware.</action>
117
117
<acceptance_criteria>
118
118
- all three Wave 0 gaps named in `01-VALIDATION.md` for runtime naming, bundle discovery, and package validation have concrete implementation targets
119
119
- `crates/dsview-sys/tests/runtime_packaging.rs` explicitly covers Linux, macOS, and Windows runtime filename expectations
- `tools/validate-bundle.rs` is suitable for both local validation and later GitHub Actions reuse instead of duplicating layout checks in YAML
121
+
- `tools/validate-bundle.py` is suitable for both local validation and later GitHub Actions reuse instead of duplicating layout checks in YAML
122
122
- the validator performs the exact post-unpack smoke command set required by Phase 1 rather than only checking archive shape
123
123
</acceptance_criteria>
124
124
</task>
125
125
126
126
<verification>
127
127
- Run `cargo test -p dsview-sys runtime_packaging`
128
128
- Run `cargo test -p dsview-core --test bundle_discovery`
129
-
- Build a local bundle with the package helper for the host target and validate it with `tools/validate-bundle.rs`
129
+
- Build a local bundle with the package helper for the host target and validate it with `tools/validate-bundle.py`
130
130
- Confirm the validated bundle root contains `dsview-cli[.exe]`, `runtime/`, and `resources/` with the target-correct runtime library name and DSLogic Plus payload only
0 commit comments