Test matrix #192
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-studio-webrtc' | |
on: | |
push: | |
branches: | |
- "**" | |
tags: | |
- "m**" | |
pull_request: | |
paths-ignore: | |
- 'LICENSE' | |
- 'README.md' | |
- 'RELEASE_NOTES.md' | |
workflow_dispatch: | |
env: | |
CACHE_REVISION: '006' | |
CEF_BUILD_VERSION_MAC: '5060' | |
CEF_HASH_MAC_X86_64: '88b950aa0bfc001061c35e7f1f3fefba856a6afb35e38b2b7b42ddd8dd239182' | |
CEF_HASH_MAC_ARM64: '98679b92eea6ea9959ac5aa54f46ca60681d8a86c768c35f496dbdd409bf0642' | |
CEF_BUILD_VERSION_LINUX: '5060' | |
CEF_BUILD_VERSION_WIN: '5060' | |
QT_VERSION_MAC: '6.3.1' | |
QT_HASH_MAC_X86_64: 'a83f72a11023b03b6cb2dc365f0a66ad9df31163bbb4fe2df32d601856a9fad3' | |
QT_HASH_MAC_ARM64: '2f30af90c049670a5660656adbb440668aa1b0567f75a5f29e1def9108928403' | |
QT_HASH_MAC_UNIVERSAL: '252e6684f43ab9c6f262c73af739e2296ce391b998da2c4ee04c254aaa07db18' | |
QT_VERSION_WIN: '6.3.1' | |
DEPS_VERSION_MAC: '2022-08-02' | |
DEPS_HASH_MAC_X86_64: '7637e52305e6fc53014b5aabd583f1a4490b1d97450420e977cae9a336a29525' | |
DEPS_HASH_MAC_ARM64: '755e0fa69b17a3ae444e1befa9d91d77e3cafe628fbd1c6333686091826595cd' | |
DEPS_VERSION_WIN: '2022-08-02' | |
VLC_VERSION_MAC: '3.0.8' | |
VLC_HASH_MAC: 'e0149ef4a20a19b9ecd87309c2d27787ee3f47dfd47c6639644bc1f6fd95bdf6' | |
VLC_VERSION_WIN: '3.0.0-git' | |
TWITCH_CLIENTID: ${{ secrets.TWITCH_CLIENT_ID }} | |
TWITCH_HASH: ${{ secrets.TWITCH_HASH }} | |
RESTREAM_CLIENTID: ${{ secrets.RESTREAM_CLIENTID }} | |
RESTREAM_HASH: ${{ secrets.RESTREAM_HASH }} | |
YOUTUBE_CLIENTID: ${{ secrets.YOUTUBE_CLIENTID }} | |
YOUTUBE_CLIENTID_HASH: ${{ secrets.YOUTUBE_CLIENTID_HASH }} | |
YOUTUBE_SECRET: ${{ secrets.YOUTUBE_SECRET }} | |
YOUTUBE_SECRET_HASH: ${{ secrets.YOUTUBE_SECRET_HASH }} | |
OBS_VERSION: "1.5.1-28.1.2-m112" | |
LIBWEBRTC_RELEASE_TAG: "m112-release" | |
LIBWEBRTC_VERSION: "112.0" | |
VENDOR: "Millicast" | |
USE_RELEASE_NOTES_FROM_FILE: 'false' | |
jobs: | |
preprocessing: | |
runs-on: ubuntu-latest | |
outputs: | |
# actually cheating so that the matrix uses the expected webrtc version | |
LIBWEBRTC_VERSION: ${{ env.LIBWEBRTC_VERSION }} | |
steps: | |
- name: 'Info' | |
run: | | |
echo pipelines will use ${{ env.LIBWEBRTC_VERSION }} | |
build: | |
needs: [preprocessing] | |
if: success() | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: [ubuntu20-ndi, ubuntu20-no-ndi, ubuntu22-ndi, ubuntu22-no-ndi, macos-ndi, macos-no-ndi, macos-arm64-ndi, macos-arm64-no-ndi, windows-ndi, windows-no-ndi] | |
include: | |
- mode: ubuntu20-no-ndi | |
os: ubuntu-20.04 | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-.*64-Release-.*.sh.*" | |
- mode: ubuntu20-ndi | |
os: ubuntu-20.04 | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-.*64-Release-.*.sh.*" | |
- mode: ubuntu22-no-ndi | |
os: ubuntu-22.04 | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-.*64-Release-.*.sh.*" | |
- mode: ubuntu22-ndi | |
os: ubuntu-22.04 | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-.*64-Release-.*.sh.*" | |
- mode: macos-no-ndi | |
os: macos-12 | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-x64-Release-H264-OpenSSL_1_1_1.*.dmg.*" | |
- mode: macos-ndi | |
os: macos-12 | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-x64-Release-H264-OpenSSL_1_1_1.*.dmg.*" | |
- mode: macos-arm64-no-ndi | |
os: ['self-hosted', 'macOS', 'ARM64', 'native'] | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-arm64-Release-H264-OpenSSL_1_1_1.*.dmg.*" | |
- mode: macos-arm64-ndi | |
os: ['self-hosted', 'macOS', 'ARM64', 'native'] | |
shell: bash | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-arm64-Release-H264-OpenSSL_1_1_1.*.dmg.*" | |
- mode: windows-no-ndi | |
os: windows-2022 | |
shell: powershell | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-x64-Mt-Release-.*.exe.*" | |
- mode: windows-ndi | |
os: windows-2022 | |
shell: powershell | |
libwebrtc_asset_pattern: "^libWebRTC-${{ needs.preprocessing.outputs.LIBWEBRTC_VERSION }}-x64-Mt-Release-.*.exe.*" | |
steps: | |
- name: 'Print env' | |
run: echo ${LIBWEBRTC_VERSION} | |
- name: 'Checkout the code' | |
uses: actions/checkout@v4 | |
with: | |
submodules: 'recursive' | |
fetch-depth: 0 | |
- name: 'Generate access token for MacOS/Linux' | |
if: ${{ !startsWith(matrix.mode, 'windows') }} | |
id: accessTokenUnix | |
uses: dolby-io-internal/gh-access@macos-linux | |
with: | |
gh_app_priv_key: ${{ secrets.GH_APP_RELEASECREATOR_PRIV_KEY }} | |
gh_app_id: ${{ secrets.GH_APP_ID }} | |
gh_app_installation_id: ${{ secrets.GH_APP_INSTALLATION_ID }} | |
- name: 'Generate access token for Windows' | |
if: ${{ startsWith(matrix.mode, 'windows') }} | |
id: accessTokenWindows | |
uses: dolby-io-internal/[email protected] | |
with: | |
gh_app_priv_key: ${{ secrets.GH_APP_RELEASECREATOR_PRIV_KEY }} | |
gh_app_id: ${{ secrets.GH_APP_ID }} | |
gh_app_installation_id: ${{ secrets.GH_APP_INSTALLATION_ID }} | |
- name: 'Download libWebRTC for MacOS/Linux' | |
if: ${{ !startsWith(matrix.mode, 'windows') }} | |
uses: ./.github/actions/download_libwebrtc | |
with: | |
access_token: ${{ steps.accessTokenUnix.outputs.token }} | |
release_tag: ${{ env.LIBWEBRTC_RELEASE_TAG }} | |
asset_pattern: ${{ matrix.libwebrtc_asset_pattern }} | |
- name: 'Download libWebRTC for Windows' | |
if: ${{ startsWith(matrix.mode, 'windows') }} | |
uses: ./.github/actions/download_libwebrtc/win | |
with: | |
access_token: ${{ steps.accessTokenWindows.outputs.token }} | |
release_tag: ${{ env.LIBWEBRTC_RELEASE_TAG }} | |
asset_pattern: ${{ matrix.libwebrtc_asset_pattern }} | |
# macos_build_x86_64: | |
# name: 'MacOS-x86_64' | |
# runs-on: [macos-12] | |
# env: | |
# MACOSX_DEPLOYMENT_TARGET_X86_64: '10.15' | |
# SPARKLE_VERSION: '1.26.0' | |
# SPARKLE_HASH: '8312cbf7528297a49f1b97692c33cb8d33254c396dc51be394e9484e4b6833a0' | |
# BLOCKED_FORMULAS: 'speexdsp curl php composer' | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# TARGET_ARCH: 'x86_64' | |
# defaults: | |
# run: | |
# shell: bash | |
# steps: | |
# - name: 'Checkout' | |
# uses: actions/checkout@v4 | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# - name: 'Generate access token' | |
# id: accessToken | |
# uses: dolby-io-internal/[email protected] | |
# with: | |
# gh_app_priv_key: ${{ secrets.GH_APP_RELEASECREATOR_PRIV_KEY }} | |
# gh_app_id: ${{ secrets.GH_APP_ID }} | |
# gh_app_installation_id: ${{ secrets.GH_APP_INSTALLATION_ID }} | |
# - name: 'Download libWebRTC' | |
# uses: ./.github/actions/download_libwebrtc | |
# with: | |
# access_token: ${{ steps.accessToken.outputs.token }} | |
# release_tag: ${{ env.LIBWEBRTC_RELEASE_TAG }} | |
# asset_pattern: "^libWebRTC-${{ env.LIBWEBRTC_VERSION }}-x64-Release-H264-OpenSSL_1_1_1.*.dmg.*" | |
# | |
# - name: 'Setup additional build environment variables' | |
# id: setup | |
# run: | | |
# echo "CACHE_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV | |
# | |
# REMOVE_FORMULAS="" | |
# for FORMULA in ${{ env.BLOCKED_FORMULAS }}; do | |
# if [ -d "/usr/local/opt/${FORMULA}" ]; then | |
# REMOVE_FORMULAS="${REMOVE_FORMULAS}${FORMULA} " | |
# fi | |
# done | |
# | |
# if [ -n "${REMOVE_FORMULAS}" ]; then | |
# brew uninstall ${REMOVE_FORMULAS} | |
# fi | |
# | |
# echo "commitHash=$(git rev-parse --short=9 HEAD)" >> $GITHUB_OUTPUT | |
# | |
# if test -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')"; then | |
# echo "SEEKING_TESTERS=1" >> $GITHUB_ENV | |
# else | |
# echo "SEEKING_TESTERS=0" >> $GITHUB_ENV | |
# fi | |
# | |
# echo "DEPS_BUILD_DIR_=$(dirname ${{ github.workspace }})/obs-build-dependencies_${{ env.TARGET_ARCH }}" >> $GITHUB_ENV | |
# | |
# - name: 'Restore Chromium Embedded Framework from cache' | |
# id: cef-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'cef-cache' | |
# with: | |
# path: ${{ env.DEPS_BUILD_DIR_ }}/cef_binary_${{ env.CEF_BUILD_VERSION_MAC }}_macos_${{ env.TARGET_ARCH}} | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_BUILD_VERSION_MAC }}-${{ env.TARGET_ARCH }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Restore VLC dependency from cache' | |
# id: vlc-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'vlc-cache' | |
# with: | |
# path: ${{ env.DEPS_BUILD_DIR_ }}/vlc-${{ env.VLC_VERSION_MAC }} | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.VLC_VERSION_MAC }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Restore Sparkle dependency from cache' | |
# id: sparkle-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'sparkle-cache' | |
# with: | |
# path: ${{ env.DEPS_BUILD_DIR_ }}/obs-deps/lib/Sparkle.framework | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.SPARKLE_VERSION }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Install dependencies' | |
# env: | |
# RESTORED_VLC: ${{ steps.vlc-cache.outputs.cache-hit }} | |
# RESTORED_SPARKLE: ${{ steps.sparkle-cache.outputs.cache-hit }} | |
# RESTORED_CEF: ${{ steps.cef-cache.outputs.cache-hit }} | |
# DEPS_BUILD_DIR: ${{ env.DEPS_BUILD_DIR_ }} | |
# run: CI/macos/01_install_dependencies.sh --architecture ${{ env.TARGET_ARCH }} | |
# | |
# - name: 'Setup plugins' | |
# run: | | |
# git stash | |
# rm -rf ${{ github.workspace }}/plugins/obs-ndi | |
# rm -rf ${{ github.workspace }}/plugins/obs-browser | |
# git submodule update --init --recursive | |
# | |
# - name: 'Install MacOS cert and create keychain' | |
# run: | | |
# echo -n ${MACOS_SIGNING_CERT} | base64 --decode -o ${CERTIFACTE_PATH} | |
# security create-keychain -p "${KEYCHAIN_PASSWORD}" ${KEYCHAIN_PATH} | |
# security set-keychain-settings -lut 3600 $KEYCHAIN_PATH | |
# security unlock-keychain -p "${KEYCHAIN_PASSWORD}" ${KEYCHAIN_PATH} | |
# security import ${CERTIFACTE_PATH} -P ${MACOS_SIGNING_CERT_PASSWORD} -A -t cert -f pkcs12 -k ${KEYCHAIN_PATH} | |
# security list-keychain -d user -s ${KEYCHAIN_PATH} | |
# | |
# env: | |
# MACOS_SIGNING_CERT: ${{ secrets.MACOS_SIGNING_CERT }} | |
# MACOS_SIGNING_CERT_PASSWORD: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }} | |
# KEYCHAIN_PASSWORD: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }} | |
# KEYCHAIN_PATH: ${{ github.workspace }}/app-signing.keychain-db | |
# CERTIFACTE_PATH: ${{ github.workspace }}/app-signing-cert.p12 | |
# | |
# # Geneate OBS without obs-ndi plugin | |
# - name: 'Build OBS - no NDI' | |
# run: CI/macos/02_build_obs.sh --codesign --architecture ${{ env.TARGET_ARCH }} --vendor ${{ env.VENDOR }} | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Create build artifact' | |
# run: | | |
# CI/macos/03_package_obs.sh --codesign --notarize --architecture ${{ env.TARGET_ARCH }} --vendor ${{ env.VENDOR }} | |
# ARTIFACT_NAME=$(basename $(find build/. -name "obs-webrtc*.dmg")) | |
# echo "FILE_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV | |
# echo "ARTIFACT READY: ${ARTIFACT_NAME}" | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Upload build Artifact' | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-macos-${{ env.TARGET_ARCH }}-${{ steps.setup.outputs.commitHash }}' | |
# path: '${{ github.workspace }}/build/${{ env.FILE_NAME }}' | |
# | |
# # Geneate OBS with obs-ndi plugin | |
# - name: 'Build OBS - with NDI' | |
# run: CI/macos/02_build_obs.sh --codesign --architecture ${{ env.TARGET_ARCH }} --ndi | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Create build artifact' | |
# run: | | |
# CI/macos/03_package_obs.sh --codesign --notarize --architecture ${{ env.TARGET_ARCH }} --ndi | |
# ARTIFACT_NAME=$(basename $(find build/. -name "obs-webrtc-ndi*.dmg")) | |
# echo "FILE_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV | |
# echo "ARTIFACT READY: ${ARTIFACT_NAME}" | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Upload build Artifact' | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-macos-${{ env.TARGET_ARCH }}-${{ steps.setup.outputs.commitHash }}-ndi' | |
# path: '${{ github.workspace }}/build/${{ env.FILE_NAME }}' | |
# | |
# macos_build_arm64: | |
# name: 'MacOS-arm64' | |
# runs-on: ['self-hosted', 'macOS', 'ARM64'] | |
# env: | |
# MACOSX_DEPLOYMENT_TARGET_ARM64: '11.0' | |
# SPARKLE_VERSION: '1.26.0' | |
# SPARKLE_HASH: '8312cbf7528297a49f1b97692c33cb8d33254c396dc51be394e9484e4b6833a0' | |
# BLOCKED_FORMULAS: 'speexdsp curl php composer' | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# TARGET_ARCH: 'arm64' | |
# defaults: | |
# run: | |
# shell: bash | |
# steps: | |
# - name: 'Checkout' | |
# uses: actions/checkout@v4 | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# - name: 'Generate access token' | |
# id: accessToken | |
# uses: dolby-io-internal/[email protected] | |
# with: | |
# gh_app_priv_key: ${{ secrets.GH_APP_RELEASECREATOR_PRIV_KEY }} | |
# gh_app_id: ${{ secrets.GH_APP_ID }} | |
# gh_app_installation_id: ${{ secrets.GH_APP_INSTALLATION_ID }} | |
# - name: 'Download libWebRTC' | |
# uses: ./.github/actions/download_libwebrtc | |
# with: | |
# access_token: ${{ steps.accessToken.outputs.token }} | |
# release_tag: ${{ env.LIBWEBRTC_RELEASE_TAG }} | |
# asset_pattern: "^libWebRTC-${{ env.LIBWEBRTC_VERSION }}-arm64-Release-H264-OpenSSL_1_1_1.*.dmg.*" | |
# | |
# - name: 'Setup additional build environment variables' | |
# id: setup | |
# run: | | |
# echo "CACHE_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV | |
# | |
# REMOVE_FORMULAS="" | |
# for FORMULA in ${{ env.BLOCKED_FORMULAS }}; do | |
# if [ -d "/usr/local/opt/${FORMULA}" ]; then | |
# REMOVE_FORMULAS="${REMOVE_FORMULAS}${FORMULA} " | |
# fi | |
# done | |
# | |
# if [ -n "${REMOVE_FORMULAS}" ]; then | |
# brew uninstall ${REMOVE_FORMULAS} | |
# fi | |
# | |
# echo "commitHash=$(git rev-parse --short=9 HEAD)" >> $GITHUB_OUTPUT | |
# | |
# if test -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')"; then | |
# echo "SEEKING_TESTERS=1" >> $GITHUB_ENV | |
# else | |
# echo "SEEKING_TESTERS=0" >> $GITHUB_ENV | |
# fi | |
# | |
# echo "DEPS_BUILD_DIR_=$(dirname ${{ github.workspace }})/obs-build-dependencies_${{ env.TARGET_ARCH }}" >> $GITHUB_ENV | |
# | |
# - name: 'Restore Chromium Embedded Framework from cache' | |
# id: cef-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'cef-cache' | |
# with: | |
# path: ${{ env.DEPS_BUILD_DIR_ }}/cef_binary_${{ env.CEF_BUILD_VERSION_MAC }}_macos_${{ env.TARGET_ARCH}} | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_BUILD_VERSION_MAC }}-${{ env.TARGET_ARCH }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Restore VLC dependency from cache' | |
# id: vlc-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'vlc-cache' | |
# with: | |
# path: ${{ env.DEPS_BUILD_DIR_ }}/vlc-${{ env.VLC_VERSION_MAC }} | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.VLC_VERSION_MAC }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Restore Sparkle dependency from cache' | |
# id: sparkle-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'sparkle-cache' | |
# with: | |
# path: ${{ env.DEPS_BUILD_DIR_ }}/obs-deps/lib/Sparkle.framework | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.SPARKLE_VERSION }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Install dependencies' | |
# env: | |
# RESTORED_VLC: ${{ steps.vlc-cache.outputs.cache-hit }} | |
# RESTORED_SPARKLE: ${{ steps.sparkle-cache.outputs.cache-hit }} | |
# RESTORED_CEF: ${{ steps.cef-cache.outputs.cache-hit }} | |
# DEPS_BUILD_DIR: ${{ env.DEPS_BUILD_DIR_ }} | |
# run: CI/macos/01_install_dependencies.sh --architecture ${{ env.TARGET_ARCH }} | |
# | |
# - name: 'Setup plugins' | |
# run: | | |
# git stash | |
# rm -rf ${{ github.workspace }}/plugins/obs-ndi | |
# rm -rf ${{ github.workspace }}/plugins/obs-browser | |
# git submodule update --init --recursive | |
# | |
# - name: 'Unlock keychain' | |
# run: | | |
# security -v unlock-keychain -p ${MACOS_KEYCHAIN_PASSWORD} ${MACOS_KEYCHAIN_PATH} && echo "Keychain is unlocked" || exit 1 | |
# env: | |
# MACOS_KEYCHAIN_PASSWORD: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }} | |
# MACOS_KEYCHAIN_PATH: /Users/dolbyvoice/Library/Keychains/cosmosoftware.keychain-db | |
# | |
# # Geneate OBS without obs-ndi plugin | |
# - name: 'Build OBS - no NDI' | |
# run: CI/macos/02_build_obs.sh --codesign --architecture ${{ env.TARGET_ARCH }} | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Create build artifact' | |
# run: | | |
# CI/macos/03_package_obs.sh --codesign --notarize --architecture ${{ env.TARGET_ARCH }} | |
# ARTIFACT_NAME=$(basename $(find build/. -name "obs-webrtc*.dmg")) | |
# echo "FILE_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV | |
# echo "ARTIFACT READY: ${ARTIFACT_NAME}" | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Upload build Artifact' | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-macos-${{ env.TARGET_ARCH }}-${{ steps.setup.outputs.commitHash }}' | |
# path: '${{ github.workspace }}/build/${{ env.FILE_NAME }}' | |
# | |
# # Geneate OBS with obs-ndi plugin | |
# - name: 'Build OBS - with NDI' | |
# run: CI/macos/02_build_obs.sh --codesign --architecture ${{ env.TARGET_ARCH }} --ndi | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Create build artifact' | |
# run: | | |
# CI/macos/03_package_obs.sh --codesign --notarize --architecture ${{ env.TARGET_ARCH }} --ndi | |
# ARTIFACT_NAME=$(basename $(find build/. -name "obs-webrtc-ndi*.dmg")) | |
# echo "FILE_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV | |
# echo "ARTIFACT READY: ${ARTIFACT_NAME}" | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.CODESIGN_IDENT }} | |
# CODESIGN_TEAM_ID: ${{ secrets.CODESIGN_TEAM_ID }} | |
# CODESIGN_IDENT_USER: ${{ secrets.CODESIGN_IDENT_USER }} | |
# NOTARIZE_APP_SPECIFIC_PASSWORD: ${{ secrets.NOTARIZE_APP_SPECIFIC_PASSWORD }} | |
# | |
# - name: 'Upload build Artifact' | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-macos-${{ env.TARGET_ARCH }}-${{ steps.setup.outputs.commitHash }}-ndi' | |
# path: '${{ github.workspace }}/build/${{ env.FILE_NAME }}' | |
# linux_build: | |
# name: 'Linux' | |
# strategy: | |
# fail-fast: false | |
# matrix: | |
# ubuntu: ['ubuntu-20.04', 'ubuntu-22.04'] | |
# ndi: ['no_ndi', 'ndi'] | |
# runs-on: ${{ matrix.ubuntu }} | |
# defaults: | |
# run: | |
# shell: bash | |
# steps: | |
# - name: 'Checkout' | |
# uses: actions/checkout@v4 | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# - name: 'Install python dependencies' | |
# run: python3 -m pip install pyopenssl --upgrade | |
# - name: 'Generate access token' | |
# id: accessToken | |
# uses: dolby-io-internal/[email protected] | |
# with: | |
# gh_app_priv_key: ${{ secrets.GH_APP_RELEASECREATOR_PRIV_KEY }} | |
# gh_app_id: ${{ secrets.GH_APP_ID }} | |
# gh_app_installation_id: ${{ secrets.GH_APP_INSTALLATION_ID }} | |
# - name: 'Download libWebRTC' | |
# uses: ./.github/actions/download_libwebrtc | |
# with: | |
# access_token: ${{ steps.accessToken.outputs.token }} | |
# release_tag: ${{ env.LIBWEBRTC_RELEASE_TAG }} | |
# asset_pattern: "^libWebRTC-${{ env.LIBWEBRTC_VERSION }}-.*64-Release-.*.sh.*" | |
# | |
# - name: 'Setup additional build environment variables' | |
# id: setup | |
# run: | | |
# echo "CACHE_DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV | |
# echo "commitHash=$(git rev-parse --short=9 HEAD)" >> $GITHUB_OUTPUT | |
# echo "DEPS_BUILD_DIR_=$(dirname ${{ github.workspace }})/obs-build-dependencies_${{ env.TARGET_ARCH }}" >> $GITHUB_ENV | |
# | |
# - name: 'Restore Chromium Embedded Framework from cache' | |
# id: cef-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'cef-cache' | |
# with: | |
# path: ${{ github.workspace }}/obs-build-dependencies/cef_binary_${{ env.CEF_BUILD_VERSION_LINUX }}_linux64 | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_BUILD_VERSION_LINUX }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Install dependencies' | |
# env: | |
# RESTORED_CEF: ${{ steps.cef-cache.outputs.cache-hit }} | |
# run: | | |
# git submodule update --init --recursive | |
# CI/linux/01_install_dependencies.sh --disable-pipewire | |
# | |
# - name: 'Setup plugins' | |
# run: | | |
# set -e | |
# git stash | |
# rm -rf ${{ github.workspace }}/plugins/obs-ndi | |
# rm -rf ${{ github.workspace }}/plugins/obs-browser | |
# git submodule update --init --recursive | |
# | |
# - name: 'Build OBS with ${{ matrix.ndi }}' | |
# run: | | |
# if [[ ${IS_NDI} == 'no_ndi' ]]; then | |
# ./CI/linux/02_build_obs.sh --disable-pipewire --vendor ${{ env.VENDOR }} | |
# else | |
# pushd plugins/obs-ndi | |
# mkdir BUILD | |
# cd BUILD | |
# cmake .. -DCMAKE_BUILD_TYPE=RelWithDebInfo -DLINUX_PORTABLE=OFF -DUBUNTU_VERSION=${UBUNTU_VERSION} | |
# make -j4 | |
# cpack | |
# cd ../release | |
# mv *.deb ../../../package_${{ vendor }} | |
# popd | |
# cd build | |
# rm CMakeCache.txt | |
# cd .. | |
# ./CI/linux/02_build_obs.sh --disable-pipewire --vendor ${{ env.VENDOR }} --ndi | |
# fi | |
# env: | |
# IS_NDI: ${{ matrix.ndi }} | |
# UBUNTU_VERSION: ${{ matrix.ubuntu }} | |
# | |
# - name: 'Create build artifact' | |
# if: ${{ success() && github.event_name != 'pull_request' }} | |
# run: | | |
# if [[ ${IS_NDI} == 'no_ndi' ]];then | |
# ./CI/linux/03_package_obs.sh --vendor ${{ env.VENDOR }} | |
# else | |
# ./CI/linux/03_package_obs.sh --vendor ${{ env.VENDOR }} --ndi | |
# fi | |
# ARTIFACT_NAME=$(basename $(find build/. -name "obs-webrtc-*.deb" | sort -rn | head -1)) | |
# echo "FILE_NAME=${ARTIFACT_NAME}" >> $GITHUB_ENV | |
# env: | |
# UBUNTU_VERSION: $${ matrix.ubuntu }} | |
# IS_NDI: ${{ matrix.ndi }} | |
# | |
# - name: 'Upload build Artifact' | |
# if: ${{ success() && github.event_name != 'pull_request' }} | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-${{ matrix.ubuntu }}-${{ steps.setup.outputs.commitHash }}-${{ matrix.ndi }}' | |
# path: '${{ github.workspace }}/build/${{ env.FILE_NAME }}' | |
# windows_build: | |
# name: 'Windows_x64' | |
# runs-on: [windows-2022] | |
# env: | |
# CMAKE_GENERATOR: 'Visual Studio 17 2022' | |
# CMAKE_SYSTEM_VERSION: '10.0.18363.657' | |
# VIRTUALCAM-GUID: 'A3FCE0F5-3493-419F-958A-ABA1250EC20B' | |
# TARGET_ARCH: 'x64' | |
# steps: | |
# - name: 'Checkout' | |
# uses: actions/checkout@v4 | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# - name: 'Generate access token' | |
# id: accessToken | |
# uses: dolby-io-internal/[email protected] | |
# with: | |
# gh_app_priv_key: ${{ secrets.GH_APP_RELEASECREATOR_PRIV_KEY }} | |
# gh_app_id: ${{ secrets.GH_APP_ID }} | |
# gh_app_installation_id: ${{ secrets.GH_APP_INSTALLATION_ID }} | |
# - name: 'Download libWebRTC' | |
# uses: ./.github/actions/download_libwebrtc/win | |
# with: | |
# access_token: ${{ steps.accessToken.outputs.token }} | |
# release_tag: ${{ env.LIBWEBRTC_RELEASE_TAG }} | |
# asset_pattern: "^libWebRTC-${{ env.LIBWEBRTC_VERSION }}-x64-Mt-Release-.*.exe.*" | |
# | |
# - name: 'Add msbuild to PATH' | |
# uses: microsoft/[email protected] | |
# - name: 'Setup additional build environment variables' | |
# id: setup | |
# run: | | |
# $LabelFound = try { (Invoke-RestMethod -Authentication 'Bearer' -Token (ConvertTo-SecureString '${{ secrets.GITHUB_TOKEN }}' -AsPlainText) -Uri "${{ github.event.pull_request.url }}" -UseBasicParsing).labels.name.contains("Seeking Testers") } catch { $false } | |
# Write-Output "SEEKING_TESTERS=$(if( $LabelFound -eq $true ) { 1 } else { 0 })" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append | |
# $CommitHash = git rev-parse --short=9 HEAD | |
# "commitHash=${CommitHash}" >> $env:GITHUB_OUTPUT | |
# | |
# - name: 'Restore VLC dependency from cache' | |
# id: vlc-cache | |
# uses: actions/cache@v3 | |
# env: | |
# CACHE_NAME: 'vlc-cache' | |
# with: | |
# path: ${{ github.workspace }}/obs-build-dependencies/vlc-${{ env.VLC_VERSION_WIN }} | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.VLC_VERSION_WIN }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: 'Install dependencies' | |
# env: | |
# RESTORED_VLC: ${{ steps.vlc-cache.outputs.cache-hit }} | |
# RESTORED_CEF: ${{ steps.cef-cache.outputs.cache-hit }} | |
# run: CI/windows/01_install_dependencies.ps1 -BuildArch ${{ env.TARGET_ARCH }} | |
# | |
# - name: 'Setup plugings' | |
# run: | | |
# git stash | |
# Remove-Item ${{ github.workspace }}\\plugins\\obs-ndi -Recurse -Force | |
# Remove-Item ${{ github.workspace }}\\plugins\\obs-browser -Recurse -Force | |
# git submodule update --init --recursive | |
# | |
# - name: 'Build OBS' | |
# run: CI/windows/02_build_obs.ps1 -BuildArch ${{ env.TARGET_ARCH }} -Vendor ${{ env.VENDOR }} | |
# | |
# - name: 'Sign obs64.exe' | |
# run: | | |
# Write-Host "Singing obs64.exe" | |
# | |
# - name: 'Create build artifact' | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# run: | | |
# CI/windows/03_package_obs.ps1 -BuildArch ${{ env.TARGET_ARCH }} -Package | |
# $ArtifactName = Get-ChildItem -filter "obs-webrtc-*-windows-${{ env.TARGET_ARCH }}.zip" -File -Recurse | |
# Write-Output "FILE_NAME=${ArtifactName}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append | |
# Write-Host $env:FILE_NAME | |
# | |
# - name: 'Upload build artifact' | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-windows-${{ env.TARGET_ARCH }}-${{ steps.setup.outputs.commitHash }}' | |
# path: '${{ env.FILE_NAME }}' | |
# | |
# - name: 'Build OBS' | |
# run: CI/windows/02_build_obs.ps1 -BuildArch ${{ env.TARGET_ARCH }} -Vendor ${{ env.VENDOR }} -Ndi ON | |
# | |
# - name: 'Sign obs64.exe' | |
# run: | | |
# Write-Host "Singing obs64.exe" | |
# | |
# - name: 'Create build artifact' | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# run: | | |
# CI/windows/03_package_obs.ps1 -BuildArch ${{ env.TARGET_ARCH }} -Package -Ndi ON | |
# $ArtifactName = Get-ChildItem -filter "obs-webrtc-*-windows-${{ env.TARGET_ARCH }}.zip" -File -Recurse | |
# Write-Output "FILE_NAME=${ArtifactName}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append | |
# Write-Host $env:FILE_NAME | |
# | |
# - name: 'Upload build artifact' | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-windows-${{ env.TARGET_ARCH }}-${{ steps.setup.outputs.commitHash }}' | |
# path: '${{ env.FILE_NAME }}' | |
# | |
# deployment_production: | |
# needs: [windows_build, linux_build, macos_build_arm64, macos_build_x86_64] | |
# if: | | |
# success() && | |
# github.event_name != 'pull_request' && | |
# startsWith(github.ref, 'refs/tags/m') | |
# environment: | |
# name: production | |
# url: ${{ vars.ENV_RELEASE_URL }} | |
# runs-on: ubuntu-latest | |
# steps: | |
# - name: 'Checkout the code' | |
# uses: actions/checkout@v4 | |
# - name: 'Generate access token' | |
# id: accessToken | |
# uses: dolby-io-internal/[email protected] | |
# with: | |
# gh_app_priv_key: ${{ secrets.GH_APP_PRIV_KEY }} | |
# gh_app_id: ${{ secrets.GH_APP_ID }} | |
# gh_app_installation_id: ${{ secrets.GH_APP_INSTALLATION_ID }} | |
# - name: 'Prepare release notes' | |
# id: releaseNotes | |
# run: | | |
# if [[ -f ${{ github.workspace }}/RELEASE_NOTES.md && ${{ env.USE_RELEASE_NOTES_FROM_FILE }} == 'true' ]];then | |
# export RELEASE_NOTES=$( cat ${{ github.workspace }}/RELEASE_NOTES.md ) | |
# else | |
# export OBS_STUDIO_VERSION_=$(echo ${VERSIONS_//-/ } | awk '{printf $2}') | |
# export WEBRTC_VERSION_=$(echo ${VERSIONS_//-/ } | awk '{printf $3}') | |
# export RELEASE_NOTES="Release ${{ github.ref_name }} (OBS-Studio ${OBS_STUDIO_VERSION_} WebRTC ${WEBRTC_VERSION_})" | |
# fi | |
# echo "RELEASE_NOTES=${RELEASE_NOTES}" >> "${GITHUB_OUTPUT}" | |
# env: | |
# VERSIONS_: ${{ env.OBS_VERSION }} | |
# - name: 'Define release type' | |
# id: 'releaseType' | |
# run: | | |
# IS_DRAFT=true | |
# IS_PRERELEASE=false | |
# if [[ ${REF_NAME} == *"alpha"* || ${REF_NAME} == *"beta"* ]];then | |
# export IS_PRERELEASE=true | |
# fi | |
# echo "IS_DRAFT=${IS_DRAFT}" >> "${GITHUB_OUTPUT}" | |
# echo "IS_PRERELEASE=${IS_PRERELEASE}" >> "${GITHUB_OUTPUT}" | |
# env: | |
# REF_NAME: ${{ github.ref_name }} | |
# - name: 'Create release - production' | |
# uses: dolby-io-internal/dolbyio-create-release@main | |
# with: | |
# deployment: ${{ vars.ENV_DEPLOYMENT }} | |
# release_tag: ${{ github.ref_name }} | |
# release_repository: ${{ github.repository }} | |
# access_token: ${{ steps.accessToken.outputs.token }} | |
# release_notes: ${{ steps.releaseNotes.outputs.RELEASE_NOTES }} | |
# is_prerelease: ${{ steps.releaseType.outputs.IS_PRERELEASE }} | |
# is_draft: ${{ steps.releaseType.outputs.IS_DRAFT }} | |
# attach_assets: 'true' |