Files
qbz/.github/workflows/release-flatpak.yml
T

148 lines
5.1 KiB
YAML

# Flatpak bundle for GitHub Releases — Slint binary (crates/ workspace).
#
# Rewritten 2026-07-02 for the Tauri -> Slint migration (v2.0). Builds
# packaging/flatpak/com.blitzfc.qbz.yml (network manifest) with
# flatpak-builder and attaches the .flatpak bundle to the Release.
# Flathub proper is a separate repo/manifest updated at tag time via
# scripts/update-flathub.sh (offline sources).
#
# The cargo build runs on the HOST's resources even though it happens
# inside the flatpak sandbox, so this runner needs the same swap headroom
# as release-linux.yml (qbz_ui rustc peak ~30 GB).
name: release-flatpak
on:
workflow_dispatch:
inputs:
tag:
description: "Optional release tag to build (e.g. v2.0.0). Empty = build HEAD, no Release publish."
required: false
type: string
push:
tags:
- "v*"
concurrency:
group: release-flatpak-${{ github.ref }}
cancel-in-progress: false
jobs:
build-flatpak:
runs-on: ubuntu-24.04
timeout-minutes: 300
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v7
with:
fetch-depth: 0
- 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
PRERELEASE=false
if [[ "$VERSION" =~ -(rc|beta|alpha|pre) ]]; then
PRERELEASE=true
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "prerelease=$PRERELEASE" >> "$GITHUB_OUTPUT"
- name: Verify tag is on main
if: startsWith(github.ref, 'refs/tags/')
run: |
git fetch origin main
if ! git merge-base --is-ancestor "$GITHUB_SHA" origin/main; then
echo "::error::Tag ${GITHUB_REF#refs/tags/} is not on main. Releases are cut from main only."
exit 1
fi
# Keep the metainfo's top <release> entry honest (version + date).
- name: Sync metainfo release entry
if: steps.release.outputs.version != ''
env:
QBZ_VERSION: ${{ steps.release.outputs.version }}
run: |
python3 - <<'PY'
import os, pathlib, re
from datetime import date
version = os.environ["QBZ_VERSION"]
p = pathlib.Path("packaging/flatpak/com.blitzfc.qbz.metainfo.xml")
text = p.read_text(encoding="utf-8")
text = re.sub(
r'<release version="[^"]*" date="[^"]*">',
f'<release version="{version}" date="{date.today().isoformat()}">',
text,
count=1,
)
p.write_text(text, encoding="utf-8")
PY
- name: Free disk space and add swap
run: |
sudo rm -rf /usr/share/dotnet /opt/ghc /usr/local/lib/android \
/opt/hostedtoolcache /usr/local/share/boost /usr/share/swift \
/usr/local/lib/node_modules || true
sudo docker system prune -af || true
if sudo fallocate -l 18G /swap_extra; then
sudo chmod 600 /swap_extra
sudo mkswap /swap_extra
sudo swapon /swap_extra
else
echo "::warning::could not allocate extra swap; build may OOM"
fi
free -h
- 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: |
flatpak install --user -y --noninteractive flathub \
org.gnome.Platform//49 \
org.gnome.Sdk//49
flatpak install --user -y --noninteractive flathub \
org.freedesktop.Sdk.Extension.rust-stable//25.08 \
org.freedesktop.Sdk.Extension.llvm20//25.08
- name: Build Flatpak
id: build_flatpak
env:
VERSION: ${{ steps.release.outputs.version }}
run: |
mkdir -p flatpak-build flatpak-repo dist
BUNDLE_NAME="QBZ.flatpak"
if [[ -n "$VERSION" ]]; then
BUNDLE_NAME="qbz_${VERSION}_x86_64.flatpak"
fi
flatpak-builder --user --force-clean --repo=flatpak-repo \
flatpak-build packaging/flatpak/com.blitzfc.qbz.yml
flatpak build-bundle flatpak-repo "dist/${BUNDLE_NAME}" com.blitzfc.qbz
echo "bundle_name=${BUNDLE_NAME}" >> "$GITHUB_OUTPUT"
ls -la dist
- name: Upload Flatpak bundle
uses: actions/upload-artifact@v7
with:
name: qbz-flatpak
path: dist/${{ steps.build_flatpak.outputs.bundle_name }}
- name: Publish GitHub Release Asset
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v3
with:
files: dist/${{ steps.build_flatpak.outputs.bundle_name }}
prerelease: ${{ steps.release.outputs.prerelease }}
make_latest: ${{ steps.release.outputs.prerelease == 'true' && 'false' || 'true' }}