From e7ad06a2db02df7b7357f902c7ab9f7502e37d2f Mon Sep 17 00:00:00 2001 From: bdovaz Date: Fri, 11 Jul 2025 22:54:00 +0200 Subject: [PATCH 1/2] Expose NuGet packages release notes --- src/UnityNuGet/Npm/NpmPackageVersion.cs | 9 +++++++++ src/UnityNuGet/RegistryCache.cs | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/UnityNuGet/Npm/NpmPackageVersion.cs b/src/UnityNuGet/Npm/NpmPackageVersion.cs index 0c28be05..30673708 100644 --- a/src/UnityNuGet/Npm/NpmPackageVersion.cs +++ b/src/UnityNuGet/Npm/NpmPackageVersion.cs @@ -8,6 +8,12 @@ namespace UnityNuGet.Npm /// public class NpmPackageVersion : NpmObject { + public class UpmPackageInfo + { + [JsonPropertyName("changelog")] + public string? Changelog { get; set; } + } + [JsonPropertyName("name")] public string? Name { get; set; } @@ -23,6 +29,9 @@ public class NpmPackageVersion : NpmObject [JsonPropertyName("_id")] public string? Id { get; set; } + [JsonPropertyName("_upm")] + public UpmPackageInfo? Upm { get; set; } + [JsonPropertyName("unity")] public string? Unity { get; set; } diff --git a/src/UnityNuGet/RegistryCache.cs b/src/UnityNuGet/RegistryCache.cs index 98d2c0db..e9a1f12a 100644 --- a/src/UnityNuGet/RegistryCache.cs +++ b/src/UnityNuGet/RegistryCache.cs @@ -636,6 +636,16 @@ internal async Task ConvertNuGetPackageToUnity( // Update Repository metadata if necessary RepositoryMetadata repoMeta = packageReader.NuspecReader.GetRepositoryMetadata(); + string releaseNotes = packageReader.NuspecReader.GetReleaseNotes(); + + if (!string.IsNullOrEmpty(releaseNotes)) + { + npmPackageVersion.Upm = new NpmPackageVersion.UpmPackageInfo + { + Changelog = releaseNotes, + }; + } + if (repoMeta != null && repoMeta.Url != null && repoMeta.Commit != null && repoMeta.Type != null) { npmPackageVersion.Repository = new NpmSourceRepository() From c32417fc672b6ba7a70af5efef10853b6e6bba19 Mon Sep 17 00:00:00 2001 From: bdovaz Date: Sat, 12 Jul 2025 00:11:02 +0200 Subject: [PATCH 2/2] wip --- src/UnityNuGet/Npm/NpmPackageVersion.cs | 1 + src/UnityNuGet/RegistryCache.cs | 68 +++++++++++++------------ 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/UnityNuGet/Npm/NpmPackageVersion.cs b/src/UnityNuGet/Npm/NpmPackageVersion.cs index 30673708..194f533a 100644 --- a/src/UnityNuGet/Npm/NpmPackageVersion.cs +++ b/src/UnityNuGet/Npm/NpmPackageVersion.cs @@ -29,6 +29,7 @@ public class UpmPackageInfo [JsonPropertyName("_id")] public string? Id { get; set; } + [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] [JsonPropertyName("_upm")] public UpmPackageInfo? Upm { get; set; } diff --git a/src/UnityNuGet/RegistryCache.cs b/src/UnityNuGet/RegistryCache.cs index e9a1f12a..feea9d63 100644 --- a/src/UnityNuGet/RegistryCache.cs +++ b/src/UnityNuGet/RegistryCache.cs @@ -199,7 +199,7 @@ public async Task Build(CancellationToken cancellationToken = default) { foreach (SourceRepository source in _sourceRepositories) { - PackageMetadataResource packageMetadataResource = source.GetResource(); + PackageMetadataResource packageMetadataResource = await source.GetResourceAsync(cancellationToken); IEnumerable result = await packageMetadataResource.GetMetadataAsync( packageName, @@ -491,11 +491,43 @@ private async Task BuildInternal(CancellationToken cancellationToken = default) // If we don't have any dependencies error, generate the package if (!hasDependencyErrors) { + using DownloadResourceResult downloadResult = await GetPackageDownloadResourceResult(packageIdentity, cancellationToken); + + using PackageReaderBase packageReader = downloadResult.PackageReader; + + string releaseNotes = packageReader.NuspecReader.GetReleaseNotes(); + + if (!string.IsNullOrEmpty(releaseNotes)) + { + npmVersion.Upm = new NpmPackageVersion.UpmPackageInfo + { + Changelog = releaseNotes, + }; + } + + // Update Repository metadata if necessary + RepositoryMetadata repoMeta = packageReader.NuspecReader.GetRepositoryMetadata(); + + if (repoMeta != null && repoMeta.Url != null && repoMeta.Commit != null && repoMeta.Type != null) + { + npmVersion.Repository = new NpmSourceRepository() + { + Revision = repoMeta.Commit, + Type = repoMeta.Type, + Url = repoMeta.Url, + }; + } + else + { + npmVersion.Repository = null; + } + bool packageConverted = await ConvertNuGetToUnityPackageIfDoesNotExist( packageIdentity, npmPackageInfo, npmVersion, packageMeta, + packageReader, forceUpdate, packageEntry, cancellationToken); @@ -580,6 +612,7 @@ private async Task ConvertNuGetToUnityPackageIfDoesNotExist( NpmPackageInfo npmPackageInfo, NpmPackageVersion npmPackageVersion, IPackageSearchMetadata packageMeta, + PackageReaderBase packageReader, bool forceUpdate, RegistryEntry packageEntry, CancellationToken cancellationToken = default) @@ -597,6 +630,7 @@ await ConvertNuGetPackageToUnity( npmPackageInfo, npmPackageVersion, packageMeta, + packageReader, packageEntry, cancellationToken); @@ -621,6 +655,7 @@ internal async Task ConvertNuGetPackageToUnity( NpmPackageInfo npmPackageInfo, NpmPackageVersion npmPackageVersion, IPackageSearchMetadata packageMeta, + PackageReaderBase packageReader, RegistryEntry packageEntry, CancellationToken cancellationToken = default) { @@ -629,37 +664,6 @@ internal async Task ConvertNuGetPackageToUnity( LogInformation($"Converting NuGet package {identity} to Unity `{unityPackageFileName}`"); - using DownloadResourceResult downloadResult = await GetPackageDownloadResourceResult(identity, cancellationToken); - - using PackageReaderBase packageReader = downloadResult.PackageReader; - - // Update Repository metadata if necessary - RepositoryMetadata repoMeta = packageReader.NuspecReader.GetRepositoryMetadata(); - - string releaseNotes = packageReader.NuspecReader.GetReleaseNotes(); - - if (!string.IsNullOrEmpty(releaseNotes)) - { - npmPackageVersion.Upm = new NpmPackageVersion.UpmPackageInfo - { - Changelog = releaseNotes, - }; - } - - if (repoMeta != null && repoMeta.Url != null && repoMeta.Commit != null && repoMeta.Type != null) - { - npmPackageVersion.Repository = new NpmSourceRepository() - { - Revision = repoMeta.Commit, - Type = repoMeta.Type, - Url = repoMeta.Url, - }; - } - else - { - npmPackageVersion.Repository = null; - } - try { using var memStream = new MemoryStream();