fix building on OBS master #145
This file contains 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 obs plugin | |
on: | |
push: | |
branches: [ master ] | |
pull_request: | |
branches: [ master ] | |
env: | |
PLUGIN_NAME: audio-monitor | |
OBS_VERSION: 28.0.0-rc1 | |
jobs: | |
macos: | |
name: macOS | |
runs-on: macos-12 | |
strategy: | |
fail-fast: false | |
matrix: | |
arch: [x86_64, arm64, universal] | |
outputs: | |
commitHash: ${{ steps.setup.outputs.commitHash }} | |
env: | |
CODESIGN_IDENT: '-' | |
CODESIGN_IDENT_INSTALLER: '' | |
MACOSX_DEPLOYMENT_TARGET: '10.15' | |
defaults: | |
run: | |
shell: zsh {0} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4.1.1 | |
with: | |
path: plugin | |
submodules: recursive | |
- name: Checkout obs-studio | |
uses: actions/checkout@v4.1.1 | |
with: | |
repository: 'obsproject/obs-studio' | |
path: obs-studio | |
fetch-depth: 0 | |
submodules: recursive | |
- name: Setup Environment | |
id: setup | |
working-directory: ${{ github.workspace }}/plugin | |
run: | | |
## SETUP ENVIRONMENT SCRIPT | |
print '::group::Clean Homebrew Environment' | |
typeset -a to_remove=() | |
for formula (speexdsp curl php) { | |
if [[ -d ${HOMEBREW_PREFIX}/opt/${formula} ]] to_remove+=(${formula}) | |
} | |
if (( #to_remove > 0 )) brew uninstall --ignore-dependencies ${to_remove} | |
print '::endgroup::' | |
print '::group::Set up code signing' | |
if [[ '${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}' != '' && \ | |
'${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}' != '' && \ | |
'${{ secrets.MACOS_SIGNING_CERT }}' != '' ]] { | |
print 'haveCodesignIdent=true' >> $GITHUB_OUTPUT | |
} else { | |
print 'haveCodesignIdent=false' >> $GITHUB_OUTPUT | |
} | |
if [[ '${{ secrets.MACOS_NOTARIZATION_USERNAME }}' != '' && \ | |
'${{ secrets.MACOS_NOTARIZATION_PASSWORD }}' != '' ]] { | |
print 'haveNotarizationUser=true' >> $GITHUB_OUTPUT | |
} else { | |
print 'haveNotarizationUser=false' >> $GITHUB_OUTPUT | |
} | |
print '::endgroup::' | |
print "ccacheDate=$(date +"%Y-%m-%d")" >> $GITHUB_OUTPUT | |
print "commitHash=${"$(git rev-parse HEAD)"[0,9]}" >> $GITHUB_OUTPUT | |
- name: Restore Compilation Cache | |
id: ccache-cache | |
uses: actions/cache@v4.0.0 | |
with: | |
path: ${{ github.workspace }}/.ccache | |
key: macos-${{ matrix.arch }}-ccache-plugin-${{ steps.setup.outputs.ccacheDate }} | |
restore-keys: | | |
macos-${{ matrix.arch }}-ccache-plugin- | |
- name: Check for GitHub Labels | |
id: seekingTesters | |
if: ${{ github.event_name == 'pull_request' }} | |
run: | | |
if [[ -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')" ]] { | |
print 'found=true' >> $GITHUB_OUTPUT | |
} else { | |
print 'found=false' >> $GITHUB_OUTPUT | |
} | |
- name: Install Apple Developer Certificate | |
if: ${{ github.event_name != 'pull_request' && steps.setup.outputs.haveCodesignIdent == 'true' }} | |
uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 | |
with: | |
keychain-password: ${{ github.run_id }} | |
p12-file-base64: ${{ secrets.MACOS_SIGNING_CERT }} | |
p12-password: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }} | |
- name: Set Signing Identity | |
if: ${{ github.event_name != 'pull_request' && steps.setup.outputs.haveCodesignIdent == 'true' }} | |
run: | | |
print "CODESIGN_IDENT=${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}" >> $GITHUB_ENV | |
print "CODESIGN_IDENT_INSTALLER=${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}" >> $GITHUB_ENV | |
- name: Build Plugin | |
uses: ./plugin/.github/actions/build-plugin | |
with: | |
workingDirectory: ${{ github.workspace }}/plugin | |
target: ${{ matrix.arch }} | |
config: RelWithDebInfo | |
codesign: 'true' | |
codesignIdent: ${{ env.CODESIGN_IDENT }} | |
- name: Package Plugin | |
uses: ./plugin/.github/actions/package-plugin | |
with: | |
workingDirectory: ${{ github.workspace }}/plugin | |
target: ${{ matrix.arch }} | |
config: RelWithDebInfo | |
codesign: ${{ github.event_name != 'pull_request' && steps.setup.outputs.haveCodesignIdent == 'true' }} | |
notarize: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' && steps.setup.outputs.haveNotarizationUser == 'true' }} | |
codesignIdent: ${{ env.CODESIGN_IDENT }} | |
installerIdent: ${{ env.CODESIGN_IDENT_INSTALLER }} | |
codesignUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }} | |
codesignPass: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }} | |
- name: Upload Build Artifact | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: ${{ env.PLUGIN_NAME }}-macos-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }} | |
path: ${{ github.workspace }}/plugin/release/${{ env.PLUGIN_NAME }}-*-macos-${{ matrix.arch }}.pkg | |
windows-build: | |
name: 'Windows Build' | |
runs-on: [windows-latest] | |
strategy: | |
fail-fast: true | |
matrix: | |
target: [x64, x86] | |
include: | |
- target: x64 | |
cmake_build: 'x64' | |
deps_ext: '64' | |
- target: x86 | |
cmake_build: 'Win32' | |
deps_ext: '32' | |
env: | |
QT_VERSION: '6.3.1' | |
CMAKE_GENERATOR: "Visual Studio 17 2022" | |
CMAKE_SYSTEM_VERSION: "10.0.18363.657" | |
WINDOWS_DEPS_VERSION: '2022-08-02' | |
steps: | |
- name: Add msbuild to PATH | |
uses: microsoft/setup-msbuild@v2 | |
- name: Checkout obs | |
uses: actions/checkout@v4.1.1 | |
with: | |
repository: obsproject/obs-studio | |
ref: ${{ env.OBS_VERSION }} | |
submodules: 'recursive' | |
- name: Checkout plugin | |
uses: actions/checkout@v4.1.1 | |
with: | |
path: UI/frontend-plugins/${{ env.PLUGIN_NAME}} | |
- name: Add plugin to obs cmake | |
shell: cmd | |
run: echo add_subdirectory(${{ env.PLUGIN_NAME }}) >> UI/frontend-plugins/CMakeLists.txt | |
- name: Fetch Git Tags | |
run: git fetch --prune --tags --unshallow | |
- name: 'Install prerequisite: QT' | |
run: | | |
curl -kLO https://github.com/obsproject/obs-deps/releases/download/${{ env.WINDOWS_DEPS_VERSION }}/windows-deps-qt6-${{ env.WINDOWS_DEPS_VERSION }}-${{ matrix.target }}.zip -f --retry 5 -C - | |
7z x windows-deps-qt6-${{ env.WINDOWS_DEPS_VERSION }}-${{ matrix.target }}.zip -o"${{ github.workspace }}/cmbuild/deps" | |
- name: 'Install prerequisite: Pre-built dependencies' | |
run: | | |
curl -kLO https://github.com/obsproject/obs-deps/releases/download/${{ env.WINDOWS_DEPS_VERSION }}/windows-deps-${{ env.WINDOWS_DEPS_VERSION }}-${{ matrix.target }}.zip -f --retry 5 -C - | |
7z x windows-deps-${{ env.WINDOWS_DEPS_VERSION }}-${{ matrix.target }}.zip -o"${{ github.workspace }}/cmbuild/deps" | |
- name: Configure | |
run: | | |
mkdir ./package | |
mkdir ./installer | |
mkdir ./installer/media | |
mkdir ./build | |
cmake -S . -B "${{ github.workspace }}/build" -G"${{ env.CMAKE_GENERATOR }}" -DCMAKE_PREFIX_PATH:PATH="${{ github.workspace }}/cmbuild/deps" -A"${{ matrix.cmake_build }}" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=false -DBUILD_VST=false -DBUILD_VIRTUALCAM=false -DBUILD_CAPTIONS=false -DCOMPILE_D3D12_HOOK=false -DENABLE_SCRIPTING=false -DDepsPath="${{ github.workspace }}/cmbuild/deps" -DDepsPath${{ matrix.deps_ext }}="${{ github.workspace }}/cmbuild/deps" -DQTDIR="${{ github.workspace }}/cmbuild/deps/qt6" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE -DENABLE_PLUGINS=FALSE -DDISABLE_PLUGINS=TRUE | |
- name: 'Build' | |
run: msbuild /m /p:Configuration=RelWithDebInfo .\build\obs-studio.sln | |
- name: Package | |
if: success() | |
run: | | |
$env:FILE_NAME="${{ env.PLUGIN_NAME }}-${{ github.sha }}-windows-${{ matrix.target }}" | |
echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV} | |
robocopy .\build\rundir\RelWithDebInfo\obs-plugins\${{ matrix.deps_ext }}bit\ .\package\obs-plugins\${{ matrix.deps_ext }}bit ${{ env.PLUGIN_NAME }}.* /E /XF .gitignore | |
robocopy .\build\rundir\RelWithDebInfo\data\obs-plugins\${{ env.PLUGIN_NAME }}\ .\package\data\obs-plugins\${{ env.PLUGIN_NAME }}\ /E /XF .gitignore | |
copy .\build\UI\frontend-plugins\${{ env.PLUGIN_NAME }}\installer.iss .\installer\installer.iss | |
robocopy .\UI\frontend-plugins\${{ env.PLUGIN_NAME}}\media\ .\installer\media\ /E /XF .gitignore | |
exit 0 | |
- name: Publish zip | |
if: success() | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: '${{ env.FILE_NAME }}' | |
path: package/* | |
- name: Publish Installer Files | |
if: success() && matrix.target == 'x64' | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: 'installer-files' | |
path: installer/* | |
windows-package: | |
name: 'Windows Package' | |
runs-on: [windows-latest] | |
needs: [windows-build] | |
steps: | |
- name: Init | |
if: success() | |
run: | | |
mkdir ./package | |
$env:FILE_DATE=(Get-Date -UFormat "%F") | |
$env:FILE_NAME="${{ env.PLUGIN_NAME }}-${env:FILE_DATE}-${{ github.sha }}-windows" | |
echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV} | |
$env:FILE_NAME_X86="${{ env.PLUGIN_NAME }}-${{ github.sha }}-windows-x86" | |
echo "FILE_NAME_X86=${env:FILE_NAME_X86}" >> ${env:GITHUB_ENV} | |
$env:FILE_NAME_X64="${{ env.PLUGIN_NAME }}-${{ github.sha }}-windows-x64" | |
echo "FILE_NAME_X64=${env:FILE_NAME_X64}" >> ${env:GITHUB_ENV} | |
- name: Retrieve x86 build | |
uses: actions/download-artifact@v4.1.2 | |
with: | |
name: '${{ env.FILE_NAME_X86 }}' | |
path: ./package | |
- name: Retrieve x64 build | |
uses: actions/download-artifact@v4.1.2 | |
with: | |
name: '${{ env.FILE_NAME_X64 }}' | |
path: ./package | |
- name: Retrieve installer files | |
uses: actions/download-artifact@v4.1.2 | |
with: | |
name: 'installer-files' | |
path: . | |
- name: Publish zip | |
if: success() | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: '${{ env.FILE_NAME }}' | |
path: package/* | |
- name: "Package Installer (Prereqs)" | |
run: | | |
curl "-kL" "https://files.jrsoftware.org/is/6/innosetup-6.0.3.exe" "-f" "--retry" "5" "-o" "inno.exe" | |
.\inno.exe /VERYSILENT /SP- /SUPPRESSMSGBOXES /NORESTART | |
- name: "Package Installer (Compile)" | |
run: | | |
& 'C:\Program Files (x86)\Inno Setup 6\ISCC.exe' /Qp ".\installer.iss" | |
- name: Publish installer | |
if: success() | |
uses: actions/upload-artifact@v4.3.1 | |
with: | |
name: '${{ env.FILE_NAME }}-installer' | |
path: package/*.exe | |
- name: Remove temp artifacts | |
uses: geekyeggo/delete-artifact@v4.1.0 | |
with: | |
name: "${{ env.FILE_NAME_X86 }}\n${{ env.FILE_NAME_X64 }}" |