Summary
The Ubuntu one-file binary is done (CastToTV-linux.spec, ~124 MB, ffmpeg + yt-dlp + Chromecast/AirPlay/Pillow bundled, verified running with an empty PATH). Bring the same self-contained build to Windows and Arch Linux, and wire it into CI so a tagged push produces all three.
Scope
- Windows
.exe: PyInstaller one-file bundling ffmpeg.exe + ffprobe.exe + yt-dlp.exe (via --add-binary), console=False, upx_exclude for ffmpeg. resolve_binary() already finds them in sys._MEIPASS.
- Arch: either the same PyInstaller one-file built in an Arch container, or a
PKGBUILD that depends on Arch's system ffmpeg/yt-dlp (the resolve_binary() PATH fallback makes the lite build work without bundling).
- CI: a
.github/workflows matrix (windows-latest / ubuntu-latest / arch container) that builds each on tag and attaches the artifacts to the release.
Notes
- Build on the oldest glibc target for Linux (Ubuntu LTS) so the binary also runs on Arch.
- Fat bundle is ~120–180 MB; consider also publishing a "lite" build (no bundled ffmpeg/yt-dlp, PATH-resolved) for users who have them.
Acceptance
Summary
The Ubuntu one-file binary is done (
CastToTV-linux.spec, ~124 MB, ffmpeg + yt-dlp + Chromecast/AirPlay/Pillow bundled, verified running with an emptyPATH). Bring the same self-contained build to Windows and Arch Linux, and wire it into CI so a tagged push produces all three.Scope
.exe: PyInstaller one-file bundlingffmpeg.exe+ffprobe.exe+yt-dlp.exe(via--add-binary),console=False,upx_excludefor ffmpeg.resolve_binary()already finds them insys._MEIPASS.PKGBUILDthat depends on Arch's systemffmpeg/yt-dlp(theresolve_binary()PATH fallback makes the lite build work without bundling)..github/workflowsmatrix (windows-latest / ubuntu-latest / arch container) that builds each on tag and attaches the artifacts to the release.Notes
Acceptance
CastToTV.exeruns on a clean Windows machine, no Python/ffmpeg/yt-dlp installed.