Enhance CLI

pull/10848/head
liangshiwei 4 years ago
parent b419ba7b17
commit d3740d8f5c

@ -82,17 +82,21 @@ namespace Volo.Abp.Cli.ProjectBuilding
version = latestVersion;
}
if (await GetTemplateNugetVersionAsync(name, type, version) == null)
else
{
throw new Exception("There is no version found with given version: " + version);
if (!await IsVersionExists(version))
{
throw new Exception("There is no version found with given version: " + version);
}
}
var nugetVersion = await GetTemplateNugetVersionAsync(name, type, version);
if (!string.IsNullOrWhiteSpace(templateSource) && !IsNetworkSource(templateSource))
{
Logger.LogInformation("Using local " + type + ": " + name + ", version: " + version);
return new TemplateFile(File.ReadAllBytes(Path.Combine(templateSource, name + "-" + version + ".zip")),
version, latestVersion, version);
version, latestVersion, nugetVersion);
}
var localCacheFile = Path.Combine(CliPaths.TemplateCache, name.Replace("/", ".") + "-" + version + ".zip");
@ -100,14 +104,14 @@ namespace Volo.Abp.Cli.ProjectBuilding
#if DEBUG
if (File.Exists(localCacheFile))
{
return new TemplateFile(File.ReadAllBytes(localCacheFile), version, latestVersion, version);
return new TemplateFile(File.ReadAllBytes(localCacheFile), version, latestVersion, nugetVersion);
}
#endif
if (Options.CacheTemplates && File.Exists(localCacheFile) && templateSource.IsNullOrWhiteSpace())
{
Logger.LogInformation("Using cached " + type + ": " + name + ", version: " + version);
return new TemplateFile(File.ReadAllBytes(localCacheFile), version, latestVersion, version);
return new TemplateFile(File.ReadAllBytes(localCacheFile), version, latestVersion, nugetVersion);
}
Logger.LogInformation("Downloading " + type + ": " + name + ", version: " + version);
@ -128,7 +132,7 @@ namespace Volo.Abp.Cli.ProjectBuilding
File.WriteAllBytes(localCacheFile, fileContent);
}
return new TemplateFile(fileContent, version, latestVersion, version);
return new TemplateFile(fileContent, version, latestVersion, nugetVersion);
}
private async Task<string> GetLatestSourceCodeVersionAsync(string name, string type, string url = null,
@ -196,6 +200,30 @@ namespace Volo.Abp.Cli.ProjectBuilding
}
}
private async Task<bool> IsVersionExists(string version)
{
var url = $"{CliUrls.WwwAbpIo}api/download/versions?includePreReleases=true";
try
{
var client = _cliHttpClientFactory.CreateClient();
using (var response = await client.GetAsync(url,
_cliHttpClientFactory.GetCancellationToken(TimeSpan.FromMinutes(10))))
{
await RemoteServiceExceptionHandler.EnsureSuccessfulHttpResponseAsync(response);
var result = await response.Content.ReadAsStringAsync();
var versions = JsonSerializer.Deserialize<List<GithubRelease>>(result);
return versions.Any(v => v.Name == version);
}
}
catch (Exception)
{
return true;
}
}
private async Task<byte[]> DownloadSourceCodeContentAsync(SourceCodeDownloadInputDto input)
{
var url = $"{CliUrls.WwwAbpIo}api/download/{input.Type}/";
@ -292,5 +320,16 @@ namespace Volo.Abp.Cli.ProjectBuilding
{
public string Version { get; set; }
}
public class GithubRelease
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsPrerelease { get; set; }
public DateTime PublishTime { get; set; }
}
}
}
Loading…
Cancel
Save