зеркало из
1
0
Форкнуть 0
nunit-silverlight/build.cake

386 строки
12 KiB
Plaintext
Исходник Обычный вид История

2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
// ARGUMENTS
//////////////////////////////////////////////////////////////////////
var target = Argument("target", "Default");
var configuration = Argument("configuration", "Debug");
//////////////////////////////////////////////////////////////////////
// SET ERROR LEVELS
//////////////////////////////////////////////////////////////////////
2016-04-06 22:58:27 +03:00
2016-02-10 19:04:01 +03:00
var ErrorDetail = new List<string>();
2016-02-14 06:18:57 +03:00
//////////////////////////////////////////////////////////////////////
// SET PACKAGE VERSION
//////////////////////////////////////////////////////////////////////
2016-10-04 04:29:20 +03:00
var version = "3.6.0";
2016-06-23 02:44:28 +03:00
var modifier = "";
//Find program files on 32-bit or 64-bit Windows
var programFiles = Environment.GetEnvironmentVariable("ProgramFiles(x86)") ?? Environment.GetEnvironmentVariable("ProgramFiles");
var isSilverlightSDKInstalled = FileExists(programFiles + "\\MSBuild\\Microsoft\\Silverlight\\v5.0\\Microsoft.Silverlight.CSharp.targets");
2015-12-23 07:01:41 +03:00
var isAppveyor = BuildSystem.IsRunningOnAppVeyor;
var dbgSuffix = configuration == "Debug" ? "-dbg" : "";
var packageVersion = version + modifier + dbgSuffix;
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
// DEFINE RUN CONSTANTS
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
var PROJECT_DIR = Context.Environment.WorkingDirectory.FullPath + "/";
var PACKAGE_DIR = PROJECT_DIR + "package/";
var BIN_DIR = PROJECT_DIR + "bin/" + configuration + "/";
var IMAGE_DIR = PROJECT_DIR + "images/";
2015-11-23 08:00:18 +03:00
var SOLUTION_FILE = "./nunit-sl.sln";
2016-06-12 17:51:41 +03:00
// Package sources for nuget restore
var PACKAGE_SOURCE = new string[]
2016-10-11 23:13:02 +03:00
{
"https://www.nuget.org/api/v2",
"https://www.myget.org/F/nunit/api/v2"
};
2016-06-12 16:48:33 +03:00
2015-11-23 08:00:18 +03:00
// Test Runners
var NUNITLITE_RUNNER = "nunitlite-runner.exe";
2015-11-23 08:00:18 +03:00
// Test Assemblies
var FRAMEWORK_TESTS = "nunit.framework.tests.dll";
var NUNITLITE_TESTS = "nunitlite.tests.dll";
2015-11-23 08:00:18 +03:00
// Packages
var SRC_PACKAGE = PACKAGE_DIR + "NUnitSL-" + version + modifier + "-src.zip";
var ZIP_PACKAGE = PACKAGE_DIR + "NUnitSL-" + packageVersion + ".zip";
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
// CLEAN
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
Task("Clean")
.Does(() =>
{
CleanDirectory(BIN_DIR);
});
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
2015-12-23 07:01:41 +03:00
// INITIALIZE FOR BUILD
//////////////////////////////////////////////////////////////////////
2015-12-23 07:01:41 +03:00
Task("InitializeBuild")
2015-11-23 08:00:18 +03:00
.Does(() =>
{
2016-10-11 23:13:02 +03:00
NuGetRestore(SOLUTION_FILE, new NuGetRestoreSettings()
{
Source = PACKAGE_SOURCE
});
if (isAppveyor)
{
var tag = AppVeyor.Environment.Repository.Tag;
if (tag.IsTag)
{
packageVersion = tag.Name;
}
else
{
var buildNumber = AppVeyor.Environment.Build.Number.ToString("00000");
var branch = AppVeyor.Environment.Repository.Branch;
var isPullRequest = AppVeyor.Environment.PullRequest.IsPullRequest;
if (branch == "master" && !isPullRequest)
{
packageVersion = version + "-dev-" + buildNumber + dbgSuffix;
}
else
{
var suffix = "-ci-" + buildNumber + dbgSuffix;
if (isPullRequest)
suffix += "-pr-" + AppVeyor.Environment.PullRequest.Number;
else if (AppVeyor.Environment.Repository.Branch.StartsWith("release", StringComparison.OrdinalIgnoreCase))
suffix += "-pre-" + buildNumber;
else
suffix += "-" + branch;
// Nuget limits "special version part" to 20 chars. Add one for the hyphen.
if (suffix.Length > 21)
suffix = suffix.Substring(0, 21);
packageVersion = version + suffix;
}
}
AppVeyor.UpdateBuildVersion(packageVersion);
}
});
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
2016-07-24 04:14:40 +03:00
// BUILD FRAMEWORKS
//////////////////////////////////////////////////////////////////////
Task("Build")
.IsDependentOn("InitializeBuild")
2016-04-06 22:58:27 +03:00
.WithCriteria(IsRunningOnWindows())
.Does(() =>
{
if(isSilverlightSDKInstalled)
{
BuildProject("src/NUnitFramework/framework/nunit.framework-sl-5.0.csproj", configuration);
BuildProject("src/NUnitFramework/nunitlite/nunitlite-sl-5.0.csproj", configuration);
BuildProject("src/NUnitFramework/mock-assembly/mock-assembly-sl-5.0.csproj", configuration);
BuildProject("src/NUnitFramework/testdata/nunit.testdata-sl-5.0.csproj", configuration);
BuildProject("src/NUnitFramework/tests/nunit.framework.tests-sl-5.0.csproj", configuration);
BuildProject("src/NUnitFramework/nunitlite.tests/nunitlite.tests-sl-5.0.csproj", configuration);
BuildProject("src/NUnitFramework/nunitlite-runner/nunitlite-runner-sl-5.0.csproj", configuration);
2016-04-06 22:58:27 +03:00
}
else
{
Warning("Silverlight build skipped because files were not present.");
2016-04-19 18:42:04 +03:00
if(isAppveyor)
throw new Exception("Running Build on Appveyor, but Silverlight not found.");
}
2016-04-06 22:58:27 +03:00
});
2016-03-17 04:21:28 +03:00
//////////////////////////////////////////////////////////////////////
// TEST
//////////////////////////////////////////////////////////////////////
Task("CheckForError")
2016-02-19 05:55:31 +03:00
.Does(() => CheckForError(ref ErrorDetail));
2016-07-24 04:14:40 +03:00
//////////////////////////////////////////////////////////////////////
// TEST FRAMEWORK
//////////////////////////////////////////////////////////////////////
Task("Test")
2016-04-06 22:58:27 +03:00
.WithCriteria(IsRunningOnWindows())
.IsDependentOn("Build")
2016-10-11 23:13:02 +03:00
.OnError(exception => { ErrorDetail.Add(exception.Message); })
2016-04-06 22:58:27 +03:00
.Does(() =>
{
if(isSilverlightSDKInstalled)
{
2016-04-06 22:58:27 +03:00
var runtime = "sl-5.0";
var dir = BIN_DIR + runtime + "/";
RunTest(dir + NUNITLITE_RUNNER, dir, FRAMEWORK_TESTS, runtime, ref ErrorDetail);
RunTest(dir + NUNITLITE_RUNNER, dir, NUNITLITE_TESTS, runtime, ref ErrorDetail);
}
else
{
Warning("Silverlight tests skipped because files were not present.");
}
2016-04-06 22:58:27 +03:00
});
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
// PACKAGE
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
var RootFiles = new FilePath[]
{
2016-04-06 22:58:27 +03:00
"LICENSE.txt",
"NOTICES.txt",
2016-10-11 19:47:20 +03:00
"CHANGES.txt"
};
var FrameworkFiles = new FilePath[]
2015-11-23 08:00:18 +03:00
{
2016-04-06 22:58:27 +03:00
"AppManifest.xaml",
"mock-assembly.dll",
"nunit.framework.dll",
"nunit.framework.xml",
"nunit.framework.tests.dll",
"nunit.framework.tests.xap",
"nunit.framework.tests_TestPage.html",
"nunit.testdata.dll",
"nunitlite.dll",
"nunitlite.tests.dll",
"slow-nunit-tests.dll",
"nunitlite-runner.exe",
};
Task("PackageSource")
.Does(() =>
2016-04-06 22:58:27 +03:00
{
CreateDirectory(PACKAGE_DIR);
RunGitCommand(string.Format("archive -o {0} HEAD", SRC_PACKAGE));
});
2015-11-23 08:00:18 +03:00
Task("CreateImage")
2016-04-06 22:58:27 +03:00
.Does(() =>
{
var currentImageDir = IMAGE_DIR + "NUnit-" + packageVersion + "/";
var imageBinDir = currentImageDir + "bin/";
CleanDirectory(currentImageDir);
CopyFiles(RootFiles, currentImageDir);
CreateDirectory(imageBinDir);
Information("Created directory " + imageBinDir);
var runtime = "sl-5.0";
var targetDir = imageBinDir + Directory(runtime);
var sourceDir = BIN_DIR + Directory(runtime);
CreateDirectory(targetDir);
foreach (FilePath file in FrameworkFiles)
2016-04-06 22:58:27 +03:00
{
var sourcePath = sourceDir + "/" + file;
if (FileExists(sourcePath))
CopyFileToDirectory(sourcePath, targetDir);
2016-04-06 22:58:27 +03:00
}
});
2016-07-24 04:14:40 +03:00
Task("PackageFramework")
2016-04-06 22:58:27 +03:00
.IsDependentOn("CreateImage")
.Does(() =>
{
var currentImageDir = IMAGE_DIR + "NUnit-" + packageVersion + "/";
CreateDirectory(PACKAGE_DIR);
NuGetPack("nuget/framework/nunitSL.nuspec", new NuGetPackSettings()
{
Version = packageVersion,
BasePath = currentImageDir,
OutputDirectory = PACKAGE_DIR
});
NuGetPack("nuget/nunitlite/nunitliteSL.nuspec", new NuGetPackSettings()
{
Version = packageVersion,
BasePath = currentImageDir,
OutputDirectory = PACKAGE_DIR
});
2016-07-24 04:14:40 +03:00
});
2016-04-06 22:58:27 +03:00
2016-07-24 04:14:40 +03:00
Task("PackageZip")
.IsDependentOn("CreateImage")
.Does(() =>
{
CreateDirectory(PACKAGE_DIR);
var currentImageDir = IMAGE_DIR + "NUnit-" + packageVersion + "/";
var zipFiles =
GetFiles(currentImageDir + "*.*") +
GetFiles(currentImageDir + "bin/sl-5.0/*.*");
Zip(currentImageDir, File(ZIP_PACKAGE), zipFiles);
2016-04-06 22:58:27 +03:00
});
2016-10-11 19:47:20 +03:00
//////////////////////////////////////////////////////////////////////
// UPLOAD ARTIFACTS
//////////////////////////////////////////////////////////////////////
Task("UploadArtifacts")
2016-10-11 23:13:02 +03:00
.IsDependentOn("Package")
2016-10-11 19:47:20 +03:00
.Does(() =>
{
2016-10-11 23:13:02 +03:00
UploadArtifacts(PACKAGE_DIR, "*.nupkg");
UploadArtifacts(PACKAGE_DIR, "*.zip");
});
2016-10-11 19:47:20 +03:00
2016-02-10 18:39:14 +03:00
//////////////////////////////////////////////////////////////////////
// SETUP AND TEARDOWN TASKS
//////////////////////////////////////////////////////////////////////
2016-10-11 19:47:20 +03:00
Teardown(context => CheckForError(ref ErrorDetail));
//////////////////////////////////////////////////////////////////////
// HELPER METHODS - GENERAL
//////////////////////////////////////////////////////////////////////
void RunGitCommand(string arguments)
{
2016-04-06 22:58:27 +03:00
StartProcess("git", new ProcessSettings()
{
Arguments = arguments
});
}
2016-10-11 19:47:20 +03:00
void UploadArtifacts(string packageDir, string searchPattern)
{
2016-10-11 23:13:02 +03:00
foreach(var zip in System.IO.Directory.GetFiles(packageDir, searchPattern))
AppVeyor.UploadArtifact(zip);
2016-10-11 19:47:20 +03:00
}
2016-02-14 06:18:57 +03:00
void CheckForError(ref List<string> errorDetail)
{
2016-03-06 00:09:11 +03:00
if(errorDetail.Count != 0)
2016-02-14 07:00:12 +03:00
{
var copyError = new List<string>();
copyError = errorDetail.Select(s => s).ToList();
errorDetail.Clear();
2016-03-10 13:36:50 +03:00
throw new Exception("One or more unit tests failed, breaking the build.\n"
2016-02-14 07:00:12 +03:00
+ copyError.Aggregate((x,y) => x + "\n" + y));
}
}
//////////////////////////////////////////////////////////////////////
// HELPER METHODS - BUILD
//////////////////////////////////////////////////////////////////////
void BuildProject(string projectPath, string configuration)
2016-10-11 19:47:20 +03:00
{
if(!IsRunningOnWindows()) return;
MSBuild(projectPath, new MSBuildSettings()
.SetConfiguration(configuration)
.SetMSBuildPlatform(MSBuildPlatform.x86)
.UseToolVersion(MSBuildToolVersion.Default)
2016-10-11 19:47:20 +03:00
.SetVerbosity(Verbosity.Minimal)
.SetNodeReuse(false));
}
2016-03-06 00:09:11 +03:00
//////////////////////////////////////////////////////////////////////
// HELPER METHODS - TEST
//////////////////////////////////////////////////////////////////////
2016-02-14 06:18:57 +03:00
void RunTest(FilePath exePath, DirectoryPath workingDir, string arguments, string framework, ref List<string> errorDetail)
2015-11-23 08:00:18 +03:00
{
2016-04-06 22:58:27 +03:00
int rc = StartProcess(
MakeAbsolute(exePath),
new ProcessSettings()
{
Arguments = arguments,
WorkingDirectory = workingDir
});
if (rc > 0)
2016-10-11 19:47:20 +03:00
errorDetail.Add(string.Format("{0}: {1} tests failed", framework, rc));
2016-04-06 22:58:27 +03:00
else if (rc < 0)
2016-02-14 06:18:57 +03:00
errorDetail.Add(string.Format("{0} returned rc = {1}", exePath, rc));
2015-11-23 08:00:18 +03:00
}
2016-06-23 09:59:15 +03:00
//////////////////////////////////////////////////////////////////////
2015-11-23 08:00:18 +03:00
// TASK TARGETS
//////////////////////////////////////////////////////////////////////
Task("Rebuild")
.IsDependentOn("Clean")
2016-04-06 22:58:27 +03:00
.IsDependentOn("Build");
2015-11-23 08:00:18 +03:00
Task("Package")
.IsDependentOn("CheckForError")
2016-07-24 04:14:40 +03:00
.IsDependentOn("PackageFramework")
.IsDependentOn("PackageZip");
Task("Appveyor")
2016-04-06 22:58:27 +03:00
.IsDependentOn("Build")
.IsDependentOn("Test")
2016-10-11 19:47:20 +03:00
.IsDependentOn("Package")
2016-10-11 23:13:02 +03:00
.IsDependentOn("UploadArtifacts");
2015-11-23 08:00:18 +03:00
Task("Default")
2016-10-11 19:47:20 +03:00
.IsDependentOn("Build");
2015-11-23 08:00:18 +03:00
//////////////////////////////////////////////////////////////////////
// EXECUTION
//////////////////////////////////////////////////////////////////////
RunTarget(target);