--- # This action is a candidate to centrally manage in https://github.com//.github/ # If more Flathub applications are developed, consider moving this action to the organization's .github repository, # using the `flathub-pkg` repository label to identify repositories that should trigger this workflow. # Update Flathub on release events. name: Update flathub repo on: release: types: [released] concurrency: group: "${{ github.workflow }}-${{ github.event.release.tag_name }}" cancel-in-progress: true jobs: update-flathub-repo: env: FLATHUB_PKG: dev.lizardbyte.app.${{ github.event.repository.name }} if: >- github.repository_owner == 'LizardByte' runs-on: ubuntu-latest steps: - name: Check if flathub repo env: TOPIC: flathub-pkg id: check-label uses: actions/github-script@v7 with: script: | const topic = process.env.TOPIC; console.log(`Checking if repo has topic: ${topic}`); const repoTopics = await github.rest.repos.getAllTopics({ owner: context.repo.owner, repo: context.repo.repo }); console.log(`Repo topics: ${repoTopics.data.names}`); const hasTopic = repoTopics.data.names.includes(topic); console.log(`Has topic: ${hasTopic}`); core.setOutput('hasTopic', hasTopic); - name: Check if latest GitHub release id: check-release if: >- steps.check-label.outputs.hasTopic == 'true' uses: actions/github-script@v7 with: script: | const latestRelease = await github.rest.repos.getLatestRelease({ owner: context.repo.owner, repo: context.repo.repo }); core.setOutput('isLatestRelease', latestRelease.data.tag_name === context.payload.release.tag_name); - name: Checkout if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' uses: actions/checkout@v4 - name: Checkout flathub-repo if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' uses: actions/checkout@v4 with: repository: "flathub/${{ env.FLATHUB_PKG }}" path: "flathub/${{ env.FLATHUB_PKG }}" - name: Clean up legacy files if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' working-directory: flathub/${{ env.FLATHUB_PKG }} run: | rm -rf ./* - name: Copy github files if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' working-directory: flathub/${{ env.FLATHUB_PKG }} run: | mkdir -p .github/ISSUE_TEMPLATE # sponsors curl -sSL https://github.com/LizardByte/.github/raw/refs/heads/master/.github/FUNDING.yml \ -o .github/FUNDING.yml # pull request template curl -sSL https://github.com/LizardByte/.github/raw/refs/heads/master/.github/pull_request_template.md \ -o .github/pull_request_template.md # issue config curl -sSL https://github.com/LizardByte/.github/raw/refs/heads/master/.github/ISSUE_TEMPLATE/config.yml \ -o .github/ISSUE_TEMPLATE/config.yml - name: Download release asset id: download if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' uses: robinraju/release-downloader@v1.11 with: repository: "${{ github.repository }}" tag: "${{ github.event.release.tag_name }}" fileName: "flathub.tar.gz" tarBall: false zipBall: false out-file-path: "flathub/${{ env.FLATHUB_PKG }}" extract: true - name: Delete arhive if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' run: | rm -f flathub/${{ env.FLATHUB_PKG }}/flathub.tar.gz - name: Update metainfo.xml id: update_metainfo if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' run: | xml_file="flathub/${{ env.FLATHUB_PKG }}/${{ env.FLATHUB_PKG }}.metainfo.xml" # Extract release information version="${{ github.event.release.tag_name }}" && version="${version#v}" date="${{ github.event.release.published_at }}" && date="${date%%T*}" changelog="${{ github.event.release.body }}" && changelog="${changelog//&/&}" && \ changelog="${changelog///>}" # Store the old release information into a temp file to be used for precise replacement tmpfile=$(mktemp) # Match the existing block, replace it with the new data awk -v version="$version" -v date="$date" -v changelog="$changelog" ' BEGIN { replaced = 0 } // { if (!replaced) { print "" print "

" changelog "

" print "
" replaced = 1 } } !// && !/<\/release>/ { print $0 } ' "$xml_file" > "$tmpfile" # Move the updated file back to the original location mv "$tmpfile" "$xml_file" - name: Update submodule if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' run: | # Get the current commit of the submodule in the main repository git submodule update --init packaging/linux/flatpak/deps/shared-modules cd ${{ github.workspace }}/packaging/linux/flatpak/deps/shared-modules main_commit=$(git rev-parse HEAD) # update submodules cd ${{ github.workspace }}/flathub/${{ env.FLATHUB_PKG }} git submodule update --init shared-modules cd shared-modules git checkout $main_commit - name: Create/Update Pull Request if: >- steps.check-label.outputs.hasTopic == 'true' && steps.check-release.outputs.isLatestRelease == 'true' && fromJson(steps.download.outputs.downloaded_files)[0] uses: peter-evans/create-pull-request@v7 with: path: "flathub/${{ env.FLATHUB_PKG }}" token: ${{ secrets.GH_BOT_TOKEN }} commit-message: "chore: Update ${{ env.FLATHUB_PKG }} to ${{ github.event.release.tag_name }}" branch: bot/bump-${{ env.FLATHUB_PKG }}-${{ github.event.release.tag_name }} delete-branch: true title: "chore: Update ${{ env.FLATHUB_PKG }} to ${{ github.event.release.tag_name }}" body: ${{ github.event.release.body }}