Skip to content

Commit d5eef88

Browse files
kixelatedclaude
andcommitted
ci(obs): ship macOS + Windows binaries only; Linux is build-from-source
The Linux plugin would link the nix/distro ffmpeg rather than the version OBS bundles, so it isn't portable. macOS and Windows link the obs-deps ffmpeg OBS ships, so those binaries are portable. Drop the Linux legs from the release matrix (no second cargo build / nix step needed now either) and document Linux as build-from-source. A future native decoder via moq-video would remove the ffmpeg dependency and let Linux ship a binary too. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 5ce28aa commit d5eef88

2 files changed

Lines changed: 11 additions & 28 deletions

File tree

.github/workflows/libmoq.yml

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -119,52 +119,33 @@ jobs:
119119
needs: release
120120
runs-on: ${{ matrix.os }}
121121

122+
# macOS + Windows only. These link the ffmpeg the obs-deps bundle ships
123+
# (the same one OBS uses), so the binaries are portable. A Linux build
124+
# would link nix/distro ffmpeg and not be portable, so Linux is
125+
# build-from-source (see doc/bin/obs.md) and ships no prebuilt binary.
122126
strategy:
123127
fail-fast: false
124128
matrix:
125129
include:
126-
- target: x86_64-unknown-linux-gnu
127-
os: ubuntu-latest
128-
use_nix: true
129-
- target: aarch64-unknown-linux-gnu
130-
os: ubuntu-24.04-arm
131-
use_nix: true
132130
- target: aarch64-apple-darwin
133131
os: macos-latest
134-
use_nix: false
135132
- target: x86_64-pc-windows-msvc
136133
os: windows-latest
137-
use_nix: false
138134

139135
steps:
140136
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
141137
with:
142138
fetch-depth: 0
143139
persist-credentials: false
144140

145-
- name: Install Nix
146-
if: matrix.use_nix
147-
uses: DeterminateSystems/nix-installer-action@1d87d45818068401a10cf16bdc5f00b24994a83f # main
148-
with:
149-
determinate: false
150-
151141
- name: Parse version
152142
id: parse
153143
shell: bash
154144
run: .github/scripts/release.sh parse-version libmoq
155145

156-
- name: Build and package (Linux, nix)
157-
if: matrix.use_nix
158-
shell: bash
159-
env:
160-
TARGET: ${{ matrix.target }}
161-
VERSION: ${{ steps.parse.outputs.version }}
162-
run: |
163-
nix develop --accept-flake-config --command \
164-
./cpp/obs/build.sh --target "$TARGET" --libmoq-release "$VERSION" --output dist
165-
166-
- name: Build and package (macOS / Windows, native)
167-
if: '!matrix.use_nix'
146+
# Native Xcode / Visual Studio; libobs/Qt6/ffmpeg come from the obs-deps
147+
# bundle and libmoq from the release we just published (--libmoq-release).
148+
- name: Build and package
168149
shell: bash
169150
env:
170151
TARGET: ${{ matrix.target }}

doc/bin/obs.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,11 @@ just obs build
5959

6060
## Releases
6161

62-
The plugin statically links `libmoq`, so it ships with every libmoq release rather than on its own schedule. The [`libmoq` workflow](https://github.com/moq-dev/moq/blob/main/.github/workflows/libmoq.yml) (triggered by a `libmoq-v*` tag) rebuilds the plugin against the libmoq release it just published, then cuts a matching `obs-moq-v<version>` release for Linux (x86_64 + arm64, via Nix), macOS (arm64), and Windows (x64). `cpp/obs/build.sh --libmoq-release <version>` drives each per-platform build (it fetches the prebuilt libmoq archive, so no second cargo build).
62+
The plugin statically links `libmoq`, so it ships with every libmoq release rather than on its own schedule. The [`libmoq` workflow](https://github.com/moq-dev/moq/blob/main/.github/workflows/libmoq.yml) (triggered by a `libmoq-v*` tag) rebuilds the plugin against the libmoq release it just published, then cuts a matching `obs-moq-v<version>` release with **macOS (arm64)** and **Windows (x64)** binaries. `cpp/obs/build.sh --libmoq-release <version>` drives each build (it fetches the prebuilt libmoq archive, so no second cargo build).
6363

64-
The archives are **unsigned**, so macOS Gatekeeper and Windows SmartScreen will warn on first load (right-click → Open on macOS). Extract the archive into your OBS plugins directory: the `.plugin` bundle on macOS, or the `obs-moq/` folder (containing `bin/64bit/` + `data/`) on Linux/Windows.
64+
The archives are **unsigned**, so macOS Gatekeeper and Windows SmartScreen will warn on first load (right-click → Open on macOS). Extract the archive into your OBS plugins directory: the `.plugin` bundle on macOS, or the `obs-moq/` folder (containing `bin/64bit/` + `data/`) on Windows.
65+
66+
**Linux is build-from-source for now** (see the Linux section above). A prebuilt Linux binary isn't shipped: the plugin needs ffmpeg to decode subscribed video, and a Linux build links the nix/distro ffmpeg rather than the version OBS bundles, so it wouldn't load portably. (A future native decoder via `moq-video` would remove the ffmpeg dependency and let Linux ship a binary too.)
6567

6668
## Usage
6769

0 commit comments

Comments
 (0)