Add Jellyfin 12.0 release build alongside 10.11
Build Plugin / build (push) Failing after 1m1s
Release Plugin / build-and-release (push) Failing after 3m22s

Multi-target the plugin against net9.0 (Jellyfin 10.11.x) and net10.0
(Jellyfin 12.0.x), with per-framework Jellyfin.Controller/Model references.

Jellyfin 12 added a controlling-session parameter to
ISessionManager.ReportCapabilities; an empty value skips the AssertCanControl
check, which is what a server-side registration needs.

Each release now ships two packages, jellylms_<version>_jf11.zip and
jellylms_<version>_jf12.zip, with a manifest entry each. Jellyfin filters by
targetAbi, so both can share a version number. Also corrects the manifest
targetAbi for new releases from 10.10.0.0 to 10.11.0.0 - the plugin has
referenced 10.11 packages since 1.0.0.

jprm only reads ./build.yaml, so build-plugin.sh swaps targetAbi/framework per
variant and restores the file afterwards.

The builder image moves to the .NET 10 SDK, which targets both frameworks.
CA1873 (new in that SDK) is disabled alongside CA1848, same rationale.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-08 18:48:16 +02:00
co-authored by Claude Opus 5
parent e69f57d7ee
commit 71180941e5
8 changed files with 161 additions and 78 deletions
+23 -7
View File
@@ -76,10 +76,19 @@ Create and manage synchronized playback groups for multi-room audio:
## Requirements
- Jellyfin Server 10.10.0 or later
- .NET 9.0 Runtime
- Jellyfin Server 10.11.x or 12.0.x
- Logitech Media Server (LMS) with JSON-RPC API enabled (default on port 9000)
Each release ships two packages, one per Jellyfin generation:
| Package | Jellyfin | targetAbi | Runtime |
| --- | --- | --- | --- |
| `jellylms_<version>_jf11.zip` | 10.11.x | `10.11.0.0` | .NET 9.0 |
| `jellylms_<version>_jf12.zip` | 12.0.x | `12.0.0.0` | .NET 10.0 |
If you install through the plugin repository, Jellyfin picks the matching
package automatically. For manual installs, download the one for your server.
## Playback Architecture
JellyLMS uses Jellyfin's native "Play On" (cast) interface to control LMS players. When you select an LMS player from Jellyfin's cast menu, playback is managed through a robust state machine that ensures reliable operation.
@@ -151,13 +160,20 @@ The state machine includes automatic retry with exponential backoff:
git clone https://gitea.tourolle.paris/dtourolle/jellyLMS.git
cd jellyLMS
# Build
# Build both target frameworks
dotnet build Jellyfin.Plugin.JellyLMS.sln -c Release
# The DLL will be in:
# Jellyfin.Plugin.JellyLMS/bin/Release/net9.0/
# The DLLs will be in:
# Jellyfin.Plugin.JellyLMS/bin/Release/net9.0/ (Jellyfin 10.11.x)
# Jellyfin.Plugin.JellyLMS/bin/Release/net10.0/ (Jellyfin 12.0.x)
# Or produce installable plugin packages (requires jprm)
./build-plugin.sh jf11
./build-plugin.sh jf12
```
Building requires the .NET 10 SDK, which can target both `net9.0` and `net10.0`.
## Configuration
1. Navigate to Jellyfin Dashboard → Plugins → JellyLMS
@@ -293,8 +309,8 @@ Jellyfin.Plugin.JellyLMS/
### Building for Development
```bash
# Build in debug mode
dotnet build Jellyfin.Plugin.JellyLMS.sln
# Build in debug mode (use -f net10.0 for a Jellyfin 12 server)
dotnet build Jellyfin.Plugin.JellyLMS.sln -f net9.0
# Copy to Jellyfin plugins directory
cp Jellyfin.Plugin.JellyLMS/bin/Debug/net9.0/Jellyfin.Plugin.JellyLMS.dll \