From d2e49a726c0d83cf6baccb07b4e1e7d1ee0712f4 Mon Sep 17 00:00:00 2001 From: Nate McMaster Date: Fri, 29 Sep 2017 13:32:24 -0700 Subject: [PATCH] Generate the package version props file --- build/Repositories.props | 26 ++-- build/RepositoryBuild.targets | 1 + build/dependencies.props | 11 +- build/repo.targets | 16 ++- .../tasks/GeneratePackageVersionPropsFile.cs | 118 ++++++++++++++++++ build/tasks/RepoTasks.tasks | 1 + 6 files changed, 158 insertions(+), 15 deletions(-) create mode 100644 build/tasks/GeneratePackageVersionPropsFile.cs diff --git a/build/Repositories.props b/build/Repositories.props index 4048a5a71d..adba85b527 100644 --- a/build/Repositories.props +++ b/build/Repositories.props @@ -36,18 +36,18 @@ Build tools will *verify* that these repos will be unaffected by the patch update and do not need updating. --> - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/build/RepositoryBuild.targets b/build/RepositoryBuild.targets index 6d119bbd50..4ff447a430 100644 --- a/build/RepositoryBuild.targets +++ b/build/RepositoryBuild.targets @@ -51,6 +51,7 @@ + $(RepositoryBuildArguments) /p:DotNetPackageVersionPropsPath=$(GeneratedPackageVersionPropsPath) $(RepositoryBuildArguments) /p:BuildNumber=$(BuildNumber) /p:Configuration=$(Configuration) /p:CommitHash=$(CommitHash) $(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)' diff --git a/build/dependencies.props b/build/dependencies.props index e6e0b0fad2..312df26335 100644 --- a/build/dependencies.props +++ b/build/dependencies.props @@ -21,7 +21,10 @@ - + + RuntimeFrameworkVersion + netcoreapp2.0 + @@ -35,16 +38,19 @@ KRB2004 + MicrosoftCodeAnalysisCommonToolingPackageVersion KRB2004 + MicrosoftCodeAnalysisCSharpToolingPackageVersion KRB2004 + MicrosoftCodeAnalysisWorkspacesCommonToolingPackageVersion @@ -135,6 +141,7 @@ KRB2004 + NewtonsoftJsonToolingPackageVersion @@ -171,6 +178,7 @@ KRB2004 + EFBenchmarksXunitAssertPackageVersion @@ -181,6 +189,7 @@ KRB2004 + XunitStablePackageVersion diff --git a/build/repo.targets b/build/repo.targets index 7a7de53283..0a20957aaf 100644 --- a/build/repo.targets +++ b/build/repo.targets @@ -18,6 +18,7 @@ $(IntermediateDir)mirror\ $(IntermediateDir)ext\ + $(IntermediateDir)dependencies.props Patch20_ $(PrepareDependsOn);CleanArtifacts;CleanUniverseArtifacts @@ -40,6 +41,19 @@ DestinationFolder="$(IntermediateMirrorPackageDir)" /> + + + <_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' " /> + + + + + + @@ -125,7 +139,7 @@ + DependsOnTargets="_PrepareRepositories;_CreateRepositoriesListWithCommits;GeneratePackageVersionPropsFile;ComputeGraph;_BuildRepositories" /> (); + var versionElements = new List(); + 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; + } + } +} diff --git a/build/tasks/RepoTasks.tasks b/build/tasks/RepoTasks.tasks index d2df6c836a..da9cb26603 100644 --- a/build/tasks/RepoTasks.tasks +++ b/build/tasks/RepoTasks.tasks @@ -7,5 +7,6 @@ +