2016-07-15 15:31:50 +00: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-28 02:09:30 +00:00
|
|
|
|
using Microsoft.Build.Framework;
|
|
|
|
|
using Microsoft.Build.Utilities;
|
2016-12-14 00:10:39 +00:00
|
|
|
|
using System.Runtime.InteropServices;
|
2016-06-28 02:09:30 +00:00
|
|
|
|
|
|
|
|
|
namespace Microsoft.DotNet.Cli.Build
|
|
|
|
|
{
|
2016-07-26 04:29:59 +00:00
|
|
|
|
public class GenerateBuildVersionInfo : ToolTask
|
2016-06-28 02:09:30 +00: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 23:59:15 +00:00
|
|
|
|
public string CommitCount { get; set; }
|
2016-06-28 02:09:30 +00:00
|
|
|
|
|
|
|
|
|
[Output]
|
|
|
|
|
public string ReleaseSuffix { 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 04:29:59 +00:00
|
|
|
|
private int _commitCount;
|
|
|
|
|
|
2016-06-28 02:09:30 +00:00
|
|
|
|
public override bool Execute()
|
|
|
|
|
{
|
2016-07-26 04:29:59 +00:00
|
|
|
|
base.Execute();
|
2016-06-28 02:09:30 +00:00
|
|
|
|
|
2016-07-26 04:29:59 +00:00
|
|
|
|
var branchInfo = new BranchInfo(RepoRoot);
|
2016-06-28 02:09:30 +00:00
|
|
|
|
|
2017-02-08 22:31:07 +00:00
|
|
|
|
var buildVersion = new Version
|
2016-06-28 02:09:30 +00:00
|
|
|
|
{
|
|
|
|
|
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 04:29:59 +00:00
|
|
|
|
CommitCount = _commitCount
|
2016-06-28 02:09:30 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
VersionMajor = buildVersion.Major;
|
|
|
|
|
VersionMinor = buildVersion.Minor;
|
|
|
|
|
VersionPatch = buildVersion.Patch;
|
2016-06-28 23:59:15 +00:00
|
|
|
|
CommitCount = buildVersion.CommitCountString;
|
2016-06-28 02:09:30 +00:00
|
|
|
|
ReleaseSuffix = buildVersion.ReleaseSuffix;
|
|
|
|
|
MsiVersion = buildVersion.GenerateMsiVersion();
|
|
|
|
|
VersionBadgeMoniker = Monikers.GetBadgeMoniker();
|
|
|
|
|
Channel = branchInfo.Entries["CHANNEL"];
|
|
|
|
|
BranchName= branchInfo.Entries["BRANCH_NAME"];
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2016-07-26 04:29:59 +00: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-14 00:10:39 +00: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 04:29:59 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override string GenerateCommandLineCommands()
|
|
|
|
|
{
|
|
|
|
|
return $"rev-list --count HEAD";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void LogEventsFromTextOutput(string line, MessageImportance importance)
|
|
|
|
|
{
|
|
|
|
|
_commitCount = int.Parse(line);
|
|
|
|
|
}
|
2016-06-28 02:09:30 +00:00
|
|
|
|
}
|
|
|
|
|
}
|