* fix(build): restore editable installs after stream_gears packaging change
Editable installs only put python-source (crates/stream-gears) on sys.path and skip include, so the root biliup/ package was unimportable after maturin develop / pip install -e . Add crates/stream-gears/biliup/__init__.py, which loads the root package under the same name. Wheels are unchanged: maturin only walks stream_gears/ and the include globs, which match the root biliup/ first.
* test(stream-gears): cover editable installs
test_wheel_ships_stubs only checks RECORD for regular installs, since an editable install's RECORD lists the .pth. A new test puts only python-source on PYTHONPATH and checks that biliup and biliup.__main__ resolve to the root package.
* build: move biliup/ and pyproject.toml into crates/stream-gears
Editable installs (`maturin develop`, `pip install -e`) only put
`python-source` on sys.path and skip `include`, so with `biliup/` at the
repository root they could not import it. With `pyproject.toml`,
`biliup/` and `stream_gears/` in the same directory, `biliup` goes in
through `python-packages`, which editable installs honour.
- `biliup/` is moved unchanged; the loader added earlier in this PR is
removed because that path is now the real package.
- `readme` and `license` point at the repository root, so the wheel's
METADATA and `licenses/LICENSE` stay the same.
- CI, Termux and the Dockerfile build with
`-m crates/stream-gears/Cargo.toml`.
Ref #1732
* docs: point source install commands at crates/stream-gears
* feat(stream-gears): ship stream_gears package with accurate stubs
The stream_gears/ package (__init__.py, stub, py.typed) never made it into
the wheel: pyproject only listed python-packages = ["biliup"], so maturin
generated its own __init__.py and the stub drifted from the implementation
(7 of 16 upload lines, login_by_qrcode typed as bool, missing upload
parameters, pyobject.Segment/Credit not accepted by the Rust side).
- Move the package to the repo root next to biliup/ (maturin resolves
python-packages relative to python-source) and set
module-name = "stream_gears.stream_gears" for a mixed layout.
- __init__.py re-exports the native module, adds Segment = PySegment and a
Credit TypedDict; pyobject.py is removed.
- Rewrite stream_gears.pyi from the implementation, including
StreamGearsError and the proxy/file parameters.
- Give upload an explicit text_signature so its string and list defaults
show up in inspect.signature/help() instead of Ellipsis.
Top-level names only grow: Credit and Segment are added.
* ci(desktop): keep PyInstaller off the source stream_gears package
PyInstaller puts the repo root first on its search path, so the source
stream_gears/ (which has no native module) shadowed the installed package
and the frozen biliup failed to import stream_gears.stream_gears. Remove
the source copy after installing the wheel.
* test(stream-gears): check package layout and run stubtest in CI
test_package.py covers the new top-level names, the native submodule,
__all__ staying in sync with the native module, py.typed and the stub in
the wheel, upload's text_signature against PyO3's argument parsing, and
mypy --strict on a valid and an invalid example.
CI runs python -m mypy.stubtest stream_gears against the installed wheel
so the stub cannot drift from the implementation again.
* build(stream-gears): drop unused danmaku-client and async-trait deps
Neither is referenced anywhere in crates/stream-gears. danmaku is still
built through biliup-cli, so this only trims the manifest and lockfile
entries.
* refactor(stream-gears): keep the package in crates/stream-gears via python-source
Point maturin's python-source at crates/stream-gears instead of moving
stream_gears/ to the repository root. python-packages is resolved under
python-source, so the root biliup/ package is shipped through include.
The wheel contents are unchanged.
* ci: drop workarounds for a root-level stream_gears package
With stream_gears/ back in crates/stream-gears, nothing at the repository
root shadows the installed package, so PyInstaller and stubtest no longer
need to avoid it.
* test(stream-gears): pytest smoke suite for the wheel in CI
Offline checks against the installed wheel: exported names, UploadLine
members, PySegment/config_bindings basics, `biliup --version` and
`python -m biliup --help` in a subprocess. OPS-19 (login functions
require `proxy`) is recorded as a strict xfail.
The linux x86_64 job installs the abi3 wheel into a venv and runs the
suite before the free-threaded build.
Ref #1721
* chore(stream-gears): move manual scripts to examples/
Drop test_server.py (only printed the default config; now covered by
the smoke suite). Move login.py, test_upload.py and test_download.py to
examples/ so pytest never collects them, and take the video/cookie
paths and stream URL from argv/env instead of hard-coded E:\ paths.
Also pass proxy explicitly (OPS-19), use PySegment (OPS-20) and catch
ValueError from str.index (OPS-38) so the scripts run on this version.
Ref #1721
* test(stream-gears): drop internal bug id from xfail reason
Set CFLAGS_powerpc64le_unknown_linux_gnu=-DAT_HWCAP2=26 in CI to work around aws-lc-sys (via rustls) calling getauxval(AT_HWCAP2) on manylinux2014 where glibc 2.17 headers lack AT_HWCAP2; glibc still provides getauxval so the value is safe and only used for ppc64le cc invocations. Also enable the tokio "io-std" feature for the biliup-cli crate to opt into the io-std I/O implementation.
maturin 1.14 dropped support for free-threaded Python 3.13
("Free-threaded Python interpreter is only supported on 3.14 and
later"), which broke the linux/musllinux/macos free-threaded wheel
steps since maturin-action always uses the latest maturin. Switch
the free-threaded builds from python3.13t to python3.14t, matching
what maturin generate-ci now emits.
Introduces the struct-patch crate for partial config updates and applies it to configuration models. Refactors config access patterns, adds PartialEq to several types, and updates LiveStreamer to use ConfigPatch for override_cfg. Also updates the CI workflow to use macos-15-intel, improves download task cancellation logic, and upgrades @douyinfe/semi-ui and related dependencies in the frontend.
All steps in docker-publish.yml, pyinstaller-publish.yml, and python-publish.yml have been commented out, effectively disabling these GitHub Actions workflows. This change may be for temporarily suspending automated builds and releases.
Update ci.yml
Update ci.yml
Update CI workflows and stream-gears version
Fixes a variable reference in the CI workflow for manylinux builds and updates the Windows PyInstaller workflow to use maturin for development installs and a more streamlined build process. Bumps stream-gears crate version to 0.4.102 and removes the stream-gears Python dependency from pyproject.toml.
Delete python-publish.yml