Browse Source

Cli: update option for rc previews

pull/4782/head
Yunus Emre Kalkan 6 years ago
parent
commit
31c992fe17
  1. 4
      docs/en/CLI.md
  2. 6
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliCoreModule.cs
  3. 8
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchToNightlyCommand.cs
  4. 44
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchToPreviewCommand.cs
  5. 10
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchToStableCommand.cs
  6. 4
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs
  7. 24
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackagePreviewSwitcher.cs
  8. 55
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs

4
docs/en/CLI.md

@ -210,12 +210,12 @@ abp switch-to-nightly [options]
### switch-to-stable
If you're using the ABP Framework **nightly** preview packages, you can switch back to stable version using this command.
If you're using the ABP Framework preview packages, you can switch back to latest stable version using this command.
Usage:
````bash
abp switch-from-nightly-to-stable [options]
abp switch-to-stable [options]
````
#### Options

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

@ -1,5 +1,4 @@
using System;
using System.Text;
using System.Text;
using Volo.Abp.Cli.Commands;
using Volo.Abp.Domain;
using Volo.Abp.IdentityModel;
@ -31,8 +30,9 @@ namespace Volo.Abp.Cli
options.Commands["logout"] = typeof(LogoutCommand);
options.Commands["generate-proxy"] = typeof(GenerateProxyCommand);
options.Commands["suite"] = typeof(SuiteCommand);
options.Commands["switch-to-preview"] = typeof(SwitchToPreviewCommand);
options.Commands["switch-to-stable"] = typeof(SwitchToStableCommand);
options.Commands["switch-to-nightly"] = typeof(SwitchToNightlyCommand);
options.Commands["switch-from-nightly-to-stable"] = typeof(SwitchFromNightlyToStableCommand);
options.Commands["translate"] = typeof(TranslateCommand);
});
}

8
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchToNightlyCommand.cs

