148 lines
5.1 KiB
YAML
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' }}
|