This gets the commit hash from the current HEAD
of the branch.
You can use it in your applcation via AssemblyInformation.Current.InformationalVersion
.
using System.Reflection; | |
public record class AssemblyInformation(string Product, string Description, string Version, string InformationalVersion) | |
{ | |
public static readonly AssemblyInformation Current = new(typeof(AssemblyInformation).Assembly); | |
public AssemblyInformation(Assembly assembly) | |
: this( | |
assembly.GetCustomAttribute<AssemblyProductAttribute>()!.Product, | |
assembly.GetCustomAttribute<AssemblyDescriptionAttribute>()!.Description, | |
assembly.GetCustomAttribute<AssemblyFileVersionAttribute>()!.Version, | |
assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()!.InformationalVersion) | |
{ | |
} | |
} |
<Project> | |
<Choose> | |
<When Condition="'$(CI)' == 'true'"> | |
<!-- On non-official builds we don't burn in a git sha. In large part because it | |
hurts our determinism efforts as binaries which should be the same between | |
builds will not (due to developers building against different HEAD | |
values --> | |
<PropertyGroup> | |
<GitHeadSha><developer build></GitHeadSha> | |
</PropertyGroup> | |
</When> | |
<When Condition="'$(GITHUB_SHA)' != ''"> | |
<PropertyGroup> | |
<GitHeadSha>$(GITHUB_SHA)</GitHeadSha> | |
</PropertyGroup> | |
</When> | |
<When Condition="'$(GitHeadSha)' == ''"> | |
<PropertyGroup> | |
<GitHeadSha>Not found</GitHeadSha> | |
<DotGitDir>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory).git'))</DotGitDir> | |
<HeadFileContent Condition="Exists('$(DotGitDir)/HEAD')">$([System.IO.File]::ReadAllText('$(DotGitDir)/HEAD').Trim())</HeadFileContent> | |
<RefPath Condition="$(HeadFileContent.StartsWith('ref: '))">$(DotGitDir)/$(HeadFileContent.Substring(5))</RefPath> | |
<GitHeadSha Condition="'$(RefPath)' != '' AND Exists('$(RefPath)')">$([System.IO.File]::ReadAllText('$(RefPath)').Trim())</GitHeadSha> | |
<GitHeadSha Condition="'$(HeadFileContent)' != '' AND '$(RefPath)' == ''">$(HeadFileContent)</GitHeadSha> | |
</PropertyGroup> | |
</When> | |
<Otherwise> | |
<PropertyGroup> | |
<GitHeadSha>Not found</GitHeadSha> | |
</PropertyGroup> | |
</Otherwise> | |
</Choose> | |
</Project> |
<Project> | |
<PropertyGroup> | |
<InformationalVersion>$(GitHeadSha)</InformationalVersion> | |
</PropertyGroup> | |
</Project> |