@ -8,16 +8,16 @@ namespace Volo.Abp.Cli.Commands
{
public class SwitchToNightlyCommand : IConsoleCommand, ITransientDependency
{
private readonly PackageSourceSwitcher _packageSourceSwitcher;
private readonly PackagePreviewSwitcher _packagePreviewSwitcher;
public SwitchToNightlyCommand(PackageSourceSwitcher packageSourceSwitcher)
public SwitchToNightlyCommand(PackagePreviewSwitcher packagePreviewSwitcher)
{
_packageSourceSwitcher = packageSourceSwitcher;
_packagePreviewSwitcher = packagePreviewSwitcher;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
await _packageSourceSwitcher.SwitchToPreview(commandLineArgs);
await _packagePreviewSwitcher.SwitchToNightlyPreview(commandLineArgs);
}
public string GetUsageInfo()

44
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchToPreviewCommand.cs

@ -0,0 +1,44 @@
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Commands
{
public class SwitchToPreviewCommand : IConsoleCommand, ITransientDependency
{
private readonly PackagePreviewSwitcher _packagePreviewSwitcher;
public SwitchToPreviewCommand(PackagePreviewSwitcher packagePreviewSwitcher)
{
_packagePreviewSwitcher = packagePreviewSwitcher;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
await _packagePreviewSwitcher.SwitchToPreview(commandLineArgs);
}
public string GetUsageInfo()
{
var sb = new StringBuilder();
sb.AppendLine("");
sb.AppendLine("Usage:");
sb.AppendLine(" abp switch-to-preview [options]");
sb.AppendLine("");
sb.AppendLine("Options:");
sb.AppendLine("-sd|--solution-directory");
sb.AppendLine("");
sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI");
return sb.ToString();
}
public string GetShortDescription()
{
return "Switches packages to preview ABP version.";
}
}
}

10
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchFromNightlyToStableCommand.cs → framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/SwitchToStableCommand.cs

@ -6,18 +6,18 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.Commands
{
public class SwitchFromNightlyToStableCommand : IConsoleCommand, ITransientDependency
public class SwitchToStableCommand : IConsoleCommand, ITransientDependency
{
private readonly PackageSourceSwitcher _packageSourceSwitcher;
private readonly PackagePreviewSwitcher _packagePreviewSwitcher;
public SwitchFromNightlyToStableCommand(PackageSourceSwitcher packageSourceSwitcher)
public SwitchToStableCommand(PackagePreviewSwitcher packagePreviewSwitcher)
{
_packageSourceSwitcher = packageSourceSwitcher;
_packagePreviewSwitcher = packagePreviewSwitcher;
}
public async Task ExecuteAsync(CommandLineArgs commandLineArgs)
{
await _packageSourceSwitcher.SwitchToStable(commandLineArgs);
await _packagePreviewSwitcher.SwitchToStable(commandLineArgs);
}
public string GetUsageInfo()

4
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs

@ -39,7 +39,7 @@ namespace Volo.Abp.Cli.NuGet
Logger = NullLogger<VoloNugetPackagesVersionUpdater>.Instance;
}
public async Task<SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includePreviews = false, bool includeNightly = false)
public async Task<SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includePreviews = false, bool includeNightly = false, bool includeReleaseCandidates = false)
{
if (AuthService.IsLoggedIn())
{
@ -80,7 +80,7 @@ namespace Volo.Abp.Cli.NuGet
.Versions
.Select(SemanticVersion.Parse);
if (!includePreviews && !includeNightly)
if (!includePreviews && !includeNightly && !includeReleaseCandidates)
{
versions = versions.Where(x => !x.IsPrerelease);
}

24
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackageSourceSwitcher.cs → framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/PackagePreviewSwitcher.cs

@ -9,26 +9,41 @@ using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Cli.ProjectModification
{
public class PackageSourceSwitcher : ITransientDependency
public class PackagePreviewSwitcher : ITransientDependency
{
private readonly PackageSourceAdder _packageSourceAdder;
private readonly NpmPackagesUpdater _npmPackagesUpdater;
private readonly VoloNugetPackagesVersionUpdater _nugetPackagesVersionUpdater;
public ILogger<PackageSourceSwitcher> Logger { get; set; }
public ILogger<PackagePreviewSwitcher> Logger { get; set; }
public PackageSourceSwitcher(PackageSourceAdder packageSourceAdder,
public PackagePreviewSwitcher(PackageSourceAdder packageSourceAdder,
NpmPackagesUpdater npmPackagesUpdater,
VoloNugetPackagesVersionUpdater nugetPackagesVersionUpdater)
{
_packageSourceAdder = packageSourceAdder;
_npmPackagesUpdater = npmPackagesUpdater;
_nugetPackagesVersionUpdater = nugetPackagesVersionUpdater;
Logger = NullLogger<PackageSourceSwitcher>.Instance;
Logger = NullLogger<PackagePreviewSwitcher>.Instance;
}
public async Task SwitchToPreview(CommandLineArgs commandLineArgs)
{
var solutionPath = GetSolutionPath(commandLineArgs);
var solutionFolder = GetSolutionFolder(commandLineArgs);
await _nugetPackagesVersionUpdater.UpdateSolutionAsync(
solutionPath,
includeReleaseCandidates: true);
await _npmPackagesUpdater.Update(
solutionFolder,
true);
}
public async Task SwitchToNightlyPreview(CommandLineArgs commandLineArgs)
{
// TODO: Remove this when switched to stable
_packageSourceAdder.Add("ABP Nightly", "https://www.myget.org/F/abp-nightly/api/v3/index.json");
var solutionPath = GetSolutionPath(commandLineArgs);
@ -51,6 +66,7 @@ namespace Volo.Abp.Cli.ProjectModification
await _nugetPackagesVersionUpdater.UpdateSolutionAsync(
solutionPath,
false,
false,
true);
await _npmPackagesUpdater.Update(

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

@ -25,23 +25,30 @@ namespace Volo.Abp.Cli.ProjectModification
Logger = NullLogger<VoloNugetPackagesVersionUpdater>.Instance;
}
public async Task UpdateSolutionAsync(string solutionPath, bool includePreviews = false, bool switchToStable = false, bool checkAll = false)
public async Task UpdateSolutionAsync(string solutionPath, bool includePreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false, bool checkAll = false)
{
var projectPaths = ProjectFinder.GetProjectFiles(solutionPath);
if (checkAll)
{
Task.WaitAll(projectPaths.Select(projectPath => UpdateInternalAsync(projectPath, includePreviews, switchToStable)).ToArray());
Task.WaitAll(projectPaths.Select(projectPath => UpdateInternalAsync(projectPath, includePreviews, includeReleaseCandidates, switchToStable)).ToArray());
}
else
{
var latestVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core");
var latestVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates : includeReleaseCandidates);
var latestReleaseCandidateVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates : true);
var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core");
async Task UpdateAsync(string filePath)
{
var fileContent = File.ReadAllText(filePath);
var updatedContent = await UpdateVoloPackagesAsync(fileContent, includePreviews, switchToStable, latestVersionFromNuget, latestVersionFromMyGet);
var updatedContent = await UpdateVoloPackagesAsync(fileContent,
includePreviews,
includeReleaseCandidates,
switchToStable,
latestVersionFromNuget,
latestReleaseCandidateVersionFromNuget,
latestVersionFromMyGet);
File.WriteAllText(filePath, updatedContent);
}
@ -50,33 +57,47 @@ namespace Volo.Abp.Cli.ProjectModification
}
}
public async Task UpdateProjectAsync(string projectPath, bool includePreviews = false, bool switchToStable = false, bool checkAll = false)
public async Task UpdateProjectAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false, bool checkAll = false)
{
if (checkAll)
{
await UpdateInternalAsync(projectPath, includePreviews, switchToStable);
await UpdateInternalAsync(projectPath, includeNightlyPreviews, includeReleaseCandidates, switchToStable);
}
else
{
var latestVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core");
var latestReleaseCandidateVersionFromNuget = await _nuGetService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates : true);
var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core");
var fileContent = File.ReadAllText(projectPath);
var updatedContent = await UpdateVoloPackagesAsync(fileContent, includePreviews, switchToStable, latestVersionFromNuget, latestVersionFromMyGet);
var updatedContent = await UpdateVoloPackagesAsync(fileContent,
includeNightlyPreviews,
includeReleaseCandidates,
switchToStable,
latestVersionFromNuget,
latestReleaseCandidateVersionFromNuget,
latestVersionFromMyGet);
File.WriteAllText(projectPath, updatedContent);
}
}
protected virtual async Task UpdateInternalAsync(string projectPath, bool includePreviews = false, bool switchToStable = false)
protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false)
{
var fileContent = File.ReadAllText(projectPath);
var updatedContent = await UpdateVoloPackagesAsync(fileContent, includePreviews, switchToStable);
var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable);
File.WriteAllText(projectPath, updatedContent);
}
private async Task<string> UpdateVoloPackagesAsync(string content, bool includePreviews = false, bool switchToStable = false, SemanticVersion latestNugetVersion = null, string latestMyGetVersion = null)
private async Task<string> UpdateVoloPackagesAsync(string content,
bool includeNightlyPreviews = false,
bool includeReleaseCandidates = false,
bool switchToStable = false,
SemanticVersion latestNugetVersion = null,
SemanticVersion latestNugetReleaseCandidateVersion = null,
string latestMyGetVersion = null)
{
string packageId = null;
@ -108,7 +129,7 @@ namespace Volo.Abp.Cli.ProjectModification
Logger.LogDebug("Checking package: \"{0}\" - Current version: {1}", packageId, currentSemanticVersion);
if (includePreviews || (currentVersion.Contains("-preview") && !switchToStable))
if ((includeNightlyPreviews || (currentVersion.Contains("-preview") && !switchToStable)) && !includeReleaseCandidates)
{
var latestVersion = latestMyGetVersion ?? await GetLatestVersionFromMyGet(packageId);
@ -124,9 +145,17 @@ namespace Volo.Abp.Cli.ProjectModification
}
else
{
var latestVersion = latestNugetVersion ?? await _nuGetService.GetLatestVersionOrNullAsync(packageId);
SemanticVersion latestVersion;
if (currentSemanticVersion.IsPrerelease && !switchToStable)
{
latestVersion = latestNugetReleaseCandidateVersion ?? await _nuGetService.GetLatestVersionOrNullAsync(packageId, true);
}
else
{
latestVersion = latestNugetVersion ?? await _nuGetService.GetLatestVersionOrNullAsync(packageId, includeReleaseCandidates: includeReleaseCandidates);
}
if (latestVersion != null && (currentVersion.Contains("-preview") || currentSemanticVersion < latestVersion))
if (latestVersion != null && (currentSemanticVersion.IsPrerelease || currentSemanticVersion < latestVersion))
{
Logger.LogInformation("Updating package \"{0}\" from v{1} to v{2}.", packageId, currentSemanticVersion.ToString(), latestVersion.ToString());
versionAttribute.Value = latestVersion.ToString();

Loading…
Cancel
Save