using System.IO; using System.Xml; using FlubuCore.Context; using FlubuCore.Scripting.Attributes; namespace BuildScript { [Reference("System.Xml.XmlDocument, System.Xml, Version=4.0.0.0, Culture=neutral, publicKeyToken=b77a5c561934e089")] public partial class BuildScript { public BuildVersion FetchBuildVersion(ITaskContext context) { var content = File.ReadAllText(RootDirectory.CombineWith("build/version.props")); 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; bool isCi = false; bool isTagged = false; if (!context.BuildServers().IsLocalBuild) { isCi = true; bool isTagAppveyor = context.BuildServers().AppVeyor().IsTag; if (context.BuildServers().RunningOn == BuildServerType.AppVeyor && isTagAppveyor || context.BuildServers().RunningOn == BuildServerType.TravisCI && string.IsNullOrWhiteSpace(context.BuildServers().Travis().TagName)) { isTagged = true; } } if (!isTagged) { suffix += (isCi ? "preview-" : "dv-") + CreateStamp(); } suffix = string.IsNullOrWhiteSpace(suffix) ? null : suffix; var version = new BuildVersion(int.Parse(versionMajor), int.Parse(versionMinor), int.Parse(versionPatch), versionQuality); version.Suffix = suffix; return version; } } }