You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
120 lines
3.3 KiB
120 lines
3.3 KiB
using System.Xml;
|
|
|
|
public class BuildParameters
|
|
{
|
|
public BuildParameters(ICakeContext context)
|
|
{
|
|
Context = context;
|
|
}
|
|
|
|
public ICakeContext Context { get; }
|
|
public BuildVersion Version { get; private set; }
|
|
public string Configuration { get; private set; }
|
|
public bool IsTagged { get; private set; }
|
|
public bool IsCI { get; private set; }
|
|
public DirectoryPathCollection Projects { get; set; }
|
|
public DirectoryPathCollection TestProjects { get; set; }
|
|
public FilePathCollection ProjectFiles { get; set; }
|
|
public FilePathCollection TestProjectFiles { get; set; }
|
|
|
|
public static BuildParameters Create(ICakeContext context)
|
|
{
|
|
var buildParameters = new BuildParameters(context);
|
|
buildParameters.Initialize();
|
|
return buildParameters;
|
|
}
|
|
|
|
public string FullVersion()
|
|
{
|
|
return Version.VersionWithSuffix();
|
|
}
|
|
|
|
private void Initialize()
|
|
{
|
|
InitializeCore();
|
|
InitializeVersion();
|
|
}
|
|
|
|
private void InitializeCore()
|
|
{
|
|
Projects = Context.GetDirectories("./src/*");
|
|
TestProjects = Context.GetDirectories("./test/*");
|
|
ProjectFiles = Context.GetFiles("./src/*/*.csproj");
|
|
TestProjectFiles = Context.GetFiles("./test/*/*.csproj");
|
|
|
|
var buildSystem = Context.BuildSystem();
|
|
if (!buildSystem.IsLocalBuild)
|
|
{
|
|
IsCI = true;
|
|
if ((buildSystem.IsRunningOnAppVeyor && buildSystem.AppVeyor.Environment.Repository.Tag.IsTag) ||
|
|
(buildSystem.IsRunningOnTravisCI && string.IsNullOrWhiteSpace(buildSystem.TravisCI.Environment.Build.Tag)))
|
|
{
|
|
IsTagged = true;
|
|
}
|
|
}
|
|
|
|
Configuration = Context.Argument("Configuration", "Debug");
|
|
if (IsCI)
|
|
{
|
|
Configuration = "Release";
|
|
}
|
|
}
|
|
|
|
private void InitializeVersion()
|
|
{
|
|
var versionFile = Context.File("./build/version.props");
|
|
var content = System.IO.File.ReadAllText(versionFile.Path.FullPath);
|
|
|
|
XmlDocument doc = new XmlDocument();
|
|
doc.LoadXml(content);
|
|
|
|
var versionMajor = doc.DocumentElement.SelectSingleNode("/Project/PropertyGroup/VersionMajor").InnerText;
|
|
var versionMinor = doc.DocumentElement.SelectSingleNode("/Project/PropertyGroup/VersionMinor").InnerText;
|
|
var versionPatch = doc.DocumentElement.SelectSingleNode("/Project/PropertyGroup/VersionPatch").InnerText;
|
|
var versionQuality = doc.DocumentElement.SelectSingleNode("/Project/PropertyGroup/VersionQuality").InnerText;
|
|
versionQuality = string.IsNullOrWhiteSpace(versionQuality) ? null : versionQuality;
|
|
|
|
var suffix = versionQuality;
|
|
if (!IsTagged)
|
|
{
|
|
suffix += (IsCI ? "preview-" : "dev-") + Util.CreateStamp();
|
|
}
|
|
suffix = string.IsNullOrWhiteSpace(suffix) ? null : suffix;
|
|
|
|
Version =
|
|
new BuildVersion(int.Parse(versionMajor), int.Parse(versionMinor), int.Parse(versionPatch), versionQuality);
|
|
Version.Suffix = suffix;
|
|
}
|
|
}
|
|
|
|
public class BuildVersion
|
|
{
|
|
public BuildVersion(int major, int minor, int patch, string quality)
|
|
{
|
|
Major = major;
|
|
Minor = minor;
|
|
Patch = patch;
|
|
Quality = quality;
|
|
}
|
|
|
|
public int Major { get; set; }
|
|
public int Minor { get; set; }
|
|
public int Patch { get; set; }
|
|
public string Quality { get; set; }
|
|
public string Suffix { get; set; }
|
|
|
|
public string VersionWithoutQuality()
|
|
{
|
|
return $"{Major}.{Minor}.{Patch}";
|
|
}
|
|
|
|
public string Version()
|
|
{
|
|
return VersionWithoutQuality() + (Quality == null ? string.Empty : $"-{Quality}");
|
|
}
|
|
|
|
public string VersionWithSuffix()
|
|
{
|
|
return Version() + (Suffix == null ? string.Empty : $"-{Suffix}");
|
|
}
|
|
}
|
|
|