123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393 |
- name: Plugin Build
- on:
- push:
- paths-ignore:
- - '**.md'
- branches:
- - master
- tags:
- - '*'
- pull_request:
- paths-ignore:
- - '**.md'
- branches:
- - master
- env:
- PLUGIN_NAME: 'obs-plugintemplate'
- jobs:
- clang_check:
- name: 01 - Code Format Check
- runs-on: ubuntu-20.04
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- submodules: recursive
- - name: Install clang-format
- run: sudo apt-get install -y clang-format-12
- - name: Run clang-format
- run: ./.github/scripts/check-format.sh && ./.github/scripts/check-changes.sh
- - name: Install cmake-format
- run: sudo pip install cmakelang
- - name: Run cmake-format
- run: ./.github/scripts/check-cmake.sh
- macos_build:
- name: 02 - macOS
- runs-on: macos-11
- strategy:
- fail-fast: true
- matrix:
- arch: [x86_64, arm64, universal]
- if: always()
- needs: [clang_check]
- outputs:
- commitHash: ${{ steps.setup.outputs.commitHash }}
- env:
- CODESIGN_IDENT: '-'
- CODESIGN_IDENT_INSTALLER: ''
- MACOSX_DEPLOYMENT_TARGET: '10.15'
- defaults:
- run:
- shell: zsh {0}
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- path: plugin
- submodules: recursive
- - name: Checkout obs-studio
- uses: actions/checkout@v3
- with:
- repository: 'obsproject/obs-studio'
- path: obs-studio
- fetch-depth: 0
- submodules: recursive
- - name: Setup Environment
- id: setup
- working-directory: ${{ github.workspace }}/plugin
- run: |
- ## SETUP ENVIRONMENT SCRIPT
- print '::group::Clean Homebrew Environment'
- typeset -a to_remove=()
- for formula (speexdsp curl php) {
- if [[ -d ${HOMEBREW_PREFIX}/opt/${formula} ]] to_remove+=(${formula})
- }
- if (( #to_remove > 0 )) brew uninstall --ignore-dependencies ${to_remove}
- print '::endgroup::'
- print '::group::Set up code signing'
- if [[ '${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}' != '' && \
- '${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}' != '' && \
- '${{ secrets.MACOS_SIGNING_CERT }}' != '' ]] {
- print '::set-output name=haveCodesignIdent::true'
- } else {
- print '::set-output name=haveCodesignIdent::false'
- }
- if [[ '${{ secrets.MACOS_NOTARIZATION_USERNAME }}' != '' && \
- '${{ secrets.MACOS_NOTARIZATION_PASSWORD }}' != '' ]] {
- print '::set-output name=haveNotarizationUser::true'
- } else {
- print '::set-output name=haveNotarizationUser::false'
- }
- print '::endgroup::'
- print "::set-output name=ccacheDate::$(date +"%Y-%m-%d")"
- print "::set-output name=commitHash::${"$(git rev-parse HEAD)"[0,9]}"
- - name: Restore Compilation Cache
- id: ccache-cache
- uses: actions/cache@v2.1.7
- with:
- path: ${{ github.workspace }}/.ccache
- key: macos-${{ matrix.arch }}-ccache-plugin-${{ steps.setup.outputs.ccacheDate }}
- restore-keys: |
- macos-${{ matrix.arch }}-ccache-plugin-
- - name: Check for GitHub Labels
- id: seekingTesters
- if: ${{ github.event_name == 'pull_request' }}
- run: |
- if [[ -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')" ]] {
- print '::set-output name=found::true'
- } else {
- print '::set-output name=found::false'
- }
- - name: Install Apple Developer Certificate
- if: ${{ github.event_name != 'pull_request' && steps.setup.outputs.haveCodesignIdent == 'true' }}
- uses: apple-actions/import-codesign-certs@253ddeeac23f2bdad1646faac5c8c2832e800071
- with:
- p12-file-base64: ${{ secrets.MACOS_SIGNING_CERT }}
- p12-password: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }}
- - name: Set Signing Identity
- if: ${{ github.event_name != 'pull_request' && steps.setup.outputs.haveCodesignIdent == 'true' }}
- run: |
- print "CODESIGN_IDENT=${{ secrets.MACOS_SIGNING_APPLICATION_IDENTITY }}" >> $GITHUB_ENV
- print "CODESIGN_IDENT_INSTALLER=${{ secrets.MACOS_SIGNING_INSTALLER_IDENTITY }}" >> $GITHUB_ENV
- - name: Build Plugin
- uses: ./plugin/.github/actions/build-plugin
- with:
- workingDirectory: ${{ github.workspace }}/plugin
- target: ${{ matrix.arch }}
- config: RelWithDebInfo
- codesign: 'true'
- codesignIdent: ${{ env.CODESIGN_IDENT }}
- - name: Package Plugin
- uses: ./plugin/.github/actions/package-plugin
- with:
- workingDirectory: ${{ github.workspace }}/plugin
- target: ${{ matrix.arch }}
- config: RelWithDebInfo
- codesign: ${{ github.event_name != 'pull_request' && steps.setup.outputs.haveCodesignIdent == 'true' }}
- notarize: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' && steps.setup.outputs.haveNotarizationUser == 'true' }}
- codesignIdent: ${{ env.CODESIGN_IDENT }}
- installerIdent: ${{ env.CODESIGN_IDENT_INSTALLER }}
- codesignUser: ${{ secrets.MACOS_NOTARIZATION_USERNAME }}
- codesignPass: ${{ secrets.MACOS_NOTARIZATION_PASSWORD }}
- - name: Upload Build Artifact
- if: ${{ success() && (github.event_name != 'pull_request' || steps.seekingTesters.outputs.found == 'true') }}
- uses: actions/upload-artifact@v3
- with:
- name: ${{ env.PLUGIN_NAME }}-macos-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}
- path: ${{ github.workspace }}/plugin/release/${{ env.PLUGIN_NAME }}-*-macos-*.pkg
- linux_build:
- name: 02 - Linux
- runs-on: ubuntu-20.04
- strategy:
- fail-fast: true
- matrix:
- arch: [x86_64]
- if: always()
- needs: [clang_check]
- outputs:
- commitHash: ${{ steps.setup.outputs.commitHash }}
- defaults:
- run:
- shell: bash
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- path: plugin
- submodules: recursive
- - name: Checkout obs-studio
- uses: actions/checkout@v3
- with:
- repository: 'obsproject/obs-studio'
- path: obs-studio
- fetch-depth: 0
- submodules: recursive
- - name: Setup Environment
- working-directory: ${{ github.workspace }}/plugin
- id: setup
- run: |
- ## SETUP ENVIRONMENT SCRIPT
- echo "::set-output name=ccacheDate::$(date +"%Y-%m-%d")"
- echo "::set-output name=commitHash::$(git rev-parse HEAD | cut -c1-9)"
- - name: Restore Compilation Cache
- id: ccache-cache
- uses: actions/cache@v2.1.7
- with:
- path: ${{ github.workspace }}/.ccache
- key: linux-${{ matrix.arch }}-ccache-plugin-${{ steps.setup.outputs.ccacheDate }}
- restore-keys: |
- linux-${{ matrix.arch }}-ccache-plugin-
- - name: Check for GitHub Labels
- id: seekingTesters
- if: ${{ github.event_name == 'pull_request' }}
- run: |
- ## GITHUB LABEL SCRIPT
- if [[ -n "$(curl -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" -s "${{ github.event.pull_request.url }}" | jq -e '.labels[] | select(.name == "Seeking Testers")')" ]]; then
- echo '::set-output name=found::true'
- else
- echo '::set-output name=found::false'
- fi
- - name: Build Plugin
- uses: ./plugin/.github/actions/build-plugin
- with:
- workingDirectory: ${{ github.workspace }}/plugin
- target: ${{ matrix.arch }}
- config: RelWithDebInfo
- codesign: ${{ env.HAVE_CODESIGN_IDENTITY }}
- - name: Package Plugin
- uses: ./plugin/.github/actions/package-plugin
- with:
- workingDirectory: ${{ github.workspace }}/plugin
- target: ${{ matrix.arch }}
- config: RelWithDebInfo
- - name: Upload Build Artifact
- if: ${{ success() && (github.event_name != 'pull_request' || steps.seekingTesters.outputs.found == 'true') }}
- uses: actions/upload-artifact@v3
- with:
- name: ${{ env.PLUGIN_NAME }}-linux-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}
- path: ${{ github.workspace }}/plugin/release/${{ env.PLUGIN_NAME }}-*-linux.*
- windows_build:
- name: 02 - Windows
- runs-on: windows-2022
- strategy:
- fail-fast: true
- matrix:
- arch: [x86, x64]
- if: always()
- needs: [clang_check]
- outputs:
- commitHash: ${{ steps.setup.outputs.commitHash }}
- defaults:
- run:
- shell: pwsh
- steps:
- - name: Checkout
- uses: actions/checkout@v3
- with:
- path: plugin
- submodules: recursive
- - name: Checkout obs-studio
- uses: actions/checkout@v3
- with:
- repository: 'obsproject/obs-studio'
- path: obs-studio
- fetch-depth: 0
- submodules: recursive
- - name: Setup Environment
- working-directory: ${{ github.workspace }}/plugin
- id: setup
- run: |
- ## SETUP ENVIRONMENT SCRIPT
- $CommitHash = (git rev-parse HEAD)[0..8] -join ''
- Write-Output "::set-output name=commitHash::${CommitHash}"
- - name: Check for GitHub Labels
- id: seekingTesters
- working-directory: ${{ github.workspace }}/plugin
- if: ${{ github.event_name == 'pull_request' }}
- run: |
- ## GITHUB LABEL SCRIPT
- $LabelFound = try {
- $Params = @{
- Authentication = 'Bearer'
- Token = (ConvertTo-SecureString '${{ secrets.GITHUB_TOKEN }}' -AsPlainText)
- Uri = '${{ github.event.pull_request.url }}'
- UseBasicParsing = $true
- }
- (Invoke-RestMethod @Params).labels.name.contains('Seeking Testers')
- } catch {
- $false
- }
- Write-Output "::set-output name=found::$(([string]${LabelFound}).ToLower())"
- - name: Build Plugin
- uses: ./plugin/.github/actions/build-plugin
- with:
- workingDirectory: ${{ github.workspace }}/plugin
- target: ${{ matrix.arch }}
- config: RelWithDebInfo
- visualStudio: 'Visual Studio 17 2022'
- - name: Package Plugin
- uses: ./plugin/.github/actions/package-plugin
- with:
- workingDirectory: ${{ github.workspace }}/plugin
- target: ${{ matrix.arch }}
- config: RelWithDebInfo
- - name: Upload Build Artifact
- if: ${{ success() && (github.event_name != 'pull_request' || steps.seekingTesters.outputs.found == 'true') }}
- uses: actions/upload-artifact@v3
- with:
- name: ${{ env.PLUGIN_NAME }}-windows-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}
- path: ${{ github.workspace }}/plugin/release/${{ env.PLUGIN_NAME }}-*.zip
- - name: Package Plugin Installer
- if: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' }}
- uses: ./plugin/.github/actions/package-plugin
- with:
- workingDirectory: ${{ github.workspace }}/plugin
- target: ${{ matrix.arch }}
- config: RelWithDebInfo
- createInstaller: true
- - name: Upload Installer Artifact
- if: ${{ startsWith(github.ref, 'refs/tags/') && github.event_name != 'pull_request' }}
- uses: actions/upload-artifact@v3
- with:
- name: ${{ env.PLUGIN_NAME }}-windows-${{ matrix.arch }}-${{ steps.setup.outputs.commitHash }}-installer
- path: ${{ github.workspace }}/plugin/release/${{ env.PLUGIN_NAME }}-*.exe
- make-release:
- name: 03 - Create and upload release
- runs-on: ubuntu-20.04
- if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
- needs: [macos_build, linux_build, windows_build]
- defaults:
- run:
- shell: bash
- steps:
- - name: Get Metadata
- id: metadata
- run: |
- ## METADATA SCRIPT
- echo "::set-output name=version::${GITHUB_REF/refs\/tags\//}"
- echo "::set-output name=date::$(date +"%Y-%m-%d")"
- echo '::set-output name=commitHash::${{ needs.macos_build.outputs.commitHash }}'
- - name: Download build artifacts
- uses: actions/download-artifact@v3
- - name: Generate Checksums
- run: |
- ## CHECKSUM GENERATION SCRIPT
- shopt -s extglob
- echo "### Checksums" > ${{ github.workspace }}/CHECKSUMS.txt
- for file in ${{ github.workspace }}/**/@(*.pkg|*.exe|*.deb|*.zip); do
- echo " ${file##*/}: $(sha256sum "${file}" | cut -d " " -f 1)" >> ${{ github.workspace }}/CHECKSUMS.txt
- done
- - name: Create Release
- id: create_release
- uses: softprops/action-gh-release@1e07f4398721186383de40550babbdf2b84acfc5
- with:
- draft: false
- prerelease: false
- tag_name: ${{ steps.metadata.outputs.version }}
- name: "${{ env.PLUGIN_NAME }} Build ${{ steps.metadata.outputs.version }}"
- body_path: ${{ github.workspace }}/CHECKSUMS.txt
- files: |
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-windows-x64-${{ steps.metadata.outputs.commitHash }}/*.zip
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-windows-x64-${{ steps.metadata.outputs.commitHash }}-installer/*.exe
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-windows-x86-${{ steps.metadata.outputs.commitHash }}/*.zip
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-windows-x86-${{ steps.metadata.outputs.commitHash }}-installer/*.exe
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-linux-x86_64-${{ steps.metadata.outputs.commitHash }}/*.deb
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-macos-x86_64-${{ steps.metadata.outputs.commitHash }}/*.pkg
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-macos-arm64-${{ steps.metadata.outputs.commitHash }}/*.pkg
- ${{ github.workspace }}/${{ env.PLUGIN_NAME }}-macos-universal-${{ steps.metadata.outputs.commitHash }}/*.pkg
|