|
| 1 | +#region Build |
| 2 | + |
| 3 | +Task("Clean") |
| 4 | + .Does<BuildParameters>((parameters) => |
| 5 | +{ |
| 6 | + Information("Cleaning directories.."); |
| 7 | + |
| 8 | + CleanDirectories("./src/**/bin/" + parameters.Configuration); |
| 9 | + CleanDirectories("./src/**/obj"); |
| 10 | + CleanDirectories("./src/GitVersionTfsTask/scripts/**"); |
| 11 | + |
| 12 | + DeleteFiles("src/GitVersionTfsTask/*.vsix"); |
| 13 | + DeleteFiles("src/GitVersionRubyGem/*.gem"); |
| 14 | + |
| 15 | + CleanDirectories(parameters.Paths.Directories.ToClean); |
| 16 | +}); |
| 17 | + |
| 18 | +// This build task can be run to just build |
| 19 | +Task("DogfoodBuild") |
| 20 | + .IsDependentOn("Clean") |
| 21 | + .Does<BuildParameters>((parameters) => |
| 22 | +{ |
| 23 | + Build(parameters.Configuration); |
| 24 | +}); |
| 25 | + |
| 26 | +Task("Build") |
| 27 | + .IsDependentOn("Clean") |
| 28 | + .Does<BuildParameters>((parameters) => |
| 29 | +{ |
| 30 | + Build(parameters.Configuration); |
| 31 | +}); |
| 32 | + |
| 33 | +#endregion |
| 34 | + |
| 35 | +#region Tests |
| 36 | + |
| 37 | +Task("Test") |
| 38 | + .WithCriteria<BuildParameters>((context, parameters) => parameters.EnabledUnitTests, "Unit tests were disabled.") |
| 39 | + .IsDependentOn("Build") |
| 40 | + .Does<BuildParameters>((parameters) => |
| 41 | +{ |
| 42 | + var framework = parameters.FullFxVersion; |
| 43 | + |
| 44 | + // run using dotnet test |
| 45 | + var projects = GetFiles("./src/**/*.Tests.csproj"); |
| 46 | + foreach(var project in projects) |
| 47 | + { |
| 48 | + var settings = new DotNetCoreTestSettings |
| 49 | + { |
| 50 | + Framework = framework, |
| 51 | + NoBuild = true, |
| 52 | + NoRestore = true, |
| 53 | + Configuration = parameters.Configuration |
| 54 | + }; |
| 55 | + |
| 56 | + var coverletSettings = new CoverletSettings { |
| 57 | + CollectCoverage = true, |
| 58 | + CoverletOutputFormat = CoverletOutputFormat.opencover, |
| 59 | + CoverletOutputDirectory = parameters.Paths.Directories.TestCoverageOutput + "/", |
| 60 | + CoverletOutputName = $"{project.GetFilenameWithoutExtension()}.coverage.xml" |
| 61 | + }; |
| 62 | + |
| 63 | + if (IsRunningOnUnix()) |
| 64 | + { |
| 65 | + settings.Filter = "TestCategory!=NoMono"; |
| 66 | + } |
| 67 | + |
| 68 | + DotNetCoreTest(project.FullPath, settings, coverletSettings); |
| 69 | + } |
| 70 | + |
| 71 | + // run using NUnit |
| 72 | + var testAssemblies = GetFiles("./src/**/bin/" + parameters.Configuration + "/" + framework + "/*.Tests.dll"); |
| 73 | + |
| 74 | + var nunitSettings = new NUnit3Settings |
| 75 | + { |
| 76 | + Results = new List<NUnit3Result> { new NUnit3Result { FileName = parameters.Paths.Files.TestCoverageOutputFilePath } } |
| 77 | + }; |
| 78 | + |
| 79 | + if(IsRunningOnUnix()) { |
| 80 | + nunitSettings.Where = "cat!=NoMono"; |
| 81 | + nunitSettings.Agents = 1; |
| 82 | + } |
| 83 | + |
| 84 | + NUnit3(testAssemblies, nunitSettings); |
| 85 | +}); |
| 86 | + |
| 87 | +#endregion |
| 88 | + |
| 89 | +#region Package |
| 90 | + |
| 91 | +Task("Copy-Files") |
| 92 | + .IsDependentOn("Test") |
| 93 | + .Does<BuildParameters>((parameters) => |
| 94 | +{ |
| 95 | + // .NET Core |
| 96 | + var coreFxDir = parameters.Paths.Directories.ArtifactsBinCoreFx.Combine("tools"); |
| 97 | + DotNetCorePublish("./src/GitVersionExe/GitVersionExe.csproj", new DotNetCorePublishSettings |
| 98 | + { |
| 99 | + Framework = parameters.CoreFxVersion, |
| 100 | + NoRestore = true, |
| 101 | + Configuration = parameters.Configuration, |
| 102 | + OutputDirectory = coreFxDir, |
| 103 | + MSBuildSettings = parameters.MSBuildSettings |
| 104 | + }); |
| 105 | + |
| 106 | + // Copy license & Copy GitVersion.XML (since publish does not do this anymore) |
| 107 | + CopyFileToDirectory("./LICENSE", coreFxDir); |
| 108 | + CopyFileToDirectory($"./src/GitVersionExe/bin/{parameters.Configuration}/{parameters.CoreFxVersion}/GitVersion.xml", coreFxDir); |
| 109 | + |
| 110 | + // .NET Framework |
| 111 | + DotNetCorePublish("./src/GitVersionExe/GitVersionExe.csproj", new DotNetCorePublishSettings |
| 112 | + { |
| 113 | + Framework = parameters.FullFxVersion, |
| 114 | + NoBuild = true, |
| 115 | + NoRestore = true, |
| 116 | + Configuration = parameters.Configuration, |
| 117 | + OutputDirectory = parameters.Paths.Directories.ArtifactsBinFullFx, |
| 118 | + MSBuildSettings = parameters.MSBuildSettings |
| 119 | + }); |
| 120 | + |
| 121 | + DotNetCorePublish("./src/GitVersionTask/GitVersionTask.csproj", new DotNetCorePublishSettings |
| 122 | + { |
| 123 | + Framework = parameters.FullFxVersion, |
| 124 | + NoBuild = true, |
| 125 | + NoRestore = true, |
| 126 | + Configuration = parameters.Configuration, |
| 127 | + MSBuildSettings = parameters.MSBuildSettings |
| 128 | + }); |
| 129 | + |
| 130 | + // .NET Core |
| 131 | + DotNetCorePublish("./src/GitVersionTask/GitVersionTask.csproj", new DotNetCorePublishSettings |
| 132 | + { |
| 133 | + Framework = parameters.CoreFxVersion, |
| 134 | + NoBuild = true, |
| 135 | + NoRestore = true, |
| 136 | + Configuration = parameters.Configuration, |
| 137 | + MSBuildSettings = parameters.MSBuildSettings |
| 138 | + }); |
| 139 | + var ilMergeDir = parameters.Paths.Directories.ArtifactsBinFullFxILMerge; |
| 140 | + var portableDir = parameters.Paths.Directories.ArtifactsBinFullFxPortable.Combine("tools"); |
| 141 | + var cmdlineDir = parameters.Paths.Directories.ArtifactsBinFullFxCmdline.Combine("tools"); |
| 142 | + |
| 143 | + // Portable |
| 144 | + PublishILRepackedGitVersionExe(true, parameters.Paths.Directories.ArtifactsBinFullFx, ilMergeDir, portableDir, parameters.Configuration, parameters.FullFxVersion); |
| 145 | + // Commandline |
| 146 | + PublishILRepackedGitVersionExe(false, parameters.Paths.Directories.ArtifactsBinFullFx, ilMergeDir, cmdlineDir, parameters.Configuration, parameters.FullFxVersion); |
| 147 | + |
| 148 | + // Vsix |
| 149 | + var vsixPath = new DirectoryPath("./src/GitVersionTfsTask/GitVersionTask"); |
| 150 | + |
| 151 | + var vsixPathFull = vsixPath.Combine("full"); |
| 152 | + EnsureDirectoryExists(vsixPathFull); |
| 153 | + CopyFileToDirectory(portableDir + "/" + "LibGit2Sharp.dll.config", vsixPathFull); |
| 154 | + CopyFileToDirectory(portableDir + "/" + "GitVersion.exe", vsixPathFull); |
| 155 | + CopyDirectory(portableDir.Combine("lib"), vsixPathFull.Combine("lib")); |
| 156 | + |
| 157 | + // Vsix dotnet core |
| 158 | + var vsixPathCore = vsixPath.Combine("core"); |
| 159 | + EnsureDirectoryExists(vsixPathCore); |
| 160 | + CopyDirectory(coreFxDir, vsixPathCore); |
| 161 | + |
| 162 | + // Ruby Gem |
| 163 | + var gemPath = new DirectoryPath("./src/GitVersionRubyGem/bin"); |
| 164 | + EnsureDirectoryExists(gemPath); |
| 165 | + CopyFileToDirectory(portableDir + "/" + "LibGit2Sharp.dll.config", gemPath); |
| 166 | + CopyFileToDirectory(portableDir + "/" + "GitVersion.exe", gemPath); |
| 167 | + CopyDirectory(portableDir.Combine("lib"), gemPath.Combine("lib")); |
| 168 | +}); |
| 169 | + |
| 170 | +Task("Pack-Vsix") |
| 171 | + .IsDependentOn("Copy-Files") |
| 172 | + .Does<BuildParameters>((parameters) => |
| 173 | +{ |
| 174 | + var workDir = "./src/GitVersionTfsTask"; |
| 175 | + var idSuffix = parameters.IsStableRelease() ? "" : "-preview"; |
| 176 | + var titleSuffix = parameters.IsStableRelease() ? "" : " (Preview)"; |
| 177 | + var visibility = parameters.IsStableRelease() ? "Public" : "Preview"; |
| 178 | + var taskId = parameters.IsStableRelease() ? "e5983830-3f75-11e5-82ed-81492570a08e" : "25b46667-d5a9-4665-97f7-e23de366ecdf"; |
| 179 | + |
| 180 | + ReplaceTextInFile(new FilePath(workDir + "/vss-extension.json"), "$idSuffix$", idSuffix); |
| 181 | + ReplaceTextInFile(new FilePath(workDir + "/vss-extension.json"), "$titleSuffix$", titleSuffix); |
| 182 | + ReplaceTextInFile(new FilePath(workDir + "/vss-extension.json"), "$visibility$", visibility); |
| 183 | + |
| 184 | + // update version number |
| 185 | + ReplaceTextInFile(new FilePath(workDir + "/vss-extension.json"), "$version$", parameters.Version.VsixVersion); |
| 186 | + UpdateTaskVersion(new FilePath(workDir + "/GitVersionTask/task.json"), taskId, parameters.Version.GitVersion); |
| 187 | + |
| 188 | + // build and pack |
| 189 | + NpmSet(new NpmSetSettings { WorkingDirectory = workDir, LogLevel = NpmLogLevel.Silent, Key = "progress", Value = "false" }); |
| 190 | + NpmInstall(new NpmInstallSettings { WorkingDirectory = workDir, LogLevel = NpmLogLevel.Silent }); |
| 191 | + NpmRunScript(new NpmRunScriptSettings { WorkingDirectory = workDir, LogLevel = NpmLogLevel.Silent, ScriptName = "build" }); |
| 192 | + |
| 193 | + var settings = new TfxExtensionCreateSettings |
| 194 | + { |
| 195 | + ToolPath = workDir + "/node_modules/.bin/" + (parameters.IsRunningOnWindows ? "tfx.cmd" : "tfx"), |
| 196 | + WorkingDirectory = workDir, |
| 197 | + OutputPath = parameters.Paths.Directories.BuildArtifact |
| 198 | + }; |
| 199 | + |
| 200 | + settings.ManifestGlobs = new List<string>(){ "vss-extension.json" }; |
| 201 | + TfxExtensionCreate(settings); |
| 202 | +}); |
| 203 | + |
| 204 | +Task("Pack-Gem") |
| 205 | + .IsDependentOn("Copy-Files") |
| 206 | + .Does<BuildParameters>((parameters) => |
| 207 | +{ |
| 208 | + var workDir = "./src/GitVersionRubyGem"; |
| 209 | + |
| 210 | + var gemspecFile = new FilePath(workDir + "/gitversion.gemspec"); |
| 211 | + // update version number |
| 212 | + ReplaceTextInFile(gemspecFile, "$version$", parameters.Version.GemVersion); |
| 213 | + |
| 214 | + var toolPath = FindToolInPath(IsRunningOnWindows() ? "gem.cmd" : "gem"); |
| 215 | + GemBuild(gemspecFile, new Cake.Gem.Build.GemBuildSettings() |
| 216 | + { |
| 217 | + WorkingDirectory = workDir, |
| 218 | + ToolPath = toolPath |
| 219 | + }); |
| 220 | + |
| 221 | + CopyFiles(workDir + "/*.gem", parameters.Paths.Directories.BuildArtifact); |
| 222 | +}); |
| 223 | + |
| 224 | +Task("Pack-Nuget") |
| 225 | + .IsDependentOn("Copy-Files") |
| 226 | + .Does<BuildParameters>((parameters) => |
| 227 | +{ |
| 228 | + foreach(var package in parameters.Packages.Nuget) |
| 229 | + { |
| 230 | + if (FileExists(package.NuspecPath)) { |
| 231 | + var artifactPath = MakeAbsolute(parameters.PackagesBuildMap[package.Id]).FullPath; |
| 232 | + |
| 233 | + var nugetSettings = new NuGetPackSettings |
| 234 | + { |
| 235 | + Version = parameters.Version.NugetVersion, |
| 236 | + NoPackageAnalysis = true, |
| 237 | + OutputDirectory = parameters.Paths.Directories.NugetRoot, |
| 238 | + Files = GetFiles(artifactPath + "/**/*.*") |
| 239 | + .Select(file => new NuSpecContent { Source = file.FullPath, Target = file.FullPath.Replace(artifactPath, "") }) |
| 240 | + .ToArray() |
| 241 | + }; |
| 242 | + |
| 243 | + NuGetPack(package.NuspecPath, nugetSettings); |
| 244 | + } |
| 245 | + } |
| 246 | + |
| 247 | + var settings = new DotNetCorePackSettings |
| 248 | + { |
| 249 | + Configuration = parameters.Configuration, |
| 250 | + OutputDirectory = parameters.Paths.Directories.NugetRoot, |
| 251 | + NoBuild = true, |
| 252 | + NoRestore = true, |
| 253 | + MSBuildSettings = parameters.MSBuildSettings |
| 254 | + }; |
| 255 | + |
| 256 | + // GitVersionCore, GitVersionTask, & global tool |
| 257 | + DotNetCorePack("./src/GitVersionCore", settings); |
| 258 | + DotNetCorePack("./src/GitVersionTask", settings); |
| 259 | + DotNetCorePack("./src/GitVersionExe/GitVersion.Tool.csproj", settings); |
| 260 | +}); |
| 261 | + |
| 262 | +Task("Pack-Chocolatey") |
| 263 | + .WithCriteria<BuildParameters>((context, parameters) => parameters.IsRunningOnWindows, "Pack-Chocolatey works only on Windows agents.") |
| 264 | + .WithCriteria<BuildParameters>((context, parameters) => parameters.IsMainBranch, "Pack-Chocolatey works only for main branch.") |
| 265 | + .IsDependentOn("Copy-Files") |
| 266 | + .Does<BuildParameters>((parameters) => |
| 267 | +{ |
| 268 | + foreach(var package in parameters.Packages.Chocolatey) |
| 269 | + { |
| 270 | + if (FileExists(package.NuspecPath)) { |
| 271 | + var artifactPath = MakeAbsolute(parameters.PackagesBuildMap[package.Id]).FullPath; |
| 272 | + |
| 273 | + var files = GetFiles(artifactPath + "/**/*.*") |
| 274 | + .Select(file => new ChocolateyNuSpecContent { Source = file.FullPath, Target = file.FullPath.Replace(artifactPath, "") }); |
| 275 | + var txtFiles = (GetFiles("./nuspec/*.txt") + GetFiles("./nuspec/*.ps1")) |
| 276 | + .Select(file => new ChocolateyNuSpecContent { Source = file.FullPath, Target = file.GetFilename().ToString() }); |
| 277 | + |
| 278 | + ChocolateyPack(package.NuspecPath, new ChocolateyPackSettings { |
| 279 | + Verbose = true, |
| 280 | + Version = parameters.Version.SemVersion, |
| 281 | + OutputDirectory = parameters.Paths.Directories.NugetRoot, |
| 282 | + Files = files.Concat(txtFiles).ToArray() |
| 283 | + }); |
| 284 | + } |
| 285 | + } |
| 286 | +}); |
| 287 | + |
| 288 | +Task("Zip-Files") |
| 289 | + .IsDependentOn("Copy-Files") |
| 290 | + .Does<BuildParameters>((parameters) => |
| 291 | +{ |
| 292 | + // .NET Framework |
| 293 | + var cmdlineDir = parameters.Paths.Directories.ArtifactsBinFullFxCmdline.Combine("tools"); |
| 294 | + var fullFxFiles = GetFiles(cmdlineDir.FullPath + "/**/*"); |
| 295 | + Zip(cmdlineDir, parameters.Paths.Files.ZipArtifactPathDesktop, fullFxFiles); |
| 296 | + |
| 297 | + // .NET Core |
| 298 | + var coreFxDir = parameters.Paths.Directories.ArtifactsBinCoreFx.Combine("tools"); |
| 299 | + var coreclrFiles = GetFiles(coreFxDir.FullPath + "/**/*"); |
| 300 | + Zip(coreFxDir, parameters.Paths.Files.ZipArtifactPathCoreClr, coreclrFiles); |
| 301 | +}); |
| 302 | +#endregion |
0 commit comments