Content/parameters.cake (261 lines of code) (raw):

using Cake.Common.Tools.MSBuild; using System; using System.Text.RegularExpressions; public static partial class Sitecore { public static partial class Parameters { private const string SEM_VER_REGEX = "\\d+\\.\\d+\\.\\d+"; private static ICakeContext _context; public static MSBuildToolVersion MsBuildToolVersion { get; private set; } public static string BuildConfiguration { get; private set; } public static string SolutionName { get; private set; } public static string XUnitTestsRunInParallel { get; private set; } public static bool SupportHelix20 { get; private set; } public static string ScAdminUser { get; private set; } public static string ScAdminPassword { get; private set; } public static string ScBasicAuth { get; private set; } public static string ScNodeEnv { get; private set; } public static string ScNodeRole { get; private set; } public static string ScSiteUrl { get; private set; } public static string ScLicenseUri { get; private set; } public static string ScLicenseToken { get; private set; } public static string ReleaseVersion { get; private set; } public static string AssemblyVersion { get; private set; } public static string Branch { get; private set; } public static string BranchName { get; private set; } public static string Commit { get; private set; } public static string BuildId { get; private set; } public static string BuildName { get; private set; } public static string BuildNumber { get; private set; } public static string RootDir { get; private set; } public static string LibsDir { get; private set; } public static string LibsPackagesDir { get; private set; } public static string LibsNuGetDir { get; private set; } public static string LibsSpeDir { get; private set; } public static string LibsShipDir { get; private set; } public static string BuildDir { get; private set; } public static string SrcDir { get; private set; } public static string SrcConfigFiles { get; private set; } public static string SrcConfigsDir { get; private set; } public static string SrcScriptsDir { get; private set; } public static string SrcScriptsGitDir { get; private set; } public static string ArtifactsDir { get; private set; } public static string ArtifactsBuildDir { get; private set; } public static string ArtifactsLibsPackagesDir { get; private set; } public static string ArtifactsSrcDir { get; private set; } public static string ArtifactsSrcConfigsDir { get; private set; } public static string ArtifactsSrcScriptsDir { get; private set; } public static string ArtifactsSrcScriptsUnicornDir { get; private set; } public static string OutputDir { get; private set; } public static string TestsOutputDir { get; private set; } public static string TestsCoverageOutputDir { get; private set; } public static bool TestsFailImmediately { get; private set; } public static string XUnitTestsCoverageOutputDir { get; private set; } public static string XUnitTestsCoverageRegister { get; private set; } public static string XUnitTestsCoverageExcludeAttributeFilters { get; private set; } public static string XUnitTestsCoverageExcludeFileFilters { get; private set; } public static string XUnitTestsCoverageExcludeDirectories { get; private set; } public static bool XUnitShadowCopy { get; private set; } public static string JestTestsCoverageOutputDir { get; private set; } public static bool PublishSerializationItems { get; private set; } public static string PublishingTargetDir { get; private set; } public static string ScLocalWebsiteRootDir { get; private set; } public static string NuGetConfigPath { get; private set; } public static string SolutionFilePath { get; private set; } public static string UnicornConfigPath { get; private set; } public static string UnicornConfigurations { get; private set; } public static string UnicornSecret { get; private set; } public static string UnicornSerializationRoot { get; private set; } public static void InitParams( ICakeContext context, MSBuildToolVersion msBuildToolVersion, // Add support of defining parameters in code string buildConfiguration = null, string solutionName = null, string supportHelix20 = null, string xUnitTestsRunInParallel = null, string scAdminUser = null, string scAdminPassword = null, string scBasicAuth = null, string scNodeEnv = null, string scNodeRole = null, string scSiteUrl = null, string scLicenseUri = null, string scLicenseToken = null, string branch = null, string branchName = null, string commit = null, string releaseVersion = null, string assemblyVersion = null, string buildId = null, string buildName = null, string buildNumber = null, string rootDir = null, string libsDir = null, string libsPackagesDir = null, string libsNuGetDir = null, string libsSpeDir = null, string libsShipDir = null, string buildDir = null, string srcDir = null, string srcConfigFiles = null, string srcConfigsDir = null, string srcScriptsDir = null, string srcScriptsGitDir = null, string artifactsDir = null, string artifactsBuildDir = null, string artifactsLibsPackagesDir = null, string artifactsSrcDir = null, string artifactsSrcConfigsDir = null, string artifactsSrcScriptsDir = null, string artifactsSrcScriptsUnicornDir = null, string outputDir = null, string testsOutputDir = null, string testsCoverageOutputDir = null, string testsFailImmediately = null, string xUnitTestsCoverageOutputDir = null, string xUnitTestsCoverageRegister = null, string xUnitTestsCoverageExcludeAttributeFilters = null, string xUnitTestsCoverageExcludeFileFilters = null, string xUnitTestsCoverageExcludeDirectories = null, string xUnitShadowCopy = null, string jestTestsCoverageOutputDir = null, string publishSerializationItems = null, string publishingTargetDir = null, string nuGetConfigPath = null, string solutionFilePath = null, string unicornConfigPath = null, string unicornConfigurations = null, string unicornSecret = null, string unicornSerializationRoot = null, string scLocalWebsiteRootDir = null ) { _context = context; MsBuildToolVersion = msBuildToolVersion; // Generic parameters BuildConfiguration = GetParameterValue(Constants.BUILD_CONFIGURATION, buildConfiguration ?? "Debug"); SolutionName = GetParameterValue(Constants.SOLUTION_NAME, solutionName ?? ""); SupportHelix20 = ToBoolean(GetParameterValue(Constants.SUPPORT_HELIX_20, supportHelix20 ?? "false")); XUnitTestsRunInParallel = GetParameterValue(Constants.XUNIT_TESTS_RUN_IN_PARALLEL, xUnitTestsRunInParallel ?? ""); // Sitecore parameters ScAdminUser = GetParameterValue(Constants.SC_ADMIN_USER, scAdminUser ?? "admin"); ScAdminPassword = GetParameterValue(Constants.SC_ADMIN_PASSWORD, scAdminPassword ?? "b"); ScBasicAuth = GetParameterValue(Constants.SC_BASICAUTH, scBasicAuth ?? ""); ScNodeEnv = GetParameterValue(Constants.SC_NODE_ENV, scNodeEnv ?? "local|standalone"); ScNodeRole = GetParameterValue(Constants.SC_NODE_ROLE, scNodeRole ?? "cm"); ScSiteUrl = GetParameterValue(Constants.SC_SITE_URL, scSiteUrl ?? ""); ScLicenseUri = GetParameterValue(Constants.SC_LICENSE_URI, scLicenseUri ?? "https://{sc_license_uri}"); ScLicenseToken = GetParameterValue(Constants.SC_LICENSE_TOKEN, scLicenseToken ?? ""); // Source Control Branch = GetParameterValue(Constants.BRANCH, branch ?? "develop"); BranchName = GetParameterValue(Constants.BRANCH_NAME, branchName ?? "develop"); Commit = GetParameterValue(Constants.COMMIT, commit ?? ""); //Build info BuildId = GetParameterValue(Constants.BUILD_ID, buildId ?? "0"); BuildName = GetParameterValue(Constants.BUILD_NAME, buildName ?? ""); BuildNumber = GetParameterValue(Constants.BUILD_NUMBER, buildNumber ?? "n/a"); // Versioning ReleaseVersion = GetVersion( releaseVersion ?? "0.0.0"); AssemblyVersion = GetAssemblyVersion( assemblyVersion ?? "0.0.0"); //Build server RootDir = GetAbsoluteDirPath(GetParameterValue(Constants.ROOT_DIR, rootDir ?? "./..")); LibsDir = GetAbsoluteDirPath(GetParameterValue(Constants.LIBS_DIR, libsDir ?? $"{RootDir}/libs")); LibsPackagesDir = GetAbsoluteDirPath(GetParameterValue(Constants.LIBS_PACKAGES_DIR, libsPackagesDir ?? $"{LibsDir}/packages")); LibsNuGetDir = GetAbsoluteDirPath(GetParameterValue(Constants.LIBS_NUGET_DIR, libsNuGetDir ?? $"{LibsDir}/nuget")); LibsSpeDir = GetAbsoluteDirPath(GetParameterValue(Constants.LIBS_SPE_DIR, libsSpeDir ?? $"{LibsDir}/spe")); LibsShipDir = GetAbsoluteDirPath(GetParameterValue(Constants.LIBS_SHIP_DIR, libsShipDir ?? $"{LibsDir}/ship")); BuildDir = GetAbsoluteDirPath(GetParameterValue(Constants.BUILD_DIR, buildDir ?? $"{RootDir}/build")); SrcDir = GetAbsoluteDirPath(GetParameterValue(Constants.SRC_DIR, srcDir ?? $"{RootDir}/src")); SrcConfigFiles = GetParameterValue(Constants.SRC_CONFIG_FILES, srcConfigFiles ?? $"cake.config, Nuget.config"); SrcConfigsDir = GetAbsoluteDirPath(GetParameterValue(Constants.SRC_CONFIGS_DIR, srcConfigsDir ?? $"{SrcDir}/configs")); SrcScriptsDir = GetAbsoluteDirPath(GetParameterValue(Constants.SRC_SCRIPTS_DIR, srcScriptsDir ?? $"{SrcDir}/scripts")); SrcScriptsGitDir = GetAbsoluteDirPath(GetParameterValue(Constants.SRC_SCRIPTS_GIT_DIR, srcScriptsGitDir ?? $"{SrcScriptsDir}/git")); ArtifactsDir = GetAbsoluteDirPath(GetParameterValue(Constants.ARTIFACTS_DIR, artifactsDir ?? $"{RootDir}/artifacts")); ArtifactsBuildDir = GetAbsoluteDirPath(GetParameterValue(Constants.ARTIFACTS_BUILD_DIR, artifactsBuildDir ?? $"{ArtifactsDir}/build")); ArtifactsLibsPackagesDir = GetAbsoluteDirPath(GetParameterValue(Constants.ARTIFACTS_LIBS_PACKAGES_DIR, artifactsLibsPackagesDir ?? $"{ArtifactsDir}/libs/packages")); ArtifactsSrcDir = GetAbsoluteDirPath(GetParameterValue(Constants.ARTIFACTS_SRC_DIR, artifactsSrcDir ?? $"{ArtifactsDir}/src")); ArtifactsSrcConfigsDir = GetAbsoluteDirPath(GetParameterValue(Constants.ARTIFACTS_SRC_CONFIGS_DIR, artifactsSrcConfigsDir ?? $"{ArtifactsSrcDir}/configs")); ArtifactsSrcScriptsDir = GetAbsoluteDirPath(GetParameterValue(Constants.ARTIFACTS_SRC_SCRIPTS_DIR, artifactsSrcScriptsDir ?? $"{ArtifactsSrcDir}/scripts")); ArtifactsSrcScriptsUnicornDir = GetAbsoluteDirPath(GetParameterValue(Constants.ARTIFACTS_SRC_SCRIPTS_UNICORN_DIR, artifactsSrcScriptsUnicornDir ?? $"{ArtifactsSrcScriptsDir}/unicorn")); OutputDir = GetAbsoluteDirPath(GetParameterValue(Constants.OUTPUT_DIR, outputDir ?? $"{RootDir}/output")); TestsOutputDir = GetAbsoluteDirPath(GetParameterValue(Constants.TESTS_OUTPUT_DIR, testsOutputDir ?? $"{OutputDir}/tests")); TestsCoverageOutputDir = GetAbsoluteDirPath(GetParameterValue(Constants.TESTS_COVERAGE_OUTPUT_DIR, testsCoverageOutputDir ?? $"{TestsOutputDir}/coverage")); TestsFailImmediately = ToBoolean(GetParameterValue(Constants.TESTS_FAIL_IMMEDIATELY, testsFailImmediately ?? "true")); XUnitTestsCoverageOutputDir = GetAbsoluteDirPath(GetParameterValue(Constants.XUNIT_TESTS_COVERAGE_OUTPUT_DIR, xUnitTestsCoverageOutputDir ?? $"{TestsCoverageOutputDir}/xUnit")); XUnitTestsCoverageRegister = GetParameterValue(Constants.XUNIT_TESTS_COVERAGE_REGISTER, xUnitTestsCoverageRegister ?? $"user"); XUnitTestsCoverageExcludeAttributeFilters = GetParameterValue(Constants.XUNIT_TESTS_COVERAGE_EXCLUDE_ATTRIBUTE_FILTERS, xUnitTestsCoverageExcludeAttributeFilters ?? ""); XUnitTestsCoverageExcludeFileFilters = GetParameterValue(Constants.XUNIT_TESTS_COVERAGE_EXCLUDE_FILE_FILTERS, xUnitTestsCoverageExcludeFileFilters ?? ""); XUnitTestsCoverageExcludeDirectories = GetParameterValue(Constants.XUNIT_TESTS_COVERAGE_EXCLUDE_DIRECTORIES, xUnitTestsCoverageExcludeDirectories ?? ""); XUnitShadowCopy = ToBoolean(GetParameterValue(Constants.XUNIT_SHADOW_COPY, xUnitShadowCopy ?? "true")); JestTestsCoverageOutputDir = GetAbsoluteDirPath(GetParameterValue(Constants.JEST_TESTS_COVERAGE_OUTPUT_DIR, jestTestsCoverageOutputDir ?? $"{TestsCoverageOutputDir}/jest")); // Pathes NuGetConfigPath = GetAbsoluteFilePath(GetParameterValue(Constants.NUGET_CONFIG_PATH, nuGetConfigPath ?? $"{SrcDir}/nuget.config")); SolutionFilePath = GetAbsoluteFilePath(GetParameterValue(Constants.SOLUTION_FILE_PATH, solutionFilePath ?? $"{SrcDir}/{SolutionName}.sln")); UnicornConfigPath = GetUnicornConfigPath(GetParameterValue(Constants.UNICORN_CONFIG_PATH, unicornConfigPath ?? "")); UnicornConfigurations = GetParameterValue(Constants.UNICORN_CONFIGURATIONS, unicornConfigurations ?? ""); UnicornSecret = GetParameterValue(Constants.UNICORN_SECRET, unicornSecret ?? ""); UnicornSerializationRoot = GetParameterValue(Constants.UNICORN_SERIALIZATION_ROOT, unicornSerializationRoot ?? "unicorn"); PublishSerializationItems = ToBoolean(GetParameterValue(Constants.PUBLISH_SERIALIZATION_ITEMS, publishSerializationItems ?? (BuildConfiguration != "Debug").ToString())); ScLocalWebsiteRootDir = GetParameterValue(Constants.SC_LOCAL_WEBSITE_ROOT_DIR, scLocalWebsiteRootDir ?? "\\\\192.168.50.4\\c$\\inetpub\\wwwroot\\sc9.local"); PublishingTargetDir = GetPublishingTargetDir( publishingTargetDir); // Those parameters absolutely needed Utils.AssertIfNullOrEmpty(Sitecore.Parameters.SolutionName, "SolutionName", "SOLUTION_NAME"); } private static string GetParameterValue(string argumentName, string defaultValue, string environmentNamePrefix = null) { return Utils.ArgumentOrEnvironmentVariable(_context, argumentName, defaultValue, environmentNamePrefix); } private static string GetVersion(string defaultValue) { var version = Utils.ArgumentOrEnvironmentVariable(_context, Constants.RELEASE_VERSION, defaultValue); var regex = new Regex(SEM_VER_REGEX); if (!regex.IsMatch(version)){ throw new Exception($"Environmental variable or argument {Constants.RELEASE_VERSION} = {version} should follow SemVer format (0.0.0)."); } if (!BranchName.IsRelease()) { return $"{version}-{Git.GetTagFromBranchName(BranchName)}.{BuildId}"; } else{ return version; } } private static string GetAssemblyVersion(string defaultValue) { var version = Utils.ArgumentOrEnvironmentVariable(_context, Constants.RELEASE_VERSION, defaultValue); var regex = new Regex(SEM_VER_REGEX); if (!regex.IsMatch(version)){ throw new Exception($"Environmental variable or argument {Constants.RELEASE_VERSION} = {version} should follow SemVer format (0.0.0)."); } return $"{version}.0"; //made BuildNumber = 0. Otherwise assembly version contains reference on the buildNumber and this could break reference } private static string GetAbsoluteDirPath(string path){ return _context .MakeAbsolute(_context.Directory(path)).Collapse().FullPath.ToString(); } private static string GetAbsoluteFilePath(string path){ return _context.MakeAbsolute(_context.File(path)).Collapse().FullPath.ToString(); } // if parameter not passed via env or args default values would be provided // "Debug" is assumed as a build configuration for local dev installation. // In this case, unicorn configuration could be found in src // In case of "Release" unicorn configuration can be found in artifacts build folder. private static string GetUnicornConfigPath(string path) { if (string.IsNullOrEmpty(path)) { var _basePath = BuildConfiguration == "Debug" ? (SupportHelix20 ? $"{SrcDir}/Foundation/Serialization/website/App_Config/Include/Unicorn" : $"{SrcDir}/Foundation/Serialization/code/App_Config/Include/Unicorn" ) : $"{BuildDir}/App_Config/Include/Unicorn"; path = $"{_basePath}/Unicorn.zSharedSecret.config"; if (!_context.FileExists(path)) { path = $"{_basePath}/Unicorn.UI.config"; } } return GetAbsoluteFilePath(path); } private static string GetPublishingTargetDir(string defaultValue){ var path = GetParameterValue(Constants.PUBLISHING_TARGET_DIR, defaultValue); if (string.IsNullOrEmpty(path)) { path = BuildConfiguration == "Debug" ? ScLocalWebsiteRootDir : ArtifactsBuildDir; } _context.Information($"Publishing target dir: {path}"); return GetAbsoluteFilePath(path); } private static bool ToBoolean(string defaultValue) { bool result = false; if (bool.TryParse(defaultValue, out result)) { return result; } return false; } } }