From 886edb03c5a552e6e8be30018c0c3695b0e552d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20=C3=87A=C4=9EDA=C5=9E?= Date: Tue, 1 Sep 2020 11:18:46 +0300 Subject: [PATCH] added build-name as a parameter to build command --- .../Cli/Build/DefaultChangedProjectFinder.cs | 8 +++--- .../Abp/Cli/Build/DotNetProjectBuildConfig.cs | 2 ++ ...ileSystemDotNetProjectBuildConfigReader.cs | 26 +++++++++---------- .../Volo/Abp/Cli/Build/GitRepository.cs | 4 +-- .../Abp/Cli/Build/GitRepositoryBuildStatus.cs | 16 ++++++------ .../Cli/Build/IRepositoryBuildStatusStore.cs | 12 ++++----- .../Volo/Abp/Cli/Commands/BuildCommand.cs | 26 +++++++++++++++---- 7 files changed, 55 insertions(+), 39 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs index 2a663ed319..7eaec1f8f3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs @@ -21,18 +21,18 @@ namespace Volo.Abp.Cli.Build { if (buildConfig.SlFilePath.IsNullOrEmpty()) { - return FindByRepository(buildConfig.GitRepository); + return FindByRepository(buildConfig); } return FindBySlnFile(buildConfig.GitRepository, buildConfig.SlFilePath); } - private List FindByRepository(GitRepository gitRepository) + private List FindByRepository(DotNetProjectBuildConfig buildConfig) { var changedProjectList = new List(); - var gitRepositoryBuildStatus = _repositoryBuildStatusStore.Get(gitRepository); + var gitRepositoryBuildStatus = _repositoryBuildStatusStore.Get(buildConfig.BuildName, buildConfig.GitRepository); - FindChangedFiles(gitRepository, gitRepositoryBuildStatus, changedProjectList); + FindChangedFiles(buildConfig.GitRepository, gitRepositoryBuildStatus, changedProjectList); return changedProjectList; } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectBuildConfig.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectBuildConfig.cs index efaa1c6075..18e23d2125 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectBuildConfig.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectBuildConfig.cs @@ -2,6 +2,8 @@ { public class DotNetProjectBuildConfig { + public string BuildName { get; set; } + public string SlFilePath { get; set; } public GitRepository GitRepository { get; set; } 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 index ea2c87cdde..5aed3d0941 100644 --- 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 @@ -19,18 +19,18 @@ namespace Volo.Abp.Cli.Build public DotNetProjectBuildConfig Read(string directoryPath) { - var buildArgs = new DotNetProjectBuildConfig(); + var buildConfig = new DotNetProjectBuildConfig(); var solutionFiles = Directory.GetFiles(directoryPath, "*.sln", SearchOption.TopDirectoryOnly); if (solutionFiles.Length == 1) { - buildArgs.SlFilePath = solutionFiles.First(); + buildConfig.SlFilePath = solutionFiles.First(); var configFile = GetClosestFile(directoryPath, _buildConfigName); var configFileContent = File.ReadAllText(configFile); - buildArgs.GitRepository = _jsonSerializer.Deserialize(configFileContent); + buildConfig.GitRepository = _jsonSerializer.Deserialize(configFileContent); - SetBranchNames(buildArgs.GitRepository); + SetBranchNames(buildConfig.GitRepository); - return buildArgs; + return buildConfig; } var configFiles = Directory.GetFiles(directoryPath, _buildConfigName, SearchOption.TopDirectoryOnly); @@ -38,19 +38,17 @@ namespace Volo.Abp.Cli.Build { var configFile = configFiles.First(); var configFileContent = File.ReadAllText(configFile); - buildArgs.GitRepository = _jsonSerializer.Deserialize(configFileContent); + buildConfig.GitRepository = _jsonSerializer.Deserialize(configFileContent); - SetBranchNames(buildArgs.GitRepository); + SetBranchNames(buildConfig.GitRepository); - return buildArgs; - } - else - { - Console.WriteLine( - "There are more than 1 config (abp-build-config.json) file in the directory!" - ); + return buildConfig; } + Console.WriteLine( + "There are more than 1 config (abp-build-config.json) file in the directory!" + ); + throw new Exception("There is no solution file (*.sln) or " + _buildConfigName + " in the working directory !"); } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepository.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepository.cs index 6af55c8ed2..093c50a9a3 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepository.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepository.cs @@ -33,7 +33,7 @@ namespace Volo.Abp.Cli.Build DependingRepositories = new List(); } - public string GetUniqueName() + public string GetUniqueName(string uniqueName) { var name = Name + "_" + BranchName; foreach (var dependingRepository in DependingRepositories) @@ -41,7 +41,7 @@ namespace Volo.Abp.Cli.Build AddToUniqueName(dependingRepository, name); } - return name.ToMd5(); + return (uniqueName.IsNullOrEmpty() ? "" : uniqueName + "_") + name.ToMd5(); } private void AddToUniqueName(GitRepository gitRepository, string name) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs index 751a205b01..eee96395b1 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs @@ -8,7 +8,7 @@ namespace Volo.Abp.Cli.Build /// /// Name of the repository /// - public string Name { get; set; } + public string RepositoryName { get; set; } /// /// Branch of the repository @@ -30,9 +30,9 @@ namespace Volo.Abp.Cli.Build /// public List DependingRepositories { get; set; } - public GitRepositoryBuildStatus(string name, string branchName) + public GitRepositoryBuildStatus(string repositoryName, string branchName) { - Name = name; + RepositoryName = repositoryName; BranchName = branchName; SucceedProjects = new List(); DependingRepositories = new List(); @@ -51,7 +51,7 @@ namespace Volo.Abp.Cli.Build private GitRepositoryBuildStatus GetChildInternal(GitRepositoryBuildStatus repositoryBuildStatus, string repositoryName) { - if (repositoryBuildStatus.Name == repositoryName) + if (repositoryBuildStatus.RepositoryName == repositoryName) { return repositoryBuildStatus; } @@ -64,20 +64,20 @@ namespace Volo.Abp.Cli.Build return null; } - public string GetUniqueName() + public string GetUniqueName(string uniqueName) { - var name = Name + "_" + BranchName; + var name = RepositoryName + "_" + BranchName; foreach (var dependingRepository in DependingRepositories) { AddToUniqueName(dependingRepository, name); } - return name.ToMd5(); + return (uniqueName.IsNullOrEmpty() ? "" : uniqueName + "_") + name.ToMd5(); } private void AddToUniqueName(GitRepositoryBuildStatus gitRepository, string name) { - name += "_" + gitRepository.Name + "_" + gitRepository.BranchName; + name += "_" + gitRepository.RepositoryName + "_" + gitRepository.BranchName; foreach (var dependingRepository in gitRepository.DependingRepositories) { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IRepositoryBuildStatusStore.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IRepositoryBuildStatusStore.cs index 793d3715f7..655c6ef236 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IRepositoryBuildStatusStore.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IRepositoryBuildStatusStore.cs @@ -7,9 +7,9 @@ namespace Volo.Abp.Cli.Build { public interface IRepositoryBuildStatusStore { - GitRepositoryBuildStatus Get(GitRepository repository); + GitRepositoryBuildStatus Get(string buildNamePrefix, GitRepository repository); - void Set(GitRepositoryBuildStatus status); + void Set(string buildNamePrefix, GitRepositoryBuildStatus status); } public class FileSystemRepositoryBuildStatusStore : IRepositoryBuildStatusStore, ITransientDependency @@ -17,14 +17,14 @@ namespace Volo.Abp.Cli.Build // TODO: change this ? private string BaseBuildStatusStorePath = @"C:\Users\ismai\.abp\build"; - public GitRepositoryBuildStatus Get(GitRepository repository) + public GitRepositoryBuildStatus Get(string buildNamePrefix, GitRepository repository) { if (!Directory.Exists(BaseBuildStatusStorePath)) { Directory.CreateDirectory(BaseBuildStatusStorePath); } - var buildStatusFile = Path.Combine(BaseBuildStatusStorePath, repository.GetUniqueName()) + ".json"; + var buildStatusFile = Path.Combine(BaseBuildStatusStorePath, repository.GetUniqueName(buildNamePrefix)) + ".json"; if (!File.Exists(buildStatusFile)) { @@ -36,14 +36,14 @@ namespace Volo.Abp.Cli.Build return JsonConvert.DeserializeObject(buildStatusText); } - public void Set(GitRepositoryBuildStatus status) + public void Set(string buildNamePrefix, GitRepositoryBuildStatus status) { if (!Directory.Exists(BaseBuildStatusStorePath)) { Directory.CreateDirectory(BaseBuildStatusStorePath); } - var buildStatusFile = Path.Combine(BaseBuildStatusStorePath, status.GetUniqueName()) + ".json"; + var buildStatusFile = Path.Combine(BaseBuildStatusStorePath, status.GetUniqueName(buildNamePrefix)) + ".json"; if (File.Exists(buildStatusFile)) { FileHelper.DeleteIfExists(buildStatusFile); 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 aae55f4483..fce49dcf65 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 @@ -46,8 +46,14 @@ namespace Volo.Abp.Cli.Commands Options.DotnetBuildArguments.Short, Options.DotnetBuildArguments.Long ); - + + var buildName = commandLineArgs.Options.GetOrNull( + Options.BuildName.Short, + Options.BuildName.Long + ); + var buildConfig = DotNetProjectBuildConfigReader.Read(workingDirectory ?? Directory.GetCurrentDirectory()); + buildConfig.BuildName = buildName; var changedProjectFiles = ChangedProjectFinder.Find(buildConfig); @@ -61,9 +67,13 @@ namespace Volo.Abp.Cli.Commands dotnetBuildArguments ?? "" ); - var buildStatus = - GenerateBuildStatus(buildConfig.GitRepository, changedProjectFiles, buildSucceededProjects); - RepositoryBuildStatusStore.Set(buildStatus); + var buildStatus = GenerateBuildStatus( + buildConfig.GitRepository, + changedProjectFiles, + buildSucceededProjects + ); + + RepositoryBuildStatusStore.Set(buildName, buildStatus); sw.Stop(); Console.WriteLine("Build operation is completed in " + sw.ElapsedMilliseconds + " (ms)"); @@ -186,9 +196,15 @@ namespace Volo.Abp.Cli.Commands public static class DotnetBuildArguments { - public const string Short = "d"; + public const string Short = "a"; public const string Long = "dotnet-build-arguments"; } + + public static class BuildName + { + public const string Short = "n"; + public const string Long = "build-name"; + } } } }