Move to Cli namespace.

pull/1120/head
Halil ibrahim Kalkan 7 years ago
parent b9bf3b11cd
commit f1153b6cfd

@ -22,6 +22,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Abp.Ddd.Domain\Volo.Abp.Ddd.Domain.csproj" />
<ProjectReference Include="..\Volo.Abp.Http\Volo.Abp.Http.csproj" />
<ProjectReference Include="..\Volo.Abp.IdentityModel\Volo.Abp.IdentityModel.csproj" />
<ProjectReference Include="..\Volo.Abp.Json\Volo.Abp.Json.csproj" />
</ItemGroup>

@ -7,6 +7,10 @@ namespace Volo.Abp.Cli
{
public Dictionary<string, Type> Commands { get; }
public string AbpIoWwwUrlRoot { get; set; } = "https://abp.io/";
public string AbpIoAccountUrlRoot { get; set; } = "https://account.abp.io/";
public CliOptions()
{
Commands = new Dictionary<string, Type>(StringComparer.OrdinalIgnoreCase);

@ -5,9 +5,9 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using System.Threading.Tasks;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.ProjectModification;
namespace Volo.Abp.Cli.Commands
{

@ -5,9 +5,9 @@ using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.ProjectModification;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.ProjectModification;
namespace Volo.Abp.Cli.Commands
{

@ -4,9 +4,9 @@ using Ionic.Zip;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli.Args;
using Volo.Abp.Cli.ProjectBuilding;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.DependencyInjection;
using Volo.Abp.ProjectBuilding;
using Volo.Abp.ProjectBuilding.Building;
namespace Volo.Abp.Cli.Commands
{

@ -0,0 +1,87 @@
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http;
using Volo.Abp.IO;
using Volo.Abp.Json;
using Volo.Abp.Threading;
namespace Volo.Abp.Cli.ProjectBuilding
{
public class AbpIoTemplateStore : ITemplateStore, ITransientDependency
{
public ILogger<AbpIoTemplateStore> Logger { get; set; }
protected CliOptions Options { get; }
protected IJsonSerializer JsonSerializer { get; }
protected ICancellationTokenProvider CancellationTokenProvider { get; }
public AbpIoTemplateStore(
IOptions<CliOptions> options,
IJsonSerializer jsonSerializer,
ICancellationTokenProvider cancellationTokenProvider)
{
JsonSerializer = jsonSerializer;
CancellationTokenProvider = cancellationTokenProvider;
Options = options.Value;
Logger = NullLogger<AbpIoTemplateStore>.Instance;
}
public async Task<TemplateFile> GetAsync(
string name,
string version,
DatabaseProvider databaseProvider,
string projectName)
{
var localCacheFolder = Path.Combine(CliPaths.TemplateCache, version);
DirectoryHelper.CreateIfNotExists(localCacheFolder);
var localCacheFile = Path.Combine(localCacheFolder, name + ".zip");
if (File.Exists(localCacheFile))
{
Logger.LogInformation("Using cached template: " + name + ", version: " + version);
return new TemplateFile(File.ReadAllBytes(localCacheFile));
}
Logger.LogInformation("Downloading template: " + name + ", version: " + version);
using (var client = new System.Net.Http.HttpClient())
{
client.Timeout = TimeSpan.FromMinutes(5);
var downloadUrl = Options.AbpIoWwwUrlRoot + "api/download/template/";
var serializedPostDataAsString = JsonSerializer.Serialize(new
{
name = name,
version = version,
databaseProvider = databaseProvider,
projectName = projectName
});
var responseMessage = await client.PostAsync(
downloadUrl,
new StringContent(serializedPostDataAsString, Encoding.UTF8, MimeTypes.Application.Json),
CancellationTokenProvider.Token
);
if (!responseMessage.IsSuccessStatusCode)
{
throw new Exception("Remote server returns error! HTTP status code: " + responseMessage.StatusCode);
}
var fileContent = await responseMessage.Content.ReadAsByteArrayAsync();
File.WriteAllBytes(localCacheFile, fileContent);
return new TemplateFile(fileContent);
}
}
}
}

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public enum DatabaseProvider
{

@ -1,6 +1,6 @@
using System;
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public class GithubRepositoryInfo
{

@ -1,7 +1,7 @@
using JetBrains.Annotations;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public class ProjectBuildContext
{

@ -1,8 +1,8 @@
using System;
using System.Linq;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public static class ProjectBuildContextExtensions
{

@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public class ProjectBuildPipeline
{

@ -1,6 +1,6 @@
using Volo.Abp.ProjectBuilding.Building.Steps;
using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public static class ProjectBuildPipelineBuilder
{

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public abstract class ProjectBuildPipelineStep
{

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public class ProjectResult
{

@ -1,8 +1,8 @@
using Ionic.Zip;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.ProjectBuilding.Zipping;
using Volo.Abp.Cli.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Zipping;
namespace Volo.Abp.ProjectBuilding.Building.Steps
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class CreateProjectResultZipStep : ProjectBuildPipelineStep
{

@ -1,9 +1,9 @@
using System.IO;
using Ionic.Zip;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.ProjectBuilding.Zipping;
using Volo.Abp.Cli.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Zipping;
namespace Volo.Abp.ProjectBuilding.Building.Steps
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class FileEntryListReadStep : ProjectBuildPipelineStep
{

@ -2,9 +2,9 @@
using System.IO;
using System.Linq;
using HtmlAgilityPack;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.ProjectBuilding.Building.Steps
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class NugetReferenceReplaceStep : ProjectBuildPipelineStep
{

@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Linq;
namespace Volo.Abp.ProjectBuilding.Building.Steps
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class RemoveProjectFromSolutionStep : ProjectBuildPipelineStep
{

@ -1,9 +1,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.ProjectBuilding.Building.Steps
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class SolutionRenameStep : ProjectBuildPipelineStep
{

@ -1,7 +1,7 @@
using System;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.ProjectBuilding.Building.Steps
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class SwitchEntityFrameworkCoreToMongoDbStep : ProjectBuildPipelineStep
{

@ -1,6 +1,6 @@
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.ProjectBuilding.Building.Steps
namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps
{
public class TemplateCodeDeleteStep : ProjectBuildPipelineStep
{

@ -2,7 +2,7 @@
using System.Collections.Generic;
using JetBrains.Annotations;
namespace Volo.Abp.ProjectBuilding.Building
namespace Volo.Abp.Cli.ProjectBuilding.Building
{
public abstract class TemplateInfo
{

@ -1,9 +1,9 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.ProjectBuilding.Building;
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
[Table("Downloads")]
public class DownloadInfo : CreationAuditedAggregateRoot<int>

@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Volo.Abp.ProjectBuilding.Files
namespace Volo.Abp.Cli.ProjectBuilding.Files
{
public class FileEntry
{

@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace Volo.Abp.ProjectBuilding.Files
namespace Volo.Abp.Cli.ProjectBuilding.Files
{
public static class FileEntryExtensions
{

@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace Volo.Abp.ProjectBuilding.Files
namespace Volo.Abp.Cli.ProjectBuilding.Files
{
public class FileEntryList : List<FileEntry>
{

@ -1,7 +1,7 @@
using System;
using Ionic.Zip;
namespace Volo.Abp.ProjectBuilding.Files
namespace Volo.Abp.Cli.ProjectBuilding.Files
{
public static class FileEntryListExtensions
{

@ -1,7 +1,7 @@
using System;
using Newtonsoft.Json;
namespace Volo.Abp.ProjectBuilding.Github
namespace Volo.Abp.Cli.ProjectBuilding.Github
{
[JsonObject]
public class GithubRelease

@ -1,6 +1,6 @@
using System.Threading.Tasks;
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public interface IProjectBuilder
{

@ -1,6 +1,6 @@
using Volo.Abp.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public interface ITemplateInfoProvider
{

@ -0,0 +1,15 @@
using System.Threading.Tasks;
using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.Cli.ProjectBuilding
{
public interface ITemplateStore
{
Task<TemplateFile> GetAsync(
string name,
string version,
DatabaseProvider databaseProvider,
string projectName
);
}
}

@ -1,7 +1,7 @@
using JetBrains.Annotations;
using Volo.Abp.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public class ProjectBuildArgs
{

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public class ProjectBuildResult
{

@ -1,11 +1,10 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Cli;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.Utils;
using Volo.Abp.DependencyInjection;
using Volo.Abp.ProjectBuilding.Building;
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public class ProjectBuilder : IProjectBuilder, ITransientDependency
{
@ -34,7 +33,12 @@ namespace Volo.Abp.ProjectBuilding
var version = VersionHelper.Version;
var templateFile = await TemplateStore.GetAsync(args.TemplateName, version);
var templateFile = await TemplateStore.GetAsync(
args.TemplateName,
version,
args.DatabaseProvider,
args.SolutionName.FullName
);
var context = new ProjectBuildContext(
templateInfo,

@ -1,6 +1,6 @@
using System;
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public class SolutionName
{

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public class TemplateFile
{

@ -1,9 +1,9 @@
using System;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Templates;
using Volo.Abp.DependencyInjection;
using Volo.Abp.ProjectBuilding.Building;
using Volo.Abp.ProjectBuilding.Templates;
namespace Volo.Abp.ProjectBuilding
namespace Volo.Abp.Cli.ProjectBuilding
{
public class TemplateInfoProvider : ITemplateInfoProvider, ITransientDependency
{

@ -1,8 +1,8 @@
using System.Collections.Generic;
using Volo.Abp.ProjectBuilding.Building;
using Volo.Abp.ProjectBuilding.Building.Steps;
using Volo.Abp.Cli.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building.Steps;
namespace Volo.Abp.ProjectBuilding.Templates
namespace Volo.Abp.Cli.ProjectBuilding.Templates
{
public class MvcApplicationTemplate : TemplateInfo
{

@ -1,6 +1,6 @@
using Volo.Abp.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.ProjectBuilding.Templates
namespace Volo.Abp.Cli.ProjectBuilding.Templates
{
public class MvcModuleTemplate : TemplateInfo
{

@ -1,6 +1,6 @@
using Volo.Abp.ProjectBuilding.Building;
using Volo.Abp.Cli.ProjectBuilding.Building;
namespace Volo.Abp.ProjectBuilding.Templates
namespace Volo.Abp.Cli.ProjectBuilding.Templates
{
public class ServiceTemplate : TemplateInfo
{

@ -3,9 +3,9 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using Ionic.Zip;
using Volo.Abp.ProjectBuilding.Files;
using Volo.Abp.Cli.ProjectBuilding.Files;
namespace Volo.Abp.ProjectBuilding.Zipping
namespace Volo.Abp.Cli.ProjectBuilding.Zipping
{
public static class ZipFileExtensions
{

@ -5,7 +5,7 @@ using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class AbpModuleClassFinder : ITransientDependency
{

@ -3,7 +3,7 @@ using System.IO;
using System.Linq;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class ModuleClassDependcyAdder : ITransientDependency
{

@ -1,6 +1,6 @@
using System.Collections.Generic;
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class ModuleInfo
{

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class NpmPackageInfo
{

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class NugetPackageInfo
{

@ -1,4 +1,4 @@
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public enum NugetPackageTarget : byte
{

@ -6,7 +6,7 @@ using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class ProjectNpmPackageAdder : ITransientDependency
{

@ -1,6 +1,4 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using System;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
@ -8,12 +6,13 @@ using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Volo.Abp.Cli;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
using Volo.Abp.Json;
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class ProjectNugetPackageAdder : ITransientDependency
{

@ -7,12 +7,10 @@ using System.Threading.Tasks;
using JetBrains.Annotations;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Newtonsoft.Json;
using Volo.Abp.Cli;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Json;
namespace Volo.Abp.ProjectModification
namespace Volo.Abp.Cli.ProjectModification
{
public class SolutionModuleAdder : ITransientDependency
{

@ -1,45 +0,0 @@
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Volo.Abp.Cli;
using Volo.Abp.DependencyInjection;
using Volo.Abp.IO;
namespace Volo.Abp.ProjectBuilding
{
public class AbpIoTemplateStore : ITemplateStore, ITransientDependency
{
public ILogger<AbpIoTemplateStore> Logger { get; set; }
public AbpIoTemplateStore()
{
Logger = NullLogger<AbpIoTemplateStore>.Instance;
}
public async Task<TemplateFile> GetAsync(string templateName, string version)
{
var localCacheFolder = Path.Combine(CliPaths.TemplateCache, version);
DirectoryHelper.CreateIfNotExists(localCacheFolder);
var localCacheFile = Path.Combine(localCacheFolder, templateName + ".zip");
if (File.Exists(localCacheFile))
{
Logger.LogInformation("Using cached template: " + templateName + ", version: " + version);
return new TemplateFile(File.ReadAllBytes(localCacheFile));
}
Logger.LogInformation("Downloading template: " + templateName + ", version: " + version);
using (var client = new System.Net.Http.HttpClient())
{
client.Timeout = TimeSpan.FromMinutes(5);
var downloadUrl = "https://abp.io/downloads/templates/" + version + "/" + templateName + ".zip";
var fileContents = await client.GetByteArrayAsync(downloadUrl);
File.WriteAllBytes(localCacheFile, fileContents);
return new TemplateFile(fileContents);
}
}
}
}

@ -1,9 +0,0 @@
using System.Threading.Tasks;
namespace Volo.Abp.ProjectBuilding
{
public interface ITemplateStore
{
Task<TemplateFile> GetAsync(string templateInfoName, string version);
}
}

@ -11,7 +11,13 @@ namespace Volo.Abp.Cli
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
#if DEBUG
Configure<CliOptions>(options =>
{
options.AbpIoWwwUrlRoot = "https://localhost:44328/";
options.AbpIoAccountUrlRoot = "https://localhost:44333/";
});
#endif
}
}
}
Loading…
Cancel
Save