Generate the package version props file

This commit is contained in:
Nate McMaster 2017-09-29 13:32:24 -07:00
parent 44b84a8da7
commit d2e49a726c
6 changed files with 158 additions and 15 deletions

View File

@ -36,18 +36,18 @@
Build tools will *verify* that these repos will be unaffected
by the patch update and do not need updating.
-->
<ShippedRepository Include="Caching" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Common" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Configuration" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="DependencyInjection" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="DotNetTools" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="EventNotification" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="FileSystem" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="HtmlAbstractions" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="JsonPatch" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Logging" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Microsoft.Data.Sqlite" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Options" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Testing" Branch="rel/2.0.0" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Caching" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Common" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Configuration" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="DependencyInjection" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="DotNetTools" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="EventNotification" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="FileSystem" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="HtmlAbstractions" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="JsonPatch" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Logging" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Microsoft.Data.Sqlite" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Options" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
<ShippedRepository Include="Testing" Branch="patch/2.0.1" Commit="" CloneUrl="git@github.com:aspnet/%(Identity)" />
</ItemGroup>
</Project>

View File

@ -51,6 +51,7 @@
<Target Name="_BuildRepository">
<PropertyGroup>
<!-- If there are duplicate properties, the properties which are defined later in the order would override the earlier ones -->
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:DotNetPackageVersionPropsPath=$(GeneratedPackageVersionPropsPath)</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:BuildNumber=$(BuildNumber) /p:Configuration=$(Configuration) /p:CommitHash=$(CommitHash)</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)'</RepositoryBuildArguments>

View File

@ -21,7 +21,10 @@
</PropertyGroup>
<ItemGroup>
<ExternalDependency Include="Microsoft.NETCore.App" Version="2.0.2-servicing-25715-02" Source="$(DotNetCoreFeed)" Mirror="true" />
<ExternalDependency Include="Microsoft.NETCore.App" Version="2.0.2-servicing-25715-02" Source="$(DotNetCoreFeed)" Mirror="true">
<VariableName>RuntimeFrameworkVersion</VariableName>
<TargetFramework>netcoreapp2.0</TargetFramework>
</ExternalDependency>
<ExternalDependency Include="Microsoft.NETCore.DotNetHostPolicy" Version="2.0.2-servicing-25715-02" Source="$(DotNetCoreFeed)" Mirror="true" />
<ExternalDependency Include="Microsoft.NETCore.DotNetHostResolver" Version="2.0.2-servicing-25715-02" Source="$(DotNetCoreFeed)" Mirror="true" />
</ItemGroup>
@ -35,16 +38,19 @@
<ExternalDependency Include="Microsoft.CodeAnalysis.Common" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true">
<!-- This version is required for Razor to build the VSIX for VS. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>MicrosoftCodeAnalysisCommonToolingPackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="Microsoft.CodeAnalysis.CSharp" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true">
<!-- This version is required for Razor to build the VSIX for VS. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>MicrosoftCodeAnalysisCSharpToolingPackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="Microsoft.CodeAnalysis.EditorFeatures.Text" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" />
<ExternalDependency Include="Microsoft.CodeAnalysis.Remote.Razor.ServiceHub" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" />
<ExternalDependency Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true">
<!-- This version is required for Razor to build the VSIX for VS. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>MicrosoftCodeAnalysisWorkspacesCommonToolingPackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="Microsoft.VisualStudio.LanguageServices.Razor.RemoteClient" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.LanguageServices" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" />
@ -135,6 +141,7 @@
<ExternalDependency Include="Newtonsoft.Json" Version="9.0.1" Source="$(DefaultNuGetFeed)" Private="true">
<!-- This version is used by tooling packages to match what is in VS and MSBuild. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>NewtonsoftJsonToolingPackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="Newtonsoft.Json" Version="10.0.1" Source="$(DefaultNuGetFeed)">
<!-- This version is used by runtime packages. -->
@ -171,6 +178,7 @@
<ExternalDependency Include="xunit.assert" Version="2.2.0" Source="$(DefaultNuGetFeed)" Private="true">
<!-- EF's benchmarks use a different version of xunit.assert -->
<NoWarn>KRB2004</NoWarn>
<VariableName>EFBenchmarksXunitAssertPackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="xunit.assert" Version="2.3.0-beta2-build3683" Source="$(DefaultNuGetFeed)" Private="true">
<!-- EF's benchmarks use a different version of xunit.assert -->
@ -181,6 +189,7 @@
<ExternalDependency Include="xunit" Version="2.2.0" Source="$(DefaultNuGetFeed)">
<!-- It is okay to have multiple versions of test-only dependencies. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>XunitStablePackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="xunit" Version="2.3.0-beta2-build3683" Source="$(DefaultNuGetFeed)" Private="true">
<!-- It is okay to have multiple versions of test-only dependencies. -->

View File

