Skip to content

Commit 4f70ef7

Browse files
ruhullahshahRuh Ullah Shah
authored and
Ruh Ullah Shah
committed
Adding support to generate Wix version files
1 parent 3d645ad commit 4f70ef7

File tree

7 files changed

+242
-1
lines changed

7 files changed

+242
-1
lines changed

docs/usage/command-line.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,8 @@ It will not change config file 'GitVersion.yml'.
8080
### Example: How to override configuration option 'tag-prefix' to use prefix 'custom'
8181
`GitVersion.exe /output json /overrideconfig tag-prefix=custom`
8282

83+
## Writing version metadata in WiX format
84+
To support integration with WiX projects, use `GitVersion.exe /updatewixversionfile`. All the [variables](../more-info/variables.md) are written to `GitVersion_WixVersion.wxi` under the current working directory and can be referenced in the WiX project files.
85+
8386
## Mono
8487
To use on mac or linux, install `mono-complete` then just run `mono GitVersion.exe`

src/GitVersionCore/GitVersionCore.csproj

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,132 @@
2424
<PackageReference Include="JetBrains.Annotations" Version="$(PackageVersion_JetBrainsAnnotations)"></PackageReference>
2525
<PackageReference Include="YamlDotNet" Version="$(PackageVersion_YamlDotNet)" />
2626
</ItemGroup>
27+
<<<<<<< HEAD
2728

