publish.yaml 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. name: Publish
  2. run-name: Publish Repository Actions 🛫
  3. on:
  4. release:
  5. types:
  6. - published
  7. branches:
  8. - master
  9. - 'release/**'
  10. permissions:
  11. contents: read
  12. concurrency:
  13. group: '${{ github.workflow }} @ ${{ github.head_ref || github.ref }}'
  14. cancel-in-progress: true
  15. jobs:
  16. check-tag:
  17. name: Check Release Tag
  18. if: github.repository_owner == 'obsproject'
  19. runs-on: ubuntu-24.04
  20. outputs:
  21. validTag: ${{ steps.check.outputs.validTag }}
  22. flatpakMatrix: ${{ steps.check.outputs.flatpakMatrix }}
  23. updateChannel: ${{ steps.check.outputs.updateChannel }}
  24. steps:
  25. - name: Check Release Tag ☑️
  26. id: check
  27. run: |
  28. : Check Release Tag ☑️
  29. if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
  30. shopt -s extglob
  31. case "${GITHUB_REF_NAME}" in
  32. +([0-9]).+([0-9]).+([0-9]) )
  33. echo 'validTag=true' >> $GITHUB_OUTPUT
  34. echo 'flatpakMatrix=["beta", "stable"]' >> $GITHUB_OUTPUT
  35. echo 'updateChannel=stable' >> $GITHUB_OUTPUT
  36. ;;
  37. +([0-9]).+([0-9]).+([0-9])-@(beta|rc)*([0-9]) )
  38. echo 'validTag=true' >> $GITHUB_OUTPUT
  39. echo 'flatpakMatrix=["beta"]' >> $GITHUB_OUTPUT
  40. echo 'updateChannel=beta' >> $GITHUB_OUTPUT
  41. ;;
  42. *) echo 'validTag=false' >> $GITHUB_OUTPUT ;;
  43. esac
  44. flatpak-publish:
  45. name: Flathub 📦
  46. needs: check-tag
  47. if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag)
  48. runs-on: ubuntu-24.04
  49. defaults:
  50. run:
  51. shell: bash
  52. env:
  53. FLATPAK_BUILD_SHARE_PATH: flatpak_app/files/share
  54. TWITCH_CLIENTID: ${{ secrets.TWITCH_CLIENT_ID }}
  55. TWITCH_HASH: ${{ secrets.TWITCH_HASH }}
  56. RESTREAM_CLIENTID: ${{ secrets.RESTREAM_CLIENTID }}
  57. RESTREAM_HASH: ${{ secrets.RESTREAM_HASH }}
  58. YOUTUBE_CLIENTID: ${{ secrets.YOUTUBE_CLIENTID }}
  59. YOUTUBE_CLIENTID_HASH: ${{ secrets.YOUTUBE_CLIENTID_HASH }}
  60. YOUTUBE_SECRET: ${{ secrets.YOUTUBE_SECRET }}
  61. YOUTUBE_SECRET_HASH: ${{ secrets.YOUTUBE_SECRET_HASH }}
  62. container:
  63. image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.6
  64. options: --privileged
  65. strategy:
  66. matrix:
  67. branch: ${{ fromJSON(needs.check-tag.outputs.flatpakMatrix) }}
  68. steps:
  69. - uses: actions/checkout@v4
  70. with:
  71. submodules: recursive
  72. fetch-depth: 0
  73. set-safe-directory: ${{ env.GITHUB_WORKSPACE }}
  74. - name: Set Up Environment 🔧
  75. id: setup
  76. env:
  77. GH_TOKEN: ${{ github.token }}
  78. run: |
  79. : Set Up Environment 🔧
  80. if [[ "${RUNNER_DEBUG}" ]]; then set -x; fi
  81. git config --global --add safe.directory "${GITHUB_WORKSPACE}"
  82. gh extension install actions/gh-actions-cache
  83. cache_key='flatpak-builder-${{ hashFiles('build-aux/**/*.json') }}'
  84. cache_ref='master'
  85. read -r key size unit _ ref _ <<< \
  86. "$(gh actions-cache list -B ${cache_ref} --key "${cache_key}-x86_64" | head -1)"
  87. if [[ "${key}" ]]; then
  88. echo "cacheHit=true" >> $GITHUB_OUTPUT
  89. else
  90. echo "cacheHit=false" >> $GITHUB_OUTPUT
  91. fi
  92. echo "cacheKey=${cache_key}" >> $GITHUB_OUTPUT
  93. echo "commitHash=${GITHUB_SHA:0:9}" >> $GITHUB_OUTPUT
  94. - name: Validate Flatpak manifest
  95. uses: ./.github/actions/flatpak-builder-lint
  96. with:
  97. artifact: manifest
  98. path: build-aux/com.obsproject.Studio.json
  99. - name: Build Flatpak Manifest
  100. uses: flathub-infra/flatpak-github-actions/flatpak-builder@e5fa5a8fe51d76f770ad9d240e4ad5898b1c6a53
  101. with:
  102. bundle: obs-studio-${{ steps.setup.outputs.commitHash }}.flatpak
  103. manifest-path: ${{ github.workspace }}/build-aux/com.obsproject.Studio.json
  104. cache: ${{ fromJSON(steps.setup.outputs.cacheHit) }}
  105. cache-key: ${{ steps.setup.outputs.cacheKey }}
  106. mirror-screenshots-url: https://dl.flathub.org/media
  107. branch: ${{ matrix.branch }}
  108. - name: Validate AppStream
  109. uses: ./.github/actions/flatpak-builder-lint
  110. with:
  111. artifact: appstream
  112. path: ${{ env.FLATPAK_BUILD_SHARE_PATH }}/metainfo/com.obsproject.Studio.metainfo.xml
  113. - name: Verify Icon and Metadata in app-info
  114. working-directory: ${{ env.FLATPAK_BUILD_SHARE_PATH }}
  115. run: |
  116. : Verify Icon and Metadata in app-info
  117. test -f app-info/icons/flatpak/128x128/com.obsproject.Studio.png || { echo "::error::Missing 128x128 icon in app-info"; exit 1; }
  118. test -f app-info/xmls/com.obsproject.Studio.xml.gz || { echo "::error::Missing com.obsproject.Studio.xml.gz in app-info"; exit 1; }
  119. - name: Validate build directory
  120. uses: ./.github/actions/flatpak-builder-lint
  121. with:
  122. artifact: builddir
  123. path: flatpak_app
  124. - name: Validate repository
  125. uses: ./.github/actions/flatpak-builder-lint
  126. with:
  127. artifact: repo
  128. path: repo
  129. - name: Publish to Flathub Beta
  130. uses: flathub-infra/flatpak-github-actions/flat-manager@e5fa5a8fe51d76f770ad9d240e4ad5898b1c6a53
  131. if: ${{ matrix.branch == 'beta' }}
  132. with:
  133. flat-manager-url: https://hub.flathub.org/
  134. repository: beta
  135. token: ${{ secrets.FLATHUB_BETA_TOKEN }}
  136. build-log-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
  137. - name: Publish to Flathub
  138. uses: flathub-infra/flatpak-github-actions/flat-manager@e5fa5a8fe51d76f770ad9d240e4ad5898b1c6a53
  139. if: ${{ matrix.branch == 'stable' }}
  140. with:
  141. flat-manager-url: https://hub.flathub.org/
  142. repository: stable
  143. token: ${{ secrets.FLATHUB_TOKEN }}
  144. build-log-url: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
  145. steam-upload:
  146. name: Upload Steam Builds 🚂
  147. needs: check-tag
  148. if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag)
  149. runs-on: macos-14
  150. steps:
  151. - uses: actions/checkout@v4
  152. - uses: ./.github/actions/steam-upload
  153. with:
  154. steamSecret: ${{ secrets.STEAM_SHARED_SECRET }}
  155. steamUser: ${{ secrets.STEAM_USER }}
  156. steamPassword: ${{ secrets.STEAM_PASSWORD }}
  157. workflowSecret: ${{ github.token }}
  158. tagName: ${{ github.ref_name }}
  159. preview: false
  160. windows-patches:
  161. name: Create Windows Patches 🩹
  162. needs: check-tag
  163. if: github.repository_owner == 'obsproject' && fromJSON(needs.check-tag.outputs.validTag)
  164. runs-on: windows-latest
  165. steps:
  166. - uses: actions/checkout@v4
  167. - uses: ./.github/actions/windows-patches
  168. with:
  169. tagName: ${{ github.ref_name }}
  170. workflowSecret: ${{ github.token }}
  171. channel: ${{ needs.check-tag.outputs.updateChannel }}
  172. gcsAccessKeyId: ${{ secrets.GCS_ACCESS_KEY_ID }}
  173. gcsAccessKeySecret: ${{ secrets.GCS_ACCESS_KEY_SECRET }}