Browse Source

Merge pull request #21548 from abpframework/issue-21546

CLI: Update command should also update LeptonX Theme package versions
pull/21551/head
Yunus Emre Kalkan 2 years ago
committed by GitHub
parent
commit
2755beea67
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 53
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/VoloNugetPackagesVersionUpdater.cs
  2. 30
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs
  3. 23
      latest-versions.json

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

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using NuGet.Versioning; using NuGet.Versioning;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -39,6 +40,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
var latestVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: includeReleaseCandidates); var latestVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: includeReleaseCandidates);
var latestReleaseCandidateVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true); var latestReleaseCandidateVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true);
var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core");
var latestStableVersions = await _packageVersionCheckerService.GetLatestStableVersionsAsync();
async Task UpdateAsync(string filePath) async Task UpdateAsync(string filePath)
{ {
@ -55,7 +57,8 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
latestVersionInfo.Version, latestVersionInfo.Version,
latestReleaseCandidateVersionInfo.Version, latestReleaseCandidateVersionInfo.Version,
latestVersionFromMyGet, latestVersionFromMyGet,
version); version,
latestStableVersions: latestStableVersions);
fs.Seek(0, SeekOrigin.Begin); fs.Seek(0, SeekOrigin.Begin);
fs.SetLength(0); fs.SetLength(0);
@ -83,6 +86,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
var latestVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core"); var latestVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core");
var latestReleaseCandidateVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true); var latestReleaseCandidateVersionInfo = await _packageVersionCheckerService.GetLatestVersionOrNullAsync("Volo.Abp.Core", includeReleaseCandidates: true);
var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core"); var latestVersionFromMyGet = await GetLatestVersionFromMyGet("Volo.Abp.Core");
var latestStableVersions = await _packageVersionCheckerService.GetLatestStableVersionsAsync();
using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{ {
@ -97,7 +101,8 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
latestVersionInfo.Version, latestVersionInfo.Version,
latestReleaseCandidateVersionInfo.Version, latestReleaseCandidateVersionInfo.Version,
latestVersionFromMyGet, latestVersionFromMyGet,
version); version,
latestStableVersions: latestStableVersions);
fs.Seek(0, SeekOrigin.Begin); fs.Seek(0, SeekOrigin.Begin);
fs.SetLength(0); fs.SetLength(0);
@ -114,13 +119,20 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false) protected virtual async Task UpdateInternalAsync(string projectPath, bool includeNightlyPreviews = false, bool includeReleaseCandidates = false, bool switchToStable = false)
{ {
var latestStableVersions = await _packageVersionCheckerService.GetLatestStableVersionsAsync();
using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) using (var fs = File.Open(projectPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None))
{ {
using (var sr = new StreamReader(fs, Encoding.Default, true)) using (var sr = new StreamReader(fs, Encoding.Default, true))
{ {
var fileContent = await sr.ReadToEndAsync(); var fileContent = await sr.ReadToEndAsync();
var updatedContent = await UpdateVoloPackagesAsync(fileContent, includeNightlyPreviews, includeReleaseCandidates, switchToStable); var updatedContent = await UpdateVoloPackagesAsync(
fileContent,
includeNightlyPreviews,
includeReleaseCandidates,
switchToStable,
latestStableVersions: latestStableVersions);
fs.Seek(0, SeekOrigin.Begin); fs.Seek(0, SeekOrigin.Begin);
fs.SetLength(0); fs.SetLength(0);
@ -153,7 +165,8 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
SemanticVersion latestNugetVersion = null, SemanticVersion latestNugetVersion = null,
SemanticVersion latestNugetReleaseCandidateVersion = null, SemanticVersion latestNugetReleaseCandidateVersion = null,
string latestMyGetVersion = null, string latestMyGetVersion = null,
string specifiedVersion = null) string specifiedVersion = null,
List<PackageVersionCheckerService.LatestStableVersionResult> latestStableVersions = null)
{ {
string packageId = null; string packageId = null;
@ -206,29 +219,39 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
if (!specifiedVersion.IsNullOrWhiteSpace()) if (!specifiedVersion.IsNullOrWhiteSpace())
{ {
if (isLeptonXPackage || isStudioPackage) var leptonXPackageVersion = latestStableVersions?
.FirstOrDefault(v => v.Version.Equals(specifiedVersion, StringComparison.InvariantCultureIgnoreCase))?.LeptonX?.Version;
if ((isLeptonXPackage && string.IsNullOrWhiteSpace(leptonXPackageVersion)) || isStudioPackage)
{ {
Logger.LogWarning("Package: {PackageId} could not be updated. Please manually update the package version yourself to prevent version mismatches!", packageId); Logger.LogWarning("Package: {PackageId} could not be updated. Please manually update the package version yourself to prevent version mismatches!", packageId);
continue; continue;
} }
if (await SpecifiedVersionExists(specifiedVersion, packageId)) var isLeptonXPackageWithVersion = isLeptonXPackage && !string.IsNullOrWhiteSpace(leptonXPackageVersion);
if (isLeptonXPackageWithVersion || await SpecifiedVersionExists(specifiedVersion, packageId))
{
TryUpdatingPackage(isLeptonXPackageWithVersion ? leptonXPackageVersion : specifiedVersion);
}
else
{ {
var specifiedSemanticVersion = SemanticVersion.Parse(specifiedVersion); Logger.LogWarning("Package \"{PackageId}\" specified version v{SpecifiedVersion} does not exist!", packageId, specifiedVersion);
}
void TryUpdatingPackage(string versionToUpdate)
{
var specifiedSemanticVersion = SemanticVersion.Parse(versionToUpdate);
if (specifiedSemanticVersion > currentSemanticVersion) if (specifiedSemanticVersion > currentSemanticVersion)
{ {
Logger.LogInformation("Updating package \"{PackageId}\" from v{CurrentVersion} to v{SpecifiedVersion}", packageId, currentVersion, specifiedVersion); Logger.LogInformation("Updating package \"{PackageId}\" from v{CurrentVersion} to v{SpecifiedVersion}", packageId, currentVersion, versionToUpdate);
versionAttribute.Value = specifiedVersion; versionAttribute.Value = versionToUpdate;
} }
else else
{ {
Logger.LogWarning("Unable to update package \"{PackageId}\" version v{CurrentVersion} to v{SpecifiedVersion}", packageId, currentVersion, specifiedVersion); Logger.LogWarning("Unable to update package \"{PackageId}\" version v{CurrentVersion} to v{SpecifiedVersion}", packageId, currentVersion, versionToUpdate);
} }
} }
else
{
Logger.LogWarning("Package \"{PackageId}\" specified version v{SpecifiedVersion} does not exist!", packageId, specifiedVersion);
}
} }
else else
{ {
@ -252,7 +275,7 @@ public class VoloNugetPackagesVersionUpdater : ITransientDependency
} }
else else
{ {
latestVersion = latestMyGetVersion == null ? await GetLatestVersionFromMyGet(packageId) : latestMyGetVersion; latestVersion = latestMyGetVersion ?? await GetLatestVersionFromMyGet(packageId);
} }
if(latestVersion == null) if(latestVersion == null)

30
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Version/PackageVersionCheckerService.cs

@ -5,6 +5,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.Http; using Volo.Abp.Cli.Http;
@ -111,6 +112,11 @@ public class PackageVersionCheckerService : ITransientDependency
? new LatestVersionInfo(semanticVersion, latestStableVersionResult.Message) ? new LatestVersionInfo(semanticVersion, latestStableVersionResult.Message)
: null; : null;
} }
public async Task<List<LatestStableVersionResult>> GetLatestStableVersionsAsync()
{
return await GetLatestStableVersionsInternalAsync();
}
private static ConcurrentDictionary<string, bool> CommercialPackagesCache { get; } = new (); private static ConcurrentDictionary<string, bool> CommercialPackagesCache { get; } = new ();
@ -225,7 +231,7 @@ public class PackageVersionCheckerService : ITransientDependency
_apiKeyResult ??= await _apiKeyService.GetApiKeyOrNullAsync(); _apiKeyResult ??= await _apiKeyService.GetApiKeyOrNullAsync();
} }
private async Task<LatestStableVersionResult> GetLatestStableVersionOrNullAsync() private async Task<List<LatestStableVersionResult>> GetLatestStableVersionsInternalAsync()
{ {
try try
{ {
@ -241,16 +247,24 @@ public class PackageVersionCheckerService : ITransientDependency
var content = await responseMessage.Content.ReadAsStringAsync(); var content = await responseMessage.Content.ReadAsStringAsync();
var result = JsonSerializer.Deserialize<List<LatestStableVersionResult>>(content); var result = JsonSerializer.Deserialize<List<LatestStableVersionResult>>(content);
return result.OrderBy(q => q.Type.ToLowerInvariant() == "stable").ThenBy(q => SemanticVersion.Parse(q.Version)).ToList();
return result.FirstOrDefault(x => x.Type.ToLowerInvariant() == "stable");
} }
} }
catch catch
{ {
return null; return [];
} }
} }
private async Task<LatestStableVersionResult> GetLatestStableVersionOrNullAsync()
{
var latestStableVersionsResult = await GetLatestStableVersionsInternalAsync();
return latestStableVersionsResult.Count <= 0
? null
: latestStableVersionsResult.FirstOrDefault();
}
public class NuGetSearchResultDto public class NuGetSearchResultDto
{ {
public int TotalHits { get; set; } public int TotalHits { get; set; }
@ -270,6 +284,11 @@ public class PackageVersionCheckerService : ITransientDependency
public List<string> Versions { get; set; } public List<string> Versions { get; set; }
} }
public class LeptonXThemeInfo
{
public string Version { get; set; }
}
public class LatestStableVersionResult public class LatestStableVersionResult
{ {
public string Version { get; set; } public string Version { get; set; }
@ -279,5 +298,8 @@ public class PackageVersionCheckerService : ITransientDependency
public string Type { get; set; } public string Type { get; set; }
public string Message { get; set; } public string Message { get; set; }
[CanBeNull]
public LeptonXThemeInfo LeptonX { get; set; }
} }
} }

23
latest-versions.json

@ -1,8 +1,29 @@
[ [
{
"version": "9.0.1",
"releaseDate": "",
"type": "stable",
"message": "",
"leptonx": {
"version": "4.0.1"
}
},
{
"version": "9.0.0",
"releaseDate": "",
"type": "stable",
"message": "",
"leptonx": {
"version": "4.0.0"
}
},
{ {
"version": "8.3.1", "version": "8.3.1",
"releaseDate": "", "releaseDate": "",
"type": "stable", "type": "stable",
"message": "" "message": "",
"leptonx": {
"version": "3.3.1"
}
} }
] ]
Loading…
Cancel
Save