publish.yaml 6.9 KB

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