obs-StreamFX/.github/workflows/main.yml
Michael Fabian 'Xaymar' Dirks 04e29a94b9 ci: Remove build variants that will never be used
Building for Qt5 is not necessary on Windows, MacOS or Ubuntu 22.04, as there are no supported OBS Studio versions that use these.
2023-04-05 18:59:04 +02:00

418 lines
19 KiB
YAML

name: Build
on:
push:
branches:
- '*'
tags:
- '*'
pull_request:
branches:
- '*'
concurrency:
group: build-${{ github.ref }}
cancel-in-progress: true
env:
CACHE_VERSION: "2022-12-02"
jobs:
build:
strategy:
fail-fast: false
matrix:
runner: [ "windows-2022", "macos-12", "ubuntu-22.04", "ubuntu-20.04" ]
qt: [ 5, 6 ]
generator: [ "MSVC", "GCC", "Clang" ]
exclude:
- runner: windows-2022
generator: GCC
- runner: windows-2022
generator: Clang
- runner: windows-2022
qt: 5
- runner: macos-12
generator: MSVC
- runner: macos-12
generator: GCC
- runner: macos-12
qt: 5
- runner: ubuntu-22.04
generator: MSVC
- runner: ubuntu-22.04
qt: 5
- runner: ubuntu-20.04
generator: MSVC
- runner: ubuntu-20.04
qt: 6
include:
# Windows supports MSVC
- runner: windows-2022
name: "Windows"
package_name: "windows"
CMAKE_SYSTEM_VERSION: "10.0.20348.0"
CMAKE_GENERATOR: "Visual Studio 17 2022"
CMAKE_GENERATOR_PLATFORM: "x64"
# MacOS supports Clang
- runner: macos-12
name: "MacOS"
package_name: "macos"
CMAKE_GENERATOR: "Xcode"
CMAKE_OSX_DEPLOYMENT_TARGET: "10.15"
CMAKE_OSX_ARCHITECTURES: "x86_64;arm64"
# Ubuntu needs version-specific binaries
- runner: ubuntu-22.04
name: "Ubuntu 22.04"
package_name: "ubuntu-22"
CMAKE_GENERATOR: "Ninja"
- runner: ubuntu-20.04
name: "Ubuntu 20.04"
package_name: "ubuntu-20"
CMAKE_GENERATOR: "Ninja"
runs-on: "${{ matrix.runner }}"
name: "${{ matrix.name }} (${{ matrix.generator }}, Qt${{ matrix.qt }})"
env:
CMAKE_GENERATOR: "${{ matrix.CMAKE_GENERATOR }}"
CMAKE_GENERATOR_PLATFORM: "${{ matrix.CMAKE_GENERATOR_PLATFORM }}"
CMAKE_GENERATOR_TOOLSET: "${{ matrix.CMAKE_GENERATOR_TOOLSET }}"
CMAKE_SYSTEM_VERSION: "${{ matrix.CMAKE_SYSTEM_VERSION }}"
CMAKE_OSX_DEPLOYMENT_TARGET: "${{ matrix.CMAKE_OSX_DEPLOYMENT_TARGET }}"
CMAKE_OSX_ARCHITECTURES: "${{ matrix.CMAKE_OSX_ARCHITECTURES }}"
steps:
- name: "Clone"
uses: actions/checkout@v3
with:
submodules: recursive
fetch-depth: 0
- name: "Install Build Tools (Ubuntu)"
if: startsWith( matrix.runner, 'ubuntu' )
shell: bash
run: |
sudo apt-get -qq update
sudo apt-get purge libjpeg9-dev:amd64 libjpeg8-dev:amd64 libjpeg-turbo8-dev:amd64
sudo apt-get install \
build-essential \
checkinstall \
pkg-config \
cmake \
ninja-build \
git \
gcc-10 g++10
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 800 --slave /usr/bin/g++ g++ /usr/bin/g++-10
- name: "Install LLVM/Clang (Windows)"
if: startsWith( matrix.runner, 'windows' )
run: |
curl "-kL" "https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.4/LLVM-14.0.4-win64.exe" "-f" "--retry" "5" "-o" "llvm.exe"
7z x -y -o"C:\Program Files\LLVM" llvm.exe "bin" "include" "lib" "libexec" "share" "Uninstall.exe"
echo "CLANG_PATH=\"C:\\Program Files\\LLVM\\bin\"" >> "${GITHUB_ENV}"
- name: "Install LLVM/Clang (Ubuntu)"
if: startsWith( matrix.runner, 'ubuntu' )
shell: bash
run: |
curl -jLo /tmp/llvm.sh "https://apt.llvm.org/llvm.sh"
chmod +x /tmp/llvm.sh
sudo /tmp/llvm.sh 14 all
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-14 800
sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-14 800
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-14 800
sudo update-alternatives --install /usr/bin/lld lld /usr/bin/lld-14 800
sudo update-alternatives --install /usr/bin/lldb lldb /usr/bin/lldb-14 800
sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-14 800
sudo update-alternatives --install /usr/bin/clang-tidy clang-tidy /usr/bin/clang-tidy-14 800
echo "CLANG_PATH=/usr/bin" >> "${GITHUB_ENV}"
- name: "Install LLVM/Clang (MacOS)"
if: startsWith( matrix.runner, 'macos' )
shell: bash
run: |
brew install llvm@14
LLVM_LOC=$(brew --prefix llvm@14)
echo "CLANG_PATH=${LLVM_LOC}/bin/" >> "${GITHUB_ENV}"
- name: "Install InnoSetup (Windows)"
if: startsWith( matrix.runner, 'windows' )
run: |
curl "-kL" "https://cdn.xaymar.com/ci/innosetup-6.2.1.exe" "-f" "--retry" "5" "-o" "inno.exe"
.\inno.exe /VERYSILENT /SP- /SUPPRESSMSGBOXES /NORESTART
- name: 'Install Packages (MacOS)'
if: startsWith( matrix.runner, 'macos' )
shell: bash
run: |
curl -kL https://cdn.xaymar.com/ci/Packages-1.2.10.dmg -f --retry 5 -o "Packages.dmg"
sudo hdiutil attach ./Packages.dmg
pushd /Volumes/Packages*
sudo installer -pkg ./Install\ Packages.pkg -target /
- name: "Setup build Tools and gather Information"
id: info
shell: bash
run: |
# Dependency Versioning
if [[ "${{ matrix.runner }}" = windows* ]]; then
if [[ -f "${{ github.workspace }}/third-party/DEPS_VERSION_WIN" ]]; then
echo "obs_deps_version=$(cat "${{ github.workspace }}/third-party/DEPS_VERSION_WIN")" >> $GITHUB_ENV
else
[[ $(cat "${{ github.workspace }}/third-party/obs-studio/.github/workflows/main.yml") =~ DEPS_VERSION_WIN:\ \'([0-9a-zA-Z\-]+)\' ]]
echo "obs_deps_version=${BASH_REMATCH[1]}" >> $GITHUB_ENV
fi
elif [[ "${{ matrix.runner }}" = macos* ]]; then
if [[ -f "${{ github.workspace }}/third-party/DEPS_VERSION_MAC" ]]; then
echo "obs_deps_version=$(cat "${{ github.workspace }}/third-party/DEPS_VERSION_MAC")" >> $GITHUB_ENV
else
[[ $(cat "${{ github.workspace }}/third-party/obs-studio/.github/workflows/main.yml") =~ DEPS_VERSION_MAC:\ \'([0-9a-zA-Z\-]+)\' ]]
echo "obs_deps_version=${BASH_REMATCH[1]}" >> $GITHUB_ENV
fi
else
echo "obs_deps_version=BADVALUE" >> $GITHUB_ENV
fi
echo "obs_version::$(cd "${{ github.workspace }}/third-party/obs-studio" && git describe --tags --long)"
# CMake Flags
if [[ "${{ matrix.CMAKE_GENERATOR }}" != "" ]]; then
echo "cmake_generator=-G \"${{ matrix.CMAKE_GENERATOR }}\"" >> $GITHUB_ENV
fi
if [[ "${{ matrix.CMAKE_GENERATOR_TOOLSET }}" != "" ]]; then
echo "cmake_generator_toolset=-T \"${{ matrix.CMAKE_GENERATOR_TOOLSET }}\"" >> $GITHUB_ENV
fi
if [[ "${{ matrix.CMAKE_GENERATOR_PLATFORM }}" != "" ]]; then
echo "cmake_generator_platform=-A \"${{ matrix.CMAKE_GENERATOR_PLATFORM }}\"" >> $GITHUB_ENV
fi
# Compiler Setup
if [[ "${{ matrix.runner }}" = ubuntu* ]]; then
if [[ "${{ matrix.generator }}" = "GCC" ]]; then
echo "CC=gcc-10" >> "${GITHUB_ENV}"
echo "CXX=g++-10" >> "${GITHUB_ENV}"
echo "LD=ld" >> "${GITHUB_ENV}"
elif [[ "${{ matrix.generator }}" = "Clang" ]]; then
echo "CC=clang-14" >> "${GITHUB_ENV}"
echo "CXX=clang++-14" >> "${GITHUB_ENV}"
echo "LD=lld" >> "${GITHUB_ENV}"
fi
fi
- name: "Dependency: Qt (Cache)"
id: qt-cache
if: ${{ ! startsWith( matrix.runner, 'ubuntu' ) }}
uses: actions/cache@v3
with:
path: "${{ github.workspace }}/build/qt"
key: "${{ matrix.runner }}-obsdeps${{ env.obs_deps_version }}-qt${{ matrix.qt }}-${{ env.CACHE_VERSION }}"
- name: "Dependency: Qt "
id: qt
if: ${{ startsWith( matrix.runner, 'ubuntu' ) || (steps.qt-cache.outputs.cache-hit != 'true') }}
shell: bash
run: |
if [[ "${{ matrix.runner }}" = windows* ]]; then
curl --retry 5 --retry-delay 30 -jLo /tmp/qt.zip "https://github.com/obsproject/obs-deps/releases/download/${{ env.obs_deps_version }}/windows-deps-qt${{ matrix.qt }}-${{ env.obs_deps_version }}-x64.zip"
if [[ ! -f "${{ github.workspace }}/build/qt" ]]; then mkdir -p "${{ github.workspace }}/build/qt"; fi
7z x -y -o"${{ github.workspace }}/build/qt" -- "/tmp/qt.zip"
elif [[ "${{ matrix.runner }}" = macos* ]]; then
curl --retry 5 --retry-delay 30 -jLo /tmp/qt.tar.xz "https://github.com/obsproject/obs-deps/releases/download/${{ env.obs_deps_version }}/macos-deps-qt${{ matrix.qt }}-${{ env.obs_deps_version }}-universal.tar.xz"
if [[ ! -f "${{ github.workspace }}/build/qt" ]]; then mkdir -p "${{ github.workspace }}/build/qt"; fi
tar -xvf "/tmp/qt.tar.xz" -C "${{ github.workspace }}/build/qt"
elif [[ "${{ matrix.runner }}" = ubuntu* ]]; then
if [[ ${{ matrix.qt }} -eq 5 ]]; then
sudo apt-get -y install -V \
qtbase5-dev qtbase5-private-dev libqt5svg5-dev
elif [[ ${{ matrix.qt }} -eq 6 ]]; then
sudo apt-get -y install -V \
qt6-base-dev qt6-base-private-dev libqt6svg6-dev libgles2-mesa-dev libegl1-mesa-dev libgl1-mesa-dev
fi
fi
- name: "Dependency: OBS Dependencies (FFmpeg, CURL, ...) (Cache)"
id: obsdeps-cache
if: ${{ ! startsWith( matrix.runner, 'ubuntu' ) }}
uses: actions/cache@v3
with:
path: "${{ github.workspace }}/build/obsdeps"
key: "${{ matrix.runner }}-obsdeps${{ env.obs_deps_version }}-${{ env.CACHE_VERSION }}"
- name: "Dependency: OBS Dependencies (FFmpeg, CURL, ...)"
id: obsdeps
if: ${{ startsWith( matrix.runner, 'ubuntu' ) || (steps.obsdeps-cache.outputs.cache-hit != 'true') }}
shell: bash
run: |
if [[ "${{ matrix.runner }}" = windows* ]]; then
curl --retry 5 --retry-delay 30 -jLo /tmp/obsdeps.zip "https://github.com/obsproject/obs-deps/releases/download/${{ env.obs_deps_version }}/windows-deps-${{ env.obs_deps_version }}-x64.zip"
if [[ ! -f "${{ github.workspace }}/build/obsdeps" ]]; then mkdir -p "${{ github.workspace }}/build/obsdeps"; fi
7z x -y -o"${{ github.workspace }}/build/obsdeps" -- "/tmp/obsdeps.zip"
elif [[ "${{ matrix.runner }}" = macos* ]]; then
curl --retry 5 --retry-delay 30 -jLo /tmp/obsdeps.tar.xz "https://github.com/obsproject/obs-deps/releases/download/${{ env.obs_deps_version }}/macos-deps-${{ env.obs_deps_version }}-universal.tar.xz"
if [[ ! -f "${{ github.workspace }}/build/obsdeps" ]]; then mkdir -p "${{ github.workspace }}/build/obsdeps"; fi
tar -xvf "/tmp/obsdeps.tar.xz" -C "${{ github.workspace }}/build/obsdeps"
elif [[ "${{ matrix.runner }}" = ubuntu* ]]; then
sudo apt-get -y install -V \
libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev \
libcurl4-openssl-dev
fi
- name: "Dependency: OBS Libraries (Cache)"
id: obs-cache
uses: actions/cache@v3
with:
path: "${{ github.workspace }}/build/obs"
key: "${{ matrix.runner }}-${{ matrix.generator }}-obs${{ env.obs_version }}-obsdeps${{ env.obs_deps_version }}-qt${{ matrix.qt }}-${{ env.CACHE_VERSION }}"
- name: "Dependency: OBS Libraries"
id: obs
if: ${{ steps.obs-cache.outputs.cache-hit != 'true' }}
shell: bash
env:
CMAKE_BUILD_TYPE: "Release"
run: |
# Extra requirements by libobs on Linux.
if [[ "${{ matrix.runner }}" = ubuntu* ]]; then
sudo apt-get install \
libavcodec-dev libavdevice-dev libavfilter-dev libavformat-dev libavutil-dev libswresample-dev libswscale-dev \
libx264-dev libcurl4-openssl-dev libmbedtls-dev libgl1-mesa-dev libjansson-dev libluajit-5.1-dev python3-dev \
libx11-dev libxcb-randr0-dev libxcb-shm0-dev libxcb-xinerama0-dev libxcomposite-dev libxinerama-dev \
libxcb1-dev libx11-xcb-dev libxcb-xfixes0-dev swig libcmocka-dev libxss-dev libglvnd-dev libgles2-mesa \
libgles2-mesa-dev libwayland-dev \
libasound2-dev libfdk-aac-dev libfontconfig-dev libfreetype6-dev libjack-jackd2-dev libpulse-dev \
libsndio-dev libspeexdsp-dev libudev-dev libv4l-dev libva-dev libvlc-dev libdrm-dev
fi
cmake \
-S "${{ github.workspace }}/third-party/obs-studio" \
-B "${{ github.workspace }}/build/obs" \
${{ env.cmake_generator }} \
${{ env.cmake_generator_toolset }} \
${{ env.cmake_generator_platform }} \
-DCMAKE_C_COMPILER="${{ env.CC }}" \
-DCMAKE_CXX_COMPILER="${{ env.CXX }}" \
-DCMAKE_LINKER="${{ env.LD }}" \
-DCMAKE_OSX_ARCHITECTURES="${{ matrix.CMAKE_OSX_ARCHITECTURES }}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.CMAKE_OSX_DEPLOYMENT_TARGET }}" \
-DCMAKE_SYSTEM_VERSION="${{ matrix.CMAKE_SYSTEM_VERSION }}" \
-DCMAKE_BUILD_TYPE="${{ env.CMAKE_BUILD_TYPE }}" \
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/build/obs/install" \
-DENABLE_PLUGINS=OFF \
-DENABLE_UI=OFF \
-DENABLE_SCRIPTING=OFF \
-DCMAKE_PREFIX_PATH="${{ github.workspace }}/build/obsdeps;${{ github.workspace }}/build/qt"
cmake \
--build "${{ github.workspace }}/build/obs" \
--config Release \
--target obs-frontend-api
cmake \
--install "${{ github.workspace }}/build/obs" \
--config Release \
--component obs_libraries
- name: "Configure & Build (Debug)"
continue-on-error: true
shell: bash
env:
CMAKE_BUILD_TYPE: "Debug"
run: |
cmake \
-S "${{ github.workspace }}" \
-B "${{ github.workspace }}/build/debug" \
${{ env.cmake_generator }} \
${{ env.cmake_generator_toolset }} \
${{ env.cmake_generator_platform }} \
-DCMAKE_C_COMPILER="${{ env.CC }}" \
-DCMAKE_CXX_COMPILER="${{ env.CXX }}" \
-DCMAKE_LINKER="${{ env.LD }}" \
-DCMAKE_OSX_ARCHITECTURES="${{ matrix.CMAKE_OSX_ARCHITECTURES }}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.CMAKE_OSX_DEPLOYMENT_TARGET }}" \
-DCMAKE_SYSTEM_VERSION="${{ matrix.CMAKE_SYSTEM_VERSION }}" \
-DCMAKE_BUILD_TYPE="${{ env.CMAKE_BUILD_TYPE }}" \
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/build/debug/install" \
-DPACKAGE_NAME="streamfx-${{ matrix.package_name }}-debug" \
-DPACKAGE_PREFIX="${{ github.workspace }}/build/package" \
-DENABLE_CLANG=TRUE -DCLANG_PATH="${{ env.CLANG_PATH }}" \
-DENABLE_PROFILING=ON \
-Dlibobs_DIR="${{ github.workspace }}/build/obs/install" \
-DQt_DIR="${{ github.workspace }}/build/qt" \
-DFFmpeg_DIR="${{ github.workspace }}/build/obsdeps" \
-DCURL_DIR="${{ github.workspace }}/build/obsdeps"
if [[ "${{ matrix.runner }}" = windows* ]]; then
cmake --build "build/debug" --config ${{ env.CMAKE_BUILD_TYPE }} --target install
elif [[ "${{ matrix.runner }}" = ubuntu* ]]; then
cmake --build "build/debug" --config ${{ env.CMAKE_BUILD_TYPE }} --target install
elif [[ "${{ matrix.runner }}" = macos* ]]; then
cmake --build "build/debug" --config ${{ env.CMAKE_BUILD_TYPE }} --target install
fi
- name: "Configure & Build (Release)"
shell: bash
env:
CMAKE_BUILD_TYPE: "RelWithDebInfo"
run: |
cmake \
-S "${{ github.workspace }}" \
-B "${{ github.workspace }}/build/release" \
${{ env.cmake_generator }} \
${{ env.cmake_generator_toolset }} \
${{ env.cmake_generator_platform }} \
-DCMAKE_C_COMPILER="${{ env.CC }}" \
-DCMAKE_CXX_COMPILER="${{ env.CXX }}" \
-DCMAKE_LINKER="${{ env.LD }}" \
-DCMAKE_OSX_ARCHITECTURES="${{ matrix.CMAKE_OSX_ARCHITECTURES }}" \
-DCMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.CMAKE_OSX_DEPLOYMENT_TARGET }}" \
-DCMAKE_SYSTEM_VERSION="${{ matrix.CMAKE_SYSTEM_VERSION }}" \
-DCMAKE_BUILD_TYPE="${{ env.CMAKE_BUILD_TYPE }}" \
-DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/build/release/install" \
-DPACKAGE_NAME="streamfx-${{ matrix.package_name }}" \
-DPACKAGE_PREFIX="${{ github.workspace }}/build/package" \
-DENABLE_CLANG=TRUE -DCLANG_PATH="${{ env.CLANG_PATH }}" \
-DENABLE_PROFILING=OFF \
-Dlibobs_DIR="${{ github.workspace }}/build/obs/install" \
-DQt_DIR="${{ github.workspace}}/build/qt" \
-DFFmpeg_DIR="${{ github.workspace }}/build/obsdeps" \
-DCURL_DIR="${{ github.workspace }}/build/obsdeps"
if [[ "${{ matrix.runner }}" = windows* ]]; then
cmake --build "build/release" --config ${{ env.CMAKE_BUILD_TYPE }} --target install
elif [[ "${{ matrix.runner }}" = ubuntu* ]]; then
cmake --build "build/release" --config ${{ env.CMAKE_BUILD_TYPE }} --target install/strip
elif [[ "${{ matrix.runner }}" = macos* ]]; then
cmake --build "build/release" --config ${{ env.CMAKE_BUILD_TYPE }} --target install
fi
- name: "Packaging"
shell: bash
run: |
mkdir "${{ github.workspace }}/build/package"
cmake --build "${{ github.workspace }}/build/debug" --config Debug --target PACKAGE_7Z
cmake --build "${{ github.workspace }}/build/release" --config RelWithDebInfo --target PACKAGE_7Z
- name: "Packaging (Windows)"
if: startsWith( matrix.runner, 'windows' )
shell: cmd
run: |
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" /V10 ".\build\debug\installer.iss"
"C:\Program Files (x86)\Inno Setup 6\ISCC.exe" /V10 ".\build\release\installer.iss"
- name: "Packaging (MacOS)"
if: startsWith( matrix.runner, 'macos' )
shell: bash
run: |
packagesbuild "${{ github.workspace }}/build/debug/installer.pkgproj"
packagesbuild "${{ github.workspace }}/build/release/installer.pkgproj"
- name: "Artifacts"
uses: actions/upload-artifact@v1
with:
name: "${{ matrix.runner }}-${{ matrix.generator }}-qt${{ matrix.qt }}"
path: "${{ github.workspace }}/build/package"
- name: "Validate clang-format"
shell: bash
run: |
cmake --build "${{ github.workspace }}/build/debug" --config Debug --target clang-format
cmake --build "${{ github.workspace }}/build/release" --config RelWithDebInfo --target clang-format
git --no-pager diff --patch --minimal HEAD --
git update-index --refresh
git diff-index --quiet HEAD --
- name: "Validate clang-tidy"
continue-on-error: true
shell: bash
run: |
cmake --build "${{ github.workspace }}/build/debug" --config Debug --target clang-tidy
cmake --build "${{ github.workspace }}/build/release" --config RelWithDebInfo --target clang-tidy
git --no-pager diff --patch --minimal HEAD --
git update-index --refresh
git diff-index --quiet HEAD --