2829
<ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
2930
<PackageReference Include="System.Net.Requests" Version="4.3.0" />
3031
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
3132
<PackageReference Include="System.Reflection.TypeExtensions" Version="4.5.1" />
33+
=======
34+
<ItemGroup>
35+
<Compile Include="AssemblyFileVersioningScheme.cs" />
36+
<Compile Include="AssemblyVersioningScheme.cs" />
37+
<Compile Include="AssemblyVersionsGenerator.cs" />
38+
<Compile Include="Authentication.cs" />
39+
<Compile Include="BranchCommit.cs" />
40+
<Compile Include="BranchConfigurationCalculator.cs" />
41+
<Compile Include="BuildServers\AppVeyor.cs" />
42+
<Compile Include="BuildServers\BuildServerBase.cs" />
43+
<Compile Include="BuildServers\BuildServerList.cs" />
44+
<Compile Include="BuildServers\ContinuaCi.cs" />
45+
<Compile Include="BuildServers\GitLabCi.cs" />
46+
<Compile Include="BuildServers\IBuildServer.cs" />
47+
<Compile Include="BuildServers\Jenkins.cs" />
48+
<Compile Include="BuildServers\MyGet.cs" />
49+
<Compile Include="BuildServers\TeamCity.cs" />
50+
<Compile Include="BuildServers\VsoAgent.cs" />
51+
<Compile Include="Configuration\BranchConfig.cs" />
52+
<Compile Include="Configuration\Config.cs" />
53+
<Compile Include="Configuration\ConsoleAdapter.cs" />
54+
<Compile Include="Configuration\GitVersionConfigurationException.cs" />
55+
<Compile Include="Configuration\IConsole.cs" />
56+
<Compile Include="Configuration\IgnoreConfig.cs" />
57+
<Compile Include="Configuration\Init\BuildServer\AppveyorPublicPrivate.cs" />
58+
<Compile Include="Configuration\Init\BuildServer\AppVeyorSetup.cs" />
59+
<Compile Include="Configuration\Init\BuildServer\SetupBuildScripts.cs" />
60+
<Compile Include="Configuration\Init\SetConfig\AssemblyVersioningSchemeSetting.cs" />
61+
<Compile Include="Configuration\Init\SetNextVersion.cs" />
62+
<Compile Include="Configuration\Init\Wizard\ConfigInitWizard.cs" />
63+
<Compile Include="Configuration\ConfigSerialiser.cs" />
64+
<Compile Include="Configuration\ConfigurationProvider.cs" />
65+
<Compile Include="Configuration\IncrementStrategy.cs" />
66+
<Compile Include="Configuration\LegacyBranchConfig.cs" />
67+
<Compile Include="Configuration\LegacyConfig.cs" />
68+
<Compile Include="Configuration\LegacyConfigNotifier.cs" />
69+
<Compile Include="Configuration\OldConfigurationException.cs" />
70+
<Compile Include="Configuration\Init\Wizard\ConfigInitWizardStep.cs" />
71+
<Compile Include="Configuration\Init\SetConfig\ConfigureBranch.cs" />
72+
<Compile Include="Configuration\Init\SetConfig\ConfigureBranches.cs" />
73+
<Compile Include="Configuration\Init\EditConfigStep.cs" />
74+
<Compile Include="Configuration\Init\Wizard\FinishedSetupStep.cs" />
75+
<Compile Include="Configuration\Init\Wizard\GitFlowSetupStep.cs" />
76+
<Compile Include="Configuration\Init\Wizard\GitHubFlowStep.cs" />
77+
<Compile Include="Configuration\Init\Wizard\PickBranchingStrategy2Step.cs" />
78+
<Compile Include="Configuration\Init\Wizard\PickBranchingStrategy3Step.cs" />
79+
<Compile Include="Configuration\Init\Wizard\PickBranchingStrategy1Step.cs" />
80+
<Compile Include="Configuration\Init\SetConfig\SetBranchIncrementMode.cs" />
81+
<Compile Include="Configuration\Init\SetConfig\SetBranchTag.cs" />
82+
<Compile Include="Configuration\Init\SetConfig\GlobalModeSetting.cs" />
83+
<Compile Include="Configuration\Init\Wizard\PickBranchingStrategyStep.cs" />
84+
<Compile Include="Configuration\Init\StepResult.cs" />
85+
<Compile Include="EffectiveConfiguration.cs" />
86+
<Compile Include="ExecuteCore.cs" />
87+
<Compile Include="Extensions\ReadEmbeddedResourceExtensions.cs" />
88+
<Compile Include="GitPreparer.cs" />
89+
<Compile Include="GitRepoMetadataProvider.cs" />
90+
<Compile Include="GitVersionCache.cs" />
91+
<Compile Include="GitVersionCacheKey.cs" />
92+
<Compile Include="GitVersionCacheKeyFactory.cs" />
93+
<Compile Include="GitVersionException.cs" />
94+
<Compile Include="GitVersionInformationResources\GitVersionInformationGenerator.cs" />
95+
<Compile Include="Helpers\EncodingHelper.cs" />
96+
<Compile Include="Helpers\FileSystem.cs" />
97+
<Compile Include="Helpers\IFileSystem.cs" />
98+
<Compile Include="Helpers\IThreadSleep.cs" />
99+
<Compile Include="Helpers\OperationWithExponentialBackoff.cs" />
100+
<Compile Include="Helpers\ServiceMessageEscapeHelper.cs" />
101+
<Compile Include="Helpers\ThreadSleep.cs" />
102+
<Compile Include="IncrementStrategyFinder.cs" />
103+
<Compile Include="LoggerWrapper.cs" />
104+
<Compile Include="MergeMessage.cs" />
105+
<Compile Include="OutputVariables\VersionVariables.cs" />
106+
<Compile Include="SemanticVersionExtensions.cs" />
107+
<Compile Include="SemanticVersionFormatValues.cs" />
108+
<Compile Include="VerbosityLevel.cs" />
109+
<Compile Include="VersionAssemblyInfoResources\AssemblyInfoFileUpdater.cs" />
110+
<Compile Include="TemplateManager.cs" />
111+
<Compile Include="VersionCalculation\MainlineVersionCalculator.cs" />
112+
<Compile Include="VersionFilters\MinDateVersionFilter.cs" />
113+
<Compile Include="VersionFilters\IVersionFilter.cs" />
114+
<Compile Include="VersionFilters\ShaVersionFilter.cs" />
115+
<Compile Include="StringFormatWith.cs" />
116+
<Compile Include="VersionCalculation\BaseVersionCalculator.cs" />
117+
<Compile Include="VersionCalculation\BaseVersionCalculators\BaseVersion.cs" />
118+
<Compile Include="VersionCalculation\BaseVersionCalculators\ConfigNextVersionBaseVersionStrategy.cs" />
119+
<Compile Include="VersionCalculation\BaseVersionCalculators\TaggedCommitVersionStrategy.cs" />
120+
<Compile Include="VersionCalculation\BaseVersionCalculators\MergeMessageBaseVersionStrategy.cs" />
121+
<Compile Include="VersionCalculation\BaseVersionCalculators\VersionInBranchNameBaseVersionStrategy.cs" />
122+
<Compile Include="VersionCalculation\BaseVersionStrategy.cs" />
123+
<Compile Include="VersionCalculation\DevelopVersionStrategy.cs" />
124+
<Compile Include="VersionCalculation\FallbackBaseVersionStrategy.cs" />
125+
<Compile Include="VersionCalculation\IBaseVersionCalculator.cs" />
126+
<Compile Include="VersionCalculation\IMetaDataCalculator.cs" />
127+
<Compile Include="VersionCalculation\MetaDataCalculator.cs" />
128+
<Compile Include="VersionCalculation\NextVersionCalculator.cs" />
129+
<Compile Include="VersioningModes\ContinuousDeliveryMode.cs" />
130+
<Compile Include="VersioningModes\ContinuousDeploymentMode.cs" />
131+
<Compile Include="VersioningModes\VersioningMode.cs" />
132+
<Compile Include="VersioningModes\VersioningModeBase.cs" />
133+
<Compile Include="VersioningModes\VersioningModeExtension.cs" />
134+
<Compile Include="Extensions\ExtensionMethods.cs" />
135+
<Compile Include="GitVersionContext.cs" />
136+
<Compile Include="GitVersionFinder.cs" />
137+
<Compile Include="Helpers\DeleteHelper.cs" />
138+
<Compile Include="LambdaEqualityHelper.cs" />
139+
<Compile Include="LibGitExtensions.cs" />
140+
<Compile Include="Logger.cs" />
141+
<Compile Include="OutputFormatters\BuildOutputFormatter.cs" />
142+
<Compile Include="OutputFormatters\JsonOutputFormatter.cs" />
143+
<Compile Include="OutputType.cs" />
144+
<Compile Include="OutputVariables\VariableProvider.cs" />
145+
<Compile Include="AssemblyInfo.cs" />
146+
<Compile Include="SearchPath.cs" />
147+
<Compile Include="SemanticVersion.cs" />
148+
<Compile Include="SemanticVersionBuildMetaData.cs" />
149+
<Compile Include="SemanticVersionPreReleaseTag.cs" />
150+
<Compile Include="BuildServers\TravisCI.cs" />
151+
<Compile Include="WixVersionFileUpdater.cs" />
152+
>>>>>>> Adding support to generate Wix version files
32153
</ItemGroup>
33154

