-
Notifications
You must be signed in to change notification settings - Fork 818
Expand file tree
/
Copy pathBuildCommand.cs
More file actions
61 lines (50 loc) · 2.01 KB
/
BuildCommand.cs
File metadata and controls
61 lines (50 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
using Bicep.Cli.Arguments;
using Bicep.Cli.Helpers;
using Bicep.Cli.Logging;
using Bicep.Cli.Services;
using Bicep.Core;
using Bicep.IO.Abstraction;
using Microsoft.Extensions.Logging;
namespace Bicep.Cli.Commands;
public class BuildCommand(
ILogger logger,
InputOutputArgumentsResolver inputOutputArgumentsResolver,
DiagnosticLogger diagnosticLogger,
BicepCompiler compiler,
OutputWriter writer) : ICommand
{
public async Task<int> RunAsync(BuildArguments args)
{
var hasErrors = false;
var inputOutputUriPairs = inputOutputArgumentsResolver.ResolveFilePatternInputOutputArguments(args);
var outputToStdOut = inputOutputUriPairs.Count == 1 && args.OutputToStdOut; // If there are multiple input files, we ignore the args.OutputToStdOut flag.
foreach (var (inputUri, outputUri) in inputOutputUriPairs)
{
ArgumentHelper.ValidateBicepFile(inputUri);
var result = await Compile(inputUri, outputUri, args.NoRestore, args.DiagnosticsFormat, outputToStdOut);
hasErrors |= result.HasErrors;
}
var summary = new DiagnosticSummary(hasErrors);
return CommandHelper.GetExitCode(summary);
}
private async Task<DiagnosticSummary> Compile(IOUri inputUri, IOUri outputUri, bool noRestore, DiagnosticsFormat? diagnosticsFormat, bool outputToStdOut)
{
var compilation = await compiler.CreateCompilation(inputUri, skipRestore: noRestore);
CommandHelper.LogExperimentalWarning(logger, compilation);
var summary = diagnosticLogger.LogDiagnostics(ArgumentHelper.GetDiagnosticOptions(diagnosticsFormat), compilation);
if (!summary.HasErrors)
{
if (outputToStdOut)
{
writer.TemplateToStdout(compilation);
}
else
{
await writer.TemplateToFileAsync(compilation, outputUri);
}
}
return summary;
}
}