name: Build # Every job builds the real plugin: the core library linked against the # pinned livekit/client-sdk-cpp release, and -- where libobs is available -- # the OBS adapter module itself. # # Linux gets libobs from Ubuntu's libobs-dev. macOS and Windows have no # equivalent system package, so they run obs-plugintemplate's buildspec # bootstrap (buildspec.json + cmake/common/buildspec_common.cmake), which # downloads the pinned obs-deps bundle and obs-studio source and builds just # `libobs`. That step is the slow one: several minutes on a cold runner. # # RELEASE GATE: this workflow only builds, tests, and uploads CI-internal # workflow artifacts (actions/upload-artifact, below) -- it does not create a # Gitea Release, push a tag-triggered publish, or otherwise distribute # binaries publicly, and it must not start doing so without explicit owner # sign-off on the WebRTC/OpenH264 attribution question tracked in # third_party/livekit/README.md and the README's top-level Status section. # (The separate GPLv2/Apache-2.0 license-compatibility question is resolved: # this project's own code is Apache-2.0.) If a real release/publish step is # ever added here, it must carry that same gate. on: push: pull_request: jobs: linux: name: Linux (ubuntu-24.04) # Pinned to 24.04 rather than ubuntu-latest, which this instance's two # Linux runners answer with different releases. 24.04's libobs-dev is # 30.0.2, exactly the OBS version buildspec.json pins for macOS/Windows, # so all three platforms build against the same libobs. On a 22.04 runner # libobs-dev is OBS 27, which is a different API surface entirely. runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@v4 - name: Install build dependencies run: | sudo apt-get update -qq sudo apt-get install -y -qq cmake ninja-build libobs-dev libcurl4-openssl-dev - name: Configure # Linux keeps its distribution libobs; the buildspec bootstrap is for # the two platforms that have no such package. run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DSTPLUGIN_BOOTSTRAP_OBS=OFF - name: Build run: cmake --build build - name: Test (core library) run: ctest --test-dir build --output-on-failure - name: Show what was built run: | ls -la build/package/bin/64bit build/package/data/locale build/package/licenses ldd build/package/bin/64bit/streamer-tools-camera.so | grep -E 'obs|livekit' nm -D build/package/bin/64bit/streamer-tools-camera.so | grep -E ' T obs_module_(load|unload)' - name: Upload plugin continue-on-error: true uses: actions/upload-artifact@v3 with: name: streamer-tools-camera-linux-x64 path: build/package macos: name: macOS (macos-latest) runs-on: macos-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install build dependencies run: brew install cmake ninja - name: Configure # The buildspec bootstrap runs here: it fetches obs-deps + the pinned # obs-studio source and builds libobs before this project configures. # # If that fails, fall back to a core-library-only build rather than # going red: the core library and its tests are what this job mainly # guards, and the fallback is loud (a workflow warning, plus the # "Show what was built" step below reporting no module) rather than # silent. Do not remove the warning -- a green job that quietly stopped # building the plugin is worse than a red one. run: | if ! cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release; then echo "::warning::OBS SDK bootstrap failed on macOS; building the core library only. The plugin module was NOT built." rm -rf build cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DSTPLUGIN_BOOTSTRAP_OBS=OFF fi - name: Build run: cmake --build build - name: Test (core library) run: ctest --test-dir build --output-on-failure - name: Show what was built run: | ls -la .deps/Frameworks/libobs.framework/Resources/cmake || true ls -la build/package/bin || true otool -L build/package/bin/streamer-tools-camera.so || true - name: Upload plugin continue-on-error: true uses: actions/upload-artifact@v3 with: name: streamer-tools-camera-macos path: build/package windows: name: Windows (windows-latest) runs-on: windows-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install build dependencies # winvm-builder is a self-hosted act_runner labeled "windows-latest"; # it is NOT the GitHub-hosted image, so none of that image's # preinstalled tooling (cmake included) can be assumed present. uses: lukka/get-cmake@latest - name: Configure # The default Visual Studio generator is required, not Ninja: # cmake/windows/buildspec.cmake keys the dependency slice off # CMAKE_VS_PLATFORM_NAME, which only a VS generator sets. # # Same fallback as macOS, and the same warning: a green job that # quietly stopped building the plugin is worse than a red one. # PowerShell, not bash: this runner is a plain Windows VM and bash # cannot be assumed present. run: | cmake -S . -B build -A x64 if ($LASTEXITCODE -ne 0) { Write-Host "::warning::OBS SDK bootstrap failed on Windows; building the core library only. The plugin module was NOT built." Remove-Item -Recurse -Force build -ErrorAction SilentlyContinue cmake -S . -B build -A x64 -DSTPLUGIN_BOOTSTRAP_OBS=OFF if ($LASTEXITCODE -ne 0) { exit 1 } } - name: Build run: cmake --build build --config Release - name: Test (core library) run: ctest --test-dir build -C Release --output-on-failure - name: Show what was built run: | if (Test-Path build\package\bin\64bit) { Get-ChildItem build\package\bin\64bit } else { Write-Host "no plugin module was built (core library only)" } - name: Upload plugin continue-on-error: true uses: actions/upload-artifact@v3 with: name: streamer-tools-camera-windows-x64 path: build/package