[codex] package pyvirtualcam-core crate artifacts#6
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (2)
💤 Files with no reviewable changes (2)
📝 WalkthroughWalkthroughAdds vendored libyuv into the Rust crate, updates crate metadata/build paths and README, adds many libyuv headers and source implementations (conversion, CPU detection, MJPEG), and extends CI to build/package the crate and upload .crate alongside wheels to releases. ChangesCore crate, vendored libyuv, and CI publishing
Sequence Diagram(s)sequenceDiagram
participant GitHubActions
participant RustCrateJob
participant Artifacts
participant PublishJob
GitHubActions->>RustCrateJob: run tests & cargo package
RustCrateJob->>Artifacts: upload crate-pyvirtualcam-core (*.crate)
PublishJob->>Artifacts: download crate-pyvirtualcam-core
PublishJob->>GitHubActions: attach dist/*.whl and dist/*.crate to Release
Estimated code review effort🎯 5 (Critical) | ⏱️ ~120 minutes Possibly related PRs
Poem
✨ Finishing Touches🧪 Generate unit tests (beta)
|
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
.github/workflows/ci.yml (1)
421-447:⚠️ Potential issue | 🟠 Major | ⚖️ Poor tradeoffUpdate CI workflow actions for security and compatibility (pin SHAs + fix outdated runner)
- Supply-chain:
actions/download-artifact@v4andsoftprops/action-gh-release@v1aren’t pinned to commit SHAs—pin to specific SHA versions.- Compatibility:
softprops/action-gh-release@v1is flagged as using an outdated runner; update it to a supported version.- Remove the
persist-credentialssuggestion: there’s nopersist-credentialsconfigured anywhere in.github/workflows/ci.yml.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In @.github/workflows/ci.yml around lines 421 - 447, The CI steps "Download wheels from artifact storage", "Download Rust crate from artifact storage", and "Create Release and Upload Artifacts" reference third‑party actions that must be pinned to commit SHAs and the release action must be moved to a supported release (non‑deprecated) version: replace uses: actions/download-artifact@v4 for both download steps with the same actions/download-artifact@<commit-sha> pin, and replace uses: softprops/action-gh-release@v1 with a supported softprops release (e.g., softprops/action-gh-release@v2 or the maintained tag) pinned to its commit SHA; update the uses lines accordingly to point to the exact SHAs for those action repos.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/ci.yml:
- Around line 239-245: Update the CI steps that run Cargo for the
pyvirtualcam-core package to include the --locked flag: add --locked to the
existing cargo test invocation (cargo test -p pyvirtualcam-core) and to both
cargo package invocations (cargo package -p pyvirtualcam-core --list and cargo
package -p pyvirtualcam-core) so they become reproducible and fail if Cargo.lock
is out of sync.
---
Outside diff comments:
In @.github/workflows/ci.yml:
- Around line 421-447: The CI steps "Download wheels from artifact storage",
"Download Rust crate from artifact storage", and "Create Release and Upload
Artifacts" reference third‑party actions that must be pinned to commit SHAs and
the release action must be moved to a supported release (non‑deprecated)
version: replace uses: actions/download-artifact@v4 for both download steps with
the same actions/download-artifact@<commit-sha> pin, and replace uses:
softprops/action-gh-release@v1 with a supported softprops release (e.g.,
softprops/action-gh-release@v2 or the maintained tag) pinned to its commit SHA;
update the uses lines accordingly to point to the exact SHAs for those action
repos.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 4aa41b00-be42-495e-91fe-64d9bc83c572
⛔ Files ignored due to path filters (1)
Cargo.lockis excluded by!**/*.lock
📒 Files selected for processing (78)
.github/workflows/ci.ymlMANIFEST.incrates/pyvirtualcam-core/Cargo.tomlcrates/pyvirtualcam-core/README.mdcrates/pyvirtualcam-core/build.rscrates/pyvirtualcam-core/vendor/libyuv/LICENSEcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/basic_types.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/compare.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/compare_row.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/convert.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/convert_argb.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/convert_from.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/convert_from_argb.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/cpu_id.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/macros_msa.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/mjpeg_decoder.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/planar_functions.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/rotate.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/rotate_argb.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/rotate_row.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/row.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/scale.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/scale_argb.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/scale_row.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/scale_uv.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/version.hcrates/pyvirtualcam-core/vendor/libyuv/include/libyuv/video_common.hcrates/pyvirtualcam-core/vendor/libyuv/source/compare.cccrates/pyvirtualcam-core/vendor/libyuv/source/compare_common.cccrates/pyvirtualcam-core/vendor/libyuv/source/compare_gcc.cccrates/pyvirtualcam-core/vendor/libyuv/source/compare_mmi.cccrates/pyvirtualcam-core/vendor/libyuv/source/compare_msa.cccrates/pyvirtualcam-core/vendor/libyuv/source/compare_neon.cccrates/pyvirtualcam-core/vendor/libyuv/source/compare_neon64.cccrates/pyvirtualcam-core/vendor/libyuv/source/compare_win.cccrates/pyvirtualcam-core/vendor/libyuv/source/convert.cccrates/pyvirtualcam-core/vendor/libyuv/source/convert_argb.cccrates/pyvirtualcam-core/vendor/libyuv/source/convert_from.cccrates/pyvirtualcam-core/vendor/libyuv/source/convert_from_argb.cccrates/pyvirtualcam-core/vendor/libyuv/source/convert_jpeg.cccrates/pyvirtualcam-core/vendor/libyuv/source/convert_to_argb.cccrates/pyvirtualcam-core/vendor/libyuv/source/convert_to_i420.cccrates/pyvirtualcam-core/vendor/libyuv/source/cpu_id.cccrates/pyvirtualcam-core/vendor/libyuv/source/mjpeg_decoder.cccrates/pyvirtualcam-core/vendor/libyuv/source/mjpeg_validate.cccrates/pyvirtualcam-core/vendor/libyuv/source/planar_functions.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_any.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_argb.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_common.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_gcc.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_mmi.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_msa.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_neon.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_neon64.cccrates/pyvirtualcam-core/vendor/libyuv/source/rotate_win.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_any.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_common.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_gcc.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_mmi.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_msa.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_neon.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_neon64.cccrates/pyvirtualcam-core/vendor/libyuv/source/row_win.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_any.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_argb.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_common.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_gcc.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_mmi.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_msa.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_neon.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_neon64.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_uv.cccrates/pyvirtualcam-core/vendor/libyuv/source/scale_win.cccrates/pyvirtualcam-core/vendor/libyuv/source/video_common.cccrates/pyvirtualcam-py/src/lib.rs
Summary
Packages
pyvirtualcam-coreas a publishable Rust crate by vendoring the libyuv sources it needs, tightening the crate include list, and documenting the vendored build path.Updates CI so the Rust crate is tested, packaged, uploaded as an artifact, and attached to tagged GitHub releases alongside the Python wheels.
Why
The Linux backend now builds through Rust/PyO3, but the core crate needs its libyuv dependency present inside the crate package. Without vendoring these files under the crate and validating
cargo package, GitHub release artifacts could miss the Rust crate or produce an incomplete package.Impact
Python API behavior is unchanged. Linux builds continue to use libyuv-backed conversions, while release CI now also produces a
pyvirtualcam-corecrate artifact.Validation
cargo fmt --checkcargo test -p pyvirtualcam-core --lockedcargo package -p pyvirtualcam-core --allow-dirty --lockedpython -m pytest -q test/test_backend_contract.py test/test_util.pygit diff --checkNote:
actionlintwas not available locally. The commit is unsigned because local GPG signing failed twice after refreshing the agent TTY.Summary by CodeRabbit
New Features
Documentation
Chores