Cherry-picked from PR #377 (thanks @Mar0xy) — Node-only portion, no Discord IPC additions: - 4 workflows (release-{linux,linux-aarch64,macos,flatpak}.yml) now install Node 24 - packaging/flatpak/com.blitzfc.qbz.yml: SDK extension node20 → node24, build append-path and npm_config_nodedir aligned Forcing function: @icons-pack/svelte-simple-icons@7.x already in use declares engines.node >=24, so Node 20 produces an EBADENGINE warning in CI. Node 20 also reached EOL on 2026-04-30. Node 24 has been LTS since October 2025 (~7 months of maturity). Discord IPC permissions and qbz-wrapper script from #377 were intentionally NOT cherry-picked — there's no Discord RPC feature in QBZ today (#336 is still planned but not implemented), so adding the sandbox permission and the launch wrapper now would expand the attack surface for nothing. They'll land together with the actual feature when it ships. cc
133 lines
4.4 KiB
YAML
133 lines
4.4 KiB
YAML
name: Linux ARM64 (aarch64) Build
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: "Optional release tag to build (e.g. v1.1.7)"
|
|
required: false
|
|
type: string
|
|
push:
|
|
tags:
|
|
- "v*"
|
|
|
|
jobs:
|
|
build-linux-aarch64:
|
|
name: Build Linux ARM64
|
|
runs-on: ubuntu-24.04-arm
|
|
continue-on-error: true
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Determine 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: Setup Node
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 24
|
|
cache: npm
|
|
|
|
- name: Setup Rust
|
|
uses: dtolnay/rust-toolchain@stable
|
|
|
|
- name: Install system dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
# Pin WebKitGTK to 2.44.0-2 to prevent EGL_BAD_PARAMETER crash in AppImage
|
|
# See: https://github.com/tauri-apps/tauri/issues/11994
|
|
sudo apt-get install -y \
|
|
libwebkit2gtk-4.1-0=2.44.0-2 \
|
|
libwebkit2gtk-4.1-dev=2.44.0-2 \
|
|
libjavascriptcoregtk-4.1-0=2.44.0-2 \
|
|
libjavascriptcoregtk-4.1-dev=2.44.0-2 \
|
|
gir1.2-javascriptcoregtk-4.1=2.44.0-2 \
|
|
gir1.2-webkit2-4.1=2.44.0-2 \
|
|
libgtk-3-dev \
|
|
libappindicator3-dev \
|
|
librsvg2-dev \
|
|
libasound2-dev \
|
|
patchelf \
|
|
build-essential \
|
|
xdg-utils
|
|
|
|
- name: Install frontend deps
|
|
run: npm ci
|
|
|
|
- name: Build frontend
|
|
run: npm run build
|
|
|
|
- name: Build Tauri (deb + rpm + appimage)
|
|
env:
|
|
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
|
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
|
run: npm run tauri build -- --bundles deb,rpm,appimage
|
|
|
|
- name: Collect artifacts
|
|
env:
|
|
VERSION: ${{ steps.release.outputs.version }}
|
|
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
|
|
cp -v src-tauri/target/release/bundle/appimage/*.AppImage.sig dist/ || true
|
|
|
|
# Create AUR tarball
|
|
ARCH=aarch64
|
|
TARBALL_DIR="qbz_${VERSION}_${ARCH}"
|
|
mkdir -p "tarball-staging/${TARBALL_DIR}/icons/hicolor"/{32x32,48x48,64x64,128x128,256x256}/apps
|
|
|
|
# Binary
|
|
cp src-tauri/target/release/qbz "tarball-staging/${TARBALL_DIR}/qbz"
|
|
|
|
# Icons
|
|
cp src-tauri/icons/32x32.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/32x32/apps/qbz.png"
|
|
cp src-tauri/icons/128x128.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/48x48/apps/qbz.png"
|
|
cp src-tauri/icons/128x128.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/64x64/apps/qbz.png"
|
|
cp src-tauri/icons/128x128.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/128x128/apps/qbz.png"
|
|
cp src-tauri/icons/128x128@2x.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/256x256/apps/qbz.png"
|
|
|
|
# Desktop file
|
|
cat > "tarball-staging/${TARBALL_DIR}/qbz.desktop" << 'EOF'
|
|
[Desktop Entry]
|
|
Name=QBZ
|
|
Comment=Native Qobuz client with hi-res audio support
|
|
Exec=qbz
|
|
Icon=qbz
|
|
Terminal=false
|
|
Type=Application
|
|
Categories=AudioVideo;Audio;Music;Player;
|
|
Keywords=music;audio;qobuz;hifi;streaming;audiophile;
|
|
EOF
|
|
|
|
tar -czf "dist/qbz_${VERSION}_${ARCH}.tar.gz" -C tarball-staging "${TARBALL_DIR}"
|
|
ls -la dist
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: qbz-linux-aarch64
|
|
path: dist/*
|
|
|
|
- name: Publish GitHub Release Assets
|
|
if: startsWith(github.ref, 'refs/tags/')
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: dist/*
|
|
prerelease: ${{ contains(steps.release.outputs.version, '-rc') }}
|
|
make_latest: ${{ contains(steps.release.outputs.version, '-rc') && 'false' || 'true' }}
|