pull/15783/head
Engincan VESKE 3 years ago
parent 17755a0724
commit 1e21e0f756

@ -13,7 +13,7 @@ using System.Threading.Tasks;
using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands; using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.Memory; using Volo.Abp.Cli.Memory;
using Volo.Abp.Cli.NuGet; using Volo.Abp.Cli.Version;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.IO; using Volo.Abp.IO;
@ -27,14 +27,14 @@ public class CliService : ITransientDependency
protected ICommandLineArgumentParser CommandLineArgumentParser { get; } protected ICommandLineArgumentParser CommandLineArgumentParser { get; }
protected ICommandSelector CommandSelector { get; } protected ICommandSelector CommandSelector { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; } protected IServiceScopeFactory ServiceScopeFactory { get; }
protected NuGetService NuGetService { get; } protected PackageVersionCheckerService PackageVersionCheckerService { get; }
public ICmdHelper CmdHelper { get; } public ICmdHelper CmdHelper { get; }
public CliService( public CliService(
ICommandLineArgumentParser commandLineArgumentParser, ICommandLineArgumentParser commandLineArgumentParser,
ICommandSelector commandSelector, ICommandSelector commandSelector,
IServiceScopeFactory serviceScopeFactory, IServiceScopeFactory serviceScopeFactory,
NuGetService nugetService, PackageVersionCheckerService nugetService,
ICmdHelper cmdHelper, ICmdHelper cmdHelper,
MemoryService memoryService) MemoryService memoryService)
{ {
@ -42,7 +42,7 @@ public class CliService : ITransientDependency
CommandLineArgumentParser = commandLineArgumentParser; CommandLineArgumentParser = commandLineArgumentParser;
CommandSelector = commandSelector; CommandSelector = commandSelector;
ServiceScopeFactory = serviceScopeFactory; ServiceScopeFactory = serviceScopeFactory;
NuGetService = nugetService; PackageVersionCheckerService = nugetService;
CmdHelper = cmdHelper; CmdHelper = cmdHelper;
Logger = NullLogger<CliService>.Instance; Logger = NullLogger<CliService>.Instance;
@ -183,11 +183,10 @@ public class CliService : ITransientDependency
var toolPath = GetToolPath(assembly); var toolPath = GetToolPath(assembly);
var updateChannel = GetUpdateChannel(currentCliVersion); var updateChannel = GetUpdateChannel(currentCliVersion);
var latestVersion = await GetLatestVersion(updateChannel); var latestVersionInfo = await GetLatestVersion(updateChannel);
if (latestVersionInfo != null && latestVersionInfo.Version > currentCliVersion)
if (latestVersion != null && latestVersion > currentCliVersion)
{ {
LogNewVersionInfo(updateChannel, latestVersion, toolPath); LogNewVersionInfo(updateChannel, latestVersionInfo.Version, toolPath, latestVersionInfo.Message);
} }
} }
catch (Exception e) catch (Exception e)
@ -286,18 +285,18 @@ public class CliService : ITransientDependency
return UpdateChannel.Prerelease; return UpdateChannel.Prerelease;
} }
private async Task<SemanticVersion> GetLatestVersion(UpdateChannel updateChannel) private async Task<LatestVersionInfo> GetLatestVersion(UpdateChannel updateChannel)
{ {
switch (updateChannel) switch (updateChannel)
{ {
case UpdateChannel.Stable: case UpdateChannel.Stable:
return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli"); return await PackageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Cli");
case UpdateChannel.Prerelease: case UpdateChannel.Prerelease:
return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeReleaseCandidates: true); return await PackageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeReleaseCandidates: true);
case UpdateChannel.Nightly: case UpdateChannel.Nightly:
return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeNightly: true); return await PackageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeNightly: true);
default: default:
return default; return default;
@ -310,7 +309,7 @@ public class CliService : ITransientDependency
return globalPaths.Select(Environment.ExpandEnvironmentVariables).Contains(toolPath); return globalPaths.Select(Environment.ExpandEnvironmentVariables).Contains(toolPath);
} }
private void LogNewVersionInfo(UpdateChannel updateChannel, SemanticVersion latestVersion, string toolPath) private void LogNewVersionInfo(UpdateChannel updateChannel, SemanticVersion latestVersion, string toolPath, string message = null)
{ {
var toolPathArg = IsGlobalTool(toolPath) ? "-g" : $"--tool-path {toolPath}"; var toolPathArg = IsGlobalTool(toolPath) ? "-g" : $"--tool-path {toolPath}";
@ -338,6 +337,11 @@ public class CliService : ITransientDependency
throw new ArgumentOutOfRangeException(nameof(updateChannel), updateChannel, null); throw new ArgumentOutOfRangeException(nameof(updateChannel), updateChannel, null);
} }
if (!string.IsNullOrWhiteSpace(message))
{
Logger.LogWarning(message);
}
Logger.LogWarning(string.Empty); Logger.LogWarning(string.Empty);
} }

