Skip to content

Commit

Permalink
Merge pull request #62 from martinpotter/commandlineparsed
Browse files Browse the repository at this point in the history
Add CommandLineParsed to allow initialization based on arguments
  • Loading branch information
martinpotter authored May 31, 2024
2 parents 515854d + 600c65b commit 970a16d
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 4 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>

<PropertyGroup>
<VersionPrefix>5.20.2</VersionPrefix>
<VersionPrefix>5.21.0</VersionPrefix>
<PackageValidationBaselineVersion>5.19.1</PackageValidationBaselineVersion>
<LangVersion>12.0</LangVersion>
<Nullable>enable</Nullable>
Expand Down
4 changes: 4 additions & 0 deletions ReleaseNotes.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Release Notes

## 5.21.0

* Add `BuildApp.CommandLineParsed` to allow initialization based on arguments.

## 5.20.2

* Support `VersionOverride` with `DotNetClassicTool.TryCreateFrom`.
Expand Down
15 changes: 15 additions & 0 deletions src/Faithlife.Build/BuildApp.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,31 @@ public BuildTarget Target(string name)
return target;
}

/// <summary>
/// Adds an action to execute when the command line arguments have been parsed, but before the target(s) are evaluated and executed.
/// </summary>
/// <param name="action">The action to execute when the command line arguments have been parsed.</param>
public void CommandLineParsed(Action action)
{
ArgumentNullException.ThrowIfNull(action);

m_commandLineParsedActions.Add(action);
}

internal BuildApp(CommandLineApplication app)
{
m_app = app;
m_targets = new List<BuildTarget>();
m_flags = new List<BuildFlag>();
m_options = new List<BuildOption>();
m_commandLineParsedActions = new List<Action>();
}

internal IReadOnlyList<Action> CommandLineParsedActions => m_commandLineParsedActions;

private readonly CommandLineApplication m_app;
private readonly List<BuildTarget> m_targets;
private readonly List<BuildFlag> m_flags;
private readonly List<BuildOption> m_options;
private readonly List<Action> m_commandLineParsedActions;
}
12 changes: 9 additions & 3 deletions src/Faithlife.Build/BuildRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,18 @@ public static async Task<int> ExecuteAsync(string[] args, Action<BuildApp> initi
var helpFlag = buildApp.AddFlag("-h|-?|--help", "Show build help");
var targetsArgument = commandLineApp.Argument("targets", "The targets to build", multipleValues: true);

var bullseyeTargets = new Targets();
foreach (var target in buildApp.Targets)
bullseyeTargets.Add(name: target.Name, description: target.Description, dependsOn: target.Dependencies, action: target.RunAsync);
commandLineApp.OnParsingComplete(_ =>
{
foreach (var commandLineParsedAction in buildApp.CommandLineParsedActions)
commandLineParsedAction();
});

commandLineApp.OnExecuteAsync(async _ =>
{
var bullseyeTargets = new Targets();
foreach (var target in buildApp.Targets)
bullseyeTargets.Add(name: target.Name, description: target.Description, dependsOn: target.Dependencies, action: target.RunAsync);

var targetNames = targetsArgument.Values.WhereNotNull().ToList();

if (targetNames.Count == 0 && buildApp.Targets.Any(x => x.Name == c_defaultTarget))
Expand Down

0 comments on commit 970a16d

Please sign in to comment.