DIOS-1851 Migration Linux to GH Actions #131
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: | |
paths-ignore: ['**.md'] | |
branches: ["master", "release/**", "CI/**"] | |
pull_request: | |
paths-ignore: ['**.md'] | |
branches: ['m**'] | |
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" | |
jobs: | |
preprocessing: | |
name: "Preprocessing" | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
- name: Generate access token | |
id: gh_access_token | |
uses: ./.github/actions/gh_access_token | |
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 }} | |
outputs: | |
gh_access_token: ${{ steps.gh_access_token.outputs.token }} | |
# | |
# macos_build_x86_64: | |
# name: 'MacOS-x86_64' | |
# runs-on: [macos-12] | |
# needs: preprocessing | |
# if: success() | |
# 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@v3 | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# - name: 'Download libWebRTC' | |
# uses: ./.github/actions/download_libwebrtc | |
# with: | |
# access_token: ${{ needs.preprocessing.outputs.gh_access_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'] | |
# needs: preprocessing | |
# if: success() | |
# 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@v3 | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# - name: 'Download libWebRTC' | |
# uses: ./.github/actions/download_libwebrtc | |
# with: | |
# access_token: ${{ needs.preprocessing.outputs.gh_access_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: | |
matrix: | |
ubuntu: ['ubuntu-20.04', 'ubuntu-22.04'] | |
runs-on: ${{ matrix.ubuntu }} | |
needs: preprocessing | |
if: always() | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: 'Checkout' | |
uses: actions/checkout@v3 | |
with: | |
submodules: 'recursive' | |
fetch-depth: 0 | |
- name: 'Download libWebRTC' | |
uses: ./.github/actions/download_libwebrtc | |
with: | |
access_token: ${{ needs.preprocessing.outputs.gh_access_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_=$(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' | |
run: CI/linux/02_build_obs.sh --disable-pipewire | |
env: | |
UBUNTU_VERSION: ${{ matrix.ubuntu }} | |
- name: 'Run tests' | |
if: success() | |
run: cmake --build build -t test | |
- 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 }}' | |
# windows_build: | |
# name: 'Windows_x64' | |
# runs-on: [windows-2022] | |
# needs: preprocessing | |
# if: always() | |
# env: | |
# CMAKE_GENERATOR: 'Visual Studio 17 2022' | |
# CMAKE_SYSTEM_VERSION: '10.0.18363.657' | |
# VIRTUALCAM-GUID: 'A3FCE0F5-3493-419F-958A-ABA1250EC20B' | |
# | |
# steps: | |
# - name: 'Checkout' | |
# uses: actions/checkout@v3 | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# - name: 'Download libWebRTC' | |
# uses: ./.github/actions/download_libwebrtc/win | |
# with: | |
# access_token: ${{ needs.preprocessing.outputs.gh_access_token }} | |
# release_tag: ${{ env.LIBWEBRTC_RELEASE_TAG }} | |
# asset_pattern: "^libWebRTC-${{ env.LIBWEBRTC_VERSION }}-x64-Md-Release-.*.msi.*" | |
# | |
# - name: 'Add msbuild to PATH' | |
# uses: microsoft/[email protected] | |
# | |
# - name: 'Check for Github Labels' | |
# if: github.event_name == 'pull_request' | |
# 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 | |
# | |
# - 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: '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_WIN }}_windows_${{ matrix.arch }} | |
# key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_BUILD_VERSION_WIN }}-${{ matrix.arch }}-${{ env.CACHE_REVISION }} | |
# | |
# - name: Setup Environment | |
# id: setup | |
# run: | | |
# $CommitHash = git rev-parse --short=9 HEAD | |
# "commitHash=${CommitHash}" >> $env:GITHUB_OUTPUT | |
# | |
# - 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 ${{ matrix.arch }} | |
# | |
# - name: 'Build OBS' | |
# run: CI/windows/02_build_obs.ps1 -BuildArch ${{ matrix.arch }} | |
# | |
# - name: 'Create build artifact' | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# run: | | |
# CI/windows/03_package_obs.ps1 -BuildArch ${{ matrix.arch }} -Package | |
# $ArtifactName = Get-ChildItem -filter "obs-studio-*-windows-${{ matrix.arch }}.zip" -File | |
# Write-Output "FILE_NAME=${ArtifactName}" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append | |
# | |
# - 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-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}' | |
# path: '${{ env.FILE_NAME }}' | |
# linux_package: | |
# name: '02 - Flatpak Bundle' | |
# runs-on: [ubuntu-latest] | |
# needs: [clang_check] | |
# if: always() | |
# defaults: | |
# run: | |
# shell: bash | |
# container: | |
# image: bilelmoussaoui/flatpak-github-actions:kde-6.3 | |
# options: --privileged | |
# steps: | |
# - name: 'Check for Github Labels' | |
# if: github.event_name == 'pull_request' | |
# run: | | |
# if ! /usr/bin/command -v "jq" >/dev/null 2>&1; then sudo dnf install -y -q jq; fi | |
# 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 | |
# | |
# - name: 'Checkout' | |
# uses: actions/checkout@v3 | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# with: | |
# submodules: 'recursive' | |
# fetch-depth: 0 | |
# | |
# - name: 'Setup build environment' | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# run: | | |
# git config --global --add safe.directory $GITHUB_WORKSPACE | |
# echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV | |
# echo "OBS_GIT_HASH=$(git rev-parse --short=9 HEAD)" >> $GITHUB_ENV | |
# echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV | |
# | |
# - name: Build Flatpak Manifest | |
# uses: bilelmoussaoui/flatpak-github-actions/flatpak-builder@v4 | |
# if: ${{ success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1') }} | |
# with: | |
# bundle: obs-studio-flatpak-${{ env.OBS_GIT_HASH }}.flatpak | |
# manifest-path: CI/flatpak/com.obsproject.Studio.json | |
# cache-key: flatpak-builder-${{ hashFiles('CI/flatpak/com.obsproject.Studio.json') }} | |
# windows_package: | |
# name: '03 - Windows Installer' | |
# runs-on: [windows-latest] | |
# needs: [windows_build] | |
# if: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' }} | |
# env: | |
# BUILD_FOR_DISTRIBUTION: 'ON' | |
# steps: | |
# - name: 'Checkout' | |
# uses: actions/checkout@v3 | |
# | |
# - name: Setup Environment | |
# id: setup | |
# run: | | |
# $CommitHash = git rev-parse --short=9 HEAD | |
# "commitHash=${CommitHash}" >> $env:GITHUB_OUTPUT | |
# | |
# - name: 'Add msbuild to PATH' | |
# uses: microsoft/[email protected] | |
# | |
# - name: 'Download 64-bit artifact' | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: 'obs-studio-windows-x64-${{ steps.setup.outputs.commitHash }}' | |
# | |
# - name: 'Download 32-bit artifact' | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: 'obs-studio-windows-x86-${{ steps.setup.outputs.commitHash }}' | |
# | |
# - name: 'Unpack Windows build artifacts' | |
# id: unpack | |
# run: | | |
# if (!(Test-Path install_temp)) { | |
# $null = New-Item -ItemType Directory -Force -Path install_temp | |
# } | |
# | |
# Expand-Archive -Path "$(Get-ChildItem -filter "obs-studio-*-windows-x86.zip" -File)" -DestinationPath install_temp | |
# Expand-Archive -Path "$(Get-ChildItem -filter "obs-studio-*-windows-x64.zip" -File)" -Force -DestinationPath install_temp | |
# | |
# CI/windows/03_package_obs.ps1 -CombinedArchs -Package | |
# | |
# $ArtifactName = (Get-ChildItem -filter "obs-studio-*-windows-x86+x64.zip" -File).Name | |
# "filename=${ArtifactName}" >> $env:GITHUB_OUTPUT | |
# | |
# - name: 'Upload build artifact' | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-windows-installer' | |
# path: '${{ steps.unpack.outputs.filename }}' | |
# macos_release: | |
# name: '03 - macOS notarized image' | |
# runs-on: [macos-12] | |
# needs: [macos_build] | |
# env: | |
# HAVE_CODESIGN_IDENTITY: ${{ secrets.MACOS_SIGNING_IDENTITY != '' && secrets.MACOS_SIGNING_CERT != '' }} | |
# BUILD_FOR_DISTRIBUTION: 'ON' | |
# if: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' }} | |
# strategy: | |
# matrix: | |
# arch: ['x86_64', 'arm64'] | |
# defaults: | |
# run: | |
# shell: bash | |
# steps: | |
# - name: 'Checkout' | |
# if: env.HAVE_CODESIGN_IDENTITY == 'true' | |
# uses: actions/checkout@v3 | |
# | |
# - name: 'Setup build environment' | |
# id: setup | |
# run: | | |
# echo "commitHash=$(git rev-parse --short=9 HEAD)" >> $GITHUB_OUTPUT | |
# | |
# - name: 'Download artifact' | |
# if: env.HAVE_CODESIGN_IDENTITY == 'true' | |
# uses: actions/download-artifact@v3 | |
# with: | |
# name: 'obs-studio-macos-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}' | |
# | |
# - name: 'Install Apple Developer Certificate' | |
# if: env.HAVE_CODESIGN_IDENTITY == 'true' | |
# uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071 | |
# with: | |
# p12-file-base64: ${{ secrets.MACOS_SIGNING_CERT }} | |
# p12-password: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }} | |
# | |
# - name: 'Create disk image for distribution' | |
# if: env.HAVE_CODESIGN_IDENTITY == 'true' | |
# env: | |
# CODESIGN_IDENT: ${{ secrets.MACOS_SIGNING_IDENTITY }} | |
# CODESIGN_IDENT_USER: ${{ secrets.MACOS_NOTARIZATION_USERNAME }} | |
# CODESIGN_IDENT_PASS: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }} | |
# run: | | |
# ARTIFACT_NAME=$(/usr/bin/find . -type f -name "obs-studio-*.dmg" -depth 1 | head -1) | |
# CI/macos/03_package_obs.sh --notarize-image ${ARTIFACT_NAME} | |
# | |
# echo "FILE_NAME=$(basename ${ARTIFACT_NAME})" >> $GITHUB_ENV | |
# | |
# - name: 'Upload build Artifact' | |
# if: env.HAVE_CODESIGN_IDENTITY == 'true' | |
# uses: actions/upload-artifact@v3 | |
# with: | |
# name: 'obs-studio-macos-${{ matrix.arch }}-notarized' | |
# path: '${{ github.workspace }}/${{ env.FILE_NAME }}' |