build(libuvc): bump fork pin to ceralive-v0.0.7.9 #42
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build Check | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| concurrency: | |
| group: build-check-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| build: | |
| name: Build ${{ matrix.config.arch }} | |
| runs-on: ${{ matrix.config.runner }} | |
| strategy: | |
| matrix: | |
| config: | |
| - arch: arm64 | |
| runner: ubuntu-24.04-arm | |
| - arch: amd64 | |
| runner: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v4 | |
| - name: Build with Docker | |
| uses: docker/build-push-action@v7 | |
| with: | |
| context: . | |
| outputs: build | |
| platforms: linux/${{ matrix.config.arch }} | |
| cache-from: type=gha,scope=${{ matrix.config.arch }} | |
| cache-to: type=gha,mode=max,scope=${{ matrix.config.arch }} | |
| - name: Verify plugin was built | |
| run: | | |
| ls -la build/usr/lib/*/gstreamer-1.0/ | |
| - name: Build Summary | |
| run: | | |
| cat >> "$GITHUB_STEP_SUMMARY" <<'EOF' | |
| ## ✅ Build Check Passed | |
| **Architecture:** ${{ matrix.config.arch }} | |
| **Runner:** ${{ matrix.config.runner }} | |
| EOF | |
| fork-guard: | |
| name: Fork pin + capability + source-list guard | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| # The fork is PUBLIC (see libuvch264src/docs/notes/libuvc-fork-adr.md): | |
| # the capability check clones CeraLive/libuvc with NO credentials. Only | |
| # git + coreutils are needed — no build toolchain for these two checks. | |
| - name: Source-list consistency (sources.txt vs build) | |
| run: bash scripts/check-source-list.sh | |
| - name: Fork pin integrity + capability presence | |
| run: bash scripts/check-libuvc-fork.sh | |
| - name: Guard Summary | |
| if: always() | |
| run: | | |
| cat >> "$GITHUB_STEP_SUMMARY" <<'EOF' | |
| ## 🔒 Fork + source-list guard | |
| `check-source-list.sh` asserts sources.txt agrees with what CMake/Meson compile; `check-libuvc-fork.sh` asserts the pinned fork SHA matches the ADR and the fork carries UVC_FRAME_FORMAT_H265, the 0x0150 UVC 1.5 case, and the LIBUVC_AUTO_DETACH_KERNEL_DRIVER option (capability-presence, not upstream-drift). The fork clone uses no credentials. | |
| EOF | |
| reproducibility: | |
| name: Plugin .so build reproducibility | |
| runs-on: ubuntu-latest | |
| env: | |
| CCACHE_DIR: ${{ github.workspace }}/.ccache | |
| CMAKE_C_COMPILER_LAUNCHER: ccache | |
| CMAKE_CXX_COMPILER_LAUNCHER: ccache | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Install build + GStreamer dev dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| cmake \ | |
| git \ | |
| patch \ | |
| pkg-config \ | |
| libgstreamer1.0-dev \ | |
| libgstreamer-plugins-base1.0-dev \ | |
| libjpeg-dev \ | |
| libusb-1.0-0-dev \ | |
| ccache \ | |
| binutils | |
| - name: Cache ccache | |
| uses: actions/cache@v6 | |
| with: | |
| path: ${{ github.workspace }}/.ccache | |
| key: ccache-${{ runner.os }}-reproducibility-${{ github.sha }} | |
| restore-keys: | | |
| ccache-${{ runner.os }}-reproducibility- | |
| # Builds libgstlibuvch264src.so twice from the same pinned fork SHA and | |
| # compares sha256sums. Exits non-zero on real non-determinism; a build-id | |
| # -only difference is normalized (strip + drop .note.gnu.build-id) and | |
| # reported as an explained, deterministic-modulo-build-id pass. | |
| - name: Build .so twice + compare sha256 | |
| run: bash scripts/check-reproducibility.sh | |
| - name: Reproducibility Summary | |
| if: always() | |
| run: | | |
| cat >> "$GITHUB_STEP_SUMMARY" <<'EOF' | |
| ## ♻️ Build reproducibility | |
| `check-reproducibility.sh` built the plugin .so twice and compared sha256sums to confirm a deterministic build (raw match, or byte-identical after normalizing the linker .note.gnu.build-id). | |
| EOF | |
| functional-test: | |
| name: Functional suite + TSan/ASAN (ctest) | |
| runs-on: ubuntu-latest | |
| env: | |
| CCACHE_DIR: ${{ github.workspace }}/.ccache | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v7 | |
| - name: Install build + GStreamer dev dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --no-install-recommends \ | |
| build-essential \ | |
| cmake \ | |
| git \ | |
| patch \ | |
| pkg-config \ | |
| libgstreamer1.0-dev \ | |
| libgstreamer-plugins-base1.0-dev \ | |
| libjpeg-dev \ | |
| libusb-1.0-0-dev \ | |
| ccache | |
| - name: Cache ccache | |
| uses: actions/cache@v6 | |
| with: | |
| path: ${{ github.workspace }}/.ccache | |
| key: ccache-${{ runner.os }}-functional-${{ github.sha }} | |
| restore-keys: | | |
| ccache-${{ runner.os }}-functional- | |
| # ENABLE_SANITIZERS is load-bearing: without it ctest runs only the plain | |
| # variants, dropping all ASan (SPS/PPS overflow) and TSan (frame/PTS race) | |
| # coverage. Keep it on so the full hardware-independent suite is gated. | |
| - name: Configure and build (with sanitizers) | |
| run: | | |
| cmake -B build -DENABLE_SANITIZERS=ON \ | |
| -DCMAKE_C_COMPILER_LAUNCHER=ccache \ | |
| -DCMAKE_CXX_COMPILER_LAUNCHER=ccache | |
| cmake --build build | |
| - name: Run ctest (full suite incl. TSan/ASAN) | |
| run: ctest --test-dir build --output-on-failure | |
| - name: Functional Test Summary | |
| if: always() | |
| run: | | |
| cat >> "$GITHUB_STEP_SUMMARY" <<'EOF' | |
| ## 🔌 Functional test suite (ctest + TSan/ASAN) | |
| `ctest --test-dir build` ran the full hardware-independent suite against the libuvc mock: plugin-load smoke, mock streaming, lifecycle, device selection, negotiate edges, SPS/PPS overflow (ASan), frame/PTS thread-safety (TSan), and the consolidated functional caps (H.264/H.265) + backpressure suite. | |
| EOF |