deps: fold the ten Dependabot bumps into one commit on top of v2.6.1, with every lock file regenerated - #214
Merged
ZL154 merged 3 commits intoSep 15, 2026
Conversation
… bundling the BCL overlays MailKit 4.18 needs on .NET 9
17 tasks
The consolidation bumped QuestPDF to 2026.8.0, but the 2026.6.0 breakage behind the ZL154#77 pin was never reproduced on non-glibc (arm64/musl), and the recovery-code PDF path was just stabilized in v2.6.1. Hold the pin until 2026.8.0 is verified on those platforms. All four lock files regenerated via dotnet restore --force-evaluate; locked-mode passes on net9 and net10. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This was referenced Sep 15, 2026
4 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Folds all ten open Dependabot PRs into one commit on top of the current
main(v2.6.1 plus #212), with all four lock files regenerated throughdotnet restore --force-evaluaterather than copied. That includessrc/Jellyfin.Plugin.TwoFactorAuth/packages.jf12.lock.json, the Jellyfin 12 lock that none of the Dependabot PRs touch (Dependabot only knows the default lock path), so the twosrclocks stay in step.Two of the bumps needed more than a version change, both explained below:
MailKit4.18.0 binds to BCL assemblies that .NET 9 does not ship at the referenced version, so the 10.11 package now bundles three more DLLs (build.sh,build.ps1,meta.json,THIRD-PARTY.md); andQuestPDFmoves past a deliberate pin, with the evidence I could gather.Supersedes #184, #185, #186, #187, #206, #207, #208, #209, #210 and #211, and replaces my #201 (four of the same bumps on top of v2.6.0; I am closing it in favour of this one).
actions/setup-dotnetactions/attest-build-provenancegithub/codeql-actioninit, analyze, upload-sarifdependabot.ymlrequires (same SHA as #185)MailKitMaxMind.DbMicrosoft.CodeAnalysis.NetAnalyzersQuestPDFNSubstituteMicrosoft.AspNetCore.TestHostMicrosoft.NET.Test.SdkType of change
MailKit,MaxMind.Db,QuestPDF) and the packaging change theMailKitone needs; no plugin code changesRelated issues
Supersedes #184, #185, #186, #187, #206, #207, #208, #209, #210, #211. Replaces #201. Same approach as #165 (one commit, every lock file regenerated) and relies on the lock file check from #166. The
QuestPDFpin comment in the csproj points at #77.How was this tested?
Server tested against: Jellyfin 10.11.11 and Jellyfin 12.0.0, official Docker images (glibc), with the two packages
build.shproduces from this branch (the 10.11 package, and the Jellyfin 12 package viaJELLYFIN_VERSION=12.0.0), plus a Mailpit container as the SMTP server.Local, with the .NET SDK 9.0.316 (the 9.0.x line CI installs):
dotnet restore JellyfinSecurity.sln --force-evaluate, thendotnet restore JellyfinSecurity.sln --locked-mode: passes.dotnet build JellyfinSecurity.sln -c Release: 0 errors. The twoCS8602warnings are the ones inJellyfin12ShellTests.csthat tests: assert the embedded inject.js is present before reading it (CS8602) #202 fixes; they are onmainalready.dotnet test -c Release: 511 passed, 0 failed.node --test tests/oidc-bridge.test.mjs: 8 passed.Local, with the .NET SDK 10.0.400 for the Jellyfin 12 build:
dotnet restore src/Jellyfin.Plugin.TwoFactorAuth -p:JellyfinVersion=12.0.0 --locked-modepasses anddotnet build -c Release -p:JellyfinVersion=12.0.0has 0 warnings, 0 errors.Packages:
build.sh fatgives 45 files for 10.11 (the 42 of the official 2.6.1.0 zip plusSystem.Formats.Asn1.dll,System.Security.Cryptography.Pkcs.dllandMicrosoft.Bcl.Cryptography.dll, all listed inmeta.json, 23 entries) and 41 files for Jellyfin 12 (same as the official-jf12zip; the patchedmeta.jsonlists 19 assemblies, none of the four net9-only ones).Live:
Active, the log showsLoaded assembly System.Formats.Asn1, Version=10.0.0.0from the plugin folder.POST TwoFactorAuth/TestSmtpto Mailpit without TLS: 200, message received. With STARTTLS against Mailpit's self-signed certificate: 500 withSslHandshakeException("The server's SSL certificate could not be validated"), and with a host name the certificate does not cover:SslHandshakeException: The host name (mailhost) did not match the name given in the server's SSL certificate (mailpit). That last message is the one code path in MailKit 4.18 that touchesSystem.Formats.Asn1(SslHandshakeException.GetDnsNames, which parses the subject alternative names).meta.json), which is what deps: Bump MailKit from 4.17.0 to 4.18.0 #206 alone would ship: sending without TLS still works, but the host name mismatch case answersSystem.IO.FileNotFoundException: Could not load file or assembly 'System.Formats.Asn1, Version=10.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'instead of the certificate message. Putting the three DLLs back restores theSslHandshakeException.Active, TestSmtp without TLS 200 and received, with the self-signed certificateSslHandshakeExceptionas expected.Active, the four net9-only assemblies load next to the ones .NET 10 ships, TestSmtp without TLS 200 and received, self-signed certificateSslHandshakeException,NativeDependencyLayout(fix(native): repair the root .so copies by rename and load nothing before first use #212) replaced the musl copies at the zip root with the linux-x64 hashes, the three DB-IP Lite databases from my production host load (Diagnosticsgeoip_asn,geoip_country,geoip_cityallOk), andPOST TwoFactorAuth/RecoveryCodes/Pdfreturns a valid PDF 1.4 (one A4 page, all ten codes, checked with poppler).[ERR]or[WRN]lines from the plugin in any of the containers apart from the TestSmtp failures I provoked.About the
MailKitpackaging change. MailKit 4.18.0 referencesSystem.Formats.Asn110.0.0.0, and MimeKit 4.18.0 referencesSystem.Security.Cryptography.Pkcs10.0.0.0, which in turn needsMicrosoft.Bcl.Cryptography10.0.0.0 (read from the assembly metadata). .NET 9 shipsSystem.Formats.Asn19.0.0.0, so on a 10.11 host those references can only be satisfied by app-local copies, and the net9 publish output indeed gains the three DLLs while the net10 publish does not (.NET 10 has them).build.shcopies a fixed list of assemblies andmeta.jsonnames them, so without this change the 10.11 zip would ship MailKit 4.18.0 without the assemblies it binds to, with the failure above. The change treats the three the waySystem.Formats.Cbor.dllis already treated: bundled and listed for 10.11, skipped for the Jellyfin 12 package and removed from itsmeta.json, through one list (NET9_ONLY_ASSEMBLIES) instead of one hard-coded name.About the
QuestPDFpin. The csproj pins 2026.5.0 because 2026.6.0 "produced an invalid recovery-codes PDF (Failed to load PDF document)" and #77 was closed for it. What I checked, all on linux-x64 glibc:RecoveryCodePdfServiceitself (a small console harness referencing the plugin project) with 2026.5.0, 2026.6.0 and 2026.8.0. All three give a PDF 1.4 with one page, poppler parses each one, andpdftotextoutput is identical across the three apart from the timestamp line. The 2026.8.0 file also opens in Chromium's PDF viewer with the codes visible.QuestPDFline and keep the pin if you prefer.About
MaxMind.Db5.2.0 (the release fixes decoding of some four-byte data pointers and of oversized integers): I ran the same lookups against the DB-IP Lite ASN, Country and City databases with 5.1.0 and 5.2.0 for six addresses (IPv4 and IPv6, including a private one) and the results are identical: ASN, organisation, country, city and coordinates.What changed
.github/workflows/ci.yml,codeql.yml,dependabot-lockfiles.yml:actions/setup-dotnetv6.0.0 (thedotnet-version: "9.0.x"input the workflows use is unchanged)..github/workflows/release.yml:actions/attest-build-provenancev4.2.2..github/workflows/codeql.yml,scorecard.yml:github/codeql-actionv4.38.0 forinit,analyzeandupload-sarifin the same commit, so the config a newerinitwrites is read by the sameanalyzeversion (the deadlock ci: bump github/codeql-action/analyze from 4.37.3 to 4.37.7 #155 hit).src/Jellyfin.Plugin.TwoFactorAuth/Jellyfin.Plugin.TwoFactorAuth.csproj:MailKit4.18.0,MaxMind.Db5.2.0,Microsoft.CodeAnalysis.NetAnalyzers10.0.401,QuestPDF2026.8.0. The pin comment aboveQuestPDFis left in place for you to update or keep.build.sh: aNET9_ONLY_ASSEMBLIESlist (System.Formats.Cbor.dllplus the three new ones) with a helper, used by the copy loop to skip them for Jellyfin 12 and by themeta.jsonpatch to remove them there; the three new DLLs added to the copy list right afterMimeKit.dll, before the last entry, so the removal leaves valid JSON.build.ps1: the same three DLLs in$RequiredFiles(that script only builds the 10.11 package).src/Jellyfin.Plugin.TwoFactorAuth/meta.json: the three DLLs afterMimeKit.dllinassemblies.THIRD-PARTY.md: three MIT rows for them, next toSystem.Formats.Cbor.tests/Jellyfin.Plugin.TwoFactorAuth.Tests/Jellyfin.Plugin.TwoFactorAuth.Tests.csproj:NSubstitute6.2.0,Microsoft.AspNetCore.TestHost9.0.20,Microsoft.NET.Test.Sdk18.10.0.src/.../packages.lock.jsonandpackages.jf12.lock.json: the four src packages,MimeKit4.18.0 andBouncyCastle.Cryptography2.7.0 behind MailKit, and on net9 alsoSystem.Formats.Asn1,System.Security.Cryptography.PkcsandMicrosoft.Bcl.Cryptography10.0.0.tests/.../Tests/packages.lock.json: the three test packages, the src packages that flow through the project reference,Microsoft.CodeCoverageandMicrosoft.TestPlatform.*18.10.0 behindMicrosoft.NET.Test.Sdk, andNewtonsoft.Json,System.Collections.ImmutableandSystem.Reflection.Metadatadropping out because the new test SDK no longer pulls them.tests/.../Fuzz/packages.lock.json: the src packages through the project reference.Checklist
dotnet formatif unsure)THIRD-PARTY.mdfor the three bundled assemblies; nothing user-facing changed)dotnet build+dotnet testgreen)Screenshots / log slices
Additional notes
packages.jf12.lock.jsonuntouched.build.shdoes not restore in locked mode, so a release would still build, but the committed Jellyfin 12 lock would no longer describe the graph; this PR regenerates it.Jellyfin.Controller,Jellyfin.Model,Microsoft.IdentityModel.TokensandSystem.IdentityModel.Tokens.Jwtstay as pinned; they are on the Dependabot ignore list on purpose.NET9_ONLY_ASSEMBLIESlist is the one place to update, andbuild.shfails loudly when a listed assembly is missing from the publish output.