From 13af89753de13be03fd041126f244a98f3fc055f Mon Sep 17 00:00:00 2001 From: vicrodh <103399283+vicrodh@users.noreply.github.com> Date: Mon, 12 Jan 2026 10:09:39 -0600 Subject: [PATCH] chore(packaging): add linux workflows and manifests --- .github/workflows/release-flatpak.yml | 48 ++++++++++++++ .github/workflows/release-linux.yml | 66 +++++++++++++++++++ packaging/arch/.SRCINFO | 23 +++++++ packaging/arch/PKGBUILD | 42 ++++++++++++ packaging/arch/qbz.desktop | 8 +++ .../flatpak/com.blitzkriegfc.qbz.desktop | 8 +++ .../flatpak/com.blitzkriegfc.qbz.metainfo.xml | 18 +++++ packaging/flatpak/com.blitzkriegfc.qbz.yml | 42 ++++++++++++ 8 files changed, 255 insertions(+) create mode 100644 .github/workflows/release-flatpak.yml create mode 100644 .github/workflows/release-linux.yml create mode 100644 packaging/arch/.SRCINFO create mode 100644 packaging/arch/PKGBUILD create mode 100644 packaging/arch/qbz.desktop create mode 100644 packaging/flatpak/com.blitzkriegfc.qbz.desktop create mode 100644 packaging/flatpak/com.blitzkriegfc.qbz.metainfo.xml create mode 100644 packaging/flatpak/com.blitzkriegfc.qbz.yml diff --git a/.github/workflows/release-flatpak.yml b/.github/workflows/release-flatpak.yml new file mode 100644 index 000000000..c5378584c --- /dev/null +++ b/.github/workflows/release-flatpak.yml @@ -0,0 +1,48 @@ +name: release-flatpak + +on: + workflow_dispatch: + push: + tags: + - "v*" + +jobs: + build-flatpak: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install flatpak tooling + run: | + sudo apt-get update + sudo apt-get install -y flatpak flatpak-builder + flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + + - name: Install runtimes + run: | + flatpak install -y --noninteractive flathub \ + org.freedesktop.Platform//23.08 \ + org.freedesktop.Sdk//23.08 \ + org.freedesktop.Sdk.Extension.node20//23.08 \ + org.freedesktop.Sdk.Extension.rust-stable//23.08 + + - name: Build Flatpak + run: | + mkdir -p flatpak-build flatpak-repo dist + flatpak-builder --force-clean --repo=flatpak-repo flatpak-build packaging/flatpak/com.blitzkriegfc.qbz.yml + flatpak build-bundle flatpak-repo dist/QBZ.flatpak com.blitzkriegfc.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 diff --git a/.github/workflows/release-linux.yml b/.github/workflows/release-linux.yml new file mode 100644 index 000000000..4bde7b575 --- /dev/null +++ b/.github/workflows/release-linux.yml @@ -0,0 +1,66 @@ +name: release-linux + +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-linux: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + + - name: Setup Rust + uses: dtolnay/rust-toolchain@stable + + - name: Install system dependencies + run: | + sudo apt-get update + sudo apt-get install -y \ + libwebkit2gtk-4.1-dev \ + libgtk-3-dev \ + libappindicator3-dev \ + librsvg2-dev \ + patchelf + + - name: Install JS dependencies + run: npm ci + + - name: Build DEB/RPM/AppImage + run: npm run tauri build -- --bundles deb,rpm,appimage + + - name: Collect artifacts + run: | + mkdir -p dist + cp -v src-tauri/target/release/bundle/deb/*.deb dist/ || true + cp -v src-tauri/target/release/bundle/rpm/*.rpm dist/ || true + cp -v src-tauri/target/release/bundle/appimage/*.AppImage dist/ || true + ls -la dist + + - name: Upload artifacts + uses: actions/upload-artifact@v4 + with: + name: qbz-linux-packages + path: dist/* + + - name: Publish GitHub Release Assets + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v2 + with: + files: dist/* diff --git a/packaging/arch/.SRCINFO b/packaging/arch/.SRCINFO new file mode 100644 index 000000000..9e91eaac9 --- /dev/null +++ b/packaging/arch/.SRCINFO @@ -0,0 +1,23 @@ +pkgbase = qbz + pkgdesc = Native Qobuz client for Linux with bit-perfect playback + pkgver = 0.1.0 + pkgrel = 1 + url = https://github.com/vicrodh/qbz + arch = x86_64 + license = MIT + depends = alsa-lib + depends = gtk3 + depends = libappindicator-gtk3 + depends = libxkbcommon + depends = openssl + depends = webkit2gtk + makedepends = nodejs + makedepends = npm + makedepends = rust + makedepends = cargo + makedepends = pkgconf + makedepends = clang + source = https://github.com/vicrodh/qbz/archive/refs/tags/v0.1.0.tar.gz + sha256sums = SKIP + +pkgname = qbz diff --git a/packaging/arch/PKGBUILD b/packaging/arch/PKGBUILD new file mode 100644 index 000000000..479f312b3 --- /dev/null +++ b/packaging/arch/PKGBUILD @@ -0,0 +1,42 @@ +# Maintainer: QBZ Team + +pkgname=qbz +pkgver=0.1.0 +pkgrel=1 +pkgdesc="Native Qobuz client for Linux with bit-perfect playback" +arch=(x86_64) +url="https://github.com/vicrodh/qbz" +license=(MIT) +depends=( + alsa-lib + gtk3 + libappindicator-gtk3 + libxkbcommon + openssl + webkit2gtk +) +makedepends=( + nodejs + npm + rust + cargo + pkgconf + clang +) +source=("https://github.com/vicrodh/qbz/archive/refs/tags/v${pkgver}.tar.gz") +sha256sums=('SKIP') + +build() { + cd "${srcdir}/qbz-${pkgver}" + npm ci + npm run build + npm run tauri build -- --bundles none +} + +package() { + cd "${srcdir}/qbz-${pkgver}" + install -Dm755 src-tauri/target/release/qbz-nix "${pkgdir}/usr/bin/qbz" + install -Dm644 packaging/arch/qbz.desktop "${pkgdir}/usr/share/applications/qbz.desktop" + install -Dm644 src-tauri/icons/128x128.png "${pkgdir}/usr/share/icons/hicolor/128x128/apps/qbz.png" + install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" +} diff --git a/packaging/arch/qbz.desktop b/packaging/arch/qbz.desktop new file mode 100644 index 000000000..9b1b4330f --- /dev/null +++ b/packaging/arch/qbz.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=QBZ +Exec=qbz +Type=Application +Icon=qbz +Categories=Audio;Music;Player; +Terminal=false +StartupWMClass=QBZ diff --git a/packaging/flatpak/com.blitzkriegfc.qbz.desktop b/packaging/flatpak/com.blitzkriegfc.qbz.desktop new file mode 100644 index 000000000..a120a6bb3 --- /dev/null +++ b/packaging/flatpak/com.blitzkriegfc.qbz.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Name=QBZ +Exec=qbz +Type=Application +Icon=com.blitzkriegfc.qbz +Categories=Audio;Music;Player; +Terminal=false +StartupWMClass=QBZ diff --git a/packaging/flatpak/com.blitzkriegfc.qbz.metainfo.xml b/packaging/flatpak/com.blitzkriegfc.qbz.metainfo.xml new file mode 100644 index 000000000..47fa0ddb0 --- /dev/null +++ b/packaging/flatpak/com.blitzkriegfc.qbz.metainfo.xml @@ -0,0 +1,18 @@ + + + com.blitzkriegfc.qbz + QBZ + Native Qobuz client for Linux + +

QBZ is a native Qobuz streaming client for Linux designed for audiophiles.

+

It focuses on bit-perfect playback without browser sample-rate limits.

+
+ QBZ + CC0-1.0 + MIT + + Audio + Music + + com.blitzkriegfc.qbz.desktop +
diff --git a/packaging/flatpak/com.blitzkriegfc.qbz.yml b/packaging/flatpak/com.blitzkriegfc.qbz.yml new file mode 100644 index 000000000..16cec4bb5 --- /dev/null +++ b/packaging/flatpak/com.blitzkriegfc.qbz.yml @@ -0,0 +1,42 @@ +app-id: com.blitzkriegfc.qbz +runtime: org.freedesktop.Platform +runtime-version: '23.08' +sdk: org.freedesktop.Sdk +sdk-extensions: + - org.freedesktop.Sdk.Extension.node20 + - org.freedesktop.Sdk.Extension.rust-stable +command: qbz +finish-args: + - --share=ipc + - --socket=x11 + - --socket=wayland + - --device=dri + - --filesystem=xdg-download + - --filesystem=xdg-music + - --filesystem=xdg-cache + - --filesystem=xdg-config + - --talk-name=org.freedesktop.Notifications + - --talk-name=org.kde.StatusNotifierWatcher + - --talk-name=org.freedesktop.portal.Desktop + - --talk-name=org.freedesktop.portal.FileChooser + +modules: + - name: qbz + buildsystem: simple + build-commands: + - export PATH=/usr/lib/sdk/node20/bin:/usr/lib/sdk/rust-stable/bin:$PATH + - npm ci + - npm run build + - npm run tauri build -- --bundles none + - install -Dm755 src-tauri/target/release/qbz-nix /app/bin/qbz + - install -Dm644 packaging/flatpak/com.blitzkriegfc.qbz.desktop /app/share/applications/com.blitzkriegfc.qbz.desktop + - install -Dm644 packaging/flatpak/com.blitzkriegfc.qbz.metainfo.xml /app/share/metainfo/com.blitzkriegfc.qbz.metainfo.xml + - install -Dm644 src-tauri/icons/128x128.png /app/share/icons/hicolor/128x128/apps/com.blitzkriegfc.qbz.png + sources: + - type: dir + path: ../.. + skip: + - .git + - node_modules + - src-tauri/target + - .svelte-kit