Browse Source

added build-name as a parameter to build command

pull/5418/head
İsmail ÇAĞDAŞ 6 years ago
parent
commit
886edb03c5
  1. 8
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DefaultChangedProjectFinder.cs
  2. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectBuildConfig.cs
  3. 26
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/FileSystemDotNetProjectBuildConfigReader.cs
  4. 4
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepository.cs
  5. 16
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs
  6. 12
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IRepositoryBuildStatusStore.cs
  7. 26
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs

8
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()) if (buildConfig.SlFilePath.IsNullOrEmpty())
{ {
return FindByRepository(buildConfig.GitRepository); return FindByRepository(buildConfig);
} }
return FindBySlnFile(buildConfig.GitRepository, buildConfig.SlFilePath); return FindBySlnFile(buildConfig.GitRepository, buildConfig.SlFilePath);
} }
private List<DotNetProjectInfo> FindByRepository(GitRepository gitRepository) private List<DotNetProjectInfo> FindByRepository(DotNetProjectBuildConfig buildConfig)
{ {
var changedProjectList = new List<DotNetProjectInfo>(); var changedProjectList = new List<DotNetProjectInfo>();
var gitRepositoryBuildStatus = _repositoryBuildStatusStore.Get(gitRepository); var gitRepositoryBuildStatus = _repositoryBuildStatusStore.Get(buildConfig.BuildName, buildConfig.GitRepository);
FindChangedFiles(gitRepository, gitRepositoryBuildStatus, changedProjectList); FindChangedFiles(buildConfig.GitRepository, gitRepositoryBuildStatus, changedProjectList);
return changedProjectList; return changedProjectList;
} }

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/DotNetProjectBuildConfig.cs

@ -2,6 +2,8 @@
{ {
public class DotNetProjectBuildConfig public class DotNetProjectBuildConfig
{ {
public string BuildName { get; set; }
public string SlFilePath { get; set; } public string SlFilePath { get; set; }
public GitRepository GitRepository { get; set; } public GitRepository GitRepository { get; set; }

26
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) public DotNetProjectBuildConfig Read(string directoryPath)
{ {
var buildArgs = new DotNetProjectBuildConfig(); var buildConfig = new DotNetProjectBuildConfig();
var solutionFiles = Directory.GetFiles(directoryPath, "*.sln", SearchOption.TopDirectoryOnly); var solutionFiles = Directory.GetFiles(directoryPath, "*.sln", SearchOption.TopDirectoryOnly);
if (solutionFiles.Length == 1) if (solutionFiles.Length == 1)
{ {
buildArgs.SlFilePath = solutionFiles.First(); buildConfig.SlFilePath = solutionFiles.First();
var configFile = GetClosestFile(directoryPath, _buildConfigName); var configFile = GetClosestFile(directoryPath, _buildConfigName);
var configFileContent = File.ReadAllText(configFile); var configFileContent = File.ReadAllText(configFile);
buildArgs.GitRepository = _jsonSerializer.Deserialize<GitRepository>(configFileContent); buildConfig.GitRepository = _jsonSerializer.Deserialize<GitRepository>(configFileContent);
SetBranchNames(buildArgs.GitRepository); SetBranchNames(buildConfig.GitRepository);
return buildArgs; return buildConfig;
} }
var configFiles = Directory.GetFiles(directoryPath, _buildConfigName, SearchOption.TopDirectoryOnly); var configFiles = Directory.GetFiles(directoryPath, _buildConfigName, SearchOption.TopDirectoryOnly);
@ -38,19 +38,17 @@ namespace Volo.Abp.Cli.Build
{ {
var configFile = configFiles.First(); var configFile = configFiles.First();
var configFileContent = File.ReadAllText(configFile); var configFileContent = File.ReadAllText(configFile);
buildArgs.GitRepository = _jsonSerializer.Deserialize<GitRepository>(configFileContent); buildConfig.GitRepository = _jsonSerializer.Deserialize<GitRepository>(configFileContent);
SetBranchNames(buildArgs.GitRepository); SetBranchNames(buildConfig.GitRepository);
return buildArgs; return buildConfig;
}
else
{
Console.WriteLine(
"There are more than 1 config (abp-build-config.json) file in the directory!"
);
} }
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 !"); throw new Exception("There is no solution file (*.sln) or " + _buildConfigName + " in the working directory !");
} }

4
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepository.cs

@ -33,7 +33,7 @@ namespace Volo.Abp.Cli.Build
DependingRepositories = new List<GitRepository>(); DependingRepositories = new List<GitRepository>();
} }
public string GetUniqueName() public string GetUniqueName(string uniqueName)
{ {
var name = Name + "_" + BranchName; var name = Name + "_" + BranchName;
foreach (var dependingRepository in DependingRepositories) foreach (var dependingRepository in DependingRepositories)
@ -41,7 +41,7 @@ namespace Volo.Abp.Cli.Build
AddToUniqueName(dependingRepository, name); AddToUniqueName(dependingRepository, name);
} }
return name.ToMd5(); return (uniqueName.IsNullOrEmpty() ? "" : uniqueName + "_") + name.ToMd5();
} }
private void AddToUniqueName(GitRepository gitRepository, string name) private void AddToUniqueName(GitRepository gitRepository, string name)

