diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f8a1b5e5..7cbbb4a4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -22,20 +22,39 @@ jobs: - name: get version id: get-version run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT + - name: extract changelog + id: changelog + run: | + VERSION="${{ steps.get-version.outputs.version }}" + # Extract the block between ## [VERSION] and the next ## heading + BODY=$(awk "/^## \[$VERSION\]/{found=1; next} found && /^## \[/{exit} found{print}" CHANGELOG.md) + # Store multiline output + EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) + echo "body<<$EOF" >> $GITHUB_OUTPUT + echo "$BODY" >> $GITHUB_OUTPUT + echo "$EOF" >> $GITHUB_OUTPUT - name: create release id: create-release uses: actions/github-script@v7 env: PACKAGE_VERSION: ${{ steps.get-version.outputs.version }} + CHANGELOG_BODY: ${{ steps.changelog.outputs.body }} with: script: | const tag = `app-v${process.env.PACKAGE_VERSION}`; + const body = process.env.CHANGELOG_BODY || 'See the assets to download this version and install.'; try { const { data } = await github.rest.repos.getReleaseByTag({ owner: context.repo.owner, repo: context.repo.repo, tag, }); + await github.rest.repos.updateRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: data.id, + body, + }); return data.id; } catch (e) { if (e.status !== 404) throw e; @@ -45,7 +64,7 @@ jobs: repo: context.repo.repo, tag_name: tag, name: `Psysonic v${process.env.PACKAGE_VERSION}`, - body: 'See the assets to download this version and install.', + body, draft: false, prerelease: false }); @@ -98,15 +117,7 @@ jobs: sudo apt-get update sudo apt-get install -y \ libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf \ - libasound2-dev \ - gstreamer1.0-plugins-base gstreamer1.0-plugins-good \ - gstreamer1.0-plugins-bad gstreamer1.0-libav - - - name: install linuxdeploy gstreamer plugin - run: | - wget -q "https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gstreamer/master/linuxdeploy-plugin-gstreamer.sh" \ - -O /usr/local/bin/linuxdeploy-plugin-gstreamer.sh - chmod +x /usr/local/bin/linuxdeploy-plugin-gstreamer.sh + libasound2-dev - name: setup node uses: actions/setup-node@v5 @@ -120,21 +131,7 @@ jobs: run: npm install - name: build - run: npm run tauri:build - env: - APPIMAGE_EXTRACT_AND_RUN: 1 - - - name: patch AppImage AppRun - run: | - APPIMAGE=$(find src-tauri/target/release/bundle/appimage -name "*.AppImage" -not -name "*.tar.gz" | head -1) - echo "Patching: $APPIMAGE" - APPIMAGE_EXTRACT_AND_RUN=1 ./"$APPIMAGE" --appimage-extract - sed -i '/^exec /i export WEBKIT_DISABLE_COMPOSITING_MODE=1\nexport WEBKIT_DISABLE_DMABUF_RENDERER=1\nexport GDK_BACKEND=x11\nexport EGL_PLATFORM=x11' squashfs-root/AppRun - wget -q "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" \ - -O appimagetool - chmod +x appimagetool - APPIMAGE_EXTRACT_AND_RUN=1 ./appimagetool squashfs-root "$APPIMAGE" - rm -rf squashfs-root appimagetool + run: npm run tauri:build -- --bundles deb,rpm - name: upload Linux artifacts env: @@ -142,5 +139,5 @@ jobs: run: | VERSION=${{ needs.create-release.outputs.package_version }} find src-tauri/target/release/bundle \ - \( -name "*.AppImage" -not -name "*.tar.gz" -o -name "*.deb" -o -name "*.rpm" \) \ + \( -name "*.deb" -o -name "*.rpm" \) \ | xargs gh release upload "app-v${VERSION}" --clobber diff --git a/CHANGELOG.md b/CHANGELOG.md index 10e6ac09..cd10502b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.4.4] - 2026-03-17 + +### Added + +#### AUR Package +- Psysonic is now available on the **Arch User Repository** — Arch and CachyOS users can install via `yay -S psysonic` or `paru -S psysonic`. Builds from source using the system's own WebKitGTK, avoiding the EGL/Mesa compatibility issues that affected the AppImage on modern distros. + +### Changed + +#### App Icon +- New app icon across all platforms (Windows, macOS, Linux, Android, iOS). + +#### Linux Distribution +- **AppImage removed**: The AppImage was fundamentally incompatible with non-Ubuntu distros (Arch, Fedora) due to bundled WebKitGTK conflicting with the system's Mesa/EGL. Linux users should use the `.deb` (Ubuntu/Debian), `.rpm` (Fedora/RHEL), or the new AUR package (Arch/CachyOS). + ## [1.4.3] - 2026-03-16 ### Fixed diff --git a/package.json b/package.json index 7f0435e4..d4c4964e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "psysonic", - "version": "1.4.3", + "version": "1.4.4", "private": true, "scripts": { "dev": "vite", diff --git a/packages/aur/.gitignore b/packages/aur/.gitignore new file mode 100644 index 00000000..8d7c374d --- /dev/null +++ b/packages/aur/.gitignore @@ -0,0 +1,4 @@ +src/ +pkg/ +*.tar.zst +*.tar.gz diff --git a/packages/aur/PKGBUILD b/packages/aur/PKGBUILD new file mode 100644 index 00000000..2e55d027 --- /dev/null +++ b/packages/aur/PKGBUILD @@ -0,0 +1,65 @@ +# Maintainer: stelle +pkgname=psysonic +pkgver=1.4.3 +pkgrel=1 +pkgdesc="Desktop music player for Subsonic API-compatible servers (Navidrome, Gonic, etc.)" +arch=('x86_64') +url="https://github.com/Psychotoxical/psysonic" +license=('GPL-3.0-only') +depends=( + 'webkit2gtk-4.1' + 'gtk3' + 'libayatana-appindicator' + 'openssl' + 'alsa-lib' +) +makedepends=( + 'npm' + 'rust' + 'cargo' +) +source=("$pkgname-$pkgver.tar.gz::https://github.com/Psychotoxical/psysonic/archive/refs/tags/app-v$pkgver.tar.gz") +sha256sums=('SKIP') + +build() { + cd "psysonic-app-v$pkgver" + + export CARGO_HOME="$srcdir/cargo-home" + export npm_config_cache="$srcdir/npm-cache" + + npm install + npm run tauri:build -- --no-bundle +} + +package() { + cd "psysonic-app-v$pkgver" + + # Binary (in /usr/lib to make room for the wrapper) + install -Dm755 "src-tauri/target/release/psysonic" "$pkgdir/usr/lib/psysonic/psysonic" + + # Wrapper script that sets necessary env vars for WebKitGTK on Wayland + install -Dm755 /dev/stdin "$pkgdir/usr/bin/psysonic" <