Browse Source

read config file from file system

pull/5418/head
İsmail ÇAĞDAŞ 6 years ago
parent
commit
e6f4c12241
  1. 92
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/FileSystemDotNetProjectBuildConfigReader.cs
  2. 64
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Build/IBuildArgsReader.cs
  3. 24
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/BuildCommand.cs

92
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<GitRepository>(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<GitRepository>(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);
}
}
}

64
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<GitRepository>(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);
}
}
}
}

24
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";

Loading…
Cancel
Save