name: release-flatpak on: workflow_dispatch: inputs: tag: description: "Optional release tag to build (e.g. v0.1.0)" required: false type: string push: tags: - "v*" jobs: build-flatpak: runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout uses: actions/checkout@v4 - name: Resolve release version id: release run: | VERSION="" if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then VERSION="${GITHUB_REF#refs/tags/v}" elif [[ -n "${{ inputs.tag }}" ]]; then VERSION="${{ inputs.tag }}" VERSION="${VERSION#v}" fi echo "version=$VERSION" >> "$GITHUB_OUTPUT" - name: Sync version to build metadata if: steps.release.outputs.version != '' env: QBZ_VERSION: ${{ steps.release.outputs.version }} run: | python - <<'PY' import json import os import pathlib import re version = os.environ["QBZ_VERSION"] def update_json(path, updater): p = pathlib.Path(path) data = json.loads(p.read_text(encoding="utf-8")) updater(data) p.write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8") update_json("package.json", lambda d: d.__setitem__("version", version)) def update_lock(d): d["version"] = version packages = d.get("packages") if isinstance(packages, dict) and "" in packages: packages[""]["version"] = version update_json("package-lock.json", update_lock) update_json("src-tauri/tauri.conf.json", lambda d: d.__setitem__("version", version)) cargo_path = pathlib.Path("src-tauri/Cargo.toml") cargo_text = cargo_path.read_text(encoding="utf-8") cargo_text = re.sub(r'(?m)^version = \"[^\"]+\"', f'version = \"{version}\"', cargo_text, count=1) cargo_path.write_text(cargo_text, encoding="utf-8") # Update Flatpak metainfo.xml with version and date from datetime import date metainfo_path = pathlib.Path("packaging/flatpak/com.blitzfc.qbz.metainfo.xml") metainfo_text = metainfo_path.read_text(encoding="utf-8") today = date.today().isoformat() metainfo_text = re.sub( r'', f'', metainfo_text ) metainfo_path.write_text(metainfo_text, encoding="utf-8") PY - name: Install flatpak tooling run: | sudo apt-get update sudo apt-get install -y flatpak flatpak-builder flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - name: Install runtimes run: | # Install GNOME runtime and SDK first flatpak install --user -y --noninteractive flathub \ org.gnome.Platform//49 \ org.gnome.Sdk//49 # Install SDK extensions - flatpak-builder will auto-resolve the correct version based on the SDK flatpak install --user -y --noninteractive flathub \ org.freedesktop.Sdk.Extension.node20//25.08 \ org.freedesktop.Sdk.Extension.rust-stable//25.08 - name: Build Flatpak run: | mkdir -p flatpak-build flatpak-repo dist flatpak-builder --user --force-clean --repo=flatpak-repo \ flatpak-build packaging/flatpak/com.blitzfc.qbz.yml flatpak build-bundle flatpak-repo dist/QBZ.flatpak com.blitzfc.qbz - name: Upload Flatpak bundle uses: actions/upload-artifact@v4 with: name: qbz-flatpak path: dist/QBZ.flatpak - name: Publish GitHub Release Asset if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: files: dist/QBZ.flatpak