name: "CI Multiplatform Build" on: push: paths-ignore: - 'docs/**' branches: - master pull_request: paths-ignore: - 'docs/**' - '**.md' branches: - master jobs: windows: name: 'Windows 32/64-bit' runs-on: [windows-latest] if: contains(github.event.head_commit.message, '[skip ci]') != true env: QT_CACHE_VERSION: '1' # Change whenever updating OBS dependencies URL, in order to force a cache reset QT_VERSION: '5.15.2' WINDOWS_DEPS_CACHE_VERSION: '1' # Change whenever updating Qt dependency URL, in order to force a cache reset WINDOWS_DEPS_VERSION: '2019' CMAKE_GENERATOR: "Visual Studio 16 2019" CMAKE_SYSTEM_VERSION: "10.0" steps: - name: 'Add msbuild to PATH' uses: microsoft/setup-msbuild@v1.0.2 - name: 'Checkout obs-websocket' uses: actions/checkout@v2 with: path: ${{ github.workspace }}/obs-websocket submodules: 'recursive' - name: 'Checkout OBS-Studio' uses: actions/checkout@v2 with: repository: obsproject/obs-studio path: ${{ github.workspace }}/obs-studio submodules: 'recursive' - name: 'Get OBS-Studio Git Info' shell: bash working-directory: ${{ github.workspace }}/obs-studio run: | git fetch --prune --unshallow echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' shell: bash working-directory: ${{ github.workspace }}/obs-studio run: | git checkout ${{ env.OBS_GIT_TAG }} git submodule update - name: 'Get obs-websocket Git Info' shell: bash working-directory: ${{ github.workspace }}/obs-websocket run: | git fetch --prune --unshallow echo "GIT_BRANCH=${{ github.event.pull_request.head.ref }}" >> $GITHUB_ENV echo "GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - name: 'Restore Cached Qt' id: qtcache uses: actions/cache@v2 with: path: ${{ github.workspace }}\cmbuild\QT\** key: 'qtdep-${{ env.QT_CACHE_VERSION }} | ${{ runner.os }}' restore-keys: | qtdep-${{ env.QT_CACHE_VERSION }} | ${{ runner.os }} - name: 'Install Prerequisite: QT' if: steps.qtcache.outputs.cache-hit != 'true' run: | curl -kLO https://tt2468.net/dl/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" - name: 'Restore Cached OBS-Studio Dependencies' id: obscache uses: actions/cache@v2 with: path: ${{ github.workspace }}\cmbuild\deps\** key: 'obsdep-${{ env.WINDOWS_DEPS_CACHE_VERSION }} | ${{ runner.os }}' restore-keys: | obsdep-${{ env.WINDOWS_DEPS_CACHE_VERSION }} | ${{ runner.os }} - name: 'Install Prerequisite: Pre-built OBS-Studio dependencies' if: steps.obscache.outputs.cache-hit != 'true' run: | curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" - name: 'Restore OBS-Studio 32-bit Build v${{ env.OBS_GIT_TAG }} from Cache' id: build-cache-obs-32 uses: actions/cache@v2 env: CACHE_NAME: 'build-cache-obs-32' with: path: ${{ github.workspace }}/obs-studio/build32 key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} restore-keys: | ${{ runner.os }}-${{ env.CACHE_NAME }}- - name: 'Configure OBS-Studio 32-bit' if: steps.build-cache-obs-32.outputs.cache-hit != 'true' working-directory: ${{ github.workspace }}/obs-studio run: | mkdir .\build32 cd .\build32 cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES -DBUILD_BROWSER=OFF .. - name: 'Build OBS-Studio 32-bit' if: steps.build-cache-obs-32.outputs.cache-hit != 'true' working-directory: ${{ github.workspace }}/obs-studio run: | msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj - name: 'Restore OBS-Studio 64-bit Build v${{ env.OBS_GIT_TAG }} from Cache' id: build-cache-obs-64 uses: actions/cache@v1 env: CACHE_NAME: 'build-cache-obs-64' with: path: ${{ github.workspace }}/obs-studio/build64 key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} restore-keys: | ${{ runner.os }}-${{ env.CACHE_NAME }}- - name: 'Configure OBS-Studio 64-bit' if: steps.build-cache-obs-64.outputs.cache-hit != 'true' working-directory: ${{ github.workspace }}/obs-studio run: | mkdir .\build64 cd .\build64 cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES -DBUILD_BROWSER=OFF .. - name: 'Build OBS-Studio 64-bit' if: steps.build-cache-obs-64.outputs.cache-hit != 'true' working-directory: ${{ github.workspace }}/obs-studio run: | msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj - name: 'Configure obs-websocket 32-bit' working-directory: ${{ github.workspace }}/obs-websocket run: | mkdir .\build32 cd .\build32 cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - name: 'Configure obs-websocket 64-bit' working-directory: ${{ github.workspace }}/obs-websocket run: | mkdir .\build64 cd .\build64 cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" .. - name: 'Build obs-websocket 32-bit' working-directory: ${{ github.workspace }}/obs-websocket run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-websocket.sln - name: 'Build obs-websocket 64-bit' working-directory: ${{ github.workspace }}/obs-websocket run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-websocket.sln - name: 'Set PR Artifact Filename' shell: bash run: | FILENAME="obs-websocket-${{ env.GIT_HASH }}-Windows" echo "WIN_FILENAME=$FILENAME" >> $GITHUB_ENV - name: 'Package obs-websocket' working-directory: ${{ github.workspace }}/obs-websocket run: | mkdir package cd package 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" iscc ..\installer\installer-windows.generated.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" - name: 'Publish ${{ env.WIN_FILENAME }}.zip' if: success() uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_HASH }}-Windows' path: ${{ github.workspace }}/obs-websocket/package/*.zip - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' if: success() uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_HASH }}-Windows-Installer' path: ${{ github.workspace }}/obs-websocket/package/*.exe ubuntu64: name: "Linux/Ubuntu 64-bit" runs-on: [ubuntu-latest] if: contains(github.event.head_commit.message, '[skip ci]') != true steps: - name: 'Checkout obs-websocket' uses: actions/checkout@v2 with: path: ${{ github.workspace }}/obs-websocket submodules: 'recursive' - name: 'Checkout OBS-Studio' uses: actions/checkout@v2 with: repository: obsproject/obs-studio path: ${{ github.workspace }}/obs-studio submodules: 'recursive' - name: 'Get OBS-Studio Git Info' shell: bash working-directory: ${{ github.workspace }}/obs-studio run: | git fetch --prune --unshallow echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - name: 'Checkout last OBS-Studio release (${{ env.OBS_GIT_TAG }})' shell: bash working-directory: ${{ github.workspace }}/obs-studio run: | git checkout ${{ env.OBS_GIT_TAG }} git submodule update - name: 'Get obs-websocket git info' working-directory: ${{ github.workspace }}/obs-websocket run: | git fetch --prune --unshallow echo "GIT_BRANCH=${{ github.event.pull_request.head.ref }}" >> $GITHUB_ENV echo "GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - name: 'Install prerequisites (Apt)' shell: bash run: | sudo dpkg --add-architecture amd64 sudo apt-get -qq update sudo apt-get install -y \ build-essential \ checkinstall \ cmake \ libasound2-dev \ libavcodec-dev \ libavdevice-dev \ libavfilter-dev \ libavformat-dev \ libavutil-dev \ libcurl4-openssl-dev \ libfdk-aac-dev \ libfontconfig-dev \ libfreetype6-dev \ libgl1-mesa-dev \ libjack-jackd2-dev \ libjansson-dev \ libluajit-5.1-dev \ libpulse-dev \ libqt5x11extras5-dev \ libspeexdsp-dev \ libswresample-dev \ libswscale-dev \ libudev-dev \ libv4l-dev \ libva-dev \ libvlc-dev \ libx11-dev \ libx264-dev \ libxcb-randr0-dev \ libxcb-shm0-dev \ libxcb-xinerama0-dev \ libxcomposite-dev \ libxinerama-dev \ libmbedtls-dev \ pkg-config \ python3-dev \ qtbase5-dev \ libqt5svg5-dev \ swig - name: 'Configure OBS-Studio' working-directory: ${{ github.workspace }}/obs-studio shell: bash run: | mkdir ./build cd ./build cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_BROWSER=OFF -DENABLE_PIPEWIRE=OFF .. - name: 'Build OBS-Studio' working-directory: ${{ github.workspace }}/obs-studio shell: bash run: | set -e cd ./build make -j4 libobs obs-frontend-api - name: 'Install OBS-Studio' working-directory: ${{ github.workspace }}/obs-studio shell: bash run: | cd ./build sudo cp ./libobs/libobs.so /usr/lib sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib sudo mkdir -p /usr/include/obs sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h - name: 'Configure obs-websocket' working-directory: ${{ github.workspace }}/obs-websocket shell: bash run: | mkdir ./build cd ./build cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr -DUSE_UBUNTU_FIX=TRUE .. - name: 'Build obs-websocket' working-directory: ${{ github.workspace }}/obs-websocket shell: bash run: | set -e cd ./build make -j4 - name: 'Set PR Artifact Filename' shell: bash run: | FILENAME="obs-websocket-1-${{ env.GIT_HASH }}-1_amd64.deb" echo "FILENAME=$FILENAME" >> $GITHUB_ENV - name: 'Package ${{ env.FILENAME }}' if: success() working-directory: ${{ github.workspace }}/obs-websocket shell: bash run: | VERSION="1-${{ env.GIT_HASH }}-git" cd ./build sudo checkinstall -y --type=debian --fstrans=no -nodoc \ --backup=no --deldoc=yes --install=no --pkgname=obs-websocket --pkgversion=$VERSION \ --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ --pkgsource="${{ github.event.repository.html_url }}" \ --requires="obs-studio,libqt5core5a,libqt5widgets5,libqt5network5,libqt5concurrent5,qt5-image-formats-plugins" \ --pakdir="../package" sudo chmod ao+r ../package/* cd - - name: 'Publish ${{ env.FILENAME }}' if: success() uses: actions/upload-artifact@v2-preview with: name: '${{ env.GIT_HASH }}-linux' path: '${{ github.workspace }}/obs-websocket/package/*.deb'