187 строки
5.5 KiB
C#
187 строки
5.5 KiB
C#
//////////////////////////////////////////////////////////////////////
|
|
// ARGUMENTS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
var target = Argument("target", "Default");
|
|
var configuration = Argument("configuration", "Release");
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// DISCOVERY VARS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
string[] ProjList = null;
|
|
var PROJ_EXT = "*.vcxproj";
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// DEFINE RUN CONSTANTS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
var ROOT_DIR = Context.Environment.WorkingDirectory.FullPath;
|
|
var TOOLS_DIR = ROOT_DIR + "/tools/";
|
|
var NUNIT3_CONSOLE = TOOLS_DIR + "NUnit.ConsoleRunner/tools/nunit3-console.exe";
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// ERROR LOG
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
var ErrorDetail = new List<string>();
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// DISCOVER SOLUTIONS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Task("DiscoverSolutions")
|
|
.Does(() =>
|
|
{
|
|
ProjList = System.IO.Directory.GetFiles(ROOT_DIR, PROJ_EXT, SearchOption.AllDirectories);
|
|
});
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// CLEAN
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Task("Clean")
|
|
.IsDependentOn("DiscoverSolutions")
|
|
.Does(() =>
|
|
{
|
|
foreach(var proj in ProjList)
|
|
CleanDirectory(DirFrom(proj) + "/" + configuration);
|
|
});
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// BUILD
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Task("Build")
|
|
.IsDependentOn("DiscoverSolutions")
|
|
.Does(() =>
|
|
{
|
|
foreach(var proj in ProjList)
|
|
{
|
|
var projName = System.IO.Path.GetFileNameWithoutExtension(proj);
|
|
DisplayHeading("Building " + projName + " sample");
|
|
|
|
try
|
|
{
|
|
BuildProject(proj, configuration);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
// Just record and continue, since samples are independent
|
|
ErrorDetail.Add(" * " + projName + " build failed.");
|
|
}
|
|
}
|
|
});
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// TEST
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Task("Test")
|
|
.IsDependentOn("Build")
|
|
.Does(() =>
|
|
{
|
|
foreach(var proj in ProjList)
|
|
{
|
|
var bin = DirFrom(proj) + "/" + configuration + "/";
|
|
var projName = System.IO.Path.GetFileNameWithoutExtension(proj);
|
|
var dllName = bin + projName + ".dll";
|
|
|
|
DisplayHeading("Testing " + projName + " sample");
|
|
|
|
int rc = StartProcess(NUNIT3_CONSOLE,
|
|
new ProcessSettings()
|
|
{
|
|
Arguments = dllName
|
|
});
|
|
|
|
if (rc > 0)
|
|
ErrorDetail.Add(string.Format("{0}: {1} tests failed", projName, rc));
|
|
else if (rc < 0)
|
|
ErrorDetail.Add(string.Format("{0} exited with rc = {1}", projName, rc));
|
|
}
|
|
});
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// TEARDOWN TASK
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Teardown(() =>
|
|
{
|
|
CheckForError(ref ErrorDetail);
|
|
});
|
|
|
|
void CheckForError(ref List<string> errorDetail)
|
|
{
|
|
if(errorDetail.Count != 0)
|
|
{
|
|
var copyError = new List<string>();
|
|
copyError = errorDetail.Select(s => s).ToList();
|
|
errorDetail.Clear();
|
|
throw new Exception("One or more tasks failed, breaking the build.\n"
|
|
+ copyError.Aggregate((x,y) => x + "\n" + y));
|
|
}
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// HELPER METHODS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
void BuildProject(string projPath, string configuration)
|
|
{
|
|
if (IsRunningOnWindows())
|
|
{
|
|
MSBuild(projPath, new MSBuildSettings()
|
|
.SetConfiguration(configuration)
|
|
.SetMSBuildPlatform(MSBuildPlatform.Automatic)
|
|
.SetVerbosity(Verbosity.Minimal)
|
|
.SetNodeReuse(false));
|
|
}
|
|
else
|
|
{
|
|
XBuild(projPath, new XBuildSettings()
|
|
.WithTarget("Build")
|
|
.WithProperty("Configuration", configuration)
|
|
.SetVerbosity(Verbosity.Minimal));
|
|
}
|
|
}
|
|
|
|
string DirFrom(string filePath)
|
|
{
|
|
return System.IO.Path.GetDirectoryName(filePath);
|
|
}
|
|
|
|
void DisplayHeading(string heading)
|
|
{
|
|
Information("");
|
|
Information("----------------------------------------");
|
|
Information(heading);
|
|
Information("----------------------------------------");
|
|
Information("");
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// TASK TARGETS
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
Task("Rebuild")
|
|
.IsDependentOn("Clean")
|
|
.IsDependentOn("Build");
|
|
|
|
Task("Appveyor")
|
|
.IsDependentOn("Build")
|
|
.IsDependentOn("Test");
|
|
|
|
Task("Travis")
|
|
.IsDependentOn("Build")
|
|
.IsDependentOn("Test");
|
|
|
|
Task("Default")
|
|
.IsDependentOn("Build");
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// EXECUTION
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
RunTarget(target); |