master push run 🚀 #18
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: 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-22.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-22.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-22.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-22.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@4c10c1822abba527d820b29e6333e7f5dac2cabd | |
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-14 | |
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-22.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@ffd5879ec95f09e4e551b839f5fe6738058231c1 | |
if: github.repository_owner == 'obsproject' && github.ref_type == 'tag' | |
needs: build-project | |
permissions: | |
contents: 'read' | |
id-token: 'write' | |
secrets: inherit | |
create-release: | |
name: Create Release 🛫 | |
if: github.ref_type == 'tag' | |
runs-on: ubuntu-22.04 | |
needs: build-project | |
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_x86_64_artifact_name="obs-studio-ubuntu-22.04-x86_64-${commit_hash}" | |
ubuntu_x86_64_debug_name="obs-studio-ubuntu-22.04-x86_64-${commit_hash}-dbgsym" | |
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_x86_64_artifact_name}/"obs-studio-*-x86_64-linux-gnu.deb \ | |
"${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Ubuntu-x86_64.deb | |
mv -v "${ubuntu_x86_64_debug_name}/"obs-studio-*-x86_64-linux-gnu-dbgsym.ddeb \ | |
"${root_dir}"/OBS-Studio-${{ steps.check.outputs.version }}-Ubuntu-x86_64-dbsym.ddeb | |
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); 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@d4e8205d7e959a9107da6396278b2f1f07af0f9b | |
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 |