Content/tasks.build.cake (88 lines of code) (raw):

#addin "Cake.FileHelpers&version=3.2.0" Sitecore.Tasks.GenerateVersionFileTask = Task("Build :: Generate Version.txt file") .Description("Creates a file with detailed information about the build in publishing target directory (`PUBLISHING_TARGET_DIR`)") .Does(() => { Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.PublishingTargetDir, "PublishingTargetDir", "PUBLISHING_TARGET_DIR"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.ReleaseVersion, "ReleaseVersion", "RELEASE_VERSION"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.BranchName, "BranchName", "BRANCH_NAME"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.Commit, "Commit", "COMMIT"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.BuildNumber, "BuildNumber", "BUILD_NUMBER"); EnsureDirectoryExists(Sitecore.Parameters.PublishingTargetDir); var file = $"{Sitecore.Parameters.PublishingTargetDir}/version.txt"; string[] lines = { $"Version: {Sitecore.Parameters.ReleaseVersion}", $"Branch: {Sitecore.Parameters.BranchName}", $"Commit: {Sitecore.Parameters.Commit}", $"Build: {Sitecore.Parameters.BuildNumber}", "", $"TimeStamp: {System.DateTime.UtcNow.ToString()}" }; System.IO.File.WriteAllLines(file, lines); }); Sitecore.Tasks.SetPackageJsonVersionTask = Task("Build :: Set Version in package.json") .Description("Updates version in `packages.json` with current build version (`VERSION`)") .Does(() => { Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.SrcDir, "SrcDir", "SRC_DIR"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.ReleaseVersion, "Version", "VERSION"); var file = $"{Sitecore.Parameters.SrcDir}/package.json"; ReplaceRegexInFiles(file, "(?<=\"version\": \")(.+?)(?=\",)", Sitecore.Parameters.ReleaseVersion); }); Sitecore.Tasks.SetAssemblyVersionTask = Task("Build :: Set Version in Assembly.cs files") .Description("Updates `Assembly.cs` version(`ASSEMBLY_VERSION`)before the build in each project in source directory (`SRC_DIR`)") .Does(() => { Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.SrcDir, "SrcDir", "SRC_DIR"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.AssemblyVersion, "AssemblyVersion", "ASSEMBLY_VERSION"); var files = GetFiles($"{Sitecore.Parameters.SrcDir}/**/AssemblyInfo.cs"); foreach(var file in files) { ReplaceRegexInFiles(file.ToString(), "(?<=Assembly(File)?Version\\(\")(.+?)(?=\"\\))", Sitecore.Parameters.AssemblyVersion); } }); // As of now it is expected that task will be excuted on the build server Sitecore.Tasks.DownloadLicenseFileTask = Task("Build :: Download License File") .Description("Download license file from remote address (`SC_LICENSE_URI`) to the (`ROOT_DIR`)") .Does(() => { Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.BuildConfiguration, "BuildConfiguration", "BUILD_CONFIGURATION"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.RootDir, "RootDir", "ROOT_DIR"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.ScLicenseUri, "ScLicenseUri", "SC_LICENSE_URI"); var license_file_token = ArgumentOrEnvironmentVariable("SC_LICENSE_TOKEN", "", ""); var license_file_uri = ArgumentOrEnvironmentVariable("SC_LICENSE_URI", "", ""); var url = $"{license_file_uri}" + $"{license_file_token}"; DownloadFile(url, $"{Sitecore.Parameters.RootDir}/license.xml"); }); // As of now it is expected that your packages.json file will have tasks "sc:codegen" to use code generation Sitecore.Tasks.GenerateCodeTask = Task("Build :: Generate Code") .Description("Executes JS plugin to parse Unicorn files via `npm run` and generate code.") .Does(() => { Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.SrcDir, "SrcDir", "SRC_DIR"); var settings = new NpmRunScriptSettings(); settings.ScriptName = "sc:codegen"; // TODO: move to configurations settings.LogLevel = NpmLogLevel.Error; settings.FromPath(Sitecore.Parameters.SrcDir); NpmRunScript(settings); }); // As of now it is expected that your packages.json file will have tasks "build:Debug" or "build:Release" Sitecore.Tasks.BuildClientCodeTask = Task("Build :: Build Client Code") .Description("Executes front-end code build via calling `npm run build:<your build configuration>`.") .Does(() => { Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.SrcDir, "SrcDir", "SRC_DIR"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.BuildConfiguration, "BuildConfiguration", "BUILD_CONFIGURATION"); var settings = new NpmRunScriptSettings(); settings.ScriptName = $"build:{Sitecore.Parameters.BuildConfiguration}"; // TODO: move to configurations settings.LogLevel = NpmLogLevel.Error; settings.FromPath(Sitecore.Parameters.SrcDir); NpmRunScript(settings); }); Sitecore.Tasks.BuildServerCodeTask = Task("Build :: Build Server Code") .Description("Runs MsBuild for a solution (`SOLUTION_FILE_PATH`) with a specific build configuration (`BUILD_CONFIGURATION`)") .Does(() => { Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.BuildConfiguration, "BuildConfiguration", "BUILD_CONFIGURATION"); Sitecore.Utils.AssertIfNullOrEmpty(Sitecore.Parameters.SolutionFilePath, "SolutionFilePath", "SOLUTION_FILE_PATH"); var msBuildConfig = new MSBuildSettings() .SetConfiguration(Sitecore.Parameters.BuildConfiguration) .SetVerbosity(Verbosity.Minimal) // TODO: figure out how to get access to -Verbosity flag .UseToolVersion(Sitecore.Parameters.MsBuildToolVersion) .SetMaxCpuCount(new int?()) // TODO: make configurable .WithTarget("Rebuild"); // TODO: move to configuration MSBuild(Sitecore.Parameters.SolutionFilePath, msBuildConfig); });