master push run 🚀 #1498
  
    
      This file contains hidden or 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: Push | |
| run-name: ${{ github.ref_name }} push run 🚀 | |
| on: | |
| push: | |
| paths-ignore: | |
| - '**.md' | |
| branches: | |
| - master | |
| - 'release/**' | |
| tags: | |
| - '*' | |
| permissions: | |
| contents: write | |
| jobs: | |
| check-format: | |
| name: Format 🔍 | |
| if: github.ref_name == 'master' | |
| uses: ./.github/workflows/check-format.yaml | |
| permissions: | |
| contents: read | |
| build-project: | |
| name: Build 🧱 | |
| uses: ./.github/workflows/build-project.yaml | |
| secrets: inherit | |
| permissions: | |
| contents: read | |
| compatibility-validation: | |
| name: Validate Compatibility 🕵️ | |
| if: github.ref_name == 'master' | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| checks: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check for Changed Files ✅ | |
| uses: ./.github/actions/check-changes | |
| id: checks | |
| with: | |
| baseRef: ${{ github.event.before }} | |
| checkGlob: plugins/win-capture/data/*.json | |
| - name: Check for Invalid Compatibility Data 📉 | |
| if: fromJSON(steps.checks.outputs.hasChangedFiles) | |
| uses: ./.github/actions/compatibility-validator | |
| with: | |
| repositorySecret: ${{ github.token }} | |
| services-validation: | |
| name: Validate Services 🕵️ | |
| if: github.ref_name == 'master' | |
| runs-on: ubuntu-24.04 | |
| permissions: | |
| checks: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check for Changed Files ✅ | |
| uses: ./.github/actions/check-changes | |
| id: checks | |
| with: | |
| baseRef: ${{ github.event.before }} | |
| checkGlob: plugins/rtmp-services/data/*.json | |
| - name: Check Services JSON Schema 📉 | |
| if: fromJSON(steps.checks.outputs.hasChangedFiles) | |
| uses: ./.github/actions/services-validator | |
| with: | |
| repositorySecret: ${{ github.token }} | |
| runSchemaChecks: true | |
| runServiceChecks: false | |
| update-documentation: | |
| name: Update Documentation 📖 | |
| if: github.repository_owner == 'obsproject' && (github.ref_name == 'master' || github.ref_type == 'tag') | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Check for Changed Files ✅ | |
| if: github.ref_type != 'tag' | |
| uses: ./.github/actions/check-changes | |
| id: checks | |
| with: | |
| baseRef: ${{ github.event.before }} | |
| checkGlob: '!(cmake*)' | |
| - uses: ./.github/actions/generate-docs | |
| if: github.ref_type == 'tag' || fromJSON(steps.checks.outputs.hasChangedFiles) | |
| with: | |
| disableLinkExtensions: ${{ github.ref_type == 'tag' }} | |
| deploy-documentation: | |
| name: Deploy Documentation to Cloudflare ☁️ | |
| if: github.repository_owner == 'obsproject' && github.ref_type == 'tag' | |
| runs-on: ubuntu-24.04 | |
| needs: update-documentation | |
| defaults: | |
| run: | |
| shell: bash | |
| environment: | |
| name: cf-pages-deploy | |
| steps: | |
| - name: Get Commit Information 🆔 | |
| id: setup | |
| run: | | |
| : Get Commit Hash 🆔 | |
| echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: OBS Studio Docs (No Extensions) ${{ steps.setup.outputs.commitHash }} | |
| path: docs | |
| - name: Set Up Redirects 🔄 | |
| run: | | |
| : Set Up Redirects 🔄 | |
| if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi | |
| echo "/previous/27.2 https://obsproject.com/docs/27.2 302" >> docs/_redirects | |
| echo "/previous/:major.:minor https://:major-:minor.${{ vars.CF_PAGES_PROJECT }}.pages.dev 302" >> docs/_redirects | |
| - name: Publish to Live Page | |
| uses: cloudflare/wrangler-action@f84a562284fc78278ff9052435d9526f9c718361 | |
| with: | |
| workingDirectory: docs | |
| apiToken: ${{ secrets.CF_API_TOKEN }} | |
| accountId: ${{ secrets.CF_ACCOUNT_ID }} | |
| command: pages publish . --project-name=${{ vars.CF_PAGES_PROJECT }} --commit-hash='${{ steps.setup.outputs.commitHash }}' | |
| create-appcast: | |
| name: Create Sparkle Appcast 🎙️ | |
| if: github.repository_owner == 'obsproject' && github.ref_type == 'tag' | |
| runs-on: macos-15 | |
| needs: build-project | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| target: [arm64, x86_64] | |
| defaults: | |
| run: | |
| shell: zsh --no-rcs --errexit --pipefail {0} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| fetch-depth: 0 | |
| ref: ${{ github.ref }} | |
| - name: Set Up Environment 🔧 | |
| id: setup | |
| run: | | |
| : Set Up Environment 🔧 | |
| if (( ${+RUNNER_DEBUG} )) setopt XTRACE | |
| local channel='stable' | |
| if [[ ${GITHUB_REF_NAME} == *(beta|rc)* ]] { | |
| channel='beta' | |
| } | |
| local -A arch_names=(x86_64 intel arm64 apple) | |
| print "cpuName=${arch_names[${{ matrix.target }}]}" >> $GITHUB_OUTPUT | |
| print "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT | |
| print "channel=${channel}" >> $GITHUB_OUTPUT | |
| - name: Download Artifact 📥 | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: obs-studio-macos-${{ matrix.target }}-${{ steps.setup.outputs.commitHash }} | |
| - name: Generate Appcast 🎙️ | |
| id: generate-appcast | |
| uses: ./.github/actions/sparkle-appcast | |
| with: | |
| sparklePrivateKey: ${{ secrets.SPARKLE_PRIVATE_KEY }} | |
| baseImage: ${{ github.workspace }}/obs-studio-*-macos-${{ steps.setup.outputs.cpuName }}.dmg | |
| channel: ${{ steps.setup.outputs.channel }} | |
| count: 1 | |
| urlPrefix: 'https://cdn-fastly.obsproject.com/downloads' | |
| customTitle: 'OBS Studio' | |
| customLink: 'https://obsproject.com/' | |
| - name: Upload Artifacts 📡 | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: macos-sparkle-update-${{ matrix.target }} | |
| path: ${{ github.workspace }}/output | |
| merge-appcasts: | |
| runs-on: ubuntu-24.04 | |
| needs: create-appcast | |
| steps: | |
| - name: Merge Appcasts | |
| uses: actions/upload-artifact/merge@v4 | |
| with: | |
| name: macos-sparkle-update | |
| pattern: macos-sparkle-update-* | |
| delete-merged: true | |
| sign-windows-build: | |
| name: Windows Signing ✍️ | |
| uses: obsproject/obs-studio/.github/workflows/sign-windows.yaml@68c01125d2300a236a93ec693376b491f1173744 | |
| if: github.repository_owner == 'obsproject' && github.ref_type == 'tag' | |
| needs: build-project | |
| permissions: | |
| contents: 'read' | |
| id-token: 'write' | |
| attestations: 'write' | |
| secrets: inherit | |
| create-release: | |
| name: Create Release 🛫 | |
| if: github.ref_type == 'tag' | |
| runs-on: ubuntu-24.04 | |
| needs: [build-project, sign-windows-build] | |
| defaults: | |
| run: | |
| shell: bash | |
| steps: | |
| - name: Check Release Tag ☑️ | |
| id: check | |
| run: | | |
| : Check Release Tag ☑️ | |
| if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi | |
| shopt -s extglob | |
| case "${GITHUB_REF_NAME}" in | |
| +([0-9]).+([0-9]).+([0-9]) ) | |
| echo 'validTag=true' >> $GITHUB_OUTPUT | |
| echo 'prerelease=false' >> $GITHUB_OUTPUT | |
| echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT | |
| ;; | |
| +([0-9]).+([0-9]).+([0-9])-@(beta|rc)*([0-9]) ) | |
| echo 'validTag=true' >> $GITHUB_OUTPUT | |
| echo 'prerelease=true' >> $GITHUB_OUTPUT | |
| echo "version=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT | |
| ;; | |
| *) echo 'validTag=false' >> $GITHUB_OUTPUT ;; | |
| esac | |
| - name: Download Build Artifacts 📥 | |
| uses: actions/download-artifact@v4 | |
| if: ${{ fromJSON(steps.check.outputs.validTag) }} | |
| - name: Rename Files 🏷️ | |
| if: fromJSON(steps.check.outputs.validTag) | |
| run: | | |
| : Rename Files 🏷️ | |
| if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi | |
| root_dir="${PWD}" | |
| commit_hash="${GITHUB_SHA:0:9}" | |
| macos_arm64_artifact_name="obs-studio-macos-arm64-${commit_hash}" | |
| macos_arm64_dsym_artifact_name="obs-studio-macos-arm64-${commit_hash}-dSYMs" | |
| macos_intel_artifact_name="obs-studio-macos-x86_64-${commit_hash}" | |
| macos_intel_dsym_artifact_name="obs-studio-macos-x86_64-${commit_hash}-dSYMs" | |
| ubuntu_2404_x86_64_artifact_name="obs-studio-ubuntu-24.04-x86_64-${commit_hash}" | |
| ubuntu_2404_x86_64_debug_name="obs-studio-ubuntu-24.04-x86_64-${commit_hash}-dbgsym" | |
| ubuntu_2404_sources_name="obs-studio-ubuntu-24.04-sources-${commit_hash}" | |
| windows_x64_artifact_name="obs-studio-windows-x64-${{ steps.check.outputs.version }}-signed" | |
| windows_x64_installer_name="obs-studio-windows-x64-${{ steps.check.outputs.version }}-installer" | |
| windows_x64_debug_name="obs-studio-windows-x64-${{ steps.check.outputs.version }}-pdbs" | |
| windows_arm64_artifact_name="obs-studio-windows-arm64-${{ steps.check.outputs.version }}-signed" | |
| windows_arm64_debug_name="obs-studio-windows-arm64-${{ steps.check.outputs.version }}-pdbs" | |
| echo '::group::Renaming Artifacts' | |
| mv -v "${macos_arm64_artifact_name}/"obs-studio-*-macos-apple.dmg \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-macOS-Apple.dmg | |
| mv -v "${macos_arm64_dsym_artifact_name}/"obs-studio-*-macos-apple-dSYMs.tar.xz \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-macOS-Apple-dSYMs.tar.xz | |
| mv -v "${macos_intel_artifact_name}/"obs-studio-*-macos-intel.dmg \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-macOS-Intel.dmg | |
| mv -v "${macos_intel_dsym_artifact_name}/"obs-studio-*-macos-intel-dSYMs.tar.xz \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-macOS-Intel-dSYMs.tar.xz | |
| mv -v "${ubuntu_2404_x86_64_artifact_name}/"obs-studio-*-x86_64-ubuntu-gnu.deb \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Ubuntu-24.04-x86_64.deb | |
| mv -v "${ubuntu_2404_x86_64_debug_name}/"obs-studio-*-x86_64-ubuntu-gnu-dbgsym.ddeb \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Ubuntu-24.04-x86_64-dbsym.ddeb | |
| mv -v "${ubuntu_2404_sources_name}/"obs-studio-*-sources.tar.gz \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Sources.tar.gz | |
| mv -v "${windows_x64_artifact_name}/"OBS-Studio-*.zip \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Windows-x64.zip | |
| mv -v "${windows_x64_installer_name}/"OBS-Studio-*.exe \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Windows-x64-Installer.exe | |
| mv -v "${windows_x64_debug_name}/"OBS-Studio-*-pdbs.zip \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Windows-x64-PDBs.zip | |
| mv -v "${windows_arm64_artifact_name}/"OBS-Studio-*.zip \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Windows-arm64.zip | |
| mv -v "${windows_arm64_debug_name}/"OBS-Studio-*-pdbs.zip \ | |
| "${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Windows-arm64-PDBs.zip | |
| echo '::endgroup::' | |
| - name: Generate Checksums 🪪 | |
| if: fromJSON(steps.check.outputs.validTag) | |
| run: | | |
| : Generate Checksums 🪪 | |
| if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi | |
| shopt -s extglob | |
| echo "### Checksums" > ${{ github.workspace }}/CHECKSUMS.txt | |
| for file in ${{ github.workspace }}/@(*.deb|*.ddeb|*.dmg|*.tar.xz|*.tar.gz|*.exe|*.zip); do | |
| echo " ${file##*/}: $(sha256sum "${file}" | cut -d " " -f 1)" >> ${{ github.workspace }}/CHECKSUMS.txt | |
| done | |
| - name: Create Release 🛫 | |
| if: fromJSON(steps.check.outputs.validTag) | |
| id: create_release | |
| uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191 | |
| with: | |
| draft: true | |
| prerelease: ${{ fromJSON(steps.check.outputs.prerelease) }} | |
| tag_name: ${{ steps.check.outputs.version }} | |
| name: OBS Studio ${{ steps.check.outputs.version }} | |
| body_path: ${{ github.workspace }}/CHECKSUMS.txt | |
| files: | | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-macOS-*.dmg | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-macOS-*-dSYMs.tar.xz | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Ubuntu-*.deb | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Ubuntu-*.ddeb | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Sources.tar.gz | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Windows-x64.zip | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Windows-x64-Installer.exe | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Windows-x64-PDBs.zip | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Windows-arm64.zip | |
| ${{ github.workspace }}/OBS-Studio-${{ steps.check.outputs.version }}-Windows-arm64-PDBs.zip |