mirror of
https://github.com/royshil/obs-localvocal.git
synced 2026-01-08 03:53:54 -05:00
* Make multiple MacOS variants targeting different Metal versions Different MacOS versions support different maximum Metal versions. As we build on MacOS 14, it's likely that when embedding the Metal shaders into the Metal backend they're being built for Metal 3.1, the maximum supported version on MacOS 14. This may be why users are seeing crashes when trying to use Metal on older versions of MacOS This will also allow users of MacOS 15 and newer to take advantage of improvements from Metal 3.2 * Fix checking incorrect env var for MacOS version
417 lines
17 KiB
YAML
417 lines
17 KiB
YAML
name: Build Project
|
|
on:
|
|
workflow_call:
|
|
outputs:
|
|
pluginName:
|
|
description: 'Project name detected by parsing build spec file'
|
|
value: ${{ jobs.check-event.outputs.pluginName }}
|
|
jobs:
|
|
check-event:
|
|
name: Check GitHub Event Data 🔎
|
|
runs-on: ubuntu-22.04
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
outputs:
|
|
package: ${{ steps.setup.outputs.package }}
|
|
codesign: ${{ steps.setup.outputs.codesign }}
|
|
notarize: ${{ steps.setup.outputs.notarize }}
|
|
config: ${{ steps.setup.outputs.config }}
|
|
commitHash: ${{ steps.setup.outputs.commitHash }}
|
|
pluginName: ${{ steps.setup.outputs.pluginName }}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Check Event Data ☑️
|
|
id: setup
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
run: |
|
|
: Check Event Data ☑️
|
|
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
|
|
case "${GITHUB_EVENT_NAME}" in
|
|
pull_request)
|
|
config_data=('codesign:false' 'notarize:false' 'package:false' 'config:RelWithDebInfo')
|
|
if gh pr view ${{ github.event.number }} --json labels \
|
|
| jq -e -r '.labels[] | select(.name == "Seeking Testers")' > /dev/null; then
|
|
config_data[0]='codesign:true'
|
|
config_data[2]='package:true'
|
|
fi
|
|
;;
|
|
push)
|
|
config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
if [[ ${GITHUB_REF_NAME} =~ [0-9]+.[0-9]+.[0-9]+(-(rc|beta).+)? ]]; then
|
|
config_data[1]='notarize:true'
|
|
config_data[3]='config:Release'
|
|
fi
|
|
;;
|
|
workflow_dispatch)
|
|
config_data=('codesign:true' 'notarize:false' 'package:false' 'config:RelWithDebInfo')
|
|
;;
|
|
schedule)
|
|
config_data=('codesign:true' 'notarize:false' 'package:true' 'config:RelWithDebInfo')
|
|
;;
|
|
*) ;;
|
|
esac
|
|
|
|
for config in "${config_data[@]}"; do
|
|
IFS=':' read -r key value <<< "${config}"
|
|
echo "${key}=${value}" >> $GITHUB_OUTPUT
|
|
done
|
|
echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT
|
|
|
|
plugin_name="$(grep 'name' buildspec.json | sed -E -e 's/^.+"name":[^"]+"(.+)",?$/\1/g')"
|
|
plugin_display_name="$(grep 'displayName' buildspec.json | sed -E -e 's/^.+"displayName":[^"]+"(.+)",?$/\1/g' || echo "")"
|
|
|
|
if [[ "${plugin_display_name}" ]]; then
|
|
echo "pluginName=${plugin_display_name}" >> $GITHUB_OUTPUT
|
|
else
|
|
echo "pluginName=${plugin_name}" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
macos-build:
|
|
name: Build for macOS 🍏
|
|
runs-on: macos-14
|
|
needs: check-event
|
|
strategy:
|
|
matrix:
|
|
architecture: [x86_64, arm64]
|
|
macos_version: [12, 13, 14, 15]
|
|
defaults:
|
|
run:
|
|
shell: zsh --no-rcs --errexit --pipefail {0}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
fetch-depth: 0
|
|
|
|
- name: Set Up Environment 🔧
|
|
id: setup
|
|
run: |
|
|
: Set Up Environment 🔧
|
|
if (( ${+RUNNER_DEBUG} )) setopt XTRACE
|
|
|
|
print '::group::Clean Homebrew Environment'
|
|
local -a to_remove=()
|
|
|
|
if (( #to_remove )) brew uninstall --ignore-dependencies ${to_remove}
|
|
print '::endgroup::'
|
|
|
|
local product_name
|
|
local product_version
|
|
read -r product_name product_version <<< \
|
|
"$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
|
|
|
|
print "pluginName=${product_name}" >> $GITHUB_OUTPUT
|
|
print "pluginVersion=${product_version}" >> $GITHUB_OUTPUT
|
|
|
|
- uses: maxim-lobanov/setup-xcode@v1.6.0
|
|
id: set-xcode-version
|
|
with:
|
|
xcode-version: 16.2
|
|
|
|
- uses: actions/cache@v4
|
|
id: ccache-cache
|
|
with:
|
|
path: ${{ github.workspace }}/.ccache
|
|
key: ${{ runner.os }}-ccache-${{ needs.check-event.outputs.config }}-${{ matrix.architecture }}
|
|
restore-keys: |
|
|
${{ runner.os }}-ccache-${{ matrix.architecture }}-
|
|
|
|
- uses: actions/cache@v4
|
|
id: icu-cache
|
|
with:
|
|
path: |
|
|
${{ github.workspace }}/build_macos/ICU_build-prefix/bin
|
|
${{ github.workspace }}/build_macos/ICU_build-prefix/include
|
|
${{ github.workspace }}/build_macos/ICU_build-prefix/lib
|
|
${{ github.workspace }}/build_macos/ICU_build-prefix/sbin
|
|
${{ github.workspace }}/build_macos/ICU_build-prefix/share
|
|
${{ github.workspace }}/build_macos/ICU_build-prefix/tmp
|
|
key: ${{ runner.os }}-icu-build-${{ needs.check-event.outputs.config }}-${{ matrix.architecture }}
|
|
restore-keys: |
|
|
${{ runner.os }}-icu-build-${{ matrix.architecture }}-
|
|
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
if: matrix.architecture == 'arm64'
|
|
with:
|
|
target: aarch64-apple-darwin
|
|
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
if: matrix.architecture == 'x86_64'
|
|
with:
|
|
target: x86_64-apple-darwin
|
|
|
|
- name: Set Up Codesigning 🔑
|
|
uses: ./.github/actions/setup-macos-codesigning
|
|
if: fromJSON(needs.check-event.outputs.codesign)
|
|
id: codesign
|
|
with:
|
|
codesignIdentity: ${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}
|
|
installerIdentity: ${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}
|
|
codesignCertificate: ${{ secrets.MACOS_SIGNING_CERT }}
|
|
certificatePassword: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }}
|
|
keychainPassword: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }}
|
|
provisioningProfile: ${{ secrets.MACOS_SIGNING_PROVISIONING_PROFILE }}
|
|
notarizationUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
|
notarizationPassword: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
|
|
|
- name: Build Plugin 🧱
|
|
uses: ./.github/actions/build-plugin
|
|
with:
|
|
target: macos-${{ matrix.architecture }}
|
|
config: ${{ needs.check-event.outputs.config }}
|
|
macos_version: ${{ matrix.macos_version }}
|
|
codesign: ${{ fromJSON(needs.check-event.outputs.codesign) }}
|
|
codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
|
|
env:
|
|
MACOS_ARCH: ${{ matrix.architecture }}
|
|
GITHUB_WORKSPACE: ${{ github.workspace }}
|
|
|
|
- name: Package Plugin 📀
|
|
id: package_plugin
|
|
uses: ./.github/actions/package-plugin
|
|
with:
|
|
target: macos-${{ matrix.architecture }}
|
|
config: ${{ needs.check-event.outputs.config }}
|
|
macos_version: ${{ matrix.macos_version }}
|
|
package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
codesign: ${{ fromJSON(needs.check-event.outputs.codesign) && fromJSON(steps.codesign.outputs.haveCodesignIdent) }}
|
|
codesignIdent: ${{ steps.codesign.outputs.codesignIdent }}
|
|
installerIdent: ${{ steps.codesign.outputs.installerIdent }}
|
|
codesignTeam: ${{ steps.codesign.outputs.codesignTeam }}
|
|
notarize: ${{ fromJSON(needs.check-event.outputs.notarize) && fromJSON(steps.codesign.outputs.haveNotarizationUser) }}
|
|
codesignUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
|
|
codesignPass: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
|
|
env:
|
|
MACOS_ARCH: ${{ matrix.architecture }}
|
|
|
|
- name: Upload Notarization Failure Artifacts 📡
|
|
uses: actions/upload-artifact@v4
|
|
if: failure() && steps.package_plugin.outcome == 'failure'
|
|
with:
|
|
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}-${{ needs.check-event.outputs.commitHash }}-notarization-log
|
|
path: ${{ github.workspace }}/notarytool_log_*.json
|
|
|
|
- name: Upload Artifacts 📡
|
|
uses: actions/upload-artifact@v4
|
|
if: steps.package_plugin.outcome == 'success'
|
|
with:
|
|
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}-${{ needs.check-event.outputs.commitHash }}
|
|
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}.*
|
|
|
|
- name: Upload Debug Symbol Artifacts 🪲
|
|
uses: actions/upload-artifact@v4
|
|
if: ${{ needs.check-event.outputs.config == 'Release' }} && ${{ steps.package_plugin.outcome == 'success' }}
|
|
with:
|
|
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}-${{ needs.check-event.outputs.commitHash }}-dSYMs
|
|
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-macos-${{ matrix.architecture }}-dSYMs.*
|
|
|
|
ubuntu-build:
|
|
name: Build for Ubuntu 🐧
|
|
runs-on: ubuntu-22.04
|
|
needs: check-event
|
|
strategy:
|
|
matrix:
|
|
acceleration: [generic, nvidia, amd]
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
env:
|
|
CI: 1
|
|
steps:
|
|
- name: Free Disk Space (Ubuntu)
|
|
if: ${{ matrix.acceleration == 'amd' || matrix.acceleration == 'nvidia' }}
|
|
uses: jlumbroso/free-disk-space@main
|
|
with:
|
|
# this might remove tools that are actually needed,
|
|
# if set to "true" but frees about 6 GB
|
|
tool-cache: false
|
|
# Needs to be false to prevent running out of memory
|
|
swap-storage: false
|
|
# large-packages takes a long time so don't remove them unless we need to
|
|
large-packages: false
|
|
|
|
android: true
|
|
dotnet: true
|
|
haskell: true
|
|
docker-images: true
|
|
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
fetch-depth: 0
|
|
|
|
- name: "Setup additional apt repos, keys and pre-requisites"
|
|
run: |
|
|
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
|
|
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-jammy.list http://packages.lunarg.com/vulkan/lunarg-vulkan-jammy.list
|
|
sudo apt update
|
|
|
|
- uses: awalsh128/cache-apt-pkgs-action@v1.6.0
|
|
with:
|
|
packages: |
|
|
ccache
|
|
libcurl4-openssl-dev
|
|
libicu-dev
|
|
libgles2-mesa-dev
|
|
libopenblas0
|
|
libopenblas0-openmp
|
|
libopenblas0-pthread
|
|
libopenblas-dev
|
|
libopenblas-openmp-dev
|
|
libqt6svg6-dev
|
|
libsimde-dev
|
|
nvidia-opencl-dev
|
|
obs-studio
|
|
ocl-icd-opencl-dev
|
|
pkg-config
|
|
python3-setuptools
|
|
python3-wheel
|
|
qt6-base-dev
|
|
qt6-base-private-dev
|
|
vulkan-sdk
|
|
add-repository: ppa:obsproject/obs-studio
|
|
version: 1.0
|
|
execute_install_scripts: true
|
|
|
|
- name: Set Up Environment 🔧
|
|
id: setup
|
|
run: |
|
|
: Set Up Environment 🔧
|
|
if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
|
|
|
|
read -r product_name product_version <<< \
|
|
"$(jq -r '. | {name, version} | join(" ")' buildspec.json)"
|
|
|
|
echo "pluginName=${product_name}" >> $GITHUB_OUTPUT
|
|
echo "pluginVersion=${product_version}" >> $GITHUB_OUTPUT
|
|
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
|
|
# CUDA toolkit needed for linking against so it can be found when looking up package dependencies
|
|
- name: "Install CUDA toolkit 12.8"
|
|
if: ${{ matrix.acceleration == 'nvidia' }}
|
|
run: |
|
|
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
|
|
sudo dpkg -i cuda-keyring_1.1-1_all.deb
|
|
sudo apt update
|
|
sudo apt -y install cuda-12-8
|
|
export PATH=/usr/local/cuda-12.8/bin${PATH:+:${PATH}}
|
|
export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
|
|
|
|
# hip SDK needed for linking against so it can be found when looking up package dependencies
|
|
- name: "Install AMD hip SDK v6.4.2"
|
|
if: ${{ matrix.acceleration == 'amd' }}
|
|
run: |
|
|
wget https://repo.radeon.com/amdgpu-install/6.4.2/ubuntu/jammy/amdgpu-install_6.4.60402-1_all.deb
|
|
sudo apt install ./amdgpu-install_6.4.60402-1_all.deb
|
|
sudo apt update
|
|
sudo apt install python3-setuptools python3-wheel
|
|
sudo usermod -a -G render,video $LOGNAME # Add the current user to the render and video groups
|
|
sudo apt install rocm
|
|
sudo apt update && sudo apt install hipblas
|
|
|
|
- uses: actions/cache@v4
|
|
id: ccache-cache
|
|
with:
|
|
path: ${{ github.workspace }}/.ccache
|
|
key: ${{ runner.os }}-ccache-x86_64-${{ needs.check-event.outputs.config }}
|
|
restore-keys: |
|
|
${{ runner.os }}-ccache-x86_64-
|
|
|
|
- name: Set up Homebrew 🍺
|
|
uses: Homebrew/actions/setup-homebrew@master
|
|
|
|
- name: Build Plugin 🧱
|
|
uses: ./.github/actions/build-plugin
|
|
with:
|
|
target: x86_64
|
|
config: ${{ needs.check-event.outputs.config }}
|
|
acceleration: ${{ matrix.acceleration }}
|
|
|
|
- name: Package Plugin 📀
|
|
uses: ./.github/actions/package-plugin
|
|
with:
|
|
package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
target: x86_64
|
|
config: ${{ needs.check-event.outputs.config }}
|
|
acceleration: ${{ matrix.acceleration }}
|
|
|
|
- name: Upload Source Tarball 🗜️
|
|
uses: actions/upload-artifact@v4
|
|
if: ${{ matrix.acceleration == 'generic' }}
|
|
with:
|
|
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-sources-${{ needs.check-event.outputs.commitHash }}
|
|
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-source.*
|
|
|
|
- name: Upload Artifacts 📡
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-ubuntu-22.04-x86_64-${{ matrix.acceleration }}-${{ needs.check-event.outputs.commitHash }}
|
|
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64-linux-gnu-${{ matrix.acceleration }}*.*
|
|
|
|
- name: Upload debug symbol artifacts 🪲
|
|
uses: actions/upload-artifact@v4
|
|
if: ${{ fromJSON(needs.check-event.outputs.package) && (matrix.acceleration != 'amd') }}
|
|
with:
|
|
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-ubuntu-22.04-x86_64-${{ matrix.acceleration }}-${{ needs.check-event.outputs.commitHash }}-dbgsym
|
|
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-x86_64-linux-gnu-${{ matrix.acceleration }}*-dbgsym.ddeb
|
|
|
|
windows-build:
|
|
name: Build for Windows 🪟
|
|
runs-on: windows-2022
|
|
needs: check-event
|
|
strategy:
|
|
matrix:
|
|
acceleration: [generic, nvidia, amd]
|
|
defaults:
|
|
run:
|
|
shell: pwsh
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
fetch-depth: 0
|
|
|
|
- name: Set Up Environment 🔧
|
|
id: setup
|
|
run: |
|
|
# Set Up Environment 🔧
|
|
if ( $Env:RUNNER_DEBUG -ne $null ) {
|
|
Set-PSDebug -Trace 1
|
|
}
|
|
|
|
$BuildSpec = Get-Content -Path buildspec.json -Raw | ConvertFrom-Json
|
|
$ProductName = $BuildSpec.name
|
|
$ProductVersion = $BuildSpec.version
|
|
|
|
"pluginName=${ProductName}" >> $env:GITHUB_OUTPUT
|
|
"pluginVersion=${ProductVersion}" >> $env:GITHUB_OUTPUT
|
|
|
|
- uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
|
|
- name: Build Plugin 🧱
|
|
uses: ./.github/actions/build-plugin
|
|
with:
|
|
target: x64
|
|
config: ${{ needs.check-event.outputs.config }}
|
|
acceleration: ${{ matrix.acceleration }}
|
|
|
|
- name: Package Plugin 📀
|
|
uses: ./.github/actions/package-plugin
|
|
with:
|
|
target: x64
|
|
config: ${{ needs.check-event.outputs.config }}
|
|
package: ${{ fromJSON(needs.check-event.outputs.package) }}
|
|
acceleration: ${{ matrix.acceleration }}
|
|
|
|
- name: Upload Artifacts 📡
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64-${{ matrix.acceleration }}-${{ needs.check-event.outputs.commitHash }}
|
|
path: ${{ github.workspace }}/release/${{ steps.setup.outputs.pluginName }}-${{ steps.setup.outputs.pluginVersion }}-windows-x64*.*
|