Merge branch 'release/2.1' into dev

This commit is contained in:
Nate McMaster 2018-05-31 12:42:06 -07:00
commit f9e6ebfd51
No known key found for this signature in database
GPG Key ID: A778D9601BD78810
2 changed files with 52 additions and 8 deletions

View File

@ -70,7 +70,7 @@
<RepoTasks.AddMetapackageReferences <RepoTasks.AddMetapackageReferences
ReferencePackagePath="$(MetapackageWorkDirectory)$(MetapackageName).csproj" ReferencePackagePath="$(MetapackageWorkDirectory)$(MetapackageName).csproj"
MetapackageReferenceType="$(MetapackageReferenceType)" MetapackageReferenceType="$(MetapackageReferenceType)"
LockToExactVersions="$(LockToExactVersions)" DependencyVersionRangeType="$(MetapackageDependencyVersionRangeType)"
BuildArtifacts="@(ArtifactInfo)" BuildArtifacts="@(ArtifactInfo)"
PackageArtifacts="@(PackageArtifact)" PackageArtifacts="@(PackageArtifact)"
ExternalDependencies="@(ExternalDependency)" /> ExternalDependencies="@(ExternalDependency)" />
@ -87,7 +87,7 @@
<AdditionalProperties> <AdditionalProperties>
MetapackageName=Microsoft.AspNetCore.App; MetapackageName=Microsoft.AspNetCore.App;
MetapackageReferenceType=AppMetapackage; MetapackageReferenceType=AppMetapackage;
LockToExactVersions=true MetapackageDependencyVersionRangeType=MajorMinor
</AdditionalProperties> </AdditionalProperties>
</_MetapackageBuilderProject> </_MetapackageBuilderProject>
@ -95,7 +95,7 @@
<AdditionalProperties> <AdditionalProperties>
MetapackageName=Microsoft.AspNetCore.All; MetapackageName=Microsoft.AspNetCore.All;
MetapackageReferenceType=AllMetapackage; MetapackageReferenceType=AllMetapackage;
LockToExactVersions=false MetapackageDependencyVersionRangeType=Minimum
</AdditionalProperties> </AdditionalProperties>
</_MetapackageBuilderProject> </_MetapackageBuilderProject>
@ -103,7 +103,7 @@
<AdditionalProperties> <AdditionalProperties>
MetapackageName=Microsoft.AspNetCore.Analyzers; MetapackageName=Microsoft.AspNetCore.Analyzers;
MetapackageReferenceType=Analyzer; MetapackageReferenceType=Analyzer;
LockToExactVersions=true MetapackageDependencyVersionRangeType=Minimum
</AdditionalProperties> </AdditionalProperties>
</_MetapackageBuilderProject> </_MetapackageBuilderProject>
</ItemGroup> </ItemGroup>

View File

@ -6,6 +6,7 @@ using System.Linq;
using System.Xml; using System.Xml;
using Microsoft.Build.Framework; using Microsoft.Build.Framework;
using Microsoft.Build.Utilities; using Microsoft.Build.Utilities;
using NuGet.Versioning;
using RepoTasks.Utilities; using RepoTasks.Utilities;
namespace RepoTasks namespace RepoTasks
@ -19,7 +20,14 @@ namespace RepoTasks
public string MetapackageReferenceType { get; set; } public string MetapackageReferenceType { get; set; }
[Required] [Required]
public bool LockToExactVersions { get; set; } public string DependencyVersionRangeType { get; set; }
// MSBuild doesn't allow binding to enums directly.
private enum VersionRangeType
{
Minimum, // [1.1.1, )
MajorMinor, // [1.1.1, 1.2.0)
}
[Required] [Required]
public ITaskItem[] BuildArtifacts { get; set; } public ITaskItem[] BuildArtifacts { get; set; }
@ -32,6 +40,12 @@ namespace RepoTasks
public override bool Execute() public override bool Execute()
{ {
if (!Enum.TryParse<VersionRangeType>(DependencyVersionRangeType, out var dependencyVersionType))
{
Log.LogError("Unexpected value {0} for DependencyVersionRangeType", DependencyVersionRangeType);
return false;
}
// Parse input // Parse input
var metapackageArtifacts = PackageArtifacts.Where(p => p.GetMetadata(MetapackageReferenceType) == "true"); var metapackageArtifacts = PackageArtifacts.Where(p => p.GetMetadata(MetapackageReferenceType) == "true");
var externalArtifacts = ExternalDependencies.Where(p => p.GetMetadata(MetapackageReferenceType) == "true"); var externalArtifacts = ExternalDependencies.Where(p => p.GetMetadata(MetapackageReferenceType) == "true");
@ -65,8 +79,13 @@ namespace RepoTasks
throw; throw;
} }
var packageVersionValue = LockToExactVersions ? $"[{packageVersion}]" : packageVersion; if (string.IsNullOrEmpty(packageVersion))
{
Log.LogError("Missing version information for package {0}", packageName);
continue;
}
var packageVersionValue = GetDependencyVersion(dependencyVersionType, packageName, packageVersion);
Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersionValue}"); Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersionValue}");
var packageReferenceElement = xmlDoc.CreateElement("PackageReference"); var packageReferenceElement = xmlDoc.CreateElement("PackageReference");
@ -81,7 +100,14 @@ namespace RepoTasks
{ {
var packageName = package.ItemSpec; var packageName = package.ItemSpec;
var packageVersion = package.GetMetadata("Version"); var packageVersion = package.GetMetadata("Version");
var packageVersionValue = LockToExactVersions ? $"[{packageVersion}]" : packageVersion;
if (string.IsNullOrEmpty(packageVersion))
{
Log.LogError("Missing version information for package {0}", packageName);
continue;
}
var packageVersionValue = GetDependencyVersion(dependencyVersionType, packageName, packageVersion);
Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersionValue}"); Log.LogMessage(MessageImportance.High, $" - Package: {packageName} Version: {packageVersionValue}");
@ -99,7 +125,25 @@ namespace RepoTasks
xmlDoc.AppendChild(projectElement); xmlDoc.AppendChild(projectElement);
xmlDoc.Save(ReferencePackagePath); xmlDoc.Save(ReferencePackagePath);
return true; return !Log.HasLoggedErrors;
}
private string GetDependencyVersion(VersionRangeType dependencyVersionType, string packageName, string packageVersion)
{
switch (dependencyVersionType)
{
case VersionRangeType.MajorMinor:
if (!NuGetVersion.TryParse(packageVersion, out var nugetVersion))
{
Log.LogError("Invalid NuGet version '{0}' for package {1}", packageVersion, packageName);
return null;
}
return $"[{packageVersion}, {nugetVersion.Major}.{nugetVersion.Minor + 1}.0)";
case VersionRangeType.Minimum:
return packageVersion;
default:
throw new NotImplementedException();
}
} }
} }
} }