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. 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 build/package/data/locale build/package/licenses ldd build/package/bin/streamer-tools-camera.so | grep -E 'obs|livekit' nm -D build/package/bin/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. run: cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release - 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. run: cmake -S . -B build -A x64 - 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: dir build\package\bin - name: Upload plugin continue-on-error: true uses: actions/upload-artifact@v3 with: name: streamer-tools-camera-windows-x64 path: build/package