From ad1b58f5bde4b59cb47aed0b957262ca9ed7be8d Mon Sep 17 00:00:00 2001 From: Josh Patra Date: Fri, 30 Jan 2026 11:38:49 -0500 Subject: [PATCH] Fix nullable warnings and update CI/CD for beta branch --- .github/workflows/docker.yml | 7 ++++--- allstarr.Tests/DeezerDownloadServiceTests.cs | 2 +- allstarr.Tests/JellyfinProxyServiceTests.cs | 4 ++-- allstarr.Tests/QobuzDownloadServiceTests.cs | 2 +- allstarr/Services/Jellyfin/JellyfinStartupValidator.cs | 4 ++-- allstarr/Services/SquidWTF/SquidWTFMetadataService.cs | 9 +++++++-- 6 files changed, 17 insertions(+), 11 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index c839b80..39210dc 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -4,10 +4,10 @@ on: workflow_dispatch: push: tags: ["v*"] - branches: [main, dev] + branches: [main, beta] pull_request: types: [closed] - branches: [main, dev] + branches: [main, beta] env: DOTNET_VERSION: "10.0.x" @@ -77,7 +77,8 @@ jobs: type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} - type=raw,value=latest,enable=${{ github.ref == 'refs/heads/dev' || github.event_name == 'workflow_dispatch' }} + type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }} + type=raw,value=beta,enable=${{ github.ref == 'refs/heads/beta' }} - name: Build and push uses: docker/build-push-action@v6 diff --git a/allstarr.Tests/DeezerDownloadServiceTests.cs b/allstarr.Tests/DeezerDownloadServiceTests.cs index f0fa1a2..dc2458a 100644 --- a/allstarr.Tests/DeezerDownloadServiceTests.cs +++ b/allstarr.Tests/DeezerDownloadServiceTests.cs @@ -85,7 +85,7 @@ public class DeezerDownloadServiceTests : IDisposable var serviceProviderMock = new Mock(); serviceProviderMock.Setup(sp => sp.GetService(typeof(allstarr.Services.Subsonic.PlaylistSyncService))) - .Returns(null); + .Returns(null!); return new DeezerDownloadService( _httpClientFactoryMock.Object, diff --git a/allstarr.Tests/JellyfinProxyServiceTests.cs b/allstarr.Tests/JellyfinProxyServiceTests.cs index afd723d..6d268db 100644 --- a/allstarr.Tests/JellyfinProxyServiceTests.cs +++ b/allstarr.Tests/JellyfinProxyServiceTests.cs @@ -107,8 +107,8 @@ public class JellyfinProxyServiceTests Assert.True(captured!.Headers.Contains("Authorization")); var authHeader = captured.Headers.GetValues("Authorization").First(); Assert.Contains("MediaBrowser", authHeader); - Assert.Contains(_settings.ApiKey, authHeader); - Assert.Contains(_settings.ClientName, authHeader); + Assert.Contains(_settings.ApiKey!, authHeader); + Assert.Contains(_settings.ClientName!, authHeader); } [Fact] diff --git a/allstarr.Tests/QobuzDownloadServiceTests.cs b/allstarr.Tests/QobuzDownloadServiceTests.cs index 14f91c0..f20bc7a 100644 --- a/allstarr.Tests/QobuzDownloadServiceTests.cs +++ b/allstarr.Tests/QobuzDownloadServiceTests.cs @@ -88,7 +88,7 @@ public class QobuzDownloadServiceTests : IDisposable var serviceProviderMock = new Mock(); serviceProviderMock.Setup(sp => sp.GetService(typeof(allstarr.Services.Subsonic.PlaylistSyncService))) - .Returns(null); + .Returns(null!); return new QobuzDownloadService( _httpClientFactoryMock.Object, diff --git a/allstarr/Services/Jellyfin/JellyfinStartupValidator.cs b/allstarr/Services/Jellyfin/JellyfinStartupValidator.cs index c4977e8..8dd9923 100644 --- a/allstarr/Services/Jellyfin/JellyfinStartupValidator.cs +++ b/allstarr/Services/Jellyfin/JellyfinStartupValidator.cs @@ -140,7 +140,7 @@ public class JellyfinStartupValidator : BaseStartupValidator $"Token=\"{settings.ApiKey}\""; using var request = new HttpRequestMessage(HttpMethod.Get, - $"{settings.Url.TrimEnd('/')}/System/Info"); + $"{settings.Url?.TrimEnd('/')}/System/Info"); request.Headers.Add("Authorization", authHeader); var response = await _httpClient.SendAsync(request, cancellationToken); @@ -180,7 +180,7 @@ public class JellyfinStartupValidator : BaseStartupValidator { try { - var url = $"{settings.Url.TrimEnd('/')}/Library/MediaFolders"; + var url = $"{settings.Url?.TrimEnd('/')}/Library/MediaFolders"; if (!string.IsNullOrWhiteSpace(settings.UserId)) { url += $"?userId={settings.UserId}"; diff --git a/allstarr/Services/SquidWTF/SquidWTFMetadataService.cs b/allstarr/Services/SquidWTF/SquidWTFMetadataService.cs index 506e5a7..a897665 100644 --- a/allstarr/Services/SquidWTF/SquidWTFMetadataService.cs +++ b/allstarr/Services/SquidWTF/SquidWTFMetadataService.cs @@ -481,11 +481,11 @@ public class SquidWTFMetadataService : IMusicMetadataService var songs = new List(); // Get playlist name for album field - var playlistName = playlist.Value.TryGetProperty("title", out var titleEl) + var playlistName = playlist?.TryGetProperty("title", out var titleEl) == true ? titleEl.GetString() ?? "Unknown Playlist" : "Unknown Playlist"; - if (tracks != null) + if (tracks.HasValue) { int trackIndex = 1; foreach (var entry in tracks.Value.EnumerateArray()) @@ -785,6 +785,11 @@ public class SquidWTFMetadataService : IMusicMetadataService tracks = tracksEl; } + if (!playlist.HasValue) + { + throw new InvalidOperationException("Playlist data is missing"); + } + var externalId = playlist.Value.GetProperty("uuid").GetString()!; // Get curator/creator name