diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/FileSystemDotNetProjectBuildConfigReader.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/FileSystemDotNetProjectBuildConfigReader.cs new file mode 100644 index 0000000000..b9a1f28eee --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/FileSystemDotNetProjectBuildConfigReader.cs @@ -0,0 +1,92 @@ +using System; +using System.IO; +using System.Linq; +using LibGit2Sharp; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Json; + +namespace Volo.Abp.Cli.Build +{ + public class FileSystemDotNetProjectBuildConfigReader : IDotNetProjectBuildConfigReader, ITransientDependency + { + private readonly IJsonSerializer _jsonSerializer; + private string _buildConfigName = "abp-build-config.json"; + + public FileSystemDotNetProjectBuildConfigReader(IJsonSerializer jsonSerializer) + { + _jsonSerializer = jsonSerializer; + } + + public DotNetProjectBuildConfig Read(string directoryPath) + { + var buildArgs = new DotNetProjectBuildConfig(); + var solutionFiles = Directory.GetFiles(directoryPath, "*.sln", SearchOption.TopDirectoryOnly); + if (solutionFiles.Length == 1) + { + buildArgs.SlFilePath = solutionFiles.First(); + var configFile = GetClosestFile(directoryPath, _buildConfigName); + var configFileContent = File.ReadAllText(configFile); + buildArgs.GitRepository = _jsonSerializer.Deserialize(configFileContent); + + SetBranchNames(buildArgs.GitRepository); + + return buildArgs; + } + + var configFiles = Directory.GetFiles(directoryPath, _buildConfigName, SearchOption.TopDirectoryOnly); + if (configFiles.Length == 1) + { + var configFile = configFiles.First(); + buildArgs.GitRepository = _jsonSerializer.Deserialize(configFile); + } + else + { + Console.WriteLine( + "There are more than 1 config (abp-build-config.json) file in the directory!" + ); + } + + SetBranchNames(buildArgs.GitRepository); + + return buildArgs; + } + + private void SetBranchNames(GitRepository gitRepository) + { + using (var repo = new Repository(string.Concat(gitRepository.RootPath, @"\.git"))) + { + gitRepository.BranchName = repo.Head.FriendlyName; + } + + foreach (var dependingRepository in gitRepository.DependingRepositories) + { + SetBranchNames(dependingRepository); + } + } + + private string GetClosestFile(string directoryPath, string fileName) + { + var directory = new DirectoryInfo(directoryPath); + var files = directory.GetFiles(fileName, SearchOption.TopDirectoryOnly); + if (files.Any() && files.Length == 1) + { + return files.First().FullName; + } + + do + { + directory = directory.Parent; + if (directory == null) + { + return string.Empty; + } + + files = directory.GetFiles(fileName, SearchOption.TopDirectoryOnly); + if (files.Any() && files.Length == 1) + { + return files.First().FullName; + } + } while (true); + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IBuildArgsReader.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IBuildArgsReader.cs index 7402cd7450..54dd2bd5ac 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IBuildArgsReader.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IBuildArgsReader.cs @@ -1,69 +1,7 @@ -using System; -using System.IO; -using System.Linq; -using LibGit2Sharp; -using Volo.Abp.Json; - -namespace Volo.Abp.Cli.Build +namespace Volo.Abp.Cli.Build { public interface IDotNetProjectBuildConfigReader { DotNetProjectBuildConfig Read(string directoryPath); } - - public class FileSystemDotNetProjectBuildConfigReader : IDotNetProjectBuildConfigReader - { - private IJsonSerializer _jsonSerializer; - - public FileSystemDotNetProjectBuildConfigReader(IJsonSerializer jsonSerializer) - { - _jsonSerializer = jsonSerializer; - } - - public DotNetProjectBuildConfig Read(string directoryPath) - { - var buildArgs = new DotNetProjectBuildConfig(); - var solutionFiles = Directory.GetFiles(directoryPath, "*.sln", SearchOption.TopDirectoryOnly); - if (solutionFiles.Length == 1) - { - buildArgs.SlFilePath = solutionFiles.First(); - } - else - { - Console.WriteLine( - "There are more than 1 solution (*.sln) file in the directory. Searching for build-config.json file." - ); - } - - var configFiles = Directory.GetFiles(directoryPath, "abp-build-config.json", SearchOption.TopDirectoryOnly); - if (configFiles.Length == 1) - { - var configFile = configFiles.First(); - buildArgs.GitRepository = _jsonSerializer.Deserialize(configFile); - } - else - { - Console.WriteLine( - "There are more than 1 config (abp-build-config.json) file in the directory!" - ); - } - - SetBranchNames(buildArgs.GitRepository); - - return buildArgs; - } - - private void SetBranchNames(GitRepository gitRepository) - { - using (var repo = new Repository(string.Concat(gitRepository.RootPath, @"\.git"))) - { - gitRepository.BranchName = repo.Head.FriendlyName; - } - - foreach (var dependingRepository in gitRepository.DependingRepositories) - { - SetBranchNames(dependingRepository); - } - } - } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs index 56400c7c51..aae55f4483 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs @@ -32,16 +32,23 @@ namespace Volo.Abp.Cli.Commands var sw = new Stopwatch(); sw.Start(); - var buildConfig = DotNetProjectBuildConfigReader.Read(Directory.GetCurrentDirectory()); - + var workingDirectory = commandLineArgs.Options.GetOrNull( + Options.WorkingDirectory.Short, + Options.WorkingDirectory.Long + ); + var maxParallelBuild = commandLineArgs.Options.GetOrNull( Options.MaxParallelBuild.Short, Options.MaxParallelBuild.Long ); - var dotnetBuildArguments = commandLineArgs.Options.GetOrNull(Options.DotnetBuildArguments.Short, - Options.DotnetBuildArguments.Long); + var dotnetBuildArguments = commandLineArgs.Options.GetOrNull( + Options.DotnetBuildArguments.Short, + Options.DotnetBuildArguments.Long + ); + var buildConfig = DotNetProjectBuildConfigReader.Read(workingDirectory ?? Directory.GetCurrentDirectory()); + var changedProjectFiles = ChangedProjectFinder.Find(buildConfig); DotNetProjectDependencyFiller.Fill(changedProjectFiles); @@ -54,7 +61,8 @@ namespace Volo.Abp.Cli.Commands dotnetBuildArguments ?? "" ); - var buildStatus = GenerateBuildStatus(buildConfig.GitRepository, changedProjectFiles, buildSucceededProjects); + var buildStatus = + GenerateBuildStatus(buildConfig.GitRepository, changedProjectFiles, buildSucceededProjects); RepositoryBuildStatusStore.Set(buildStatus); sw.Stop(); @@ -164,6 +172,12 @@ namespace Volo.Abp.Cli.Commands public static class Options { + public static class WorkingDirectory + { + public const string Short = "wd"; + public const string Long = "working-directory"; + } + public static class MaxParallelBuild { public const string Short = "m";