2016-07-15 08:31:50 -07:00
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
2016-06-27 21:09:30 -05:00
using Microsoft.Build.Framework ;
using Microsoft.Build.Utilities ;
2016-12-13 16:10:39 -08:00
using System.Runtime.InteropServices ;
2016-06-27 21:09:30 -05:00
namespace Microsoft.DotNet.Cli.Build
{
2016-07-26 00:29:59 -04:00
public class GenerateBuildVersionInfo : ToolTask
2016-06-27 21:09:30 -05:00
{
[Required]
public string RepoRoot { get ; set ; }
[Output]
public int VersionMajor { get ; set ; }
[Output]
public int VersionMinor { get ; set ; }
[Output]
public int VersionPatch { get ; set ; }
[Output]
2016-06-28 18:59:15 -05:00
public string CommitCount { get ; set ; }
2016-06-27 21:09:30 -05:00
[Output]
public string ReleaseSuffix { get ; set ; }
[Output]
public string VersionSuffix { get ; set ; }
[Output]
public string SimpleVersion { get ; set ; }
[Output]
public string NugetVersion { get ; set ; }
[Output]
public string MsiVersion { get ; set ; }
[Output]
public string VersionBadgeMoniker { get ; set ; }
[Output]
public string Channel { get ; set ; }
[Output]
public string BranchName { get ; set ; }
2016-07-26 00:29:59 -04:00
private int _commitCount ;
2016-06-27 21:09:30 -05:00
public override bool Execute ( )
{
2016-07-26 00:29:59 -04:00
base . Execute ( ) ;
2016-06-27 21:09:30 -05:00
2016-07-26 00:29:59 -04:00
var branchInfo = new BranchInfo ( RepoRoot ) ;
2016-06-27 21:09:30 -05:00
var buildVersion = new BuildVersion ( )
{
Major = int . Parse ( branchInfo . Entries [ "MAJOR_VERSION" ] ) ,
Minor = int . Parse ( branchInfo . Entries [ "MINOR_VERSION" ] ) ,
Patch = int . Parse ( branchInfo . Entries [ "PATCH_VERSION" ] ) ,
ReleaseSuffix = branchInfo . Entries [ "RELEASE_SUFFIX" ] ,
2016-07-26 00:29:59 -04:00
CommitCount = _commitCount
2016-06-27 21:09:30 -05:00
} ;
VersionMajor = buildVersion . Major ;
VersionMinor = buildVersion . Minor ;
VersionPatch = buildVersion . Patch ;
2016-06-28 18:59:15 -05:00
CommitCount = buildVersion . CommitCountString ;
2016-06-27 21:09:30 -05:00
ReleaseSuffix = buildVersion . ReleaseSuffix ;
VersionSuffix = buildVersion . VersionSuffix ;
SimpleVersion = buildVersion . SimpleVersion ;
NugetVersion = buildVersion . NuGetVersion ;
MsiVersion = buildVersion . GenerateMsiVersion ( ) ;
VersionBadgeMoniker = Monikers . GetBadgeMoniker ( ) ;
Channel = branchInfo . Entries [ "CHANNEL" ] ;
BranchName = branchInfo . Entries [ "BRANCH_NAME" ] ;
return true ;
}
2016-07-26 00:29:59 -04:00
protected override string ToolName
{
get { return "git" ; }
}
protected override MessageImportance StandardOutputLoggingImportance
{
get { return MessageImportance . High ; } // or else the output doesn't get logged by default
}
protected override string GenerateFullPathToTool ( )
{
2016-12-13 16:10:39 -08:00
// Workaround: https://github.com/Microsoft/msbuild/issues/1215
// There's a "git" folder on the PATH in VS 2017 Developer command prompt and it causes msbuild to fail to execute git.
return RuntimeInformation . IsOSPlatform ( OSPlatform . Windows ) ? "git.exe" : "git" ;
2016-07-26 00:29:59 -04:00
}
protected override string GenerateCommandLineCommands ( )
{
return $"rev-list --count HEAD" ;
}
protected override void LogEventsFromTextOutput ( string line , MessageImportance importance )
{
_commitCount = int . Parse ( line ) ;
}
2016-06-27 21:09:30 -05:00
}
}