16
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/GitRepositoryBuildStatus.cs

@ -8,7 +8,7 @@ namespace Volo.Abp.Cli.Build
/// <summary> /// <summary>
/// Name of the repository /// Name of the repository
/// </summary> /// </summary>
public string Name { get; set; } public string RepositoryName { get; set; }
/// <summary> /// <summary>
/// Branch of the repository /// Branch of the repository
@ -30,9 +30,9 @@ namespace Volo.Abp.Cli.Build
/// </summary> /// </summary>
public List<GitRepositoryBuildStatus> DependingRepositories { get; set; } public List<GitRepositoryBuildStatus> DependingRepositories { get; set; }
public GitRepositoryBuildStatus(string name, string branchName) public GitRepositoryBuildStatus(string repositoryName, string branchName)
{ {
Name = name; RepositoryName = repositoryName;
BranchName = branchName; BranchName = branchName;
SucceedProjects = new List<DotNetProjectBuildStatus>(); SucceedProjects = new List<DotNetProjectBuildStatus>();
DependingRepositories = new List<GitRepositoryBuildStatus>(); DependingRepositories = new List<GitRepositoryBuildStatus>();
@ -51,7 +51,7 @@ namespace Volo.Abp.Cli.Build
private GitRepositoryBuildStatus GetChildInternal(GitRepositoryBuildStatus repositoryBuildStatus, private GitRepositoryBuildStatus GetChildInternal(GitRepositoryBuildStatus repositoryBuildStatus,
string repositoryName) string repositoryName)
{ {
if (repositoryBuildStatus.Name == repositoryName) if (repositoryBuildStatus.RepositoryName == repositoryName)
{ {
return repositoryBuildStatus; return repositoryBuildStatus;
} }
@ -64,20 +64,20 @@ namespace Volo.Abp.Cli.Build
return null; return null;
} }
public string GetUniqueName() public string GetUniqueName(string uniqueName)
{ {
var name = Name + "_" + BranchName; var name = RepositoryName + "_" + BranchName;
foreach (var dependingRepository in DependingRepositories) foreach (var dependingRepository in DependingRepositories)
{ {
AddToUniqueName(dependingRepository, name); AddToUniqueName(dependingRepository, name);
} }
return name.ToMd5(); return (uniqueName.IsNullOrEmpty() ? "" : uniqueName + "_") + name.ToMd5();
} }
private void AddToUniqueName(GitRepositoryBuildStatus gitRepository, string name) private void AddToUniqueName(GitRepositoryBuildStatus gitRepository, string name)
{ {
name += "_" + gitRepository.Name + "_" + gitRepository.BranchName; name += "_" + gitRepository.RepositoryName + "_" + gitRepository.BranchName;
foreach (var dependingRepository in gitRepository.DependingRepositories) foreach (var dependingRepository in gitRepository.DependingRepositories)
{ {

12
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IRepositoryBuildStatusStore.cs

@ -7,9 +7,9 @@ namespace Volo.Abp.Cli.Build
{ {
public interface IRepositoryBuildStatusStore 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 public class FileSystemRepositoryBuildStatusStore : IRepositoryBuildStatusStore, ITransientDependency
@ -17,14 +17,14 @@ namespace Volo.Abp.Cli.Build
// TODO: change this ? // TODO: change this ?
private string BaseBuildStatusStorePath = @"C:\Users\ismai\.abp\build"; private string BaseBuildStatusStorePath = @"C:\Users\ismai\.abp\build";
public GitRepositoryBuildStatus Get(GitRepository repository) public GitRepositoryBuildStatus Get(string buildNamePrefix, GitRepository repository)
{ {
if (!Directory.Exists(BaseBuildStatusStorePath)) if (!Directory.Exists(BaseBuildStatusStorePath))
{ {
Directory.CreateDirectory(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)) if (!File.Exists(buildStatusFile))
{ {
@ -36,14 +36,14 @@ namespace Volo.Abp.Cli.Build
return JsonConvert.DeserializeObject<GitRepositoryBuildStatus>(buildStatusText); return JsonConvert.DeserializeObject<GitRepositoryBuildStatus>(buildStatusText);
} }
public void Set(GitRepositoryBuildStatus status) public void Set(string buildNamePrefix, GitRepositoryBuildStatus status)
{ {
if (!Directory.Exists(BaseBuildStatusStorePath)) if (!Directory.Exists(BaseBuildStatusStorePath))
{ {
Directory.CreateDirectory(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)) if (File.Exists(buildStatusFile))
{ {
FileHelper.DeleteIfExists(buildStatusFile); FileHelper.DeleteIfExists(buildStatusFile);

26
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.Short,
Options.DotnetBuildArguments.Long Options.DotnetBuildArguments.Long
); );
var buildName = commandLineArgs.Options.GetOrNull(
Options.BuildName.Short,
Options.BuildName.Long
);
var buildConfig = DotNetProjectBuildConfigReader.Read(workingDirectory ?? Directory.GetCurrentDirectory()); var buildConfig = DotNetProjectBuildConfigReader.Read(workingDirectory ?? Directory.GetCurrentDirectory());
buildConfig.BuildName = buildName;
var changedProjectFiles = ChangedProjectFinder.Find(buildConfig); var changedProjectFiles = ChangedProjectFinder.Find(buildConfig);
@ -61,9 +67,13 @@ namespace Volo.Abp.Cli.Commands
dotnetBuildArguments ?? "" dotnetBuildArguments ?? ""
); );
var buildStatus = var buildStatus = GenerateBuildStatus(
GenerateBuildStatus(buildConfig.GitRepository, changedProjectFiles, buildSucceededProjects); buildConfig.GitRepository,
RepositoryBuildStatusStore.Set(buildStatus); changedProjectFiles,
buildSucceededProjects
);
RepositoryBuildStatusStore.Set(buildName, buildStatus);
sw.Stop(); sw.Stop();
Console.WriteLine("Build operation is completed in " + sw.ElapsedMilliseconds + " (ms)"); Console.WriteLine("Build operation is completed in " + sw.ElapsedMilliseconds + " (ms)");
@ -186,9 +196,15 @@ namespace Volo.Abp.Cli.Commands
public static class DotnetBuildArguments public static class DotnetBuildArguments
{ {
public const string Short = "d"; public const string Short = "a";
public const string Long = "dotnet-build-arguments"; public const string Long = "dotnet-build-arguments";
} }
public static class BuildName
{
public const string Short = "n";
public const string Long = "build-name";
}
} }
} }
} }

Loading…
Cancel
Save