Merge pull request #375 from CoSMoSoftware/feature/upgrade_gh_access #256
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: | |
- "v**" | |
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" | |
BUILD_TYPE: "RelWithDebInfo" | |
USE_RELEASE_NOTES_FROM_FILE: 'false' | |
jobs: | |
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=${{ github.workspace }}/../obs-build-dependencies_${{ env.TARGET_ARCH }}" >> $GITHUB_ENV | |
- name: 'Install dependencies' | |
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 }}' | |
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=${{ github.workspace }}/../obs-build-dependencies_${{ env.TARGET_ARCH }}" >> $GITHUB_ENV | |
- name: 'Install dependencies' | |
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 }}' | |
path: '${{ github.workspace }}/build/${{ env.FILE_NAME }}' | |
linux_build: | |
name: 'Linux' | |
strategy: | |
fail-fast: false | |
matrix: | |
ubuntu: ['ubuntu-20.04', 'ubuntu-22.04'] | |
runs-on: ${{ matrix.ubuntu }} | |
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 }}-.*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 | |
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=${{ github.workspace }}/../obs-build-dependencies_${{ env.TARGET_ARCH }}" >> $GITHUB_ENV | |
- name: 'Install dependencies' | |
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 no NDI' | |
run: ./CI/linux/02_build_obs.sh --disable-pipewire --vendor ${{ env.VENDOR }} | |
env: | |
UBUNTU_VERSION: ${{ matrix.ubuntu }} | |
- name: 'Create build artifact' | |
if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
run: | | |
./CI/linux/03_package_obs.sh | |
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 }} | |
- name: 'Upload build Artifact' | |
if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: 'obs-studio-${{ matrix.ubuntu }}-${{ steps.setup.outputs.commitHash }}' | |
path: '${{ github.workspace }}/build/${{ env.FILE_NAME }}' | |
- name: 'Build OBS with NDI' | |
run: | | |
cd build | |
cmake .. -DCMAKE_INSTALL_PREFIX=../install | |
cmake --install . | |
cd .. | |
pushd plugins/obs-ndi | |
mkdir BUILD | |
cd BUILD | |
cmake .. -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -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 --ndi | |
env: | |
UBUNTU_VERSION: ${{ matrix.ubuntu }} | |
VENDOR: ${{ env.VENDOR }} | |
- name: 'Create build artifact' | |
if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
run: | | |
./CI/linux/03_package_obs.sh | |
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 }} | |
- name: 'Upload build Artifact' | |
if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
uses: actions/upload-artifact@v3 | |
with: | |
name: 'obs-studio-${{ matrix.ubuntu }}-${{ steps.setup.outputs.commitHash }}' | |
path: | | |
${{ github.workspace }}/build/${{ env.FILE_NAME }} | |
${{ github.workspace }}/build/obs-ndi*.deb | |
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 }} | |
action_shell: 'powershell' | |
- 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 | |
"DEPS_BUILD_DIR=${{ github.workspace }}/../obs-build-dependencies_${{ env.TARGET_ARCH }}" >> $GITHUB_ENV | |
- name: 'Install dependencies' | |
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 with no NDI' | |
run: ./CI/windows/02_build_obs.ps1 -BuildArch ${{ env.TARGET_ARCH }} -Vendor $env:VENDOR | |
- name: 'Build OBS with NDI' | |
run: ./CI/windows/02_build_obs.ps1 -BuildArch ${{ env.TARGET_ARCH }} -Vendor $env:VENDOR -Ndi ON | |
- name: 'Prepare package' | |
run: ./CI/windows/before-deploy-win.cmd ${{ env.VENDOR }} | |
shell: cmd | |
env: | |
FLAVOUR: NDI | |
- name: 'Sign obs executable' | |
working-directory: ${{github.workspace}}/build_${{ env.VENDOR }} | |
run: | | |
echo "${{ secrets.WINDOWS_SIGN_CERT }}" > certificate.b64 | |
certutil -decode certificate.b64 certificate.pfx | |
Get-ChildItem -Filter "obs-webrtc-*.exe" | Foreach-Object { | |
Write-Host "Signing $_" | |
$env:SIGN_STATUS = & "C:\Program Files (x86)\Windows Kits\10\App Certification Kit\signtool.exe" sign /f ./certificate.pfx /p ${{ secrets.WINDOWS_SIGN_CERT_PASSWD}} /tr "http://timestamp.comodoca.com" /td SHA256 /fd SHA256 $_ | |
if($?) { | |
Write-Host "$env:SIGN_STATUS" | |
} else { | |
Write-Host "Sign error: $env:SIGN_STATUS" | |
} | |
} | |
Remove-Item -Recurse -Force certificate.pfx | |
- 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: ./build_${{ env.VENDOR }}/obs-webrtc-*.exe | |
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/v') | |
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_RELEASECREATOR_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' |