@ -18,6 +18,7 @@
<IntermediateMirrorPackageDir>$(IntermediateDir)mirror\</IntermediateMirrorPackageDir>
<!-- For external packages that come from feeds we don't mirror. -->
<IntermediateExternalPackageDir>$(IntermediateDir)ext\</IntermediateExternalPackageDir>
<GeneratedPackageVersionPropsPath>$(IntermediateDir)dependencies.props</GeneratedPackageVersionPropsPath>
<TcVcsIdPrefix>Patch20_</TcVcsIdPrefix>
<PrepareDependsOn>$(PrepareDependsOn);CleanArtifacts;CleanUniverseArtifacts</PrepareDependsOn>
@ -40,6 +41,19 @@
DestinationFolder="$(IntermediateMirrorPackageDir)" />
</Target>
<Target Name="GeneratePackageVersionPropsFile" DependsOnTargets="ResolveRepoInfo">
<ItemGroup>
<_LineupPackages Include="@(ExternalDependency)" />
<_LineupPackages Include="%(ArtifactInfo.PackageId)" Version="%(ArtifactInfo.Version)" Condition=" '%(ArtifactInfo.ArtifactType)' == 'NuGetPackage' " />
<_LineupPackages Include="%(ShippedArtifactInfo.PackageId)" Version="%(ShippedArtifactInfo.Version)" Condition=" '%(ShippedArtifactInfo.ArtifactType)' == 'NuGetPackage' " />
</ItemGroup>
<RepoTasks.GeneratePackageVersionPropsFile
Packages="@(_LineupPackages)"
OutputPath="$(GeneratedPackageVersionPropsPath)" />
<Copy SourceFiles="$(GeneratedPackageVersionPropsPath)" DestinationFolder="$(ArtifactsDir)" />
</Target>
<Target Name="CleanUniverseArtifacts">
<RemoveDir Directories="$(_CloneRepositoryRoot)" Condition="Exists('$(_CloneRepositoryRoot)') AND '$(ClearRepositoryCloneRoot)' != 'false'" />
<RemoveDir Directories="$(RepositoryRoot)obj" Condition="Exists('$(RepositoryRoot)obj')" />
@ -125,7 +139,7 @@
</Target>
<Target Name="BuildRepositories"
DependsOnTargets="_PrepareRepositories;_CreateRepositoriesListWithCommits;ComputeGraph;_BuildRepositories" />
DependsOnTargets="_PrepareRepositories;_CreateRepositoriesListWithCommits;GeneratePackageVersionPropsFile;ComputeGraph;_BuildRepositories" />
<Target Name="ResolveRepoInfo" DependsOnTargets="_PrepareRepositories">
<MSBuild Projects="$(MSBuildProjectFullPath)"

View File

@ -0,0 +1,118 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Xml;
using System.Xml.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using RepoTasks.ProjectModel;
using RepoTasks.Utilities;
using System.Text;
namespace RepoTasks
{
public class GeneratePackageVersionPropsFile : Task
{
[Required]
public ITaskItem[] Packages { get; set; }
[Required]
public string OutputPath { get; set; }
public override bool Execute()
{
OutputPath = OutputPath.Replace('\\', '/');
Directory.CreateDirectory(Path.GetDirectoryName(OutputPath));
var props = new XElement("PropertyGroup");
var root = new XElement("Project", props);
var doc = new XDocument(root);
var varNames = new HashSet<string>();
var versionElements = new List<XElement>();
foreach (var pkg in Packages)
{
var packageVersion = pkg.GetMetadata("Version");
if (string.IsNullOrEmpty(packageVersion))
{
Log.LogError("Package {0} is missing the Version metadata", pkg.ItemSpec);
continue;
}
string packageVarName;
if (!string.IsNullOrEmpty(pkg.GetMetadata("VariableName")))
{
packageVarName = pkg.GetMetadata("VariableName");
if (!packageVarName.EndsWith("Version", StringComparison.Ordinal))
{
Log.LogError("VariableName for {0} must end in 'Version'", pkg.ItemSpec);
continue;
}
}
else
{
var sb = new StringBuilder();
var first = true;
foreach (var ch in pkg.ItemSpec)
{
if (ch == '.')
{
first = true;
continue;
}
if (first)
{
first = false;
sb.Append(char.ToUpperInvariant(ch));
}
else
{
sb.Append(ch);
}
}
sb.Append("PackageVersion");
packageVarName = sb.ToString();
}
var packageTfm = pkg.GetMetadata("TargetFramework");
var key = $"{packageVarName}/{packageTfm}";
if (varNames.Contains(key))
{
Log.LogError("Multiple packages would produce {0} in the generated dependencies.props file. Set VariableName to differentiate the packages manually", key);
continue;
}
varNames.Add(key);
var elem = new XElement(packageVarName, packageVersion);
if (!string.IsNullOrEmpty(packageTfm))
{
elem.Add(new XAttribute("Condition", $" '$(TargetFramework)' == '{packageTfm}' "));
}
versionElements.Add(elem);
}
foreach (var item in versionElements.OrderBy(p => p.Name.ToString()))
{
props.Add(item);
}
var settings = new XmlWriterSettings
{
OmitXmlDeclaration = true,
Indent = true,
};
using (var writer = XmlWriter.Create(OutputPath, settings))
{
Log.LogMessage(MessageImportance.High, $"Generate {OutputPath}");
doc.Save(writer);
}
return !Log.HasLoggedErrors;
}
}
}

View File

@ -7,5 +7,6 @@
<UsingTask TaskName="RepoTasks.CopyPackagesToSplitFolders" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.DownloadNuGetPackages" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.GenerateLineup" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.GeneratePackageVersionPropsFile" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.VerifyCoherentVersions" AssemblyFile="$(_RepoTaskAssembly)" />
</Project>