Publish Documentation / Build & publish docs to gitea-pages (push) Canceled after 0s
🏗️ Build and Test JellyTau / Run Tests (push) Failing after 14m7s
🏗️ Build and Test JellyTau / Android Compile Check (push) Skipped
Traceability Validation / Check Requirement Traces (push) Successful in 21s
The PKGBUILD ran a bare `cargo build --release`. Without `--features tauri/custom-protocol` Tauri does not embed the frontend and serves it from devUrl instead, so the package compiled, linked, installed and passed every check — then launched into "Could not connect to localhost: Connection refused". `tauri build` passes that feature for you and the Android build passes it explicitly; this path never did, so the Arch package has never worked. Adds a check() that catches it at build time. It tests for the *assets*, not for the dev URL: devUrl is part of the config blob generate_context!() embeds either way, so grepping for it reports a failure on a correct build. A content-hashed filename from the vite output can only appear if the bundle was embedded — which is also why the fixed binary is ~400 KB larger. Found by installing the package and launching it, which is the only thing that would have found it.
96 lines
3.8 KiB
Bash
96 lines
3.8 KiB
Bash
# Maintainer: Duncan Tourolle <duncan@tourolle.paris>
|
|
#
|
|
# JellyTau — a cross-platform Jellyfin client (Tauri + SvelteKit).
|
|
#
|
|
# This PKGBUILD builds from the local source tree by default (see the `dev`
|
|
# convenience below), which is what scripts/build-arch.sh uses inside the Arch
|
|
# Docker stage. For AUR distribution, replace the `source=()` line with a release
|
|
# tarball/VCS URL and drop the local-copy prepare() step.
|
|
|
|
pkgname=jellytau
|
|
pkgver=0.9.0
|
|
pkgrel=1
|
|
pkgdesc="A cross-platform Jellyfin client"
|
|
arch=('x86_64')
|
|
url="https://gitea.tourolle.paris/dtourolle/jellytau"
|
|
license=('MIT')
|
|
# Runtime: libmpv for audio, webkit2gtk for the webview + HTML5 transcoded video.
|
|
depends=('webkit2gtk-4.1' 'mpv' 'gtk3' 'libayatana-appindicator')
|
|
makedepends=('rust' 'cargo' 'bun' 'nodejs' 'pkgconf' 'libsoup3')
|
|
options=('!strip' '!lto')
|
|
|
|
# Populated from the working tree by scripts/build-arch.sh (SRC env var).
|
|
_srcdir="${JELLYTAU_SRC:-$startdir/../..}"
|
|
|
|
build() {
|
|
cd "$_srcdir"
|
|
export CARGO_HOME="${CARGO_HOME:-$srcdir/cargo-home}"
|
|
bun install --frozen-lockfile || bun install
|
|
bun run build
|
|
# Only the raw binary is needed; packaging is done in package() below so we
|
|
# control the Arch filesystem layout ourselves rather than via tauri-bundler.
|
|
#
|
|
# 🔴 `tauri/custom-protocol` is not optional. `tauri build` passes it for you;
|
|
# a bare `cargo build` does not, and without it Tauri loads the frontend from
|
|
# `devUrl` rather than the assets embedded from `frontendDist`. The result
|
|
# builds and installs cleanly and then cannot load its own UI. check() guards
|
|
# this.
|
|
(cd src-tauri && cargo build --release --locked --features tauri/custom-protocol)
|
|
}
|
|
|
|
check() {
|
|
cd "$_srcdir"
|
|
|
|
# A Tauri binary built without `custom-protocol` does not embed the frontend;
|
|
# it serves it from `devUrl` (http://localhost:1420) instead. It compiles,
|
|
# links and installs perfectly, then launches into "Could not connect to
|
|
# localhost: Connection refused" — which is what this package did for its
|
|
# entire existence, because `tauri build` adds that feature for you and a bare
|
|
# `cargo build` does not.
|
|
#
|
|
# Test for the *assets*, not for the dev URL: `devUrl` is part of the config
|
|
# blob that generate_context!() embeds either way, so its presence proves
|
|
# nothing. A content-hashed filename from the vite build can only be in the
|
|
# binary if the bundle was embedded — the with-feature binary is ~400 KB
|
|
# larger for exactly this reason.
|
|
local _binary="src-tauri/target/release/jellytau"
|
|
local _asset
|
|
_asset="$(basename "$(ls -1 build/_app/immutable/entry/*.js | head -n1)")"
|
|
|
|
if [ -z "$_asset" ]; then
|
|
echo "==> ERROR: no frontend build found — 'bun run build' did not produce build/_app." >&2
|
|
return 1
|
|
fi
|
|
|
|
if ! grep -qa "$_asset" "$_binary"; then
|
|
echo "==> ERROR: the frontend bundle is not embedded in the binary." >&2
|
|
echo " Build with --features tauri/custom-protocol, or the packaged app" >&2
|
|
echo " will start up unable to load its own UI." >&2
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
package() {
|
|
cd "$_srcdir"
|
|
|
|
install -Dm755 "src-tauri/target/release/jellytau" \
|
|
"$pkgdir/usr/bin/jellytau"
|
|
|
|
# Desktop entry
|
|
install -Dm644 "packaging/arch/jellytau.desktop" \
|
|
"$pkgdir/usr/share/applications/jellytau.desktop"
|
|
|
|
# MIT is not in /usr/share/licenses/common, so Arch packaging requires the
|
|
# licence text to ship with the package.
|
|
install -Dm644 "LICENSE" \
|
|
"$pkgdir/usr/share/licenses/$pkgname/LICENSE"
|
|
|
|
# Icons (hicolor)
|
|
install -Dm644 "src-tauri/icons/32x32.png" \
|
|
"$pkgdir/usr/share/icons/hicolor/32x32/apps/jellytau.png"
|
|
install -Dm644 "src-tauri/icons/128x128.png" \
|
|
"$pkgdir/usr/share/icons/hicolor/128x128/apps/jellytau.png"
|
|
install -Dm644 "src-tauri/icons/128x128@2x.png" \
|
|
"$pkgdir/usr/share/icons/hicolor/256x256/apps/jellytau.png"
|
|
}
|