publish.yaml 6.5 KB

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