Skip to content

chore: Update docker.io/linuxserver/jellyfin Docker tag to v10.11.10 - #76

Merged
renovate[bot] merged 1 commit into
mainfrom
renovate/docker.io-linuxserver-jellyfin-10.x
Aug 18, 2026
Merged

renovate[bot] merged 1 commit into
mainfrom
renovate/docker.io-linuxserver-jellyfin-10.x

Conversation

@renovate

@renovate renovate Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Update Change Pending
docker.io/linuxserver/jellyfin (source) minor 10.10.3 → 10.11.10 10.11.11

Warning

Some dependencies could not be looked up. Check the warning logs for more information.


Configuration

📅 Schedule: (in timezone America/Toronto)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot merged commit 6816ca3 into main Aug 18, 2026
22 of 23 checks passed
@renovate
renovate Bot deleted the renovate/docker.io-linuxserver-jellyfin-10.x branch August 18, 2026 19:17
ivan-pinatti added a commit that referenced this pull request Aug 19, 2026
`ensure_jellyfin_connection` was called with `|| true` in `wire_arr_app`, so
a failure left an arr app without its Jellyfin connection while
`make wire_connections` still reported success. The Prowlarr path in the
same file already collects failures into `PROWLARR_FAILED` for exactly this
reason; the Jellyfin path now does the same. `wire_arr_app` returns whether
its own Jellyfin connection actually succeeded, and the dispatch loop
collects the arr apps that missed it into a new `JELLYFIN_FAILED` array,
reported once every job has finished. The legitimate skips inside
`ensure_jellyfin_connection` (Jellyfin disabled, no API key yet, connection
already there, app doesn't support it) still return 0 on purpose and are not
reported as failures.

Pulling the actual logs from both CI runs that hit
test_jellyfin_connection_matches_what_the_app_supports[lidarr] (GitHub
Actions runs 32176749677 on #72 and 32179005406 on #77, both shortly after
the Jellyfin 10.11.10 bump merged unattended in #76) shows the same failure
both times: lidarr gets through its WebUI login and both download clients,
then jellyfin_host_for logs "WARNING: Jellyfin is running but not reachable
from this container" and gives up. That function tried each candidate host
once, with a 5 second cap each, unlike almost every other first boot
readiness check in this file, which retries for up to 180s. It is now
wrapped in this file's own retry helper the same way, up to 120s, following
detect_jellyfin_base_url's existing pattern of setting a variable as a side
effect since retry() only checks exit status, not output.

docs/TODO.md is rewritten rather than closed: the fix has not yet been
checked against a real run, since marking this pull request ready and
commenting /run-tests is left to a person.
ivan-pinatti added a commit that referenced this pull request Aug 20, 2026
….2's login response (#91)

* Record that a rate limited review reports green

Three pull requests merged with no review on 2026-08-19. CodeRabbit
reports through the legacy commit status API, which offers only error,
failure, pending and success, so an exhausted quota resolves to success
with the description "Review rate limited". Nothing reading the status
can tell that apart from success with "Review completed". #86, #87 and
#88 all ended there with no "Review completed" in their status
histories, while #82, #85 and #90 have one.

Also drops the "3/hour" quota figure from the bullet above it, which the
review on #90 contradicts with "up to 10 included reviews per hour; 5
remain", and points that bullet at the new item rather than restating
the same observation twice.

* Report missed Jellyfin connections, and retry the probe that races it

`ensure_jellyfin_connection` was called with `|| true` in `wire_arr_app`, so
a failure left an arr app without its Jellyfin connection while
`make wire_connections` still reported success. The Prowlarr path in the
same file already collects failures into `PROWLARR_FAILED` for exactly this
reason; the Jellyfin path now does the same. `wire_arr_app` returns whether
its own Jellyfin connection actually succeeded, and the dispatch loop
collects the arr apps that missed it into a new `JELLYFIN_FAILED` array,
reported once every job has finished. The legitimate skips inside
`ensure_jellyfin_connection` (Jellyfin disabled, no API key yet, connection
already there, app doesn't support it) still return 0 on purpose and are not
reported as failures.

Pulling the actual logs from both CI runs that hit
test_jellyfin_connection_matches_what_the_app_supports[lidarr] (GitHub
Actions runs 32176749677 on #72 and 32179005406 on #77, both shortly after
the Jellyfin 10.11.10 bump merged unattended in #76) shows the same failure
both times: lidarr gets through its WebUI login and both download clients,
then jellyfin_host_for logs "WARNING: Jellyfin is running but not reachable
from this container" and gives up. That function tried each candidate host
once, with a 5 second cap each, unlike almost every other first boot
readiness check in this file, which retries for up to 180s. It is now
wrapped in this file's own retry helper the same way, up to 120s, following
detect_jellyfin_base_url's existing pattern of setting a variable as a side
effect since retry() only checks exit status, not output.

docs/TODO.md is rewritten rather than closed: the fix has not yet been
checked against a real run, since marking this pull request ready and
commenting /run-tests is left to a person.

* Accept qBittorrent 5.2.2's login response, not just 5.1.4's

test_qbittorrent_api_login and test_qbittorrent_web_session_login asserted
status_code == 200 and a body of "Ok.", which is what qBittorrent 5.1.4
answers. 5.2.2 answers a successful login with 204 and an empty body
instead, so both assertions failed and PR #83 was correctly red, but that
left open whether authentication still worked at all under 5.2.2.

Checked directly rather than guessing: ran standalone qBittorrent
containers of both 5.1.4 and 5.2.2 with podman, using the same image
reference PR #83 proposes, and posted to /api/v2/auth/login from inside
each container's own network namespace, bypassing nginx entirely. Both
versions set a real session cookie and both let that cookie through to an
authenticated GET /api/v2/app/version afterward, so login still works under
5.2.2. Two things changed: the status (200 to 204, empty body) and the
cookie's own name, from a bare "SID" on 5.1.4 to a port suffixed
"QBT_SID_<port>" on 5.2.2, confirmed by running the WebUI on a
non-default port and watching the cookie name track it.

test_auth.py now accepts any 2xx status and requires a cookie whose name
contains "SID" with a real value, dropping only the exact 200 and the
"Ok." body that upstream is free to change. The status check stays,
since a cookie check alone would let an error response that happened to
set a cookie pass. This passes against both versions, confirmed with the
same two probe containers.

scripts/rotate-passwords.sh's qbittorrent_api_ok had the same literal
"200" check, used to confirm a rotated password logs in; it now accepts
any 2xx for the same reason. Grepped the rest of tests/ and scripts/ for
other places asserting on the qBittorrent login status or its body;
nothing else does, so nothing else needed changing. Removed the probe
containers and the digest only image pulled for this afterward,
verified with podman ps -a.

docs/TODO.md's qBittorrent item is resolved and removed.

* Stop a failed download client wiring reporting as Jellyfin's

wire_arr_app returned its Jellyfin status directly, and the dispatch loop
read any non-zero job status as a missing Jellyfin connection. The three
calls before it (ensure_arr_host_prereqs, ensure_qbittorrent_client,
ensure_sabnzbd_client) are unguarded, so under set -e any one of them
failing kills the job before the Jellyfin call is reached, and the summary
would then name that app under Jellyfin and tell the reader to re-run once
Jellyfin is up, which would not fix it.

The Jellyfin case now returns a dedicated status, so the loop can tell the
two apart, and a job that died earlier is collected in ARR_JOB_FAILED and
reported as what it is.

Claude-Session: https://claude.ai/code/session_01X8GXVNcBeFbVPQtLSbCUGH

* Address the review, and fix the port Jellyfin's own setup dialled

Three findings from the review, all real:

qbittorrent_api_ok accepted any 2xx without looking at the session cookie.
Confirmed live against 5.1.4: a refused login also answers 200, with the body
"Fails." and no cookie, so a status-only check passed a password qBittorrent
had just rejected. The old exact-200 check had the same hole. Require the
cookie, whose name is SID on 5.1.4 and QBT_SID_<port> on 5.2.2.
rotate_qbittorrent's own login and setPreferences calls ignored their status
entirely, so the rotation could rewrite every consumer's credential after
qBittorrent refused it; both are checked now and abort instead.

ensure_jellyfin_connection waited up to 120s for reachability before asking
whether the app supports a MediaBrowser connection at all. Readarr does not,
so an unreachable Jellyfin made it sit through the wait and then get reported
as having missed a connection it was never going to make. The capability
question is answered first now.

Its two API reads were unguarded. The function is called in an || list, which
suspends set -e inside it, so a failed read carried on with an empty value and
returned a confident looking skip, the exact silent success this branch exists
to remove. Both are checked.

Separately, detect_jellyfin_base_url dialled JELLYFIN_HTTP_PORT from inside the
jellyfin container, but the compose file publishes the service as
${JELLYFIN_HTTP_PORT}:8096, so that variable is the host side and the server
listens on 8096. They coincide at the default and the bug stays invisible;
with a remapped published port it dialled a port nothing listens on, so
first-run setup burned the 180s retry and was skipped on every start.
Confirmed live: it now completes the wizard and creates the API key.

Claude-Session: https://claude.ai/code/session_01X8GXVNcBeFbVPQtLSbCUGH

* Encode the stored qBittorrent password on the rotation login

This password is read back from Sonarr's database, so it is whatever a person
once typed rather than a generated value. A raw -d body let an `&` split it
into extra parameters, a `+` arrive as a space, and a literal `%26` decode to
`&`, each of which sends a password that is not the stored one and fails the
login for a reason nothing in the output explains.

The validation request is left alone deliberately: it only ever sees a
generated password from a restricted character set.

Claude-Session: https://claude.ai/code/session_01X8GXVNcBeFbVPQtLSbCUGH
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants