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.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;
@ -183,11 +183,10 @@ public class CliService : ITransientDependency
var toolPath = GetToolPath(assembly);
var updateChannel = GetUpdateChannel(currentCliVersion);
var latestVersion = await GetLatestVersion(updateChannel);
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)
@ -286,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;
@ -310,7 +309,7 @@ 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}";
@ -338,6 +337,11 @@ public class CliService : ITransientDependency
throw new ArgumentOutOfRangeException(nameof(updateChannel), updateChannel, null);
}
if (!string.IsNullOrWhiteSpace(message))
{
Logger.LogWarning(message);
}
Logger.LogWarning(string.Empty);
}

@ -9,7 +9,7 @@ public static class CliUrls
public const string AccountAbpIo = AccountAbpIoProduction;
public const string NuGetRootPath = NuGetRootPathProduction;
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 AccountAbpIoProduction = "https://account.abp.io/";

@ -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()

@ -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()

@ -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,7 +2,7 @@
using System.Collections.Generic;
using System.Text;
namespace Volo.Abp.Cli.NuGet;
namespace Volo.Abp.Cli.Version;
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.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; }
@ -27,7 +27,7 @@ public class NuGetService : ITransientDependency
private readonly CliHttpClientFactory _cliHttpClientFactory;
private DeveloperApiKeyResult _apiKeyResult;
public NuGetService(
public PackageVersionCheckerService(
IJsonSerializer jsonSerializer,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
ICancellationTokenProvider cancellationTokenProvider,
@ -59,17 +59,19 @@ 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)
{
if (!includeNightly && !includeReleaseCandidates)
{
var version = await GetLatestStableVersionOrNullAsync();
if (string.IsNullOrWhiteSpace(version))
var latestStableVersionResult = await GetLatestStableVersionOrNullAsync();
if (latestStableVersionResult == 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);
@ -94,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;
}
@ -184,7 +188,7 @@ public class NuGetService : ITransientDependency
return CliUrls.GetNuGetPackageInfoUrl(_apiKeyResult.ApiKey, packageId);
}
private async Task<string> GetLatestStableVersionOrNullAsync()
private async Task<LatestStableVersionResult> GetLatestStableVersionOrNullAsync()
{
try
{
@ -199,7 +203,9 @@ public class NuGetService : ITransientDependency
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(responseMessage);
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
@ -214,8 +220,14 @@ public class NuGetService : ITransientDependency
public List<string> Versions { get; set; }
}
public class LatestVersionResultDto
public class LatestStableVersionResult
{
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