Browse Source

Merge pull request #15783 from abpframework/cli-version-check

CLI: Check latest stable version from a new endpoint
pull/15790/head
Alper Ebiçoğlu 4 years ago
committed by GitHub
parent
commit
0da9e5a19f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 5
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
  2. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs
  3. 55
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs
  4. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs
  5. 12
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CliCommand.cs
  6. 12
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs
  7. 4
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs
  8. 38
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
  9. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/CommercialPackages.cs
  10. 16
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/LatestVersionInfo.cs
  11. 84
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs
  12. 8
      latest-versions.json

5
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs

@ -29,6 +29,11 @@ public class AbpCliCoreModule : AbpModule
context.Services.AddHttpClient(CliConsts.HttpClientName)
.ConfigurePrimaryHttpMessageHandler(() => new CliHttpClientHandler());
context.Services.AddHttpClient(CliConsts.GithubHttpClientName, client =>
{
client.DefaultRequestHeaders.UserAgent.ParseAdd("MyAgent/1.0");
});
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Configure<AbpCliOptions>(options =>

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliConsts.cs

@ -10,6 +10,8 @@ public static class CliConsts
public const string HttpClientName = "AbpHttpClient";
public const string GithubHttpClientName = "GithubHttpClient";
public const string LogoutUrl = CliUrls.WwwAbpIo + "api/license/logout";
public const string LicenseCodePlaceHolder = @"<LICENSE_CODE/>";

55
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs

@ -13,7 +13,7 @@ using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.Commands;
using Volo.Abp.Cli.Memory;
using Volo.Abp.Cli.NuGet;
using Volo.Abp.Cli.Version;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
@ -27,14 +27,14 @@ public class CliService : ITransientDependency
protected ICommandLineArgumentParser CommandLineArgumentParser { get; }
protected ICommandSelector CommandSelector { get; }
protected IServiceScopeFactory ServiceScopeFactory { get; }
protected NuGetService NuGetService { get; }
protected PackageVersionCheckerService PackageVersionCheckerService { get; }
public ICmdHelper CmdHelper { get; }
public CliService(
ICommandLineArgumentParser commandLineArgumentParser,
ICommandSelector commandSelector,
IServiceScopeFactory serviceScopeFactory,
NuGetService nugetService,
PackageVersionCheckerService nugetService,
ICmdHelper cmdHelper,
MemoryService memoryService)
{
@ -42,7 +42,7 @@ public class CliService : ITransientDependency
CommandLineArgumentParser = commandLineArgumentParser;
CommandSelector = commandSelector;
ServiceScopeFactory = serviceScopeFactory;
NuGetService = nugetService;
PackageVersionCheckerService = nugetService;
CmdHelper = cmdHelper;
Logger = NullLogger<CliService>.Instance;
@ -61,6 +61,7 @@ public class CliService : ITransientDependency
await CheckCliVersionAsync(currentCliVersion);
}
#endif
try
{
if (commandLineArgs.IsCommand("prompt"))
@ -175,24 +176,22 @@ public class CliService : ITransientDependency
{
return;
}
var assembly = typeof(CliService).Assembly;
var toolPath = GetToolPath(assembly);
var updateChannel = GetUpdateChannel(currentCliVersion);
try
{
var latestVersion = await GetLatestVersion(updateChannel);
var assembly = typeof(CliService).Assembly;
var toolPath = GetToolPath(assembly);
var updateChannel = GetUpdateChannel(currentCliVersion);
if (latestVersion != null && latestVersion > currentCliVersion)
var latestVersionInfo = await GetLatestVersion(updateChannel);
if (latestVersionInfo != null && latestVersionInfo.Version > currentCliVersion)
{
LogNewVersionInfo(updateChannel, latestVersion, toolPath);
LogNewVersionInfo(updateChannel, latestVersionInfo.Version, toolPath, latestVersionInfo.Message);
}
}
catch (Exception e)
{
Logger.LogWarning("Unable to retrieve the latest version");
Logger.LogWarning(e.Message);
Logger.LogWarning("Unable to retrieve the latest version: " + e.Message);
}
}
@ -200,13 +199,17 @@ public class CliService : ITransientDependency
{
try
{
var latestTime = await _memoryService.GetAsync(CliConsts.MemoryKeys.LatestCliVersionCheckDate);
if (latestTime != null && DateTime.Now - DateTime.Parse(latestTime, CultureInfo.InvariantCulture) < TimeSpan.FromDays(1))
var latestTimeAsString = await _memoryService.GetAsync(CliConsts.MemoryKeys.LatestCliVersionCheckDate);
if (DateTime.TryParse(latestTimeAsString,
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None, out var latestTimeParsed))
{
return false;
if (DateTime.Now.Subtract(latestTimeParsed).TotalDays < 1)
{
return false;
}
}
await _memoryService.SetAsync(CliConsts.MemoryKeys.LatestCliVersionCheckDate, DateTime.Now.ToString(CultureInfo.InvariantCulture));
return true;
@ -282,18 +285,18 @@ public class CliService : ITransientDependency
return UpdateChannel.Prerelease;
}
private async Task<SemanticVersion> GetLatestVersion(UpdateChannel updateChannel)
private async Task<LatestVersionInfo> GetLatestVersion(UpdateChannel updateChannel)
{
switch (updateChannel)
{
case UpdateChannel.Stable:
return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli");
return await PackageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Cli");
case UpdateChannel.Prerelease:
return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeReleaseCandidates: true);
return await PackageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeReleaseCandidates: true);
case UpdateChannel.Nightly:
return await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeNightly: true);
return await PackageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Cli", includeNightly: true);
default:
return default;
@ -306,11 +309,17 @@ public class CliService : ITransientDependency
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}";
Logger.LogWarning($"ABP CLI has a newer {updateChannel.ToString().ToLowerInvariant()} version {latestVersion}, please update to get the latest features and fixes.");
if (!string.IsNullOrWhiteSpace(message))
{
Logger.LogWarning(message);
}
Logger.LogWarning(string.Empty);
Logger.LogWarning("Update Command: ");

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliUrls.cs

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

