Publish Repository Actions 🛫 #29
Workflow file for this run
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: 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 }} |