diff --git a/.github/workflows/release-py-ffi.yml b/.github/workflows/release-py-ffi.yml index 01db91a743d..bfb2712c88f 100644 --- a/.github/workflows/release-py-ffi.yml +++ b/.github/workflows/release-py-ffi.yml @@ -131,6 +131,13 @@ jobs: shell: bash run: python -m pip wheel --no-deps --wheel-dir .tmp/sdist-wheels dist/*.tar.gz + - name: Install wheel from sdist + shell: bash + run: | + python -m pip install --no-deps .tmp/sdist-wheels/*.whl + cd .tmp + python -c 'import moq_ffi' + - name: Upload sdist uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7 with: diff --git a/pyproject.toml b/pyproject.toml index e5e4bc1c1c9..4407a5b93d4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,14 +38,16 @@ manifest-path = "rs/moq-ffi/Cargo.toml" features = ["openh264"] python-source = "py/moq-ffi" module-name = "moq_ffi._uniffi" -# Cargo resolves optional path dependencies even when Python does not enable them. -# Maturin also needs the workspace generator to render Python bindings. -include = [{ path = "rs/moq-v4l/**/*", format = "sdist" }, { path = "rs/uniffi-bindgen/**/*", format = "sdist" }] +# Cargo resolves disabled optional path dependencies too, while Maturin only +# follows enabled features. Include the Rust workspace so new optional crates +# and the UniFFI generator are available when installing from source. +include = [{ path = "rs/**/*", format = "sdist" }] # `maturin develop` writes the bindings into the source tree, where a later wheel build # would pick them up again and fail on the duplicate. The build regenerates them anyway. exclude = [ "**/moq_ffi/_uniffi/**", "**/__pycache__/**", + { path = "**/target/**", format = "sdist" }, # Native codec conformance corpora are only read by Rust tests. { path = "**/moq-audio/src/decode/test_data/**", format = "sdist" }, ] diff --git a/quest/m0/nightly/README.md b/quest/m0/nightly/README.md index edf2de6001e..2442733f782 100644 --- a/quest/m0/nightly/README.md +++ b/quest/m0/nightly/README.md @@ -32,7 +32,6 @@ Public API: none. Wire: none. ## Required - [moq-net compiles in Fuzz and send-depth](/quest/m0/nightly/send-overflow.md) - the ietf publisher future stops overflowing the Send check -- [The Python sdist builds](/quest/m0/nightly/py-sdist.md) - the sdist carries every workspace crate moq-ffi needs - [OBS audio-candidate test](/quest/m0/nightly/obs-audio-candidate.md) - the failed audio candidate check passes under TSan and load, fixed at its reproduced cause - [moq-net builds without async](/quest/m0/nightly/net-async-free.md) - the no-default-features lane stops pulling `async` back in - [Feature shapes per crate](/quest/m0/nightly/hls-poll-closed-gate.md) - moq-hls `Broadcaster::poll_closed` is gated on `server`, and the gate checks each crate's feature shapes in isolation diff --git a/quest/m0/nightly/py-sdist.md b/quest/m0/nightly/py-sdist.md deleted file mode 100644 index 657a82ace5e..00000000000 --- a/quest/m0/nightly/py-sdist.md +++ /dev/null @@ -1,17 +0,0 @@ -# [XS] The Python sdist builds - -## Goal - -Nightly's Release Py FFI "Build sdist" job builds and installs the moq-ffi -sdist. - -## Plan - -Nightly [40192013303](https://github.com/moq-dev/moq/actions/runs/40192013303) -fails in maturin's `cargo metadata`: the sdist lacks -`rs/moq-ice/Cargo.toml`, which `moq-tokio` depends on since moq-ice was split -out. `pyproject.toml` lists the extra sdist paths by hand. Fix it so a new -workspace dependency cannot drop out of the sdist again, and keep the sdist -build in a lane that runs before release. - -Public API: none. Wire: none.