Files
qbz/.github/workflows/release-linux.yml
T
vicrodh 43ed44daf7 chore: Improve desktop integration and AppImage metadata for release
- Add Comment field to all .desktop files for app launcher descriptions
- Change category from Music to AudioVideo for better categorization
- Add Keywords for improved searchability (audiophile, hifi, streaming)
- Enhance metainfo.xml with detailed feature list and links
- Configure AppImage bundle settings in tauri.conf.json
- Update workflows to generate improved .desktop files

AppImage now includes embedded icon via Tauri icon configuration.
App will now appear in Multimedia category with proper description in all Linux app launchers.
2026-01-20 21:03:07 -06:00

149 lines
4.8 KiB
YAML

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: 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")
PY
- 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 \
libasound2-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
id: 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
# Create tarball for AUR with proper structure
TARBALL_DIR="qbz_${VERSION}_amd64"
mkdir -p "tarball-staging/${TARBALL_DIR}/icons/hicolor"/{32x32,48x48,64x64,128x128,256x256}/apps
# Binary
cp src-tauri/target/release/qbz-nix "tarball-staging/${TARBALL_DIR}/qbz"
# Icons (use available sizes, copy 128x128 for missing sizes)
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 -czvf "dist/qbz_${VERSION}_amd64.tar.gz" -C tarball-staging "${TARBALL_DIR}"
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/*