34155
<ItemGroup>
@@ -44,5 +165,40 @@
44165
<EmbeddedResource Include="VersionAssemblyInfoResources\AddFormats\**\*.*" />
45166
<EmbeddedResource Include="VersionAssemblyInfoResources\Templates\**\*.*" />
46167
</ItemGroup>
168+
<<<<<<< HEAD
47169

48170
</Project>
171+
=======
172+
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
173+
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
174+
<PropertyGroup>
175+
<ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
176+
</PropertyGroup>
177+
<Error Condition="!Exists('..\packages\PepitaPackage.1.21.4\build\PepitaPackage.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\PepitaPackage.1.21.4\build\PepitaPackage.targets'))" />
178+
<Error Condition="!Exists('..\packages\LibGit2Sharp.NativeBinaries.1.0.160\build\LibGit2Sharp.NativeBinaries.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\LibGit2Sharp.NativeBinaries.1.0.160\build\LibGit2Sharp.NativeBinaries.props'))" />
179+
<Error Condition="!Exists('..\packages\Fody.2.0.8\build\portable-net+sl+win+wpa+wp\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.2.0.8\build\portable-net+sl+win+wpa+wp\Fody.targets'))" />
180+
</Target>
181+
<PropertyGroup>
182+
<PostBuildEvent>
183+
</PostBuildEvent>
184+
</PropertyGroup>
185+
<Target Name="Clean">
186+
<ItemGroup>
187+
<RefFilesToDelete Include="$(BuildDir)NuGetRefBuild\**\*.*" />
188+
</ItemGroup>
189+
<Delete Files="@(RefFilesToDelete)" />
190+
</Target>
191+
<Target Name="AfterBuild" DependsOnTargets="Clean">
192+
<!-- NugetRefBuild -->
193+
<MakeDir Directories="$(SolutionDir)NuGetRefBuild\lib\Net45" />
194+
<Copy SourceFiles="$(OutputPath)GitVersionCore.dll" DestinationFolder="$(BuildDir)NuGetRefBuild\lib\Net45" />
195+
<Copy SourceFiles="$(OutputPath)GitVersionCore.pdb" DestinationFolder="$(BuildDir)NuGetRefBuild\lib\Net45" Condition="Exists('$(OutputPath)GitVersionCore.pdb')" />
196+
<Copy SourceFiles="$(OutputPath)GitVersionCore.dll.mdb" DestinationFolder="$(BuildDir)NuGetRefBuild\lib\Net45" Condition="Exists('$(OutputPath)GitVersionCore.dll.mdb')" />
197+
<Copy SourceFiles="$(OutputPath)GitVersionCore.xml" DestinationFolder="$(BuildDir)NuGetRefBuild\lib\Net45" />
198+
<Copy SourceFiles="$(ProjectDir)NugetAssets\GitVersion.nuspec" DestinationFolder="$(BuildDir)NuGetRefBuild" />
199+
<PepitaPackage.CreatePackageTask NuGetBuildDirectory="$(BuildDir)NuGetRefBuild" MetadataAssembly="$(OutputPath)GitVersionCore.dll" Version="$(GitVersion_NuGetVersion)" />
200+
</Target>
201+
<Import Project="..\packages\PepitaPackage.1.21.4\build\PepitaPackage.targets" Condition="Exists('..\packages\PepitaPackage.1.21.4\build\PepitaPackage.targets')" />
202+
<Import Project="..\packages\Fody.2.0.8\build\portable-net+sl+win+wpa+wp\Fody.targets" Condition="Exists('..\packages\Fody.2.0.8\build\portable-net+sl+win+wpa+wp\Fody.targets')" />
203+
</Project>
204+
>>>>>>> Adding support to generate Wix version files
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
namespace GitVersion
2+
{
3+
using Helpers;
4+
5+
using System;
6+
using System.Text;
7+
using System.Xml;
8+
9+
public class WixVersionFileUpdater : IDisposable
10+
{
11+
string workingDirectory;
12+
VersionVariables variables;
13+
IFileSystem fileSystem;
14+
private const string WIX_VERSION_FILE = "GitVersion_WixVersion.wxi ";
15+
16+
public WixVersionFileUpdater(string workingDirectory, VersionVariables variables, IFileSystem fileSystem)
17+
{
18+
this.workingDirectory = workingDirectory;
19+
this.variables = variables;
20+
this.fileSystem = fileSystem;
21+
}
22+
23+
public void Update()
24+
{
25+
Logger.WriteInfo("Updating GitVersion_WixVersion.wxi");
26+
27+
XmlDocument doc = new XmlDocument();
28+
doc.LoadXml(GetWixFormatFromVersionVariables());
29+
30+
XmlDeclaration xmlDecl = doc.CreateXmlDeclaration("1.0", "utf-8", null);
31+
XmlElement root = doc.DocumentElement;
32+
doc.InsertBefore(xmlDecl, root);
33+
34+
using (var fs = fileSystem.OpenWrite(WIX_VERSION_FILE))
35+
{
36+
doc.Save(fs);
37+
}
38+
}
39+
40+
private string GetWixFormatFromVersionVariables()
41+
{
42+
StringBuilder builder = new StringBuilder();
43+
builder.Append("<Include xmlns=\"http://schemas.microsoft.com/wix/2006/wi\">\n");
44+
var availableVariables = VersionVariables.AvailableVariables;
45+
foreach (var variable in availableVariables)
46+
{
47+
string value = null;
48+
variables.TryGetValue(variable, out value);
49+
builder.Append(string.Format("\t<?define {0}=\"{1}\"?>\n", variable, value));
50+
}
51+
builder.Append("</Include>\n");
52+
return builder.ToString();
53+
}
54+
55+
public void Dispose()
56+
{
57+
Logger.WriteInfo(string.Format("Done writing {0}", WIX_VERSION_FILE));
58+
}
59+
}
60+
}

