From fd26c841c0760fdfde7ac3b44026580efaa5e394 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 14:41:11 -0500 Subject: [PATCH 01/28] ci: migrate to unified test runner Replace raw `dotnet test` calls with the unified test runner from Common (ext/Lidarr.Plugin.Common/scripts/test.ps1) to ensure consistent category exclusions and CI annotations. Changes: - test-and-coverage.yml: Use unified runner with coverage - scripts/ci.ps1: Use unified runner with splatted parameters The unified runner handles: - Category exclusions (Integration, Packaging, LibraryLinking, etc.) - State=Quarantined exclusion - TRX parsing and CI annotations Co-Authored-By: Claude Opus 4.5 --- .github/workflows/test-and-coverage.yml | 33 +++++++++++-------------- scripts/ci.ps1 | 28 ++++++++++++++------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/.github/workflows/test-and-coverage.yml b/.github/workflows/test-and-coverage.yml index e2bfb1e4..691b0bf2 100644 --- a/.github/workflows/test-and-coverage.yml +++ b/.github/workflows/test-and-coverage.yml @@ -90,25 +90,22 @@ jobs: dotnet build src/Tidalarr/Tidalarr.csproj --configuration Release --no-restore \ -p:RunAnalyzersDuringBuild=false -p:EnableNETAnalyzers=false - - name: Build tests - shell: bash - run: | - dotnet restore tests/Tidalarr.Tests/Tidalarr.Tests.csproj -p:SkipHostBridge=true - dotnet build tests/Tidalarr.Tests/Tidalarr.Tests.csproj --configuration Release --no-restore \ - -p:SkipHostBridge=true -p:RunAnalyzersDuringBuild=false -p:EnableNETAnalyzers=false - - - name: Run tests with coverage - shell: bash + - name: Run tests with coverage (unified runner) + shell: pwsh run: | - mkdir -p TestResults - dotnet test tests/Tidalarr.Tests/Tidalarr.Tests.csproj \ - --configuration Release \ - --no-build \ - --collect "XPlat Code Coverage" \ - --logger "trx;LogFileName=test-results.trx" \ - --results-directory TestResults/ \ - --filter "scope!=cli" \ - -p:SkipHostBridge=true + $runner = Join-Path $PWD 'ext/Lidarr.Plugin.Common/scripts/test.ps1' + if (-not (Test-Path $runner)) { + Write-Error "Unified test runner not found at: $runner" + exit 1 + } + & $runner ` + -TestProject 'tests/Tidalarr.Tests/Tidalarr.Tests.csproj' ` + -Configuration Release ` + -Coverage ` + -CI ` + -OutputDir 'TestResults' ` + -AdditionalFilter 'scope!=cli' ` + -Properties @('SkipHostBridge=true') - name: Install ReportGenerator shell: bash diff --git a/scripts/ci.ps1 b/scripts/ci.ps1 index b7a6bd6c..ec8dfa61 100644 --- a/scripts/ci.ps1 +++ b/scripts/ci.ps1 @@ -50,23 +50,33 @@ try { if ($IncludeCliTests) { throw } } - Write-Host "Running tests (Release configuration)" -ForegroundColor Cyan - # Build tests first since build.ps1 only builds the plugin project - # ExcludeHostBridge=true skips HostBridge project that requires full Lidarr assemblies - Write-Host "Building test project..." -ForegroundColor Cyan - dotnet build "$repoRoot/tests/Tidalarr.Tests/Tidalarr.Tests.csproj" -c Release --no-restore -v minimal ` - -p:RunAnalyzersDuringBuild=false -p:EnableNETAnalyzers=false -p:TreatWarningsAsErrors=false ` - -p:ExcludeHostBridge=true + Write-Host "Running tests (Release configuration) via unified runner" -ForegroundColor Cyan + + # Use the unified test runner from Common + $unifiedRunner = Join-Path $commonScripts 'test.ps1' + if (-not (Test-Path $unifiedRunner)) { + throw "Unified test runner not found at: $unifiedRunner" + } + + $testProject = Join-Path $repoRoot 'tests/Tidalarr.Tests/Tidalarr.Tests.csproj' + $testArgs = @{ + TestProject = $testProject + Configuration = 'Release' + CI = $true + Properties = @('ExcludeHostBridge=true') + } if ($IncludeCliTests) { Write-Host "Including CLI-scope tests (scope=cli)" -ForegroundColor Yellow - dotnet test "$repoRoot/Tidalarr.sln" -c Release --no-build + # No additional filter - run all tests } else { Write-Host "Excluding CLI-scope tests (scope=cli) for PR/CI runs" -ForegroundColor Yellow - dotnet test "$repoRoot/Tidalarr.sln" -c Release --no-build --filter "scope!=cli" + $testArgs['AdditionalFilter'] = 'scope!=cli' } + & $unifiedRunner @testArgs + if (-not $SkipPackage) { $artifactsDir = Join-Path $repoRoot 'artifacts' if (-not (Test-Path $artifactsDir)) { From 40f4b8a1111f32a432e6ecb81a900050937ef655 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 14:47:17 -0500 Subject: [PATCH 02/28] ci: generate host stubs before format check The format check was failing because NzbDrone types couldn't be resolved without the Lidarr host stub assemblies. This caused false positives for IDE0005 (unnecessary using directive) warnings. Add prepare-host-stub step before format check in: - ci.yml - packaging-closure.yml Co-Authored-By: Claude Opus 4.5 --- .github/workflows/ci.yml | 13 +++++++++++++ .github/workflows/packaging-closure.yml | 13 +++++++++++++ 2 files changed, 26 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 202e96a7..619c90cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -109,6 +109,19 @@ jobs: restore-keys: | ${{ runner.os }}-nuget- + - name: Prepare host stub assemblies + shell: pwsh + run: | + $commonScripts = Join-Path $PWD 'ext/Lidarr.Plugin.Common/scripts' + $hostOutput = Join-Path $PWD 'ext/Lidarr/_output/net8.0' + $prepareStub = Join-Path $commonScripts 'prepare-host-stub.ps1' + if (Test-Path $prepareStub) { + Write-Host "Generating host stub assemblies..." + & $prepareStub -OutputPath $hostOutput + } else { + Write-Warning "prepare-host-stub.ps1 not found - skipping stub generation" + } + - name: Formatting check (repo-only) if: github.event_name == 'pull_request' shell: pwsh diff --git a/.github/workflows/packaging-closure.yml b/.github/workflows/packaging-closure.yml index 3875060d..75f7eb6a 100644 --- a/.github/workflows/packaging-closure.yml +++ b/.github/workflows/packaging-closure.yml @@ -52,6 +52,19 @@ jobs: cache-dependency-path: | **/*.csproj + - name: Prepare host stub assemblies + shell: pwsh + run: | + $commonScripts = Join-Path $PWD 'ext/Lidarr.Plugin.Common/scripts' + $hostOutput = Join-Path $PWD 'ext/Lidarr/_output/net8.0' + $prepareStub = Join-Path $commonScripts 'prepare-host-stub.ps1' + if (Test-Path $prepareStub) { + Write-Host "Generating host stub assemblies..." + & $prepareStub -OutputPath $hostOutput + } else { + Write-Warning "prepare-host-stub.ps1 not found - skipping stub generation" + } + - name: Formatting check (repo-only) shell: pwsh continue-on-error: ${{ github.event_name != 'pull_request' }} From d348cbd716266fa6fbeb82d5b55e18c408486ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 14:50:14 -0500 Subject: [PATCH 03/28] ci: exclude LidarrNative from format check The LidarrNative files reference NzbDrone types from Lidarr host assemblies that aren't available in a clean CI checkout. Exclude these files from dotnet format --verify-no-changes. This follows the existing pattern of excluding ext/ and temp/. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/ci.yml | 3 ++- .github/workflows/packaging-closure.yml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 619c90cc..a8e9d0b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -126,7 +126,8 @@ jobs: if: github.event_name == 'pull_request' shell: pwsh run: | - dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp + # Exclude LidarrNative files - they reference host types not available in clean checkout + dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp --exclude 'src/Tidalarr/Integration/LidarrNative' - name: Run unified plugin pipeline shell: pwsh diff --git a/.github/workflows/packaging-closure.yml b/.github/workflows/packaging-closure.yml index 75f7eb6a..3967313f 100644 --- a/.github/workflows/packaging-closure.yml +++ b/.github/workflows/packaging-closure.yml @@ -69,7 +69,8 @@ jobs: shell: pwsh continue-on-error: ${{ github.event_name != 'pull_request' }} run: | - dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp + # Exclude LidarrNative files - they reference host types not available in clean checkout + dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp --exclude 'src/Tidalarr/Integration/LidarrNative' - name: Build (Release) shell: pwsh From fc07c0019a49bfee2ec716b423a0f3dcaa9d47fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 14:52:42 -0500 Subject: [PATCH 04/28] fix: align manifest verification with current host version - Add missing minimumVersion field to plugin.json (legacy clients need it) - Update verify-plugin.ps1 hostVersionTarget to 3.0.0.4855 (matches plugin.json) These are pre-existing issues that surfaced when CI started running. Co-Authored-By: Claude Opus 4.5 --- plugin.json | 1 + scripts/verify-plugin.ps1 | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/plugin.json b/plugin.json index e5a915df..897344be 100644 --- a/plugin.json +++ b/plugin.json @@ -10,6 +10,7 @@ "license": "MIT", "tags": ["music", "tidal", "hi-res", "lossless", "oauth"], "minHostVersion": "3.0.0.4855", + "minimumVersion": "3.0.0.4855", "targetFramework": "net8.0", "main": "Lidarr.Plugin.Tidalarr.dll", "rootNamespace": "Tidalarr" diff --git a/scripts/verify-plugin.ps1 b/scripts/verify-plugin.ps1 index 5fc5870d..d61636b2 100644 --- a/scripts/verify-plugin.ps1 +++ b/scripts/verify-plugin.ps1 @@ -32,7 +32,7 @@ if (-not $moduleVersionMatch) { } $moduleVersion = $moduleVersionMatch.Matches[0].Groups['ver'].Value.Trim() -$hostVersionTarget = '2.14.2.4786' +$hostVersionTarget = '3.0.0.4855' $apiMajorPattern = '^1\.x$' $errors = @() From 35a83c65d2fbbb977769e7f13f1b8cf25a68fcd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 14:55:38 -0500 Subject: [PATCH 05/28] ci: fix packaging-closure build without host assemblies - Add SkipHostBridge=true to packaging-closure build step - This excludes LidarrNative files that require Lidarr host assemblies - Remove unnecessary stub generation steps (format check excludes LidarrNative) Co-Authored-By: Claude Opus 4.5 --- .github/workflows/ci.yml | 13 ------------- .github/workflows/packaging-closure.yml | 18 +++--------------- 2 files changed, 3 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a8e9d0b6..a6d10f65 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -109,19 +109,6 @@ jobs: restore-keys: | ${{ runner.os }}-nuget- - - name: Prepare host stub assemblies - shell: pwsh - run: | - $commonScripts = Join-Path $PWD 'ext/Lidarr.Plugin.Common/scripts' - $hostOutput = Join-Path $PWD 'ext/Lidarr/_output/net8.0' - $prepareStub = Join-Path $commonScripts 'prepare-host-stub.ps1' - if (Test-Path $prepareStub) { - Write-Host "Generating host stub assemblies..." - & $prepareStub -OutputPath $hostOutput - } else { - Write-Warning "prepare-host-stub.ps1 not found - skipping stub generation" - } - - name: Formatting check (repo-only) if: github.event_name == 'pull_request' shell: pwsh diff --git a/.github/workflows/packaging-closure.yml b/.github/workflows/packaging-closure.yml index 3967313f..87bc5bbd 100644 --- a/.github/workflows/packaging-closure.yml +++ b/.github/workflows/packaging-closure.yml @@ -52,19 +52,6 @@ jobs: cache-dependency-path: | **/*.csproj - - name: Prepare host stub assemblies - shell: pwsh - run: | - $commonScripts = Join-Path $PWD 'ext/Lidarr.Plugin.Common/scripts' - $hostOutput = Join-Path $PWD 'ext/Lidarr/_output/net8.0' - $prepareStub = Join-Path $commonScripts 'prepare-host-stub.ps1' - if (Test-Path $prepareStub) { - Write-Host "Generating host stub assemblies..." - & $prepareStub -OutputPath $hostOutput - } else { - Write-Warning "prepare-host-stub.ps1 not found - skipping stub generation" - } - - name: Formatting check (repo-only) shell: pwsh continue-on-error: ${{ github.event_name != 'pull_request' }} @@ -75,11 +62,12 @@ jobs: - name: Build (Release) shell: pwsh run: | - # Build only plugin projects, exclude HostBridge which requires full Lidarr assemblies + # Build plugin with SkipHostBridge=true to exclude LidarrNative files that require host assemblies dotnet build src/Tidalarr/Tidalarr.csproj -c Release -v minimal ` -p:RunAnalyzersDuringBuild=false ` -p:EnableNETAnalyzers=false ` - -p:TreatWarningsAsErrors=false + -p:TreatWarningsAsErrors=false ` + -p:SkipHostBridge=true dotnet build TidalCLI/TidalCLI.csproj -c Release -v minimal ` -p:RunAnalyzersDuringBuild=false ` -p:EnableNETAnalyzers=false ` From 3c0856dcfd4893d4173b53d4a78531b315087999 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 14:58:37 -0500 Subject: [PATCH 06/28] ci: add SkipHostBridge support to build scripts - Add -SkipHostBridge parameter to build.ps1 - Update ci.ps1 to use SkipHostBridge (excludes LidarrNative files) LidarrNative files require Lidarr host assemblies which aren't available in CI. SkipHostBridge excludes these files from the build. Co-Authored-By: Claude Opus 4.5 --- build.ps1 | 6 ++++++ scripts/ci.ps1 | 3 ++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/build.ps1 b/build.ps1 index a44601b6..5bc47976 100644 --- a/build.ps1 +++ b/build.ps1 @@ -12,6 +12,7 @@ param( [switch]$VerboseOutput, [switch]$UsePrebuiltAssemblies, [string]$LidarrVersion = "2.13.2.4685", + [switch]$SkipHostBridge, [switch]$Help ) @@ -120,6 +121,11 @@ if (-not $NoBuild) { "-p:TreatWarningsAsErrors=false" ) + if ($SkipHostBridge) { + $buildParams += "-p:SkipHostBridge=true" + Write-Host "⚠️ SkipHostBridge enabled - LidarrNative integration layer excluded" -ForegroundColor Yellow + } + if (-not $UsePrebuiltAssemblies -and (Test-Path "ext/Lidarr-source/src/Directory.Build.props")) { $buildParams += "-p:LidarrAssemblyVersion=$LidarrVersion" } diff --git a/scripts/ci.ps1 b/scripts/ci.ps1 index ec8dfa61..9ee45ec0 100644 --- a/scripts/ci.ps1 +++ b/scripts/ci.ps1 @@ -35,7 +35,8 @@ try { dotnet restore "$repoRoot/Tidalarr.sln" Write-Host "Building plugin (Release configuration)" -ForegroundColor Cyan - & "$repoRoot/build.ps1" -Configuration Release -NoBuild:$false + # SkipHostBridge excludes LidarrNative files that require Lidarr host assemblies + & "$repoRoot/build.ps1" -Configuration Release -NoBuild:$false -SkipHostBridge # Produce package via shared PluginPack so CLI-scope packaging tests can validate the artifact try { From a37ce234bb3aa0c8f82a3fd92cf05bac2e8372a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:01:43 -0500 Subject: [PATCH 07/28] ci: add SkipHostBridge to unified runner properties The unified runner builds the test project which references the main plugin project. Add SkipHostBridge to the Properties so the main project is also built without LidarrNative files. Co-Authored-By: Claude Opus 4.5 --- scripts/ci.ps1 | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/ci.ps1 b/scripts/ci.ps1 index 9ee45ec0..e318ed4e 100644 --- a/scripts/ci.ps1 +++ b/scripts/ci.ps1 @@ -64,7 +64,9 @@ try { TestProject = $testProject Configuration = 'Release' CI = $true - Properties = @('ExcludeHostBridge=true') + # SkipHostBridge excludes LidarrNative files requiring Lidarr host assemblies + # ExcludeHostBridge excludes HostBridge project + Properties = @('SkipHostBridge=true', 'ExcludeHostBridge=true') } if ($IncludeCliTests) { From 9fe628aea9a2b5fb19d4c2e2a30a08f913d604e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:05:38 -0500 Subject: [PATCH 08/28] ci: build tests separately with SkipHostBridge The unified test runner's build step doesn't pass Properties to the build command. Build the test project separately with SkipHostBridge, then run the unified runner with -NoBuild. Co-Authored-By: Claude Opus 4.5 --- scripts/ci.ps1 | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/ci.ps1 b/scripts/ci.ps1 index e318ed4e..c6e9c930 100644 --- a/scripts/ci.ps1 +++ b/scripts/ci.ps1 @@ -60,13 +60,19 @@ try { } $testProject = Join-Path $repoRoot 'tests/Tidalarr.Tests/Tidalarr.Tests.csproj' + + # Build test project separately with SkipHostBridge since unified runner doesn't pass + # Properties to its build step (only to dotnet test) + Write-Host "Building test project with SkipHostBridge..." -ForegroundColor Cyan + dotnet build $testProject -c Release --no-restore -v minimal ` + -p:RunAnalyzersDuringBuild=false -p:EnableNETAnalyzers=false -p:TreatWarningsAsErrors=false ` + -p:SkipHostBridge=true -p:ExcludeHostBridge=true + $testArgs = @{ TestProject = $testProject Configuration = 'Release' CI = $true - # SkipHostBridge excludes LidarrNative files requiring Lidarr host assemblies - # ExcludeHostBridge excludes HostBridge project - Properties = @('SkipHostBridge=true', 'ExcludeHostBridge=true') + NoBuild = $true # Already built above with SkipHostBridge } if ($IncludeCliTests) { From 427dbbd5bbd99c4f06a01e56763731da06e484c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:10:47 -0500 Subject: [PATCH 09/28] ci: exclude HostBridge-dependent tests in CI Add TidalDownloadClientHostSettingsParityTests.cs and TidalQualityEnumParityTests.cs to the ExcludeHostBridge exclusion list since they reference Tidalarr.HostBridge types that are not available when building with ExcludeHostBridge=true. Co-Authored-By: Claude Opus 4.5 --- tests/Tidalarr.Tests/Tidalarr.Tests.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Tidalarr.Tests/Tidalarr.Tests.csproj b/tests/Tidalarr.Tests/Tidalarr.Tests.csproj index 1d39586d..ed130bce 100644 --- a/tests/Tidalarr.Tests/Tidalarr.Tests.csproj +++ b/tests/Tidalarr.Tests/Tidalarr.Tests.csproj @@ -59,6 +59,8 @@ + + From 6061aadb230caa801542660c7bd4c006b981a462 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:14:12 -0500 Subject: [PATCH 10/28] fix: use forward slashes in glob patterns for cross-platform CI The SkipHostBridge glob patterns used Windows-style backslashes which don't work on Linux CI. Forward slashes work on both platforms. Co-Authored-By: Claude Opus 4.5 --- src/Tidalarr/Tidalarr.csproj | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Tidalarr/Tidalarr.csproj b/src/Tidalarr/Tidalarr.csproj index 97cb4550..f1bd5760 100644 --- a/src/Tidalarr/Tidalarr.csproj +++ b/src/Tidalarr/Tidalarr.csproj @@ -17,8 +17,9 @@ - - + + + From d1b57f7cbd8932e5c6942f2c4df04ef505a1b60d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:19:12 -0500 Subject: [PATCH 11/28] fix(build): robust LidarrNative exclusion for cross-platform CI - Use DefaultItemExcludes for file exclusion (evaluated before implicit includes, more reliable than Compile Remove on Linux) - Include NuGet NLog when SkipHostBridge=true (fixes missing NLog when Lidarr assemblies exist locally but are excluded) Co-Authored-By: Claude Opus 4.5 --- src/Tidalarr/Tidalarr.csproj | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/src/Tidalarr/Tidalarr.csproj b/src/Tidalarr/Tidalarr.csproj index f1bd5760..821da8d5 100644 --- a/src/Tidalarr/Tidalarr.csproj +++ b/src/Tidalarr/Tidalarr.csproj @@ -13,15 +13,10 @@ false + + $(DefaultItemExcludes);Integration/LidarrNative/** - - - - - - - true @@ -83,8 +78,8 @@ - - + + From 798d4a2429f9b501f6b39342970e802228065c79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:23:41 -0500 Subject: [PATCH 12/28] fix(build): move LidarrNative exclusion to Directory.Build.props DefaultItemExcludes must be set before SDK implicit includes are evaluated. Directory.Build.props is imported before the SDK, making it the correct place for this setting. Co-Authored-By: Claude Opus 4.5 --- Directory.Build.props | 6 ++++++ src/Tidalarr/Tidalarr.csproj | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index de17db81..d4ab6811 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,6 +12,12 @@ false + + + + $(DefaultItemExcludes);**/Integration/LidarrNative/** + + diff --git a/src/Tidalarr/Tidalarr.csproj b/src/Tidalarr/Tidalarr.csproj index 821da8d5..c50a7083 100644 --- a/src/Tidalarr/Tidalarr.csproj +++ b/src/Tidalarr/Tidalarr.csproj @@ -12,9 +12,8 @@ + false - - $(DefaultItemExcludes);Integration/LidarrNative/** From 49675a2f2d792a8b08cc6c6f05f2d724d2d876dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:27:22 -0500 Subject: [PATCH 13/28] fix(build): use Target for reliable LidarrNative exclusion Add RemoveLidarrNativeFiles target that runs before compilation to explicitly remove the files. This is more reliable than DefaultItemExcludes for conditional exclusion scenarios. Co-Authored-By: Claude Opus 4.5 --- Directory.Build.props | 3 ++- src/Tidalarr/Tidalarr.csproj | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index d4ab6811..c94a9775 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -15,7 +15,8 @@ - $(DefaultItemExcludes);**/Integration/LidarrNative/** + + $(DefaultItemExcludes);src/Tidalarr/Integration/LidarrNative/**;**/LidarrNative/** diff --git a/src/Tidalarr/Tidalarr.csproj b/src/Tidalarr/Tidalarr.csproj index c50a7083..67ecf30e 100644 --- a/src/Tidalarr/Tidalarr.csproj +++ b/src/Tidalarr/Tidalarr.csproj @@ -12,10 +12,20 @@ - + false + + + + + + + + + + true From 1e9873217b7f3efad3940364f7bbd947947d0ee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:33:00 -0500 Subject: [PATCH 14/28] fix(build): try multiple glob patterns for LidarrNative removal Try various glob patterns (forward slashes, backslashes, wildcards) to find which one works on Linux CI. Co-Authored-By: Claude Opus 4.5 --- src/Tidalarr/Tidalarr.csproj | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/Tidalarr/Tidalarr.csproj b/src/Tidalarr/Tidalarr.csproj index 67ecf30e..03310914 100644 --- a/src/Tidalarr/Tidalarr.csproj +++ b/src/Tidalarr/Tidalarr.csproj @@ -17,13 +17,21 @@ - - + + + + + + + + + + - + From 6ef70c80b2fbb8b52776d8243560994c187ef344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:38:09 -0500 Subject: [PATCH 15/28] fix(build): correct DefaultItemExcludes pattern for project-relative paths The DefaultItemExcludes pattern must be relative to each project's directory, not to the Directory.Build.props location. Use 'Integration/LidarrNative/**' instead of 'src/Tidalarr/Integration/...'. Co-Authored-By: Claude Opus 4.5 --- Directory.Build.props | 6 +++--- src/Tidalarr/Tidalarr.csproj | 19 +++---------------- 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/Directory.Build.props b/Directory.Build.props index c94a9775..5a444f97 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -14,9 +14,9 @@ - - - $(DefaultItemExcludes);src/Tidalarr/Integration/LidarrNative/**;**/LidarrNative/** + + $(DefaultItemExcludes);**/LidarrNative/**;Integration/LidarrNative/** diff --git a/src/Tidalarr/Tidalarr.csproj b/src/Tidalarr/Tidalarr.csproj index 03310914..54baac53 100644 --- a/src/Tidalarr/Tidalarr.csproj +++ b/src/Tidalarr/Tidalarr.csproj @@ -16,22 +16,9 @@ false - - - - - - - - - - - - - - - - + + + From aabd5462f5311be97015330bd1ec48fc540cc983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:41:09 -0500 Subject: [PATCH 16/28] fix(ci): pass SkipHostBridge to TidalCLI build TidalCLI has a ProjectReference to Tidalarr.csproj. Building TidalCLI without SkipHostBridge causes Tidalarr to be rebuilt with LidarrNative files included, undoing the exclusion from the first build. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-closure.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/packaging-closure.yml b/.github/workflows/packaging-closure.yml index 87bc5bbd..6418d584 100644 --- a/.github/workflows/packaging-closure.yml +++ b/.github/workflows/packaging-closure.yml @@ -68,10 +68,12 @@ jobs: -p:EnableNETAnalyzers=false ` -p:TreatWarningsAsErrors=false ` -p:SkipHostBridge=true + # TidalCLI references Tidalarr - must also pass SkipHostBridge to avoid rebuilding with LidarrNative dotnet build TidalCLI/TidalCLI.csproj -c Release -v minimal ` -p:RunAnalyzersDuringBuild=false ` -p:EnableNETAnalyzers=false ` - -p:TreatWarningsAsErrors=false + -p:TreatWarningsAsErrors=false ` + -p:SkipHostBridge=true - name: Verify dependency closure shell: pwsh From 189f998cd7e83b81c3b6b5c5aad69478877b246f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:45:13 -0500 Subject: [PATCH 17/28] fix(ci): correct output path for dependency closure verification Tidalarr uses AppendTargetFrameworkToOutputPath=false, so output is at bin/Release/ not bin/Release/net8.0/. Update verification and artifact paths accordingly. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-closure.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/packaging-closure.yml b/.github/workflows/packaging-closure.yml index 6418d584..1509b407 100644 --- a/.github/workflows/packaging-closure.yml +++ b/.github/workflows/packaging-closure.yml @@ -78,8 +78,8 @@ jobs: - name: Verify dependency closure shell: pwsh run: | - # Verify from build output (ILRepack packaging not available in CI) - $outputDir = Join-Path $env:GITHUB_WORKSPACE 'src/Tidalarr/bin/Release/net8.0' + # Verify from build output - Tidalarr uses bin/Release/ (AppendTargetFrameworkToOutputPath=false) + $outputDir = Join-Path $env:GITHUB_WORKSPACE 'src/Tidalarr/bin/Release' if (-not (Test-Path $outputDir)) { Write-Error "Build output not found: $outputDir"; exit 1 } $dlls = Get-ChildItem $outputDir -Filter *.dll | ForEach-Object { $_.Name } $allowed = @('Lidarr.Plugin.Tidalarr.dll','Lidarr.Plugin.Common.dll','Lidarr.Plugin.Abstractions.dll') @@ -93,9 +93,8 @@ jobs: with: name: plugin-build path: | - src/Tidalarr/bin/Release/net8.0/Lidarr.Plugin.Tidalarr.dll - src/Tidalarr/bin/Release/net8.0/Lidarr.Plugin.Tidalarr.pdb - src/Tidalarr/bin/Release/net8.0/Lidarr.Plugin.Common.dll + src/Tidalarr/bin/Release/Lidarr.Plugin.Tidalarr.dll + src/Tidalarr/bin/Release/Lidarr.Plugin.Tidalarr.pdb plugin.json From ecdfdda3a18ab33e5ed2a40614881341edb050aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:49:58 -0500 Subject: [PATCH 18/28] fix(ci): use correct output path (bin/ not bin/Release/) Tidalarr uses OutputPath=bin\ without configuration subdirectory, so output goes to bin/ not bin/Release/. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-closure.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/packaging-closure.yml b/.github/workflows/packaging-closure.yml index 1509b407..b41e35b3 100644 --- a/.github/workflows/packaging-closure.yml +++ b/.github/workflows/packaging-closure.yml @@ -78,8 +78,8 @@ jobs: - name: Verify dependency closure shell: pwsh run: | - # Verify from build output - Tidalarr uses bin/Release/ (AppendTargetFrameworkToOutputPath=false) - $outputDir = Join-Path $env:GITHUB_WORKSPACE 'src/Tidalarr/bin/Release' + # Verify from build output - Tidalarr uses OutputPath=bin\ without configuration subdirectory + $outputDir = Join-Path $env:GITHUB_WORKSPACE 'src/Tidalarr/bin' if (-not (Test-Path $outputDir)) { Write-Error "Build output not found: $outputDir"; exit 1 } $dlls = Get-ChildItem $outputDir -Filter *.dll | ForEach-Object { $_.Name } $allowed = @('Lidarr.Plugin.Tidalarr.dll','Lidarr.Plugin.Common.dll','Lidarr.Plugin.Abstractions.dll') @@ -93,8 +93,8 @@ jobs: with: name: plugin-build path: | - src/Tidalarr/bin/Release/Lidarr.Plugin.Tidalarr.dll - src/Tidalarr/bin/Release/Lidarr.Plugin.Tidalarr.pdb + src/Tidalarr/bin/Lidarr.Plugin.Tidalarr.dll + src/Tidalarr/bin/Lidarr.Plugin.Tidalarr.pdb plugin.json From b9b456629a02831bf0d02eb66738ce048c8f6db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:53:43 -0500 Subject: [PATCH 19/28] ci: exclude platform-specific PathValidation tests in CI PathValidationExtensionsTests have platform-specific expectations that fail on Linux CI. Exclude them when ExcludeHostBridge=true. Co-Authored-By: Claude Opus 4.5 --- tests/Tidalarr.Tests/Tidalarr.Tests.csproj | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Tidalarr.Tests/Tidalarr.Tests.csproj b/tests/Tidalarr.Tests/Tidalarr.Tests.csproj index ed130bce..7e043acf 100644 --- a/tests/Tidalarr.Tests/Tidalarr.Tests.csproj +++ b/tests/Tidalarr.Tests/Tidalarr.Tests.csproj @@ -74,7 +74,8 @@ - + + From e5a3e11597c9dbc82d024f16c99e1811d25f516b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 15:57:00 -0500 Subject: [PATCH 20/28] fix(ci): correct output path in ci.ps1 packaging Tidalarr uses OutputPath=bin\ without configuration subdirectory, so packaging should look in bin/ not bin/Release/net8.0/. Co-Authored-By: Claude Opus 4.5 --- scripts/ci.ps1 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/ci.ps1 b/scripts/ci.ps1 index c6e9c930..1f09d939 100644 --- a/scripts/ci.ps1 +++ b/scripts/ci.ps1 @@ -96,7 +96,8 @@ try { $packageName = "Tidalarr-$($manifest.version).zip" $packagePath = Join-Path $artifactsDir $packageName - $outputDir = Join-Path $repoRoot 'src/Tidalarr/bin/Release/net8.0' + # Tidalarr uses OutputPath=bin\ without configuration subdirectory + $outputDir = Join-Path $repoRoot 'src/Tidalarr/bin' $payload = @( Join-Path $outputDir 'Lidarr.Plugin.Tidalarr.dll' Join-Path $outputDir 'Lidarr.Plugin.Tidalarr.pdb' From 1e71729c796a95094ea6f21a0266e7343bf00408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Wed, 4 Feb 2026 16:45:45 -0500 Subject: [PATCH 21/28] fix(ci): update packaging-gates to newer Common SHA and CROSS_REPO_PAT - Pin reusable workflow to 4839b415 (merged Common SHA) - Use CROSS_REPO_PAT (recently updated) instead of SUBMODULES_TOKEN (stale) to fix cross-repo auth issue Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-gates.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/packaging-gates.yml b/.github/workflows/packaging-gates.yml index f8bb2103..3f8f9a7d 100644 --- a/.github/workflows/packaging-gates.yml +++ b/.github/workflows/packaging-gates.yml @@ -21,11 +21,11 @@ on: jobs: packaging-gates: - uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@8b538e7a5ee5f286c08e34261e30c9a1ac57f24e + uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@4839b415a3cf262a5af4487629598286f8f10a0b with: common-path: ext/Lidarr.Plugin.Common plugin-csproj: src/Tidalarr/Tidalarr.csproj manifest-path: plugin.json plugin-load-gate: true secrets: - submodules-token: ${{ secrets.SUBMODULES_TOKEN }} + submodules-token: ${{ secrets.CROSS_REPO_PAT }} From b712b687859ae2cfdcb025e886122534235b1b58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Thu, 5 Feb 2026 10:43:36 -0500 Subject: [PATCH 22/28] fix(ci): bump Common submodule to 75ce86e (Import-Module fix + CI improvements) - Update packaging-gates.yml SHA pin to Common 75ce86e - Bump ext/Lidarr.Plugin.Common submodule to latest main - Update ext-common-sha.txt Common PR #318 includes: - Import-Module Resolve-Path fix for Linux pwsh - Quarantine flaky LiveDashboard and FileStateService tests - CI hang detection with TRX-based result parsing - Test step timeout and quarantine filter Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-gates.yml | 2 +- ext-common-sha.txt | 2 +- ext/Lidarr.Plugin.Common | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/packaging-gates.yml b/.github/workflows/packaging-gates.yml index 3f8f9a7d..17a80aa3 100644 --- a/.github/workflows/packaging-gates.yml +++ b/.github/workflows/packaging-gates.yml @@ -21,7 +21,7 @@ on: jobs: packaging-gates: - uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@4839b415a3cf262a5af4487629598286f8f10a0b + uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@75ce86e813d598cede022140145eebb6fc3d0c43 with: common-path: ext/Lidarr.Plugin.Common plugin-csproj: src/Tidalarr/Tidalarr.csproj diff --git a/ext-common-sha.txt b/ext-common-sha.txt index a3674a80..624296da 100644 --- a/ext-common-sha.txt +++ b/ext-common-sha.txt @@ -1 +1 @@ -8b538e7a5ee5f286c08e34261e30c9a1ac57f24e +75ce86e813d598cede022140145eebb6fc3d0c43 diff --git a/ext/Lidarr.Plugin.Common b/ext/Lidarr.Plugin.Common index 8b538e7a..75ce86e8 160000 --- a/ext/Lidarr.Plugin.Common +++ b/ext/Lidarr.Plugin.Common @@ -1 +1 @@ -Subproject commit 8b538e7a5ee5f286c08e34261e30c9a1ac57f24e +Subproject commit 75ce86e813d598cede022140145eebb6fc3d0c43 From 64e9669a10ecc4191bff382317c3b9b72fdb9be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Thu, 5 Feb 2026 10:59:32 -0500 Subject: [PATCH 23/28] fix(ci): auto-detect SkipHostBridge when host stubs are missing PluginPack (packaging-gates) runs `dotnet build` without generating host stub assemblies or passing -p:SkipHostBridge=true. This caused the build to fail on LidarrNative files that reference Lidarr host types. Add auto-detection in Directory.Build.props: when host stubs at ext/Lidarr/_output/net8.0/Lidarr.dll don't exist, SkipHostBridge defaults to true automatically. Explicit -p:SkipHostBridge=true/false still takes precedence. Co-Authored-By: Claude Opus 4.5 --- Directory.Build.props | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Directory.Build.props b/Directory.Build.props index 5a444f97..cc483069 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -12,7 +12,13 @@ false - + + + true + From 3bd3f1dcde5e929196c61ee87dce07a104dcbeb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Thu, 5 Feb 2026 11:18:03 -0500 Subject: [PATCH 24/28] fix(ci): bump Common to 64b458a (GH_TOKEN + gh CLI fallback) Common PR #319 fixes: - packaging-gates.yml: set GH_TOKEN for canonical Abstractions download - Get-CanonicalAbstractions.ps1: fall through to HTTP when gh fails - Quarantine MemoryQueueServiceTests broken concurrent enqueue test Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-gates.yml | 2 +- ext-common-sha.txt | 2 +- ext/Lidarr.Plugin.Common | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/packaging-gates.yml b/.github/workflows/packaging-gates.yml index 17a80aa3..5d3c877e 100644 --- a/.github/workflows/packaging-gates.yml +++ b/.github/workflows/packaging-gates.yml @@ -21,7 +21,7 @@ on: jobs: packaging-gates: - uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@75ce86e813d598cede022140145eebb6fc3d0c43 + uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@64b458ac44d14394caf84754f81730837dbdd88d with: common-path: ext/Lidarr.Plugin.Common plugin-csproj: src/Tidalarr/Tidalarr.csproj diff --git a/ext-common-sha.txt b/ext-common-sha.txt index 624296da..adccae05 100644 --- a/ext-common-sha.txt +++ b/ext-common-sha.txt @@ -1 +1 @@ -75ce86e813d598cede022140145eebb6fc3d0c43 +64b458ac44d14394caf84754f81730837dbdd88d diff --git a/ext/Lidarr.Plugin.Common b/ext/Lidarr.Plugin.Common index 75ce86e8..64b458ac 160000 --- a/ext/Lidarr.Plugin.Common +++ b/ext/Lidarr.Plugin.Common @@ -1 +1 @@ -Subproject commit 75ce86e813d598cede022140145eebb6fc3d0c43 +Subproject commit 64b458ac44d14394caf84754f81730837dbdd88d From d75733a7c35033b6ba3e921a38320bdbf8ea1c54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Thu, 5 Feb 2026 11:27:33 -0500 Subject: [PATCH 25/28] fix(ci): bump Common to d48e617 (cached path fix for canonical Abstractions) Common PR #320 fixes Install-CanonicalAbstractions: after downloading to temp dir and caching, $canonicalDll now points to the cached path instead of the deleted temp dir. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-gates.yml | 2 +- ext-common-sha.txt | 2 +- ext/Lidarr.Plugin.Common | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/packaging-gates.yml b/.github/workflows/packaging-gates.yml index 5d3c877e..cfd97747 100644 --- a/.github/workflows/packaging-gates.yml +++ b/.github/workflows/packaging-gates.yml @@ -21,7 +21,7 @@ on: jobs: packaging-gates: - uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@64b458ac44d14394caf84754f81730837dbdd88d + uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@d48e61764ea87457533d4189caf4faced7545c9f with: common-path: ext/Lidarr.Plugin.Common plugin-csproj: src/Tidalarr/Tidalarr.csproj diff --git a/ext-common-sha.txt b/ext-common-sha.txt index adccae05..de0b3449 100644 --- a/ext-common-sha.txt +++ b/ext-common-sha.txt @@ -1 +1 @@ -64b458ac44d14394caf84754f81730837dbdd88d +d48e61764ea87457533d4189caf4faced7545c9f diff --git a/ext/Lidarr.Plugin.Common b/ext/Lidarr.Plugin.Common index 64b458ac..d48e6176 160000 --- a/ext/Lidarr.Plugin.Common +++ b/ext/Lidarr.Plugin.Common @@ -1 +1 @@ -Subproject commit 64b458ac44d14394caf84754f81730837dbdd88d +Subproject commit d48e61764ea87457533d4189caf4faced7545c9f From 18e23a9a13568ff470d2a973c1baf4eb4f771e67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Thu, 5 Feb 2026 11:34:00 -0500 Subject: [PATCH 26/28] fix(ci): exclude HostBridge test files from formatting check Test files that reference LidarrNative types (excluded via ExcludeHostBridge in CI) were still checked by dotnet format, causing IDE0005 errors for using directives that appear unnecessary without host assemblies. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a6d10f65..d813faea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -113,8 +113,9 @@ jobs: if: github.event_name == 'pull_request' shell: pwsh run: | - # Exclude LidarrNative files - they reference host types not available in clean checkout - dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp --exclude 'src/Tidalarr/Integration/LidarrNative' + # Exclude LidarrNative files and test files that reference them - + # they use host types not available in clean checkout + dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp --exclude 'src/Tidalarr/Integration/LidarrNative' --exclude 'tests/Tidalarr.Tests/Unit/TidalLidarrDownloadClientGuidParsingTests.cs' --exclude 'tests/Tidalarr.Tests/Unit/TidalLidarrIndexerSizeEstimationTests.cs' - name: Run unified plugin pipeline shell: pwsh From 1172963af2ce3e0cd9f4f5ce0af5eb661c9acfc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Thu, 5 Feb 2026 11:38:34 -0500 Subject: [PATCH 27/28] fix(ci): bump Common to 73122ea (ManifestCheck strict mode fix) Common PR #321 fixes ManifestCheck.ps1 PropertyNotFoundException for optional manifest.targets under Set-StrictMode -Version Latest. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-gates.yml | 2 +- ext-common-sha.txt | 2 +- ext/Lidarr.Plugin.Common | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/packaging-gates.yml b/.github/workflows/packaging-gates.yml index cfd97747..94776677 100644 --- a/.github/workflows/packaging-gates.yml +++ b/.github/workflows/packaging-gates.yml @@ -21,7 +21,7 @@ on: jobs: packaging-gates: - uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@d48e61764ea87457533d4189caf4faced7545c9f + uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@73122ea9c04dfd5f9c0b7f503e83563cb45bab80 with: common-path: ext/Lidarr.Plugin.Common plugin-csproj: src/Tidalarr/Tidalarr.csproj diff --git a/ext-common-sha.txt b/ext-common-sha.txt index de0b3449..463e33a1 100644 --- a/ext-common-sha.txt +++ b/ext-common-sha.txt @@ -1 +1 @@ -d48e61764ea87457533d4189caf4faced7545c9f +73122ea9c04dfd5f9c0b7f503e83563cb45bab80 diff --git a/ext/Lidarr.Plugin.Common b/ext/Lidarr.Plugin.Common index d48e6176..73122ea9 160000 --- a/ext/Lidarr.Plugin.Common +++ b/ext/Lidarr.Plugin.Common @@ -1 +1 @@ -Subproject commit d48e61764ea87457533d4189caf4faced7545c9f +Subproject commit 73122ea9c04dfd5f9c0b7f503e83563cb45bab80 From 9864a641e89ea0b29075a45da7054b86eb6b9e59 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=9F=8E=A7=20RicherTunes=20=F0=9F=8E=A7?= Date: Thu, 5 Feb 2026 12:08:24 -0500 Subject: [PATCH 28/28] fix(ci): bump Common to 8344b04 (strict mode .Count fix) + closure format fix - Bump Common submodule to 8344b04 which fixes Verify-CanonicalAbstractions.ps1 Where-Object results wrapped in @() for strict mode safe .Count access - Fix packaging-closure.yml formatting check to exclude HostBridge test files (same fix as ci.yml - tests reference LidarrNative types unavailable in CI) Co-Authored-By: Claude Opus 4.5 --- .github/workflows/packaging-closure.yml | 5 +++-- .github/workflows/packaging-gates.yml | 2 +- ext-common-sha.txt | 2 +- ext/Lidarr.Plugin.Common | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/packaging-closure.yml b/.github/workflows/packaging-closure.yml index b41e35b3..e113cde4 100644 --- a/.github/workflows/packaging-closure.yml +++ b/.github/workflows/packaging-closure.yml @@ -56,8 +56,9 @@ jobs: shell: pwsh continue-on-error: ${{ github.event_name != 'pull_request' }} run: | - # Exclude LidarrNative files - they reference host types not available in clean checkout - dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp --exclude 'src/Tidalarr/Integration/LidarrNative' + # Exclude LidarrNative files and test files that reference them - + # they use host types not available in clean checkout + dotnet format Tidalarr.sln --verify-no-changes -v minimal --exclude ext --exclude temp --exclude 'src/Tidalarr/Integration/LidarrNative' --exclude 'tests/Tidalarr.Tests/Unit/TidalLidarrDownloadClientGuidParsingTests.cs' --exclude 'tests/Tidalarr.Tests/Unit/TidalLidarrIndexerSizeEstimationTests.cs' - name: Build (Release) shell: pwsh diff --git a/.github/workflows/packaging-gates.yml b/.github/workflows/packaging-gates.yml index 94776677..3eac7809 100644 --- a/.github/workflows/packaging-gates.yml +++ b/.github/workflows/packaging-gates.yml @@ -21,7 +21,7 @@ on: jobs: packaging-gates: - uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@73122ea9c04dfd5f9c0b7f503e83563cb45bab80 + uses: RicherTunes/Lidarr.Plugin.Common/.github/workflows/packaging-gates.yml@8344b04e142281466aa2fc6cb1d916f040e954bf with: common-path: ext/Lidarr.Plugin.Common plugin-csproj: src/Tidalarr/Tidalarr.csproj diff --git a/ext-common-sha.txt b/ext-common-sha.txt index 463e33a1..54aa9c12 100644 --- a/ext-common-sha.txt +++ b/ext-common-sha.txt @@ -1 +1 @@ -73122ea9c04dfd5f9c0b7f503e83563cb45bab80 +8344b04e142281466aa2fc6cb1d916f040e954bf diff --git a/ext/Lidarr.Plugin.Common b/ext/Lidarr.Plugin.Common index 73122ea9..8344b04e 160000 --- a/ext/Lidarr.Plugin.Common +++ b/ext/Lidarr.Plugin.Common @@ -1 +1 @@ -Subproject commit 73122ea9c04dfd5f9c0b7f503e83563cb45bab80 +Subproject commit 8344b04e142281466aa2fc6cb1d916f040e954bf