in src/build/Commands/BuildCommand.cs [28:138]
public async Task RunAsync()
{
if (Targets.Any(t => t.ToLower() == "all"))
Targets = BuildContext.Default.Config.ProductNames;
var bt = new Bullseye.Targets();
var cmd = this;
bt.Add(
BuildBeatPackageCompilerTarget.Name,
async () => await BuildBeatPackageCompilerTarget.RunAsync(BuildContext.Default));
var productBuildTargets = new List<string>();
bool addSignTarget = false;
if (!CertPass.IsEmpty() && File.Exists(CertFile))
{
// Let's try value as file name first, then as env var
var password = CertPass;
try
{ password = await File.ReadAllTextAsync(CertPass); }
catch
{ password = Environment.GetEnvironmentVariable(password); }
if (!password.IsEmpty())
{
CertPass = password;
addSignTarget = true;
}
}
foreach (var target in Targets)
{
var ctx = new BuildContext();
ctx.SetCommand(this);
bt.Add(
FindPackageTarget.NameWith(target),
async () => await FindPackageTarget.RunAsync(ctx, target));
bt.Add(
FetchPackageTarget.NameWith(target),
Bullseye.Targets.DependsOn(FindPackageTarget.NameWith(target)),
async () => await FetchPackageTarget.RunAsync(ctx));
bt.Add(
UnpackPackageTarget.NameWith(target),
Bullseye.Targets.DependsOn(FetchPackageTarget.NameWith(target)),
async () => await UnpackPackageTarget.RunAsync(ctx));
// sign individual binaries
if (addSignTarget)
ctx.SetCertificate(CertFile, CertPass);
if (addSignTarget)
{
bt.Add(
SignProductBinariesTarget.NameWith(target),
Bullseye.Targets.DependsOn(UnpackPackageTarget.NameWith(target)),
async () => await SignProductBinariesTarget.RunAsync(ctx));
}
else
{
bt.Add(
SignProductBinariesTarget.NameWith(target),
Bullseye.Targets.DependsOn(UnpackPackageTarget.NameWith(target)),
() => Console.WriteLine("Skipping digital signature for product binaries"));
}
bt.Add(
CompileMsiTarget.NameWith(target),
Bullseye.Targets.DependsOn(
BuildBeatPackageCompilerTarget.Name,
SignProductBinariesTarget.NameWith(target)),
async () => await CompileMsiTarget.RunAsync(ctx));
// sign final .msi
if (addSignTarget)
{
bt.Add(
SignMsiPackageTarget.NameWith(target),
Bullseye.Targets.DependsOn(CompileMsiTarget.NameWith(target)),
async () => await SignMsiPackageTarget.RunAsync(ctx));
}
else
{
bt.Add(
SignMsiPackageTarget.NameWith(target),
Bullseye.Targets.DependsOn(CompileMsiTarget.NameWith(target)),
() => Console.WriteLine("Skipping digital signature for MSI package"));
}
bt.Add(
BuildInstallerTarget.NameWith(target),
Bullseye.Targets.DependsOn(SignMsiPackageTarget.NameWith(target)),
async () => await BuildInstallerTarget.RunAsync(ctx));
productBuildTargets.Add(BuildInstallerTarget.NameWith(target));
}
try
{
await bt.RunWithoutExitingAsync(productBuildTargets);
}
catch
{
// We swallow exceptions here, BullsEye prints them
// TODO: use overload "messageOnly"
}
}