|
|
|
@ -1,10 +1,13 @@ |
|
|
|
using System; |
|
|
|
using System.Linq; |
|
|
|
using System.Text; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using Microsoft.Extensions.Logging; |
|
|
|
using Microsoft.Extensions.Logging.Abstractions; |
|
|
|
using NuGet.Versioning; |
|
|
|
using Volo.Abp.Cli.Args; |
|
|
|
using Volo.Abp.Cli.Commands.Services; |
|
|
|
using Volo.Abp.Cli.NuGet; |
|
|
|
using Volo.Abp.Cli.Utils; |
|
|
|
using Volo.Abp.DependencyInjection; |
|
|
|
|
|
|
|
@ -13,12 +16,14 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
public class SuiteCommand : IConsoleCommand, ITransientDependency |
|
|
|
{ |
|
|
|
private readonly AbpNuGetIndexUrlService _nuGetIndexUrlService; |
|
|
|
private readonly NuGetService _nuGetService; |
|
|
|
private const string SuitePackageName = "Volo.Abp.Suite"; |
|
|
|
public ILogger<SuiteCommand> Logger { get; set; } |
|
|
|
|
|
|
|
public SuiteCommand(AbpNuGetIndexUrlService nuGetIndexUrlService) |
|
|
|
public SuiteCommand(AbpNuGetIndexUrlService nuGetIndexUrlService, NuGetService nuGetService) |
|
|
|
{ |
|
|
|
_nuGetIndexUrlService = nuGetIndexUrlService; |
|
|
|
_nuGetService = nuGetService; |
|
|
|
Logger = NullLogger<SuiteCommand>.Instance; |
|
|
|
} |
|
|
|
|
|
|
|
@ -26,21 +31,22 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
{ |
|
|
|
var operationType = NamespaceHelper.NormalizeNamespace(commandLineArgs.Target); |
|
|
|
|
|
|
|
var preview = commandLineArgs.Options.ContainsKey(Options.Preview.Long); |
|
|
|
|
|
|
|
switch (operationType) |
|
|
|
{ |
|
|
|
case "": |
|
|
|
case null: |
|
|
|
await InstallSuiteIfNotInstalledAsync(); |
|
|
|
RunSuite(); |
|
|
|
break; |
|
|
|
|
|
|
|
case "install": |
|
|
|
Logger.LogInformation("Installing ABP Suite..."); |
|
|
|
await InstallSuiteAsync(); |
|
|
|
await InstallSuiteAsync(preview); |
|
|
|
break; |
|
|
|
|
|
|
|
case "update": |
|
|
|
Logger.LogInformation("Updating ABP Suite..."); |
|
|
|
await UpdateSuiteAsync(); |
|
|
|
await UpdateSuiteAsync(preview); |
|
|
|
break; |
|
|
|
|
|
|
|
case "remove": |
|
|
|
@ -50,8 +56,34 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task InstallSuiteAsync() |
|
|
|
private async Task InstallSuiteIfNotInstalledAsync() |
|
|
|
{ |
|
|
|
var currentSuiteVersionAsString = GetCurrentSuiteVersion(); |
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(currentSuiteVersionAsString)) |
|
|
|
{ |
|
|
|
await InstallSuiteAsync(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private string GetCurrentSuiteVersion() |
|
|
|
{ |
|
|
|
var dotnetToolList = CmdHelper.RunCmdAndGetOutput("dotnet tool list -g"); |
|
|
|
|
|
|
|
var suiteLine = dotnetToolList.Split(Environment.NewLine).FirstOrDefault(l => l.ToLower().StartsWith("volo.abp.suite ")); |
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(suiteLine)) |
|
|
|
{ |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
return suiteLine.Split(" ", StringSplitOptions.RemoveEmptyEntries)[1]; |
|
|
|
} |
|
|
|
|
|
|
|
private async Task InstallSuiteAsync(bool preview = false) |
|
|
|
{ |
|
|
|
Logger.LogInformation("Installing ABP Suite..."); |
|
|
|
|
|
|
|
var nugetIndexUrl = await _nuGetIndexUrlService.GetAsync(); |
|
|
|
|
|
|
|
if (nugetIndexUrl == null) |
|
|
|
@ -61,7 +93,9 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
|
var result = CmdHelper.RunCmd("dotnet tool install " + SuitePackageName + " --add-source " + nugetIndexUrl + " -g"); |
|
|
|
var versionOption = await GetVersionOption(preview); |
|
|
|
|
|
|
|
var result = CmdHelper.RunCmd($"dotnet tool install {SuitePackageName} {versionOption} --add-source {nugetIndexUrl} -g"); |
|
|
|
|
|
|
|
if (result == 0) |
|
|
|
{ |
|
|
|
@ -86,8 +120,10 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
Logger.LogInformation("dotnet tool install -g Volo.Abp.Suite"); |
|
|
|
} |
|
|
|
|
|
|
|
private async Task UpdateSuiteAsync() |
|
|
|
private async Task UpdateSuiteAsync(bool preview = false) |
|
|
|
{ |
|
|
|
Logger.LogInformation("Updating ABP Suite..."); |
|
|
|
|
|
|
|
var nugetIndexUrl = await _nuGetIndexUrlService.GetAsync(); |
|
|
|
|
|
|
|
if (nugetIndexUrl == null) |
|
|
|
@ -97,7 +133,9 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
|
|
|
|
try |
|
|
|
{ |
|
|
|
var result = CmdHelper.RunCmd("dotnet tool update " + SuitePackageName + " --add-source " + nugetIndexUrl + " -g"); |
|
|
|
var versionOption = await GetVersionOption(preview); |
|
|
|
|
|
|
|
var result = CmdHelper.RunCmd($"dotnet tool update {SuitePackageName} {versionOption} --add-source {nugetIndexUrl} -g"); |
|
|
|
|
|
|
|
if (result != 0) |
|
|
|
{ |
|
|
|
@ -111,6 +149,25 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private async Task<string> GetVersionOption(bool preview) |
|
|
|
{ |
|
|
|
if (preview) |
|
|
|
{ |
|
|
|
var latestVersion = await GetLatestSuiteVersioAsync(true); |
|
|
|
if (latestVersion.IsPrerelease) |
|
|
|
{ |
|
|
|
return $"--version {latestVersion.ToString()}"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return ""; |
|
|
|
} |
|
|
|
|
|
|
|
private async Task<SemanticVersion> GetLatestSuiteVersioAsync(bool preview) |
|
|
|
{ |
|
|
|
return await _nuGetService.GetLatestVersionOrNullAsync(SuitePackageName, includeReleaseCandidates: preview); |
|
|
|
} |
|
|
|
|
|
|
|
private void ShowSuiteManualUpdateCommand() |
|
|
|
{ |
|
|
|
Logger.LogError("You can also run the following command to update ABP Suite."); |
|
|
|
@ -160,7 +217,9 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
sb.AppendLine(""); |
|
|
|
sb.AppendLine(" abp suite"); |
|
|
|
sb.AppendLine(" abp suite install"); |
|
|
|
sb.AppendLine(" abp suite install --preview"); |
|
|
|
sb.AppendLine(" abp suite update"); |
|
|
|
sb.AppendLine(" abp suite update --preview"); |
|
|
|
sb.AppendLine(" abp suite remove"); |
|
|
|
sb.AppendLine(""); |
|
|
|
|
|
|
|
@ -171,5 +230,13 @@ namespace Volo.Abp.Cli.Commands |
|
|
|
{ |
|
|
|
return "Install, update, remove or start ABP Suite. See https://commercial.abp.io/tools/suite."; |
|
|
|
} |
|
|
|
|
|
|
|
public static class Options |
|
|
|
{ |
|
|
|
public static class Preview |
|
|
|
{ |
|
|
|
public const string Long = "preview"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|