csharp/build.cake (104 lines of code) (raw):

#tool nuget:?package=NUnit.ConsoleRunner&version=3.7.0 ////////////////////////////////////////////////////////////////////// // ARGUMENTS ////////////////////////////////////////////////////////////////////// var target = Argument("target", "Default"); var configuration = Argument("configuration", "Release"); ////////////////////////////////////////////////////////////////////// // PREPARATION ////////////////////////////////////////////////////////////////////// // Define directories. var csDir = "."; var gradleRootDir = ".."; var slnPath = $"{csDir}/HdDateTime.sln"; var mainProjectName = "EPAM.Deltix.HdTime"; var testProjectName = $"{mainProjectName}.Tests"; var buildDir = Directory($"{csDir}/{mainProjectName}/bin") + Directory(configuration); // Parse version from gradle.properties var gradleProperties = new Dictionary<String, String>(); foreach (var row in System.IO.File.ReadAllLines($"{gradleRootDir}/gradle.properties")) gradleProperties.Add(row.Split('=')[0], String.Join("=",row.Split('=').Skip(1).ToArray())); var version = gradleProperties["version"]; var index = version.IndexOf("-"); var dotNetVersion = (index > 0 ? version.Substring(0, index) : version) + ".0"; ////////////////////////////////////////////////////////////////////// // Helpers ////////////////////////////////////////////////////////////////////// String prjDir(String name) { return $"{csDir}/{name}"; } String prjPath(String name) { return $"{prjDir(name)}/{name}.csproj"; } String binDir(String name) { return $"{prjDir(name)}/bin/{configuration}"; } String objDir(String name) { return $"{prjDir(name)}/obj/{configuration}"; } ////////////////////////////////////////////////////////////////////// // TASKS ////////////////////////////////////////////////////////////////////// Task("Clean") .Does(() => { DotNetCoreClean(slnPath, new DotNetCoreCleanSettings { Configuration = configuration } ); CleanDirectory(binDir(mainProjectName)); }); Task("Restore-NuGet-Packages") .IsDependentOn("Clean") .Does(() => { DotNetCoreRestore(slnPath); }); Task("Build") .IsDependentOn("Restore-NuGet-Packages") .Does(() => { var settings = new DotNetCoreBuildSettings { Configuration = configuration, NoRestore = true, NoDependencies = true, MSBuildSettings = new DotNetCoreMSBuildSettings() .WithProperty("Version", version) .WithProperty("FileVersion", dotNetVersion) .WithProperty("AssemblyVersion", dotNetVersion) }; if (!IsRunningOnWindows()) settings.Framework = "netstandard2.0"; DotNetCoreBuild(prjPath(mainProjectName), settings); if (!IsRunningOnWindows()) settings.Framework = "netcoreapp2.0"; DotNetCoreBuild(prjPath(testProjectName), settings); }); Task("Run-Unit-Tests") .IsDependentOn("Build") .Does(() => { var settings = new DotNetCoreTestSettings() { Configuration = configuration, NoRestore = true, NoBuild = true }; if (!IsRunningOnWindows()) settings.Framework = "netcoreapp2.0"; Information("Running tests with .NET Core"); DotNetCoreTest(prjPath(testProjectName), settings); // Prevent NUnit tests from running on platforms without .NET 4.0 var glob = $"{binDir(testProjectName)}/net40/{testProjectName}.exe"; Information(glob); if (IsRunningOnWindows() && GetFiles(glob).Count > 0) { Information("Running NUnit tests with NUnit & .NET Framework 4.0"); NUnit3(glob); } }); Task("Pack") .IsDependentOn("Build") .Does(() => { var settings = new DotNetCorePackSettings { Configuration = configuration, OutputDirectory = $"{csDir}/artifacts/", MSBuildSettings = new DotNetCoreMSBuildSettings() .WithProperty("Version", version) .WithProperty("FileVersion", dotNetVersion) .WithProperty("AssemblyVersion", dotNetVersion) }; DotNetCorePack($"{csDir}", settings); }); Task("Publish") .IsDependentOn("Pack") .Does(() => { var url = "https://api.nuget.org/v3/index.json"; var apiKey = EnvironmentVariable("NUGET_API_KEY"); foreach (var file in GetFiles($"{csDir}/artifacts/*.nupkg")) { //context.Information("Publishing {0}...", file.Path.GetFilename().FullPath); DotNetCoreTool($"{csDir}", "nuget", "push " + file.FullPath + " --source " + url + " --api-key " + apiKey); } }); ////////////////////////////////////////////////////////////////////// // TASK TARGETS ////////////////////////////////////////////////////////////////////// Task("Default") .IsDependentOn("Run-Unit-Tests"); ////////////////////////////////////////////////////////////////////// // EXECUTION ////////////////////////////////////////////////////////////////////// RunTarget(target);