public BuildScript Analyse(Autobuilder builder, bool auto) { if (builder.Options.BuildCommand == null) return BuildScript.Failure; // Custom build commands may require a specific .NET Core version return withDotNet(builder, environment => { var command = new CommandBuilder(builder.Actions, null, environment); // Custom build commands may require a specific Visual Studio version var vsTools = MsBuildRule.GetVcVarsBatFile(builder); if (vsTools != null) command.CallBatFile(vsTools.Path); builder.MaybeIndex(command, builder.Options.BuildCommand); return command.Script; }); }
public BuildScript Analyse(Autobuilder builder) { if (builder.Options.BuildCommand == null) { return(BuildScript.Failure); } // Custom build commands may require a specific .NET Core version return(DotNetRule.WithDotNet(builder, dotNet => { var command = new CommandBuilder(builder.Actions, null, dotNet?.Environment); // Custom build commands may require a specific Visual Studio version var vsTools = MsBuildRule.GetVcVarsBatFile(builder); if (vsTools != null) { command.CallBatFile(vsTools.Path); } command.IndexCommand(builder.Odasa, builder.Options.BuildCommand); return command.Script; })); }
public BuildScript Analyse(Autobuilder builder, bool auto) { if (builder.Options.BuildCommand is null) { return(BuildScript.Failure); } // Custom build commands may require a specific .NET Core version return(withDotNet(builder, environment => { var command = new CommandBuilder(builder.Actions, null, environment); // Custom build commands may require a specific Visual Studio version var vsTools = MsBuildRule.GetVcVarsBatFile(builder); if (vsTools is not null) { command.CallBatFile(vsTools.Path); } command.RunCommand(builder.Options.BuildCommand); return command.Script; })); }
public override BuildScript GetBuildScript() { /// <summary> /// A script that checks that the C# extractor has been executed. /// </summary> BuildScript CheckExtractorRun(bool warnOnFailure) => BuildScript.Create(actions => { if (actions.FileExists(Extractor.GetCSharpLogPath())) { return(0); } if (warnOnFailure) { Log(Severity.Error, "No C# code detected during build."); } return(1); }); var attempt = BuildScript.Failure; switch (GetCSharpBuildStrategy()) { case CSharpBuildStrategy.CustomBuildCommand: attempt = new BuildCommandRule(DotNetRule.WithDotNet).Analyse(this, false) & CheckExtractorRun(true); break; case CSharpBuildStrategy.Buildless: // No need to check that the extractor has been executed in buildless mode attempt = new StandaloneBuildRule().Analyse(this, false); break; case CSharpBuildStrategy.MSBuild: attempt = new MsBuildRule().Analyse(this, false) & CheckExtractorRun(true); break; case CSharpBuildStrategy.DotNet: attempt = new DotNetRule().Analyse(this, false) & CheckExtractorRun(true); break; case CSharpBuildStrategy.Auto: var cleanTrapFolder = BuildScript.DeleteDirectory(TrapDir); var cleanSourceArchive = BuildScript.DeleteDirectory(SourceArchiveDir); var tryCleanExtractorArgsLogs = BuildScript.Create(actions => { foreach (var file in Extractor.GetCSharpArgsLogs()) { try { actions.FileDelete(file); } catch // lgtm[cs/catch-of-all-exceptions] lgtm[cs/empty-catch-block] { } } return(0); }); var attemptExtractorCleanup = BuildScript.Try(cleanTrapFolder) & BuildScript.Try(cleanSourceArchive) & tryCleanExtractorArgsLogs & BuildScript.DeleteFile(Extractor.GetCSharpLogPath()); /// <summary> /// Execute script `s` and check that the C# extractor has been executed. /// If either fails, attempt to cleanup any artifacts produced by the extractor, /// and exit with code 1, in order to proceed to the next attempt. /// </summary> BuildScript IntermediateAttempt(BuildScript s) => (s & CheckExtractorRun(false)) | (attemptExtractorCleanup & BuildScript.Failure); attempt = // First try .NET Core IntermediateAttempt(new DotNetRule().Analyse(this, true)) | // Then MSBuild (() => IntermediateAttempt(new MsBuildRule().Analyse(this, true))) | // And finally look for a script that might be a build script (() => new BuildCommandAutoRule(DotNetRule.WithDotNet).Analyse(this, true) & CheckExtractorRun(true)) | // All attempts failed: print message AutobuildFailure(); break; } return (attempt & (() => new AspBuildRule().Analyse(this, false)) & (() => new XmlBuildRule().Analyse(this, false))); }