main.yml 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695
  1. name: 'CI Multiplatform Build'
  2. on:
  3. push:
  4. paths-ignore:
  5. - '**.md'
  6. branches:
  7. - master
  8. tags:
  9. - '*'
  10. pull_request:
  11. paths-ignore:
  12. - '**.md'
  13. branches:
  14. - master
  15. env:
  16. MACOS_CEF_BUILD_VERSION: '4183'
  17. LINUX_CEF_BUILD_VERSION: '4280'
  18. CEF_VERSION: '75.1.16+g16a67c4+chromium-75.0.3770.100'
  19. TWITCH_CLIENTID: ${{ secrets.TWITCH_CLIENT_ID }}
  20. TWITCH_HASH: ${{ secrets.TWITCH_HASH }}
  21. RESTREAM_CLIENTID: ${{ secrets.RESTREAM_CLIENTID }}
  22. RESTREAM_HASH: ${{ secrets.RESTREAM_HASH }}
  23. jobs:
  24. macos64:
  25. name: 'macOS 64-bit'
  26. runs-on: [macos-latest]
  27. env:
  28. MIN_MACOS_VERSION: '10.13'
  29. MACOS_DEPS_VERSION: '2021-03-25'
  30. VLC_VERSION: '3.0.8'
  31. SPARKLE_VERSION: '1.23.0'
  32. QT_VERSION: '5.15.2'
  33. SIGN_IDENTITY: ''
  34. steps:
  35. - name: Get Current Arch
  36. shell: bash
  37. id: get_arch
  38. run: echo "CURRENT_ARCH=$(uname -m)" >> $GITHUB_ENV
  39. - name: 'Checkout'
  40. uses: actions/[email protected]
  41. with:
  42. submodules: 'recursive'
  43. - name: 'Fetch Git Tags'
  44. run: |
  45. git fetch --prune --unshallow
  46. echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
  47. echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
  48. echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
  49. - name: 'Check for Github Labels'
  50. if: github.event_name == 'pull_request'
  51. run: |
  52. LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
  53. LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
  54. if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
  55. echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
  56. else
  57. echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
  58. fi
  59. - name: 'Setup build environment (Homebrew + ENV)'
  60. shell: bash
  61. run: |
  62. if [ -d /usr/local/opt/[email protected] ]; then
  63. brew uninstall [email protected]
  64. brew untap local/openssl
  65. fi
  66. if [ -d /usr/local/opt/[email protected] ]; then
  67. brew uninstall [email protected]
  68. brew untap local/python2
  69. fi
  70. if [ -d /usr/local/opt/speexdsp ]; then
  71. brew unlink speexdsp
  72. fi
  73. brew uninstall curl php
  74. brew bundle --file ./CI/scripts/macos/Brewfile
  75. echo "NPROC=$(sysctl -n hw.ncpu)" >> $GITHUB_ENV
  76. - name: 'Restore Chromium Embedded Framework from cache'
  77. id: cef-cache
  78. uses: actions/[email protected]
  79. env:
  80. CACHE_NAME: 'cef-cache'
  81. with:
  82. path: ${{ github.workspace }}/cmbuild/cef_binary_${{ env.MACOS_CEF_BUILD_VERSION }}_macosx64
  83. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.MACOS_CEF_BUILD_VERSION }}
  84. - name: 'Restore VLC dependency from cache'
  85. id: vlc-cache
  86. uses: actions/[email protected]
  87. env:
  88. CACHE_NAME: 'vlc-cache'
  89. with:
  90. path: ${{ github.workspace }}/cmbuild/vlc-${{ env.VLC_VERSION }}
  91. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.VLC_VERSION }}
  92. - name: 'Restore Sparkle dependency from cache'
  93. id: sparkle-cache
  94. uses: actions/[email protected]
  95. env:
  96. CACHE_NAME: 'sparkle-cache'
  97. with:
  98. path: ${{ github.workspace }}/cmbuild/sparkle
  99. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.SPARKLE_VERSION }}
  100. - name: 'Install prerequisite: Pre-built dependencies'
  101. if: steps.deps-cache.outputs.cache-hit != 'true'
  102. shell: bash
  103. run: |
  104. curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/macos-deps-${{ env.CURRENT_ARCH }}-${{ env.MACOS_DEPS_VERSION }}.tar.gz
  105. tar -xf ./macos-deps-${{ env.CURRENT_ARCH }}-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp"
  106. - name: 'Install prerequisite: Pre-built dependency Qt'
  107. if: steps.deps-qt-cache.outputs.cache-hit != 'true'
  108. shell: bash
  109. run: |
  110. curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/macos-qt-${{ env.QT_VERSION }}-${{ env.CURRENT_ARCH }}-${{ env.MACOS_DEPS_VERSION }}.tar.gz
  111. tar -xf ./macos-qt-${{ env.QT_VERSION }}-${{ env.CURRENT_ARCH }}-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp"
  112. xattr -r -d com.apple.quarantine /tmp/obsdeps
  113. - name: 'Install prerequisite: VLC'
  114. if: steps.vlc-cache.outputs.cache-hit != 'true'
  115. shell: bash
  116. run: |
  117. curl -L -O https://downloads.videolan.org/vlc/${{ env.VLC_VERSION }}/vlc-${{ env.VLC_VERSION }}.tar.xz
  118. if [ ! -d "${{ github.workspace }}/cmbuild" ]; then mkdir "${{ github.workspace }}/cmbuild"; fi
  119. tar -xf ./vlc-${{ env.VLC_VERSION }}.tar.xz -C "${{ github.workspace }}/cmbuild"
  120. - name: 'Install prerequisite: Sparkle'
  121. if: steps.sparkle-cache.outputs.cache-hit != 'true'
  122. shell: bash
  123. run: |
  124. curl -L -o sparkle.tar.bz2 https://github.com/sparkle-project/Sparkle/releases/download/${{ env.SPARKLE_VERSION }}/Sparkle-${{ env.SPARKLE_VERSION }}.tar.bz2
  125. mkdir ${{ github.workspace }}/cmbuild/sparkle
  126. tar -xf ./sparkle.tar.bz2 -C ${{ github.workspace }}/cmbuild/sparkle
  127. - name: 'Setup prerequisite: Sparkle'
  128. shell: bash
  129. run: sudo cp -R ${{ github.workspace }}/cmbuild/sparkle/Sparkle.framework /Library/Frameworks/Sparkle.framework
  130. - name: 'Install prerequisite: Chromium Embedded Framework'
  131. if: steps.cef-cache.outputs.cache-hit != 'true'
  132. shell: bash
  133. run: |
  134. curl -L -O https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.MACOS_CEF_BUILD_VERSION }}_macosx64.tar.bz2
  135. tar -xf ./cef_binary_${{ env.MACOS_CEF_BUILD_VERSION }}_macosx64.tar.bz2 -C ${{ github.workspace }}/cmbuild/
  136. cd ${{ github.workspace }}/cmbuild/cef_binary_${{ env.MACOS_CEF_BUILD_VERSION }}_macosx64
  137. /usr/bin/sed -i '.orig' '/add_subdirectory(tests\/ceftests)/d' ./CMakeLists.txt
  138. /usr/bin/sed -i '.orig' s/\"10.9\"/\"${{ env.MIN_MACOS_VERSION }}\"/ ./cmake/cef_variables.cmake
  139. mkdir build && cd build
  140. cmake -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++ -Wno-deprecated-declarations" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ env.MIN_MACOS_VERSION }} ..
  141. make -j${NPROC:-4}
  142. mkdir libcef_dll
  143. cd ../../
  144. - name: 'Configure'
  145. shell: bash
  146. run: |
  147. mkdir ./build
  148. cd ./build
  149. LEGACY_BROWSER="$(test "${{ env.MACOS_CEF_BUILD_VERSION }}" -le 3770 && echo "ON" || echo "OFF")"
  150. cmake -DENABLE_UNIT_TESTS=YES -DENABLE_SPARKLE_UPDATER=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=${{ env.MIN_MACOS_VERSION }} -DQTDIR="/tmp/obsdeps" -DSWIGDIR="/tmp/obsdeps" -DDepsPath="/tmp/obsdeps" -DVLCPath="${{ github.workspace }}/cmbuild/vlc-${{ env.VLC_VERSION }}" -DENABLE_VLC=ON -DBUILD_BROWSER=ON -DBROWSER_LEGACY=$LEGACY_BROWSER -DWITH_RTMPS=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.MACOS_CEF_BUILD_VERSION }}_macosx64" -DTWITCH_CLIENTID='${{ env.TWITCH_CLIENTID }}' -DTWITCH_HASH='${{ env.TWITCH_HASH }}' -DRESTREAM_CLIENTID='${{ env.RESTREAM_CLIENTID }}' -DRESTREAM_HASH='${{ env.RESTREAM_HASH }}' ..
  151. - name: 'Build'
  152. shell: bash
  153. working-directory: ${{ github.workspace }}/build
  154. run: make -j${NPROC:-4}
  155. - name: 'Test'
  156. shell: bash
  157. working-directory: ${{ github.workspace }}/build
  158. run: make CTEST_OUTPUT_ON_FAILURE=1 test
  159. - name: 'Install prerequisite: DMGbuild'
  160. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  161. shell: bash
  162. run: |
  163. pip3 install dmgbuild
  164. - name: 'Install Apple Developer Certificate'
  165. if: success() && startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request'
  166. uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071
  167. with:
  168. p12-file-base64: ${{ secrets.MACOS_SIGNING_CERT }}
  169. p12-password: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }}
  170. - name: 'Set Signing Identity'
  171. if: success() && startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request'
  172. run: |
  173. echo "SIGN_IDENTITY=${{ secrets.MACOS_SIGNING_IDENTITY }}" >> $GITHUB_ENV
  174. - name: 'Create macOS application bundle'
  175. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  176. working-directory: ${{ github.workspace }}/build
  177. shell: bash
  178. run: |
  179. if [ -d ./OBS.app ]; then rm -rf ./OBS.app; fi
  180. mkdir -p OBS.app/Contents/MacOS
  181. mkdir OBS.app/Contents/PlugIns
  182. mkdir OBS.app/Contents/Resources
  183. mkdir OBS.app/Contents/Frameworks
  184. cp rundir/RelWithDebInfo/bin/obs ./OBS.app/Contents/MacOS
  185. cp rundir/RelWithDebInfo/bin/obs-ffmpeg-mux ./OBS.app/Contents/MacOS
  186. if ! [ "${{ env.MACOS_CEF_BUILD_VERSION }}" -le 3770 ]; then
  187. cp -R "rundir/RelWithDebInfo/bin/OBS Helper.app" "./OBS.app/Contents/Frameworks/OBS Helper.app"
  188. cp -R "rundir/RelWithDebInfo/bin/OBS Helper (GPU).app" "./OBS.app/Contents/Frameworks/OBS Helper (GPU).app"
  189. cp -R "rundir/RelWithDebInfo/bin/OBS Helper (Plugin).app" "./OBS.app/Contents/Frameworks/OBS Helper (Plugin).app"
  190. cp -R "rundir/RelWithDebInfo/bin/OBS Helper (Renderer).app" "./OBS.app/Contents/Frameworks/OBS Helper (Renderer).app"
  191. fi
  192. cp rundir/RelWithDebInfo/bin/libobsglad.0.dylib ./OBS.app/Contents/MacOS
  193. cp -R rundir/RelWithDebInfo/data ./OBS.app/Contents/Resources
  194. cp ../CI/scripts/macos/app/AppIcon.icns ./OBS.app/Contents/Resources
  195. cp -R rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/PlugIns
  196. cp ../CI/scripts/macos/app/Info.plist ./OBS.app/Contents
  197. if [ -d ./OBS.app/Contents/Resources/data/obs-scripting ]; then
  198. mv ./OBS.app/Contents/Resources/data/obs-scripting/obslua.so ./OBS.app/Contents/MacOS/
  199. mv ./OBS.app/Contents/Resources/data/obs-scripting/_obspython.so ./OBS.app/Contents/MacOS/
  200. mv ./OBS.app/Contents/Resources/data/obs-scripting/obspython.py ./OBS.app/Contents/MacOS/
  201. rm -rf ./OBS.app/Contents/Resources/data/obs-scripting/
  202. fi
  203. BUNDLE_PLUGINS=(
  204. ./OBS.app/Contents/PlugIns/coreaudio-encoder.so
  205. ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so
  206. ./OBS.app/Contents/PlugIns/decklink-captions.so
  207. ./OBS.app/Contents/PlugIns/frontend-tools.so
  208. ./OBS.app/Contents/PlugIns/image-source.so
  209. ./OBS.app/Contents/PlugIns/mac-avcapture.so
  210. ./OBS.app/Contents/PlugIns/mac-capture.so
  211. ./OBS.app/Contents/PlugIns/mac-decklink.so
  212. ./OBS.app/Contents/PlugIns/mac-syphon.so
  213. ./OBS.app/Contents/PlugIns/mac-vth264.so
  214. ./OBS.app/Contents/PlugIns/mac-virtualcam.so
  215. ./OBS.app/Contents/PlugIns/obs-browser.so
  216. ./OBS.app/Contents/PlugIns/obs-ffmpeg.so
  217. ./OBS.app/Contents/PlugIns/obs-filters.so
  218. ./OBS.app/Contents/PlugIns/obs-transitions.so
  219. ./OBS.app/Contents/PlugIns/obs-vst.so
  220. ./OBS.app/Contents/PlugIns/rtmp-services.so
  221. ./OBS.app/Contents/MacOS/obs-ffmpeg-mux
  222. ./OBS.app/Contents/MacOS/obslua.so
  223. ./OBS.app/Contents/MacOS/_obspython.so
  224. ./OBS.app/Contents/PlugIns/obs-x264.so
  225. ./OBS.app/Contents/PlugIns/text-freetype2.so
  226. ./OBS.app/Contents/PlugIns/obs-outputs.so
  227. )
  228. if ! [ "${{ env.MACOS_CEF_BUILD_VERSION }}" -le 3770 ]; then
  229. ../CI/scripts/macos/app/dylibBundler -cd -of -a ./OBS.app -q -f \
  230. -s ./OBS.app/Contents/MacOS \
  231. -s "${{ github.workspace }}/cmbuild/sparkle/Sparkle.framework" \
  232. -s ./rundir/RelWithDebInfo/bin \
  233. $(echo "${BUNDLE_PLUGINS[@]/#/-x }")
  234. else
  235. ../CI/scripts/macos/app/dylibBundler -cd -of -a ./OBS.app -q -f \
  236. -s ./OBS.app/Contents/MacOS \
  237. -s "${{ github.workspace }}/cmbuild/sparkle/Sparkle.framework" \
  238. -s ./rundir/RelWithDebInfo/bin \
  239. $(echo "${BUNDLE_PLUGINS[@]/#/-x }") \
  240. -x ./OBS.app/Contents/PlugIns/obs-browser-page
  241. fi
  242. mv ./libobs-opengl/libobs-opengl.so ./OBS.app/Contents/Frameworks
  243. cp -R /tmp/obsdeps/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks
  244. chmod -R +w ./OBS.app/Contents/Frameworks/QtNetwork.framework
  245. rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Headers
  246. rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Headers/
  247. chmod 644 ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Resources/Info.plist
  248. install_name_tool -id @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
  249. install_name_tool -change /tmp/obsdeps/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork
  250. cp -R "${{ github.workspace }}/cmbuild/cef_binary_${{ env.MACOS_CEF_BUILD_VERSION }}_macosx64/Release/Chromium Embedded Framework.framework" ./OBS.app/Contents/Frameworks/
  251. chown -R $(whoami) ./OBS.app/Contents/Frameworks/
  252. cp ../CI/scripts/macos/app/OBSPublicDSAKey.pem ./OBS.app/Contents/Resources
  253. if [ "${GITHUB_REF:0:10}" = "refs/tags/" ]; then
  254. plutil -insert CFBundleVersion -string ${{ env.OBS_GIT_TAG }} ./OBS.app/Contents/Info.plist
  255. plutil -insert CFBundleShortVersionString -string ${{ env.OBS_GIT_TAG }} ./OBS.app/Contents/Info.plist
  256. else
  257. plutil -insert CFBundleVersion -string ${{ env.OBS_GIT_TAG }}-${{ env.OBS_GIT_HASH }} ./OBS.app/Contents/Info.plist
  258. plutil -insert CFBundleShortVersionString -string ${{ env.OBS_GIT_TAG }}-${{ env.OBS_GIT_HASH }} ./OBS.app/Contents/Info.plist
  259. fi
  260. plutil -insert OBSFeedsURL -string https://obsproject.com/osx_update/feeds.xml ./OBS.app/Contents/Info.plist
  261. plutil -insert SUFeedURL -string https://obsproject.com/osx_update/stable/updates.xml ./OBS.app/Contents/Info.plist
  262. plutil -insert SUPublicDSAKeyFile -string OBSPublicDSAKey.pem ./OBS.app/Contents/Info.plist
  263. codesign --force --options runtime --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/fileop"
  264. codesign --force --options runtime --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate"
  265. codesign --force --options runtime --sign "${SIGN_IDENTITY:--}" --deep ./OBS.app/Contents/Frameworks/Sparkle.framework
  266. codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libEGL.dylib"
  267. codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libswiftshader_libEGL.dylib"
  268. codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libGLESv2.dylib"
  269. codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libswiftshader_libGLESv2.dylib"
  270. if ! [ "${{ env.MACOS_CEF_BUILD_VERSION }}" -le 3770 ]; then
  271. codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Frameworks/Chromium Embedded Framework.framework/Libraries/libvk_swiftshader.dylib"
  272. fi
  273. if ! [ "${{ env.MACOS_CEF_BUILD_VERSION }}" -le 3770 ]; then
  274. codesign --force --options runtime --entitlements "../CI/scripts/macos/helpers/helper-entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep "./OBS.app/Contents/Frameworks/OBS Helper.app"
  275. codesign --force --options runtime --entitlements "../CI/scripts/macos/helpers/helper-gpu-entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep "./OBS.app/Contents/Frameworks/OBS Helper (GPU).app"
  276. codesign --force --options runtime --entitlements "../CI/scripts/macos/helpers/helper-plugin-entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep "./OBS.app/Contents/Frameworks/OBS Helper (Plugin).app"
  277. codesign --force --options runtime --entitlements "../CI/scripts/macos/helpers/helper-renderer-entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep "./OBS.app/Contents/Frameworks/OBS Helper (Renderer).app"
  278. fi
  279. codesign --force --options runtime --deep --sign "${SIGN_IDENTITY:--}" "./OBS.app/Contents/Resources/data/obs-mac-virtualcam.plugin"
  280. codesign --force --options runtime --entitlements "../CI/scripts/macos/app/entitlements.plist" --sign "${SIGN_IDENTITY:--}" --deep ./OBS.app
  281. codesign -dvv ./OBS.app
  282. - name: 'Package'
  283. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  284. working-directory: ${{ github.workspace }}/build
  285. shell: bash
  286. run: |
  287. FILE_DATE=$(date +%Y-%m-%d)
  288. FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-macOS.dmg
  289. echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
  290. cp ../CI/scripts/macos/package/settings.json.template ./settings.json
  291. /usr/bin/sed -i '' 's#\$\$VERSION\$\$#${{ env.OBS_GIT_TAG }}#g' ./settings.json
  292. /usr/bin/sed -i '' 's#\$\$CI_PATH\$\$#../CI/scripts/macos#g' ./settings.json
  293. /usr/bin/sed -i '' 's#\$\$BUNDLE_PATH\$\$#${{ github.workspace }}/build#g' ./settings.json
  294. dmgbuild "OBS-Studio ${{ env.OBS_GIT_TAG }}" "${FILE_NAME}" -s ./settings.json
  295. mkdir ../nightly
  296. codesign --force --sign "${SIGN_IDENTITY:--}" ./"${FILE_NAME}"
  297. codesign -dvv ./"${FILE_NAME}"
  298. sudo cp ./${FILE_NAME} ../nightly/${FILE_NAME}
  299. - name: 'Publish'
  300. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  301. uses: actions/[email protected]
  302. with:
  303. name: '${{ env.FILE_NAME }}'
  304. path: ./nightly/*.dmg
  305. - name: 'Package Release'
  306. if: success() && startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request'
  307. working-directory: ${{ github.workspace }}/build
  308. shell: bash
  309. run: |
  310. FILE_DATE=$(date +%Y-%m-%d)
  311. FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-macOS.dmg
  312. RELEASE_FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-rel-macOS.dmg
  313. echo "RELEASE_FILE_NAME=${RELEASE_FILE_NAME}" >> $GITHUB_ENV
  314. xcrun altool --store-password-in-keychain-item "AC_PASSWORD" -u "${{ secrets.MACOS_NOTARIZATION_USERNAME }}" -p "${{ secrets.MACOS_NOTARIZATION_PASSWORD }}"
  315. xcnotary precheck "./OBS.app"
  316. if [ "$?" -eq 0 ]; then
  317. xcnotary notarize "$FILE_NAME" --developer-account "${{ secrets.MACOS_NOTARIZATION_USERNAME }}" --developer-password-keychain-item "AC_PASSWORD" --provider "${{ secrets.ASC_PROVIDER_SHORTNAME }}"
  318. else
  319. return 1
  320. fi
  321. mkdir ../release
  322. sudo mv ./$FILE_NAME ../release/$RELEASE_FILE_NAME
  323. - name: 'Publish Release'
  324. if: success() && startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request'
  325. uses: actions/[email protected]
  326. with:
  327. name: '${{ env.RELEASE_FILE_NAME }}'
  328. path: ./release/*.dmg
  329. ubuntu64:
  330. name: 'Linux/Ubuntu 64-bit'
  331. runs-on: [ubuntu-18.04]
  332. steps:
  333. - name: 'Checkout'
  334. uses: actions/[email protected]
  335. with:
  336. submodules: 'recursive'
  337. - name: 'Fetch Git Tags'
  338. run: |
  339. git fetch --prune --unshallow
  340. echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
  341. echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
  342. echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
  343. - name: 'Check for Github Labels'
  344. if: github.event_name == 'pull_request'
  345. run: |
  346. LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
  347. LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
  348. if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
  349. echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
  350. else
  351. echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
  352. fi
  353. - name: Install prerequisites (Apt)
  354. shell: bash
  355. run: |
  356. echo "NPROC=$(($(nproc)+1))" >> $GITHUB_ENV
  357. sudo dpkg --add-architecture amd64
  358. sudo apt-get -qq update
  359. sudo apt-get install -y \
  360. build-essential \
  361. checkinstall \
  362. cmake \
  363. libasound2-dev \
  364. libavcodec-dev \
  365. libavdevice-dev \
  366. libavfilter-dev \
  367. libavformat-dev \
  368. libavutil-dev \
  369. libcurl4-openssl-dev \
  370. libfdk-aac-dev \
  371. libfontconfig-dev \
  372. libfreetype6-dev \
  373. libgl1-mesa-dev \
  374. libjack-jackd2-dev \
  375. libjansson-dev \
  376. libluajit-5.1-dev \
  377. libpulse-dev \
  378. libqt5x11extras5-dev \
  379. libsndio-dev \
  380. libspeexdsp-dev \
  381. libswresample-dev \
  382. libswscale-dev \
  383. libudev-dev \
  384. libv4l-dev \
  385. libva-dev \
  386. libvlc-dev \
  387. libx11-dev \
  388. libx264-dev \
  389. libxcb-randr0-dev \
  390. libxcb-shm0-dev \
  391. libxcb-xinerama0-dev \
  392. libxcomposite-dev \
  393. libxinerama-dev \
  394. libmbedtls-dev \
  395. pkg-config \
  396. python3-dev \
  397. qtbase5-dev \
  398. qtbase5-private-dev \
  399. libqt5svg5-dev \
  400. swig \
  401. libcmocka-dev \
  402. linux-generic \
  403. v4l2loopback-dkms
  404. - name: 'Restore Chromium Embedded Framework from cache'
  405. id: cef-cache
  406. uses: actions/[email protected]
  407. env:
  408. CACHE_NAME: 'cef-cache'
  409. with:
  410. path: ${{ github.workspace }}/cmbuild/cef_binary_${{ env.LINUX_CEF_BUILD_VERSION }}_linux64
  411. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.LINUX_CEF_BUILD_VERSION }}
  412. - name: 'Install prerequisite: Chromium Embedded Framework'
  413. if: steps.cef-cache.outputs.cache-hit != 'true'
  414. shell: bash
  415. run: |
  416. curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.LINUX_CEF_BUILD_VERSION }}_linux64.tar.bz2 -f --retry 5 -o cef.tar.bz2
  417. if [ ! -d "${{ github.workspace }}/cmbuild" ]; then mkdir "${{ github.workspace }}/cmbuild"; fi
  418. tar -C"${{ github.workspace }}/cmbuild" -xjf cef.tar.bz2
  419. - name: 'Configure'
  420. shell: bash
  421. run: |
  422. mkdir ./build
  423. cd ./build
  424. cmake -DENABLE_PIPEWIRE=OFF -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DENABLE_UNIT_TESTS=ON -DENABLE_VLC=ON -DWITH_RTMPS=ON -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.LINUX_CEF_BUILD_VERSION }}_linux64" -DTWITCH_CLIENTID='${{ env.TWITCH_CLIENTID }}' -DTWITCH_HASH='${{ env.TWITCH_HASH }}' -DRESTREAM_CLIENTID='${{ env.RESTREAM_CLIENTID }}' -DRESTREAM_HASH='${{ env.RESTREAM_HASH }}' ..
  425. - name: 'Build'
  426. shell: bash
  427. working-directory: ${{ github.workspace }}/build
  428. run: make -j${NPROC:-4}
  429. - name: 'Test'
  430. shell: bash
  431. working-directory: ${{ github.workspace }}/build
  432. run: make CTEST_OUTPUT_ON_FAILURE=1 test
  433. - name: 'Package'
  434. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  435. shell: bash
  436. run: |
  437. FILE_DATE=$(date +%Y-%m-%d)
  438. FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-linux64.tar.gz
  439. echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
  440. cd ./build
  441. sudo checkinstall --default --install=no --pkgname=obs-studio --fstrans=yes --backup=no --pkgversion="$(date +%Y%m%d)-git" --deldoc=yes
  442. mkdir ../nightly
  443. tar -cvzf "${FILE_NAME}" *.deb
  444. mv "${FILE_NAME}" ../nightly/
  445. cd -
  446. - name: 'Publish'
  447. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  448. uses: actions/[email protected]
  449. with:
  450. name: '${{ env.FILE_NAME }}'
  451. path: './nightly/*.tar.gz'
  452. win64:
  453. name: 'Windows 64-bit'
  454. runs-on: [windows-latest]
  455. env:
  456. QT_VERSION: '5.15.2'
  457. CMAKE_GENERATOR: "Visual Studio 16 2019"
  458. CMAKE_SYSTEM_VERSION: "10.0.18363.657"
  459. WINDOWS_DEPS_VERSION: '2019'
  460. VLC_VERSION: '3.0.0-git'
  461. VIRTUALCAM-GUID: "A3FCE0F5-3493-419F-958A-ABA1250EC20B"
  462. steps:
  463. - name: 'Add msbuild to PATH'
  464. uses: microsoft/[email protected]
  465. - name: 'Checkout'
  466. uses: actions/[email protected]
  467. with:
  468. submodules: 'recursive'
  469. - name: 'Fetch Git Tags'
  470. shell: bash
  471. run: |
  472. git fetch --prune --unshallow
  473. echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
  474. echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
  475. echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
  476. - name: 'Check for Github Labels'
  477. if: github.event_name == 'pull_request'
  478. shell: bash
  479. run: |
  480. LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
  481. LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
  482. if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
  483. echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
  484. else
  485. echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
  486. fi
  487. - name: 'Restore QT dependency from cache'
  488. id: qt-cache
  489. uses: actions/[email protected]
  490. env:
  491. CACHE_NAME: 'windows-qt-cache'
  492. with:
  493. path: ${{ github.workspace }}/cmbuild/QT
  494. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.QT_VERSION }}
  495. - name: 'Restore pre-built dependencies from cache'
  496. id: deps-cache
  497. uses: actions/[email protected]
  498. env:
  499. CACHE_NAME: 'windows-deps-cache'
  500. with:
  501. path: ${{ github.workspace }}/cmbuild/deps
  502. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.WINDOWS_DEPS_VERSION }}
  503. - name: 'Restore VLC dependency from cache'
  504. id: vlc-cache
  505. uses: actions/[email protected]
  506. env:
  507. CACHE_NAME: 'windows-vlc-cache'
  508. with:
  509. path: ${{ github.workspace }}/cmbuild/vlc
  510. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.VLC_VERSION }}
  511. - name: 'Restore CEF dependency from cache (64 bit)'
  512. id: cef-cache
  513. uses: actions/[email protected]
  514. env:
  515. CACHE_NAME: 'windows-cef-64-cache'
  516. with:
  517. path: ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows64_minimal
  518. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_VERSION }}
  519. - name: 'Install prerequisite: QT'
  520. if: steps.qt-cache.outputs.cache-hit != 'true'
  521. run: |
  522. curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C -
  523. 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}/cmbuild/QT"
  524. - name: 'Install prerequisite: Pre-built dependencies'
  525. if: steps.deps-cache.outputs.cache-hit != 'true'
  526. run: |
  527. curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C -
  528. 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}/cmbuild/deps"
  529. - name: 'Install prerequisite: VLC'
  530. if: steps.vlc-cache.outputs.cache-hit != 'true'
  531. run: |
  532. curl -kL https://cdn-fastly.obsproject.com/downloads/vlc.zip -f --retry 5 -o vlc.zip
  533. 7z x vlc.zip -o"${{ github.workspace }}/cmbuild/vlc"
  534. - name: 'Install prerequisite: Chromium Embedded Framework'
  535. if: steps.cef-cache.outputs.cache-hit != 'true'
  536. run: |
  537. curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.CEF_VERSION }}_windows64_minimal.zip -f --retry 5 -o cef.zip
  538. 7z x cef.zip -o"${{ github.workspace }}/cmbuild"
  539. - name: 'Configure'
  540. run: |
  541. mkdir ./build
  542. mkdir ./build64
  543. cd ./build64
  544. cmake -G"${{ env.CMAKE_GENERATOR }}" -A"x64" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=true -DCOMPILE_D3D12_HOOK=true -DVLCPath="${{ github.workspace }}/cmbuild/vlc" -DDepsPath="${{ github.workspace }}/cmbuild/deps/win64" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2019_64" -DENABLE_VLC=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows64_minimal" -DTWITCH_CLIENTID='${{ env.TWITCH_CLIENTID }}' -DTWITCH_HASH='${{ env.TWITCH_HASH }}' -DRESTREAM_CLIENTID='${{ env.RESTREAM_CLIENTID }}' -DRESTREAM_HASH='${{ env.RESTREAM_HASH }}' -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE -DVIRTUALCAM_GUID=${{ env.VIRTUALCAM-GUID }} ..
  545. - name: 'Build'
  546. run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-studio.sln
  547. - name: 'Package'
  548. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  549. run: |
  550. $env:FILE_DATE=(Get-Date -UFormat "%F")
  551. $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win64.zip"
  552. echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
  553. robocopy .\build64\rundir\RelWithDebInfo .\build\ /E /XF .gitignore
  554. 7z a ${env:FILE_NAME} .\build\*
  555. - name: 'Publish'
  556. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  557. uses: actions/[email protected]
  558. with:
  559. name: '${{ env.FILE_NAME }}'
  560. path: '*-win64.zip'
  561. win32:
  562. name: 'Windows 32-bit'
  563. runs-on: [windows-latest]
  564. env:
  565. QT_VERSION: '5.15.2'
  566. CMAKE_GENERATOR: "Visual Studio 16 2019"
  567. CMAKE_SYSTEM_VERSION: "10.0.18363.657"
  568. WINDOWS_DEPS_VERSION: '2019'
  569. VIRTUALCAM-GUID: "A3FCE0F5-3493-419F-958A-ABA1250EC20B"
  570. steps:
  571. - name: 'Add msbuild to PATH'
  572. uses: microsoft/[email protected]
  573. - name: 'Checkout'
  574. uses: actions/[email protected]
  575. with:
  576. submodules: 'recursive'
  577. - name: 'Fetch Git Tags'
  578. shell: bash
  579. run: |
  580. git fetch --prune --unshallow
  581. echo "OBS_GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
  582. echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
  583. echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
  584. - name: 'Check for Github Labels'
  585. if: github.event_name == 'pull_request'
  586. shell: bash
  587. run: |
  588. LABELS_URL="$(echo ${{ github.event.pull_request.url }} | sed s'/pulls/issues/')"
  589. LABEL_FOUND="$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "${LABELS_URL}/labels" | sed -n 's/.*"name": "\(.*\)",/\1/p' | grep 'Seeking Testers' || true)"
  590. if [ "${LABEL_FOUND}" = "Seeking Testers" ]; then
  591. echo "SEEKING_TESTERS=1" >> $GITHUB_ENV
  592. else
  593. echo "SEEKING_TESTERS=0" >> $GITHUB_ENV
  594. fi
  595. - name: 'Restore QT dependency from cache'
  596. id: qt-cache
  597. uses: actions/[email protected]
  598. env:
  599. CACHE_NAME: 'qt-cache'
  600. with:
  601. path: ${{ github.workspace }}/cmbuild/QT
  602. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.QT_VERSION }}
  603. - name: 'Restore pre-built dependencies from cache'
  604. id: deps-cache
  605. uses: actions/[email protected]
  606. env:
  607. CACHE_NAME: 'deps-cache'
  608. with:
  609. path: ${{ github.workspace }}/cmbuild/deps
  610. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.WINDOWS_DEPS_VERSION }}
  611. - name: 'Restore VLC dependency from cache'
  612. id: vlc-cache
  613. uses: actions/[email protected]
  614. env:
  615. CACHE_NAME: 'vlc-cache'
  616. with:
  617. path: ${{ github.workspace }}/cmbuild/vlc
  618. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.WINDOWS_VLC_VERSION }}
  619. - name: 'Restore CEF dependency from cache (32 bit)'
  620. id: cef-cache
  621. uses: actions/[email protected]
  622. env:
  623. CACHE_NAME: 'cef-32-cache'
  624. with:
  625. path: ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows32_minimal
  626. key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_VERSION }}
  627. - name: 'Install prerequisite: QT'
  628. if: steps.qt-cache.outputs.cache-hit != 'true'
  629. run: |
  630. curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C -
  631. 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}/cmbuild/QT"
  632. - name: 'Install prerequisite: Pre-built dependencies'
  633. if: steps.deps-cache.outputs.cache-hit != 'true'
  634. run: |
  635. curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C -
  636. 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}/cmbuild/deps"
  637. - name: 'Install prerequisite: VLC'
  638. if: steps.vlc-cache.outputs.cache-hit != 'true'
  639. run: |
  640. curl -kL https://cdn-fastly.obsproject.com/downloads/vlc.zip -f --retry 5 -o vlc.zip
  641. 7z x vlc.zip -o"${{ github.workspace }}/cmbuild/vlc"
  642. - name: 'Install prerequisite: Chromium Embedded Framework'
  643. if: steps.cef-cache.outputs.cache-hit != 'true'
  644. run: |
  645. curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.CEF_VERSION }}_windows32_minimal.zip -f --retry 5 -o cef.zip
  646. 7z x cef.zip -o"${{ github.workspace }}/cmbuild"
  647. - name: 'Configure'
  648. run: |
  649. mkdir ./build
  650. mkdir ./build32
  651. cd ./build32
  652. cmake -G"${{ env.CMAKE_GENERATOR }}" -A"Win32" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DENABLE_VLC=ON -DBUILD_BROWSER=true -DCOMPILE_D3D12_HOOK=true -DVLCPath="${{ github.workspace }}/cmbuild/vlc" -DDepsPath="${{ github.workspace }}/cmbuild/deps/win32" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2019" -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_VERSION }}_windows32_minimal" -DTWITCH_CLIENTID='${{ env.TWITCH_CLIENTID }}' -DTWITCH_HASH='${{ env.TWITCH_HASH }}' -DRESTREAM_CLIENTID='${{ env.RESTREAM_CLIENTID }}' -DRESTREAM_HASH='${{ env.RESTREAM_HASH }}' -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE -DVIRTUALCAM_GUID=${{ env.VIRTUALCAM-GUID }} ..
  653. - name: 'Build'
  654. run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-studio.sln
  655. - name: 'Package'
  656. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  657. run: |
  658. $env:FILE_DATE=(Get-Date -UFormat "%F")
  659. $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win32.zip"
  660. echo "FILE_NAME=${env:FILE_NAME}" >> ${env:GITHUB_ENV}
  661. robocopy .\build32\rundir\RelWithDebInfo .\build\ /E /XF .gitignore
  662. 7z a ${env:FILE_NAME} .\build\*
  663. - name: 'Publish'
  664. if: success() && (github.event_name != 'pull_request' || env.SEEKING_TESTERS == '1')
  665. uses: actions/[email protected]
  666. with:
  667. name: '${{ env.FILE_NAME }}'
  668. path: '*-win32.zip'