From 2d6b1b9d3ca35841e8971dd1ad658c23fb580892 Mon Sep 17 00:00:00 2001 From: Taylor Southwick Date: Thu, 16 Nov 2017 14:19:12 -0800 Subject: [PATCH] Add VS extension updater --- src/GitVersionTask/GitVersionTask.csproj | 1 + .../NugetAssets/build/GitVersionTask.targets | 11 +++ src/GitVersionTask/UpdateVsixManifest.cs | 74 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 src/GitVersionTask/UpdateVsixManifest.cs diff --git a/src/GitVersionTask/GitVersionTask.csproj b/src/GitVersionTask/GitVersionTask.csproj index f994daa49c..a22cd44044 100644 --- a/src/GitVersionTask/GitVersionTask.csproj +++ b/src/GitVersionTask/GitVersionTask.csproj @@ -66,6 +66,7 @@ + diff --git a/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets b/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets index 0f0d549fd9..5a76136d01 100644 --- a/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets +++ b/src/GitVersionTask/NugetAssets/build/GitVersionTask.targets @@ -49,6 +49,9 @@ + @@ -138,6 +141,14 @@ + + + + + diff --git a/src/GitVersionTask/UpdateVsixManifest.cs b/src/GitVersionTask/UpdateVsixManifest.cs new file mode 100644 index 0000000000..648d58db94 --- /dev/null +++ b/src/GitVersionTask/UpdateVsixManifest.cs @@ -0,0 +1,74 @@ +namespace GitVersionTask +{ + using System; + using System.ComponentModel; + using System.Xml.Linq; + using System.Linq; + using GitVersion; + using Microsoft.Build.Framework; + + public class UpdateVsixManifest : GitVersionTaskBase + { + TaskLogger logger; + + public UpdateVsixManifest() + { + logger = new TaskLogger(this); + Logger.SetLoggers(this.LogDebug, this.LogInfo, this.LogWarning, s => this.LogError(s)); + } + + [Required] + public string VsixManifest { get; set; } + + [Required] + public string SolutionDirectory { get; set; } + + public bool NoFetch { get; set; } + + public override bool Execute() + { + try + { + VersionVariables variables; + if (ExecuteCore.TryGetVersion(SolutionDirectory, out variables, NoFetch, new Authentication())) + { + UpdateManifestFile(variables); + } + + return true; + } + catch (WarningException errorException) + { + logger.LogWarning(errorException.Message); + return true; + } + catch (Exception exception) + { + logger.LogError("Error occurred: " + exception); + return false; + } + finally + { + Logger.Reset(); + } + } + + private void UpdateManifestFile(VersionVariables variables) + { + const string ns = "http://schemas.microsoft.com/developer/vsx-schema/2011"; + + var version = variables.AssemblySemFileVer; + var doc = XDocument.Load(VsixManifest); + var identity = doc + .Root + .Descendants(XName.Get("Identity", ns)) + .Single(); + + identity.Attribute("Version").Value = version; + + doc.Save(VsixManifest); + + Log.LogMessage($"Updated {VsixManifest} version to {version}"); + } + } +} \ No newline at end of file