@ -9,7 +9,7 @@ public static class CliUrls
public const string AccountAbpIo = AccountAbpIoProduction; public const string AccountAbpIo = AccountAbpIoProduction;
public const string NuGetRootPath = NuGetRootPathProduction; public const string NuGetRootPath = NuGetRootPathProduction;
public const string LatestVersionCheckFullPath = public const string LatestVersionCheckFullPath =
"https://raw.githubusercontent.com/abpframework/abp/dev/latest-version.json"; "https://raw.githubusercontent.com/abpframework/abp/dev/latest-versions.json";
public const string WwwAbpIoProduction = "https://abp.io/"; public const string WwwAbpIoProduction = "https://abp.io/";
public const string AccountAbpIoProduction = "https://account.abp.io/"; public const string AccountAbpIoProduction = "https://account.abp.io/";

@ -5,7 +5,7 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.Args; using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.NuGet; using Volo.Abp.Cli.Version;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -18,14 +18,14 @@ public class CliCommand : IConsoleCommand, ITransientDependency
private const string CliPackageName = "Volo.Abp.Cli"; private const string CliPackageName = "Volo.Abp.Cli";
private readonly ICmdHelper _cmdHelper; private readonly ICmdHelper _cmdHelper;
private readonly NuGetService _nuGetService; private readonly PackageVersionCheckerService _packageVersionCheckerService;
private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService; private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService;
public ILogger<CliCommand> Logger { get; set; } public ILogger<CliCommand> Logger { get; set; }
public CliCommand(ICmdHelper cmdHelper, NuGetService nuGetService, AbpNuGetIndexUrlService nuGetIndexUrlService) public CliCommand(ICmdHelper cmdHelper, PackageVersionCheckerService packageVersionCheckerService, AbpNuGetIndexUrlService nuGetIndexUrlService)
{ {
_cmdHelper = cmdHelper; _cmdHelper = cmdHelper;
_nuGetService = nuGetService; _packageVersionCheckerService = packageVersionCheckerService;
_nuGetIndexUrlService = nuGetIndexUrlService; _nuGetIndexUrlService = nuGetIndexUrlService;
Logger = NullLogger<CliCommand>.Instance; Logger = NullLogger<CliCommand>.Instance;
@ -104,13 +104,13 @@ public class CliCommand : IConsoleCommand, ITransientDependency
private async Task<string> GetLatestPreviewVersion() private async Task<string> GetLatestPreviewVersion()
{ {
var latestPreviewVersion = await _nuGetService var latestPreviewVersionInfo = await _packageVersionCheckerService
.GetLatestVersionOrNullAsync( .GetLatestVersionOrNullAsync(
packageId: CliPackageName, packageId: CliPackageName,
includeReleaseCandidates: true includeReleaseCandidates: true
); );
return latestPreviewVersion.IsPrerelease ? latestPreviewVersion.ToString() : null; return latestPreviewVersionInfo.Version.IsPrerelease ? latestPreviewVersionInfo.Version.ToString() : null;
} }
private void ShowCliManualUpdateCommand() private void ShowCliManualUpdateCommand()

@ -17,7 +17,7 @@ using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Auth; using Volo.Abp.Cli.Auth;
using Volo.Abp.Cli.Commands.Services; using Volo.Abp.Cli.Commands.Services;
using Volo.Abp.Cli.Http; using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.NuGet; using Volo.Abp.Cli.Version;
using Volo.Abp.Cli.Utils; using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Http; using Volo.Abp.Http;
@ -32,7 +32,7 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
public ICmdHelper CmdHelper { get; } public ICmdHelper CmdHelper { get; }
private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService; private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService;
private readonly NuGetService _nuGetService; private readonly PackageVersionCheckerService _packageVersionCheckerService;
private readonly AuthService _authService; private readonly AuthService _authService;
private readonly CliHttpClientFactory _cliHttpClientFactory; private readonly CliHttpClientFactory _cliHttpClientFactory;
private const string SuitePackageName = "Volo.Abp.Suite"; private const string SuitePackageName = "Volo.Abp.Suite";
@ -42,14 +42,14 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
public SuiteCommand( public SuiteCommand(
AbpNuGetIndexUrlService nuGetIndexUrlService, AbpNuGetIndexUrlService nuGetIndexUrlService,
NuGetService nuGetService, PackageVersionCheckerService packageVersionCheckerService,
ICmdHelper cmdHelper, ICmdHelper cmdHelper,
AuthService authService, AuthService authService,
CliHttpClientFactory cliHttpClientFactory) CliHttpClientFactory cliHttpClientFactory)
{ {
CmdHelper = cmdHelper; CmdHelper = cmdHelper;
_nuGetIndexUrlService = nuGetIndexUrlService; _nuGetIndexUrlService = nuGetIndexUrlService;
_nuGetService = nuGetService; _packageVersionCheckerService = packageVersionCheckerService;
_authService = authService; _authService = authService;
_cliHttpClientFactory = cliHttpClientFactory; _cliHttpClientFactory = cliHttpClientFactory;
Logger = NullLogger<SuiteCommand>.Instance; Logger = NullLogger<SuiteCommand>.Instance;
@ -393,13 +393,13 @@ public class SuiteCommand : IConsoleCommand, ITransientDependency
private async Task<string> GetLatestPreviewVersion() private async Task<string> GetLatestPreviewVersion()
{ {
var latestPreviewVersion = await _nuGetService var latestPreviewVersionInfo = await _packageVersionCheckerService
.GetLatestVersionOrNullAsync( .GetLatestVersionOrNullAsync(
packageId: SuitePackageName, packageId: SuitePackageName,
includeReleaseCandidates: true includeReleaseCandidates: true
); );
return latestPreviewVersion.IsPrerelease ? latestPreviewVersion.ToString() : null; return latestPreviewVersionInfo.Version.IsPrerelease ? latestPreviewVersionInfo.Version.ToString() : null;
} }
private void ShowSuiteManualUpdateCommand() private void ShowSuiteManualUpdateCommand()

@ -5,7 +5,7 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Xml; using System.Xml;
using Volo.Abp.Cli.NuGet; using Volo.Abp.Cli.Version;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
@ -15,14 +15,14 @@ namespace Volo.Abp.Cli.ProjectModification;
public class VoloNugetPackagesVersionUpdater : ITransientDependency public class VoloNugetPackagesVersionUpdater : ITransientDependency
{ {
private readonly NuGetService _nuGetService; private readonly PackageVersionCheckerService _packageVersionCheckerService;
private readonly MyGetPackageListFinder _myGetPackageListFinder; private readonly MyGetPackageListFinder _myGetPackageListFinder;
public ILogger<VoloNugetPackagesVersionUpdater> Logger { get; set; } public ILogger<VoloNugetPackagesVersionUpdater> Logger { get; set; }
public static Encoding DefaultEncoding = Encoding.UTF8; public static Encoding DefaultEncoding = Encoding.UTF8;
public VoloNugetPackagesVersionUpdater(NuGetService nuGetService, MyGetPackageListFinder myGetPackageListFinder) public VoloNugetPackagesVersionUpdater(PackageVersionCheckerService packageVersionCheckerService, MyGetPackageListFinder myGetPackageListFinder)
{ {
_nuGetService = nuGetService; _packageVersionCheckerService = packageVersionCheckerService;
_myGetPackageListFinder = myGetPackageListFinder; _myGetPackageListFinder = myGetPackageListFinder;
Logger = NullLogger<VoloNugetPackagesVersionUpdater>.Instance; Logger = NullLogger<VoloNugetPackagesVersionUpdater>.Instance;
} }
@ -37,8 +37,8 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
} }
else else
{ {
var latestVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: includeReleaseCandidates); var latestVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: includeReleaseCandidates);
var latestReleaseCandidateVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true); var latestReleaseCandidateVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true);
var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core");
async Task UpdateAsync(string filePath) async Task UpdateAsync(string filePath)
@ -53,8 +53,8 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
includePreviews, includePreviews,
includeReleaseCandidates, includeReleaseCandidates,
switchToStable, switchToStable,
latestVersionFromNuget, latestVersionInfo.Version,
latestReleaseCandidateVersionFromNuget, latestReleaseCandidateVersionInfo.Version,
latestVersionFromMyGet, latestVersionFromMyGet,
version); version);
@ -81,8 +81,8 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
} }
else else
{ {
var latestVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core"); var latestVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core");
var latestReleaseCandidateVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true); var latestReleaseCandidateVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true);
var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core");
using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
@ -95,8 +95,8 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
includeNightlyPreviews, includeNightlyPreviews,
includeReleaseCandidates, includeReleaseCandidates,
switchToStable, switchToStable,
latestVersionFromNuget, latestVersionInfo.Version,
latestReleaseCandidateVersionFromNuget, latestReleaseCandidateVersionInfo.Version,
latestVersionFromMyGet, latestVersionFromMyGet,
version); version);
@ -137,11 +137,11 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
protected virtual async Task<bool> SpecifiedVersionExists(string version, string packageId) protected virtual async Task<bool> SpecifiedVersionExists(string version, string packageId)
{ {
var versionList = await _nuGetService.GetPackageVersionListAsync(packageId); var versionList = await _packageVersionCheckerService.GetPackageVersionListAsync(packageId);
if (versionList.All(v => !v.Equals(version, StringComparison.OrdinalIgnoreCase))) if (versionList.All(v => !v.Equals(version, StringComparison.OrdinalIgnoreCase)))
{ {
versionList = await _nuGetService.GetPackageVersionListAsync(packageId, true); versionList = await _packageVersionCheckerService.GetPackageVersionListAsync(packageId, true);
} }
return versionList.Any(v => v.Equals(version, StringComparison.OrdinalIgnoreCase)); return versionList.Any(v => v.Equals(version, StringComparison.OrdinalIgnoreCase));
@ -240,13 +240,15 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
SemanticVersion latestVersion; SemanticVersion latestVersion;
if (currentSemanticVersion.IsPrerelease && !switchToStable) if (currentSemanticVersion.IsPrerelease && !switchToStable)
{ {
latestVersion = latestNugetReleaseCandidateVersion == null || isLeptonXPackage ? latestVersion = latestNugetReleaseCandidateVersion == null || isLeptonXPackage
await _nuGetService.GetLatestVersionOrNullAsync(packageId, includeReleaseCandidates: true) : latestNugetReleaseCandidateVersion; ? (await _packageVersionCheckerService.GetLatestVersionOrNullAsync(packageId, includeReleaseCandidates: true))?.Version
: latestNugetReleaseCandidateVersion;
} }
else else
{ {
latestVersion = latestNugetVersion == null || isLeptonXPackage ? latestVersion = latestNugetVersion == null || isLeptonXPackage
await _nuGetService.GetLatestVersionOrNullAsync(packageId, includeReleaseCandidates: includeReleaseCandidates) : latestNugetVersion; ? (await _packageVersionCheckerService.GetLatestVersionOrNullAsync(packageId, includeReleaseCandidates: includeReleaseCandidates))?.Version
: latestNugetVersion;
} }
if (latestVersion != null && (currentSemanticVersion < latestVersion || (currentSemanticVersion.IsPrerelease && switchToStable))) if (latestVersion != null && (currentSemanticVersion < latestVersion || (currentSemanticVersion.IsPrerelease && switchToStable)))

@ -2,7 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
namespace Volo.Abp.Cli.NuGet; namespace Volo.Abp.Cli.Version;
internal static class CommercialPackages internal static class CommercialPackages
{ {

@ -0,0 +1,16 @@
using NuGet.Versioning;
namespace Volo.Abp.Cli.Version;
public class LatestVersionInfo
{
public SemanticVersion Version { get; }
public string Message { get; }
public LatestVersionInfo(SemanticVersion version, string message = null)
{
Version = version;
Message = message;
}
}

@ -15,9 +15,9 @@ using Volo.Abp.DependencyInjection;
using Volo.Abp.Json; using Volo.Abp.Json;
using Volo.Abp.Threading; using Volo.Abp.Threading;
namespace Volo.Abp.Cli.NuGet; namespace Volo.Abp.Cli.Version;
public class NuGetService : ITransientDependency public class PackageVersionCheckerService : ITransientDependency
{ {
public ILogger<VoloNugetPackagesVersionUpdater> Logger { get; set; } public ILogger<VoloNugetPackagesVersionUpdater> Logger { get; set; }
protected IJsonSerializer JsonSerializer { get; } protected IJsonSerializer JsonSerializer { get; }
@ -27,7 +27,7 @@ public class NuGetService : ITransientDependency
private readonly CliHttpClientFactory _cliHttpClientFactory; private readonly CliHttpClientFactory _cliHttpClientFactory;
private DeveloperApiKeyResult _apiKeyResult; private DeveloperApiKeyResult _apiKeyResult;
public NuGetService( public PackageVersionCheckerService(
IJsonSerializer jsonSerializer, IJsonSerializer jsonSerializer,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler, IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
ICancellationTokenProvider cancellationTokenProvider, ICancellationTokenProvider cancellationTokenProvider,
@ -59,17 +59,19 @@ public class NuGetService : ITransientDependency
return versionList.Contains(version); return versionList.Contains(version);
} }
public async Task<SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includeNightly = false, bool includeReleaseCandidates = false) public async Task<LatestVersionInfo> GetLatestVersionOrNullAsync(string packageId, bool includeNightly = false, bool includeReleaseCandidates = false)
{ {
if (!includeNightly && !includeReleaseCandidates) if (!includeNightly && !includeReleaseCandidates)
{ {
var version = await GetLatestStableVersionOrNullAsync(); var latestStableVersionResult = await GetLatestStableVersionOrNullAsync();
if (string.IsNullOrWhiteSpace(version)) if (latestStableVersionResult == null)
{ {
return null; return null;
} }
return SemanticVersion.TryParse(version, out var semanticVersion) ? semanticVersion : null; return SemanticVersion.TryParse(latestStableVersionResult.Version, out var semanticVersion)
? new LatestVersionInfo(semanticVersion, latestStableVersionResult.Message)
: null;
} }
var versionList = await GetPackageVersionListAsync(packageId, includeNightly); var versionList = await GetPackageVersionListAsync(packageId, includeNightly);
@ -94,7 +96,9 @@ public class NuGetService : ITransientDependency
.OrderByDescending(v => v, new VersionComparer()).ToList(); .OrderByDescending(v => v, new VersionComparer()).ToList();
} }
return versions.Any() ? versions.Max() : null; return versions.Any()
? new LatestVersionInfo(versions.Max())
: null;
} }
@ -184,7 +188,7 @@ public class NuGetService : ITransientDependency
return CliUrls.GetNuGetPackageInfoUrl(_apiKeyResult.ApiKey, packageId); return CliUrls.GetNuGetPackageInfoUrl(_apiKeyResult.ApiKey, packageId);
} }
private async Task<string> GetLatestStableVersionOrNullAsync() private async Task<LatestStableVersionResult> GetLatestStableVersionOrNullAsync()
{ {
try try
{ {
@ -199,7 +203,9 @@ public class NuGetService : ITransientDependency
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage); await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
var content = await responseMessage.Content.ReadAsStringAsync(); var content = await responseMessage.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LatestVersionResultDto>(content).Version; var result = JsonSerializer.Deserialize<List<LatestStableVersionResult>>(content);
return result.FirstOrDefault(x => x.Type.ToLowerInvariant() == "stable");
} }
} }
catch catch
@ -214,8 +220,14 @@ public class NuGetService : ITransientDependency
public List<string> Versions { get; set; } public List<string> Versions { get; set; }
} }
public class LatestVersionResultDto public class LatestStableVersionResult
{ {
public string Version { get; set; } public string Version { get; set; }
public DateTime? ReleaseDate { get; set; }
public string Type { get; set; }
public string Message { get; set; }
} }
} }

@ -1,3 +0,0 @@
{
"version": "7.0.2"
}

@ -0,0 +1,8 @@
[
{
"version": "7.0.2",
"releaseDate": "",
"type": "stable",
"message": ""
}
]
Loading…
Cancel
Save