src/GitVersionExe/ArgumentParser.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,12 @@ public static Arguments ParseArguments(List<string> commandLineArguments)
337337
continue;
338338
}
339339

340+
if (name.IsSwitch("updatewixversionfile"))
341+
{
342+
arguments.UpdateWixVersionFile = true;
343+
continue;
344+
}
345+
340346
var couldNotParseMessage = string.Format("Could not parse command line parameter '{0}'.", name);
341347

342348
// If we've reached through all argument switches without a match, we can relatively safely assume that the first argument isn't a switch, but the target path.

src/GitVersionExe/Arguments.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public Arguments()
4343
public ISet<string> UpdateAssemblyInfoFileName;
4444
public bool EnsureAssemblyInfo;
4545

46+
public bool UpdateWixVersionFile;
47+
4648
public bool ShowConfig;
4749
public bool NoFetch;
4850
public bool NoCache;

src/GitVersionExe/HelpWriter.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,13 @@ Specify name of AssemblyInfo file. Can also /updateAssemblyInfo GlobalAssemblyIn
4848
it be created with these attributes: AssemblyFileVersion, AssemblyVersion and AssemblyInformationalVersion
4949
---
5050
Supports writing version info for: C#, F#, VB
51-
# Remote repository args
51+
52+
# Create or update Wix version file
53+
/updatewixversionfile
54+
All the GitVersion variables are written to 'GitVersion_WixVersion.wxi'.
55+
The variables can then be referenced in other WiX project files for versioning.
56+
57+
# Remote repository args
5258
/url Url to remote git repository.
5359
/b Name of the branch to use on the remote repository, must be used in combination with /url.
5460
/u Username in case authentication is required.

src/GitVersionExe/SpecifiedArgumentRunner.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,14 @@ public static void Run(Arguments arguments, IFileSystem fileSystem)
5454
}
5555
}
5656

57+
if (arguments.UpdateWixVersionFile)
58+
{
59+
using (var wixVersionFileUpdater = new WixVersionFileUpdater(targetPath, variables, fileSystem))
60+
{
61+
wixVersionFileUpdater.Update();
62+
}
63+
}
64+
5765
using (var assemblyInfoUpdater = new AssemblyInfoFileUpdater(arguments.UpdateAssemblyInfoFileName, targetPath, variables, fileSystem, arguments.EnsureAssemblyInfo))
5866
{
5967
if (arguments.UpdateAssemblyInfo)

0 commit comments

Comments
 (0)