123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- name: Publish
- run-name: Publish Repository Actions 🛫
- on:
- release:
- types:
- - published
- branches:
- - master
- - 'release/**'
- permissions:
- contents: read
- concurrency:
- group: '${{ github.workflow }} @ ${{ github.head_ref || github.ref }}'
- cancel-in-progress: true
- jobs:
- check-tag:
- name: Check Release Tag
- if: github.repository_owner == 'obsproject'
- runs-on: ubuntu-24.04
- outputs:
- validTag: ${{ steps.check.outputs.validTag }}
- flatpakMatrix: ${{ steps.check.outputs.flatpakMatrix }}
- updateChannel: ${{ steps.check.outputs.updateChannel }}
- 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 'flatpakMatrix=["beta", "stable"]' >> $GITHUB_OUTPUT
- echo 'updateChannel=stable' >> $GITHUB_OUTPUT
- ;;
- +([0-9]).+([0-9]).+([0-9])-@(beta|rc)*([0-9]) )
- echo 'validTag=true' >> $GITHUB_OUTPUT
- echo 'flatpakMatrix=["beta"]' >> $GITHUB_OUTPUT
- echo 'updateChannel=beta' >> $GITHUB_OUTPUT
- ;;
- *) echo 'validTag=false' >> $GITHUB_OUTPUT ;;
- esac
- flatpak-publish:
- name: Flathub 📦
- needs: check-tag
- if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag)
- runs-on: ubuntu-24.04
- defaults:
- run:
- shell: bash
- env:
- FLATPAK_BUILD_SHARE_PATH: flatpak_app/files/share
- 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 }}
- container:
- image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.6
- options: --privileged
- strategy:
- matrix:
- branch: ${{ fromJSON(needs.check-tag.outputs.flatpakMatrix) }}
- steps:
- - uses: actions/checkout@v4
- with:
- submodules: recursive
- fetch-depth: 0
- set-safe-directory: ${{ env.GITHUB_WORKSPACE }}
- - name: Set Up Environment 🔧
- id: setup
- env:
- GH_TOKEN: ${{ github.token }}
- run: |
- : Set Up Environment 🔧
- if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
- git config --global --add safe.directory "${GITHUB_WORKSPACE}"
- gh extension install actions/gh-actions-cache
- cache_key='flatpak-builder-${{ hashFiles('build-aux/**/*.json') }}'
- cache_ref='master'
- read -r key size unit _ ref _ <<< \
- "$(gh actions-cache list -B ${cache_ref} --key "${cache_key}-x86_64" | head -1)"
- if [[ "${key}" ]]; then
- echo "cacheHit=true" >> $GITHUB_OUTPUT
- else
- echo "cacheHit=false" >> $GITHUB_OUTPUT
- fi
- echo "cacheKey=${cache_key}" >> $GITHUB_OUTPUT
- echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT
- - name: Validate Flatpak manifest
- uses: ./.github/actions/flatpak-builder-lint
- with:
- artifact: manifest
- path: build-aux/com.obsproject.Studio.json
- - name: Build Flatpak Manifest
- uses: flathub-infra/flatpak-github-actions/flatpak-builder@e5fa5a8fe51d76f770ad9d240e4ad5898b1c6a53
- with:
- bundle: obs-studio-${{ steps.setup.outputs.commitHash }}.flatpak
- manifest-path: ${{ github.workspace }}/build-aux/com.obsproject.Studio.json
- cache: ${{ fromJSON(steps.setup.outputs.cacheHit) }}
- cache-key: ${{ steps.setup.outputs.cacheKey }}
- mirror-screenshots-url: https://dl.flathub.org/media
- branch: ${{ matrix.branch }}
- - name: Validate AppStream
- uses: ./.github/actions/flatpak-builder-lint
- with:
- artifact: appstream
- path: ${{ env.FLATPAK_BUILD_SHARE_PATH }}/metainfo/com.obsproject.Studio.metainfo.xml
- - name: Verify Icon and Metadata in app-info
- working-directory: ${{ env.FLATPAK_BUILD_SHARE_PATH }}
- run: |
- : Verify Icon and Metadata in app-info
- test -f app-info/icons/flatpak/128x128/com.obsproject.Studio.png || { echo "::error::Missing 128x128 icon in app-info"; exit 1; }
- test -f app-info/xmls/com.obsproject.Studio.xml.gz || { echo "::error::Missing com.obsproject.Studio.xml.gz in app-info"; exit 1; }
- - name: Validate build directory
- uses: ./.github/actions/flatpak-builder-lint
- with:
- artifact: builddir
- path: flatpak_app
- - name: Validate repository
- uses: ./.github/actions/flatpak-builder-lint
- with:
- artifact: repo
- path: repo
- - name: Publish to Flathub Beta
- uses: flathub-infra/flatpak-github-actions/flat-manager@e5fa5a8fe51d76f770ad9d240e4ad5898b1c6a53
- if: ${{ matrix.branch == 'beta' }}
- with:
- flat-manager-url: https://hub.flathub.org/
- repository: beta
- token: ${{ secrets.FLATHUB_BETA_TOKEN }}
- build-log-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- - name: Publish to Flathub
- uses: flathub-infra/flatpak-github-actions/flat-manager@e5fa5a8fe51d76f770ad9d240e4ad5898b1c6a53
- if: ${{ matrix.branch == 'stable' }}
- with:
- flat-manager-url: https://hub.flathub.org/
- repository: stable
- token: ${{ secrets.FLATHUB_TOKEN }}
- build-log-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
- steam-upload:
- name: Upload Steam Builds 🚂
- needs: check-tag
- if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag)
- runs-on: macos-14
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/steam-upload
- with:
- steamSecret: ${{ secrets.STEAM_SHARED_SECRET }}
- steamUser: ${{ secrets.STEAM_USER }}
- steamPassword: ${{ secrets.STEAM_PASSWORD }}
- workflowSecret: ${{ github.token }}
- tagName: ${{ github.ref_name }}
- preview: false
- windows-patches:
- name: Create Windows Patches 🩹
- needs: check-tag
- if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag)
- runs-on: windows-latest
- steps:
- - uses: actions/checkout@v4
- - uses: ./.github/actions/windows-patches
- with:
- tagName: ${{ github.ref_name }}
- workflowSecret: ${{ github.token }}
- channel: ${{ needs.check-tag.outputs.updateChannel }}
- gcsAccessKeyId: ${{ secrets.GCS_ACCESS_KEY_ID }}
- gcsAccessKeySecret: ${{ secrets.GCS_ACCESS_KEY_SECRET }}
|