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> |