Files
jellytau/scripts
dtourolle c0c6c5023e
🏗️ Build and Test JellyTau / Run Tests (push) Failing after 5m10s
🏗️ Build and Test JellyTau / Android Compile Check (push) Skipped
Publish Documentation / Build & publish docs to gitea-pages (push) Successful in 5m30s
Traceability Validation / Check Requirement Traces (push) Successful in 19s
fix(player): resume a transcoded video by seeking, not by asking for a stream that starts mid-item
A resumed transcode played nothing at all: every segment came back 400, hls.js
exhausted its retries and gave up, while the same episode from the beginning was
fine.

Jellyfin builds each segment URI by echoing the master playlist's query string
into it, and its segment handler opens by rejecting any request carrying
StartTimeTicks > 0 (ArgumentException → 400). So one resume position on the
playlist is copied onto every hls1/main/N.ts and 400s all of them — the `> 0`
being exactly why starting from the beginning survived.

HLS does not need the parameter: a playlist spans the whole item and asking for
segment N *is* the seek. It is removed from the URL builder entirely rather than
conditionalised — the builder cannot know whether its response will be
segmented — and the position becomes a seek issued once the player has loaded.
The progressive /Audio/universal builder behind the background-audio handoff has
no segments and keeps its StartTimeTicks, which is why audio-only handoffs
resumed correctly and video ones did not.

Completing that across the boundary, since the URL no longer starts where the
caller asked:

- reloadSource(url, position) now means "reload and resume AT this absolute
  position": it seeks the element once the source is playable and clears the
  transcode offset to zero. It previously set the offset to the position and
  seeked nothing, which was correct only while the URL itself began there —
  left in place it would have shown 20:00 on the scrubber while the opening
  titles played, with no seek ever happening.
- The transcoded resume path in the player page collapses into the same
  "seek after load" branch direct streams already used.
- VideoPlayer's background-audio return does the same: no base, seek to the
  absolute position.
- The stale test asserting StartTimeTicks is present is rewritten to keep its
  other half (an HLS master playlist, never a progressive stream.mp4, carrying
  the chosen source and audio track).

TRACES: UR-004, UR-005, UR-019, UR-021, UR-074 | DR-181 | UT-182, UT-183
2026-08-16 11:08:42 +02:00
..
2026-01-26 22:21:54 +01:00
2026-01-26 22:21:54 +01:00
2026-06-20 15:32:32 +02:00
2026-01-26 22:21:54 +01:00

Development Scripts

Collection of utility scripts for building, testing, and deploying JellyTau.

Testing Scripts

test-all.sh

Run all tests (frontend + Rust backend).

./scripts/test-all.sh

test-frontend.sh

Run frontend tests only.

./scripts/test-frontend.sh          # Run all tests
./scripts/test-frontend.sh --watch  # Watch mode
./scripts/test-frontend.sh --ui     # Open UI

test-rust.sh

Run Rust tests only.

./scripts/test-rust.sh              # Run all tests
./scripts/test-rust.sh -- --nocapture  # Show println! output

Android Scripts

build-android.sh

Build the Android APK.

./scripts/build-android.sh          # Debug build
./scripts/build-android.sh release  # Release build

deploy-android.sh

Install APK on connected Android device.

./scripts/deploy-android.sh         # Deploy debug APK
./scripts/deploy-android.sh release # Deploy release APK

build-and-deploy.sh

Build and deploy in one command.

./scripts/build-and-deploy.sh       # Build + deploy debug
./scripts/build-and-deploy.sh release  # Build + deploy release

check-android.sh

Check Android development environment setup.

./scripts/check-android.sh

logcat.sh

View Android logcat filtered for the app.

./scripts/logcat.sh

Traceability & Documentation

extract-traces.ts

Extract requirement IDs (TRACES) from source code and generate a traceability matrix mapping requirements to implementation locations.

bun run traces                    # Generate markdown report
bun run traces:json              # Generate JSON report
bun run traces:markdown           # Save to docs/traceability.md
bun run traces:coverage           # Coverage gate — exits non-zero below 50%

The script scans all TypeScript, Svelte, and Rust files (plus scripts/) looking for TRACES: comments and generates a comprehensive mapping of:

  • Which code files implement which requirements
  • Line numbers and code context
  • Coverage summary by requirement type (UR, IR, DR, JA)

bun run traces:coverage is the supported way to check requirement coverage locally — it runs the same computation CI does. Coverage denominators are derived from docs/requirements.md at run time; they are never hardcoded. An ID that appears in a TRACES: comment but is not defined in requirements.md is reported as orphaned and does not count toward coverage (see DR-093).

Removed: check-req-coverage.sh, check-test-coverage.sh, and find-req-implementations.sh were deleted in July 2026. They read an undocumented @req: tag convention parallel to TRACES:, grepped src-tauri/ unscoped (hanging on ~40 GB of target/ artifacts), and in one case reported "all requirements implemented" from an empty result set. extract-traces.ts is the single source of truth for requirement coverage. See docs/specs/req-coverage-script-removal.md.

Example TRACES comment in code:

// TRACES: UR-005, UR-026 | DR-029
function handlePlayback() { ... }

See docs/traceability.md for the latest generated mapping.

CI/CD Validation

The traceability system is integrated with Gitea Actions CI/CD:

  • Automatically validates TRACES on every push and pull request
  • Enforces minimum 50% coverage threshold
  • Warns if new code lacks TRACES comments
  • Generates traceability reports automatically

For details, see:

Utility Scripts

clean.sh

Clean all build artifacts.

./scripts/clean.sh

NPM Script Aliases

You can also run these via npm/bun:

bun run test:all           # All tests
bun run test:rust          # Rust tests
bun run android:build      # Build Android APK
bun run android:deploy     # Deploy to device
bun run android:dev        # Build + deploy debug
bun run android:check      # Check environment
bun run clean              # Clean artifacts