12
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/CliCommand.cs

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

12
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SuiteCommand.cs

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

4
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Http/CliHttpClientFactory.cs

@ -20,9 +20,9 @@ public class CliHttpClientFactory : ISingletonDependency
_cancellationTokenProvider = cancellationTokenProvider;
}
public HttpClient CreateClient(bool needsAuthentication = true, TimeSpan? timeout = null)
public HttpClient CreateClient(bool needsAuthentication = true, TimeSpan? timeout = null, string clientName = null)
{
var httpClient = _clientFactory.CreateClient(CliConsts.HttpClientName);
var httpClient = _clientFactory.CreateClient(clientName ?? CliConsts.HttpClientName);
httpClient.Timeout = timeout ?? DefaultTimeout;
if (needsAuthentication)

38
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs

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

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/CommercialPackages.cs → framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/CommercialPackages.cs

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

16
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/LatestVersionInfo.cs

@ -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;
}
}

84
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs → framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs

@ -3,6 +3,7 @@ using Newtonsoft.Json;
using NuGet.Versioning;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
@ -14,9 +15,9 @@ using Volo.Abp.DependencyInjection;
using Volo.Abp.Json;
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; }
protected IJsonSerializer JsonSerializer { get; }
@ -26,7 +27,7 @@ public class NuGetService : ITransientDependency
private readonly CliHttpClientFactory _cliHttpClientFactory;
private DeveloperApiKeyResult _apiKeyResult;
public NuGetService(
public PackageVersionCheckerService(
IJsonSerializer jsonSerializer,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
ICancellationTokenProvider cancellationTokenProvider,
@ -58,26 +59,30 @@ public class NuGetService : ITransientDependency
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)
{
var versionList = await GetPackageVersionListAsync(packageId, includeNightly);
if (!includeNightly && !includeReleaseCandidates)
{
var latestStableVersionResult = await GetLatestStableVersionOrNullAsync();
if (latestStableVersionResult == null)
{
return null;
}
return SemanticVersion.TryParse(latestStableVersionResult.Version, out var semanticVersion)
? new LatestVersionInfo(semanticVersion, latestStableVersionResult.Message)
: null;
}
var versionList = await GetPackageVersionListAsync(packageId, includeNightly);
if (versionList == null)
{
return null;
}
List<SemanticVersion> versions;
if (!includeNightly && !includeReleaseCandidates)
{
versions = versionList
.Select(SemanticVersion.Parse)
.OrderByDescending(v => v, new VersionComparer()).ToList();
versions = versions.Where(x => !x.IsPrerelease).ToList();
}
else if (!includeNightly && includeReleaseCandidates)
if (!includeNightly && includeReleaseCandidates)
{
versions = versionList
.Where(v => !v.Contains("-preview"))
@ -91,7 +96,9 @@ public class NuGetService : ITransientDependency
.OrderByDescending(v => v, new VersionComparer()).ToList();
}
return versions.Any() ? versions.Max() : null;
return versions.Any()
? new LatestVersionInfo(versions.Max())
: null;
}
@ -148,15 +155,13 @@ public class NuGetService : ITransientDependency
logger: Logger
))
{
if (responseMessage.StatusCode == System.Net.HttpStatusCode.NotFound)
if (responseMessage.StatusCode == HttpStatusCode.NotFound)
{
//the package doesn't exist...
return null;
}
else
{
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
}
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
var responseContent = await responseMessage.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<NuGetVersionResultDto>(responseContent).Versions;
@ -183,9 +188,46 @@ public class NuGetService : ITransientDependency
return CliUrls.GetNuGetPackageInfoUrl(_apiKeyResult.ApiKey, packageId);
}
private async Task<LatestStableVersionResult> GetLatestStableVersionOrNullAsync()
{
try
{
var client = _cliHttpClientFactory.CreateClient(clientName: CliConsts.GithubHttpClientName, needsAuthentication: false);
using (var responseMessage = await client.GetHttpResponseMessageWithRetryAsync(
CliUrls.LatestVersionCheckFullPath,
cancellationToken: CancellationTokenProvider.Token,
logger: Logger
))
{
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
var content = await responseMessage.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<List<LatestStableVersionResult>>(content);
return result.FirstOrDefault(x => x.Type.ToLowerInvariant() == "stable");
}
}
catch
{
return null;
}
}
public class NuGetVersionResultDto
{
[JsonProperty("versions")]
public List<string> Versions { get; set; }
}
public class LatestStableVersionResult
{
public string Version { get; set; }
public DateTime? ReleaseDate { get; set; }
public string Type { get; set; }
public string Message { get; set; }
}
}

8
latest-versions.json

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