Deploy Flatpak (Flathub) #8
This file contains hidden or 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
| # Deploy Flatpak (Flathub) | |
| # | |
| # AppStream release history (gui/*.metainfo.xml) is maintained manually for Flathub — not overwritten from CMake. | |
| # | |
| # Architecture: x86_64 (build verification) — Flathub itself builds both x86_64 + aarch64 | |
| # Output: Flatpak bundle published to Dropbox (rolling + versioned) until Flathub listing is live. | |
| # | |
| # Manifest is kept in sync with: | |
| # https://github.com/ForWard-Technologies-LLC/flathub/blob/add-pylux/io.github.ForWard_Technologies_LLC.Pylux.yml | |
| name: Deploy Flatpak (Flathub) | |
| on: | |
| workflow_dispatch: | |
| workflow_call: | |
| outputs: | |
| chiaki_version: | |
| description: Pylux version from CMakeLists.txt | |
| value: ${{ jobs.build-and-verify.outputs.chiaki_version }} | |
| flatpak_build_succeeded: | |
| description: Whether the Flatpak CI verify build succeeded | |
| value: ${{ jobs.build-and-verify.outputs.flatpak_build_succeeded }} | |
| flatpak_url: | |
| description: Dropbox direct URL for rolling flatpak bundle (dl=1) | |
| value: ${{ jobs.build-and-verify.outputs.flatpak_url }} | |
| flatpak_install_command: | |
| description: Download and install the Dropbox-hosted bundle | |
| value: ${{ jobs.build-and-verify.outputs.flatpak_install_command }} | |
| flatpak_run_command: | |
| description: Launch Pylux after install | |
| value: ${{ jobs.build-and-verify.outputs.flatpak_run_command }} | |
| concurrency: | |
| group: deploy-flatpak-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build-and-verify: | |
| name: Build and verify Flatpak (x86_64) | |
| runs-on: ubuntu-latest | |
| outputs: | |
| chiaki_version: ${{ steps.extract_version.outputs.version }} | |
| flatpak_build_succeeded: ${{ steps.flatpak_build.outcome == 'success' }} | |
| flatpak_url: ${{ steps.flatpak_dropbox.outputs.url }} | |
| flatpak_install_command: ${{ steps.flatpak_install_cmd.outputs.install }} | |
| flatpak_run_command: ${{ steps.flatpak_install_cmd.outputs.run }} | |
| container: | |
| image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.10 | |
| options: --privileged | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| submodules: recursive | |
| - name: Extract version | |
| id: extract_version | |
| uses: ./.github/actions/extract-version | |
| - name: Patch manifest to build from local checkout | |
| run: | | |
| sed -i '/^ - name: pylux/,/^ - name:\|^$/{ | |
| s| - type: git| - type: dir| | |
| s| url:.*| path: ../../| | |
| /commit:/d | |
| }' scripts/flatpak/io.github.ForWard_Technologies_LLC.Pylux.yml | |
| - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 | |
| id: flatpak_build | |
| with: | |
| bundle: pylux-x64.flatpak | |
| manifest-path: scripts/flatpak/io.github.ForWard_Technologies_LLC.Pylux.yml | |
| cache-key: flatpak-builder-${{ github.sha }} | |
| arch: x86_64 | |
| upload-artifact: "false" | |
| - name: Publish Flatpak bundle to Dropbox | |
| id: flatpak_dropbox | |
| if: steps.flatpak_build.outcome == 'success' | |
| uses: ./.github/actions/dropbox-publish | |
| with: | |
| file: pylux-x64.flatpak | |
| latest-path: /pylux/linux/pylux${{ github.ref_name == 'release/beta' && '-beta' || '' }}-latest.flatpak | |
| versioned-path: /pylux/linux/pylux-${{ env.CHIAKI_VERSION }}.flatpak | |
| refresh-token: ${{ secrets.DROPBOX_REFRESH_TOKEN }} | |
| app-key: ${{ secrets.DROPBOX_APP_KEY }} | |
| app-secret: ${{ secrets.DROPBOX_APP_SECRET }} | |
| - name: Flatpak install command | |
| id: flatpak_install_cmd | |
| if: steps.flatpak_dropbox.outcome == 'success' | |
| run: | | |
| if [ "${{ github.ref_name }}" = "release/beta" ]; then | |
| BUNDLE="pylux-beta-latest.flatpak" | |
| else | |
| BUNDLE="pylux-latest.flatpak" | |
| fi | |
| URL="${{ steps.flatpak_dropbox.outputs.url }}" | |
| INSTALL="curl -fsSL -o ${BUNDLE} \"${URL}\" && flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo && flatpak install --user -y ${BUNDLE}" | |
| RUN="flatpak run io.github.ForWard_Technologies_LLC.Pylux" | |
| echo "install=${INSTALL}" >> "$GITHUB_OUTPUT" | |
| echo "run=${RUN}" >> "$GITHUB_OUTPUT" | |
| - name: Build summary | |
| if: always() | |
| run: | | |
| if [ "${{ github.ref_name }}" = "release/beta" ]; then | |
| ROLLING_NAME="pylux-beta-latest.flatpak" | |
| else | |
| ROLLING_NAME="pylux-latest.flatpak" | |
| fi | |
| { | |
| echo "## Pylux Flatpak — v${CHIAKI_VERSION:-?} (x86_64)" | |
| echo "" | |
| if [ "${{ steps.flatpak_build.outcome }}" = "success" ]; then | |
| FP_SIZE=$(ls -lh pylux-x64.flatpak 2>/dev/null | awk '{print $5}') | |
| echo "| Artifact | Size | Rolling download | Versioned archive |" | |
| echo "| --- | --- | --- | --- |" | |
| echo "| Flatpak bundle | ${FP_SIZE:-?} | [${ROLLING_NAME}](${{ steps.flatpak_dropbox.outputs.url }}) | \`/pylux/linux/pylux-${CHIAKI_VERSION}.flatpak\` |" | |
| echo "" | |
| if [ "${{ steps.flatpak_dropbox.outcome }}" = "success" ]; then | |
| echo "### Install (until Flathub is approved)" | |
| echo "Download and install from the local file (Flatpak cannot install directly from a Dropbox URL):" | |
| echo "" | |
| echo '```bash' | |
| echo "${{ steps.flatpak_install_cmd.outputs.install }}" | |
| echo '```' | |
| echo "" | |
| echo "### Run" | |
| echo "" | |
| echo '```bash' | |
| echo "${{ steps.flatpak_install_cmd.outputs.run }}" | |
| echo '```' | |
| echo "" | |
| echo "### Update an existing Dropbox install" | |
| echo "Run the install command again when a new bundle is published. There is no \`flatpak update\` channel until the app is on Flathub." | |
| else | |
| echo "### Install" | |
| echo "Dropbox publish did not succeed — no install one-liner. Fix the publish step above." | |
| fi | |
| echo "" | |
| echo "### Once on Flathub" | |
| echo "\`flatpak install flathub io.github.ForWard_Technologies_LLC.Pylux\` — then \`flatpak update\` works normally." | |
| else | |
| echo "Flatpak build step outcome: **${{ steps.flatpak_build.outcome }}**. Fix manifest or build errors above." | |
| fi | |
| } >> "$GITHUB_STEP_SUMMARY" | |
| # TODO: Uncomment after Flathub submission is approved and flathub/io.github.ForWard_Technologies_LLC.Pylux exists. | |
| # Also add a FLATHUB_TOKEN secret (PAT with write access to that repo). | |
| # | |
| # sync-to-flathub: | |
| # name: Sync manifest to Flathub repo | |
| # needs: build-and-verify | |
| # runs-on: ubuntu-latest | |
| # | |
| # steps: | |
| # - name: Checkout Pylux repo | |
| # uses: actions/checkout@v4 | |
| # with: | |
| # path: pylux | |
| # | |
| # - name: Checkout Flathub repo | |
| # uses: actions/checkout@v4 | |
| # with: | |
| # repository: flathub/io.github.ForWard_Technologies_LLC.Pylux | |
| # token: ${{ secrets.FLATHUB_TOKEN }} | |
| # path: flathub | |
| # | |
| # - name: Sync files to Flathub repo | |
| # run: | | |
| # PYLUX_COMMIT=$(cd pylux && git rev-parse HEAD) | |
| # | |
| # # Patch the commit hash in the manifest to match this exact build | |
| # sed "s|commit: .*|commit: ${PYLUX_COMMIT}|" \ | |
| # pylux/scripts/flatpak/io.github.ForWard_Technologies_LLC.Pylux.yml > flathub/io.github.ForWard_Technologies_LLC.Pylux.yml | |
| # | |
| # cp pylux/scripts/flatpak/0001-vulkan-ignore-frames-without-hw-context.patch \ | |
| # flathub/0001-vulkan-ignore-frames-without-hw-context.patch | |
| # | |
| # - name: Commit and push to Flathub | |
| # working-directory: flathub | |
| # run: | | |
| # git config user.name "github-actions[bot]" | |
| # git config user.email "github-actions[bot]@users.noreply.github.com" | |
| # | |
| # if git diff --quiet && [ -z "$(git ls-files --others --exclude-standard)" ]; then | |
| # echo "No changes to sync." | |
| # exit 0 | |
| # fi | |
| # | |
| # git add -A | |
| # git commit -m "Sync manifest from Pylux @ $(cd ../pylux && git rev-parse --short HEAD)" | |
| # git push |