diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs index e86eccdf2c..e03ba1b9ab 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/CliService.cs @@ -39,7 +39,7 @@ namespace Volo.Abp.Cli Logger.LogInformation($"ABP CLI, version {GetCliVersion()}."); Logger.LogInformation("https://abp.io"); - await CheckHasNewVersion(); + await CheckForNewVersion(); var commandLineArgs = CommandLineArgumentParser.Parse(args); var commandType = CommandSelector.Select(commandLineArgs); @@ -63,25 +63,47 @@ namespace Volo.Abp.Cli } } - private async Task CheckHasNewVersion() + private async Task CheckForNewVersion() { - var currentVersion = GetCliVersion(); - var latestVersion = await NuGetService.GetLatestVersionAsync("Volo.Abp.Cli"); - - if (!string.IsNullOrEmpty(latestVersion) && currentVersion != latestVersion) + try + { + var currentVersion = GetCliVersion(); + var latestVersion = await NuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Cli"); + + if (!latestVersion.IsNullOrEmpty() && currentVersion != latestVersion) + { + Logger.LogInformation(""); + Logger.LogWarning("ABP CLI has a newer version. Please update to get the latest features and fixes."); + Logger.LogWarning(""); + Logger.LogWarning("Update Command: "); + Logger.LogWarning(" dotnet tool update -g Volo.Abp.Cli"); + Logger.LogWarning(""); + } + } + catch (Exception e) { - Logger.LogInformation(""); - Logger.LogWarning("Cli has a new version. Please update."); - Logger.LogWarning("Update Command: dotnet tool update -g Volo.Abp.Cli"); + Logger.LogWarning("Could not get the latest version infom from NuGet.org:"); + Logger.LogWarning(e.Message); } } private static string GetCliVersion() { - return typeof(CliService) + var version = typeof(CliService) .Assembly - .GetFileVersion() - .RemovePostFix(".0"); + .GetFileVersion(); + + /* Assembly versions are like "2.4.0.0", but NuGet removes the last "0" here, + * like "2.4.0". + * So, we need to remove it from the assembly version to match to the NuGet version. + */ + + if (version.Split('.').Length == 4) + { + version = version.RemovePostFix(".0"); + } + + return version; } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs index e9130ac8b6..115ce41d74 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs @@ -1,11 +1,11 @@ +using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Threading.Tasks; -using Newtonsoft.Json; -using Volo.Abp.Json; using Volo.Abp.DependencyInjection; +using Volo.Abp.Json; using Volo.Abp.Threading; namespace Volo.Abp.Cli.NuGet @@ -15,7 +15,6 @@ namespace Volo.Abp.Cli.NuGet protected IJsonSerializer JsonSerializer { get; } protected ICancellationTokenProvider CancellationTokenProvider { get; } - public NuGetService( IJsonSerializer jsonSerializer, ICancellationTokenProvider cancellationTokenProvider) @@ -24,15 +23,17 @@ namespace Volo.Abp.Cli.NuGet CancellationTokenProvider = cancellationTokenProvider; } - public async Task GetLatestVersionAsync(string packageId,bool includePreviews = false) + public async Task GetLatestVersionOrNullAsync(string packageId, bool includePreviews = false) { using (var client = new HttpClient()) { client.Timeout = TimeSpan.FromSeconds(30); - + var responseMessage = await client.GetAsync( $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json", - CancellationTokenProvider.Token); + CancellationTokenProvider.Token + ); + if (!responseMessage.IsSuccessStatusCode) { throw new Exception("Remote server returns error! HTTP status code: " + responseMessage.StatusCode); @@ -41,6 +42,7 @@ namespace Volo.Abp.Cli.NuGet var result = await responseMessage.Content.ReadAsStringAsync(); var versions = JsonSerializer.Deserialize(result).Versions; + if (!includePreviews) { versions = versions