🏗️ Build and Test JellyTau / Run Tests (push) Failing after 14m18s
🏗️ Build and Test JellyTau / Android Compile Check (push) Skipped
Publish Documentation / Build & publish docs to gitea-pages (push) Successful in 5m31s
Traceability Validation / Check Requirement Traces (push) Successful in 17s
Build & Release / Run Tests (push) Failing after 14m7s
Build & Release / Build Linux (push) Skipped
Build & Release / Build Windows (push) Skipped
Build & Release / Build Android (push) Skipped
Build & Release / Create Release (push) Skipped
The rotation interval was installed once when the banner mounted and never touched again, so a swipe, arrow or dot tap inherited whatever was left of the running countdown — swiping 5.5s into a 6s interval moved the banner on half a second later. The timer moves into heroRotation.ts as a small restartable object so it can be unit-tested, and every manual navigation path restarts it from that moment. Verified red-first: with restart() reverted to leave a running timer alone, the regression test fails. Release 0.9.1.
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.1
|
|
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"
|
|
}
|