Update how PackageReference versions are set

Changes:
 - Remove floating versions
 - Disable myget feeds during a Universe build
 - Use package-specific MSBuild variables. Pattern = `packageId.Pascalize() + "PackageVersion"`, with a few exceptions.
 - Remove myget feeds during build
 - Remove obsolete 'GenerateLineup' targets/tasks
This commit is contained in:
Nate McMaster 2017-10-06 16:44:49 -07:00
parent c53c133bcb
commit 611b6a23ad
14 changed files with 80 additions and 161 deletions

View File

@ -2,8 +2,6 @@
<configuration>
<packageSources>
<clear />
<add key="AspNetCore" value="https://dotnet.myget.org/F/aspnetcore-ci-release/api/v3/index.json" />
<add key="AspNetCoreTools" value="https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json" />
<add key="NuGet" value="https://api.nuget.org/v3/index.json" />
</packageSources>
</configuration>

View File

@ -29,14 +29,6 @@
<Output TaskParameter="TargetOutputs" ItemName="PinnedArtifactInfo" />
</MSBuild>
<RepoTasks.GenerateLineup
Artifacts="@(PinnedArtifactInfo)"
Repository="%(RepositoryBuildOrder.Identity)"
OutputPath="%(RepositoryBuildOrder.RepositoryPath)\build\dependencies.g.targets"
UseFloatingVersions="false"
Condition="'%(RepositoryBuildOrder.RepositoryPath)' != ''"
BuildNumber="$(BuildNumber)" />
<MSBuild
Projects="@(BatchedRepository)"
BuildInParallel="$(BatchBuilds)"
@ -47,6 +39,8 @@
<Target Name="_BuildRepository">
<PropertyGroup>
<!-- Should reduce allowable package feeds to only nuget.org. -->
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:AspNetUniverseBuildOffline=true</RepositoryBuildArguments>
<!-- If there are duplicate properties, the properties which are defined later in the order would override the earlier ones -->
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:DotNetRestoreSourcePropsPath=$(GeneratedRestoreSourcesPropsPath)</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:DotNetPackageVersionPropsPath=$(GeneratedPackageVersionPropsPath)</RepositoryBuildArguments>

View File

@ -41,7 +41,7 @@
<!-- Restore and pack-->
<MSBuild Projects="$(MetapackageWorkDirectory)Microsoft.AspNetCore.All.csproj"
Targets="Restore;Pack"
Properties="Configuration=$(Configuration);DotNetRestoreSourcePropsPath=$(GeneratedRestoreSourcesPropsPath)" />
Properties="Configuration=$(Configuration);DotNetRestoreSourcePropsPath=$(GeneratedRestoreSourcesPropsPath);AspNetUniverseBuildOffline=true" />
<!-- Copy to output directory -->
<ItemGroup>

View File

@ -14,7 +14,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Internal.AspNetCore.Sdk" Version="$(InternalAspNetCoreSdkVersion)" PrivateAssets="All" />
<PackageReference Include="Internal.AspNetCore.Sdk" Version="$(InternalAspNetCoreSdkPackageVersion)" PrivateAssets="All" />
</ItemGroup>
</Project>

View File

@ -22,6 +22,7 @@
</PropertyGroup>
<ItemGroup>
<ExternalDependency Include="System.Memory" Version="4.4.0-preview3-25519-03" Source="$(DotNetCoreFeed)" Mirror="true" />
<ExternalDependency Include="Microsoft.DotNet.PlatformAbstractions" Version="$(CoreSetupPackageVersion)" Source="$(DotNetCoreFeed)" Mirror="true" />
<ExternalDependency Include="Microsoft.Extensions.DependencyModel" Version="$(CoreSetupPackageVersion)" Source="$(DotNetCoreFeed)" Mirror="true" />
<ExternalDependency Include="Microsoft.NETCore.App" Version="$(CoreSetupPackageVersion)" Source="$(DotNetCoreFeed)" Mirror="true" >
@ -95,10 +96,12 @@
<!-- ASP.NET Core Tools feed -->
<PropertyGroup>
<AspNetCoreToolsFeed>https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json</AspNetCoreToolsFeed>
<InternalAspNetCoreSdkPackageVersion>2.0.2-beta-15522</InternalAspNetCoreSdkPackageVersion>
</PropertyGroup>
<ItemGroup>
<ExternalDependency Include="Internal.AspNetCore.Sdk" Version="2.0.1-rtm-15400" Source="$(AspNetCoreToolsFeed)" Private="true"/>
<ExternalDependency Include="Internal.AspNetCore.Sdk" Version="$(InternalAspNetCoreSdkPackageVersion)" Source="$(AspNetCoreToolsFeed)" Private="true" />
<ExternalDependency Include="Microsoft.AspNetCore.BuildTools.ApiCheck" Version="$(InternalAspNetCoreSdkPackageVersion)" Source="$(AspNetCoreToolsFeed)" Private="true" />
</ItemGroup>
<!-- ASP.NET Core (non-Universe builds) -->
@ -171,7 +174,23 @@
<ExternalDependency Include="Microsoft.Web.Xdt" Version="1.4.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Win32.Registry" Version="4.4.0" Source="$(DefaultNuGetFeed)" />
<ExternalDependency Include="Moq" Version="4.7.49" Source="$(DefaultNuGetFeed)" Private="true"/>
<ExternalDependency Include="NETStandard.Library" Version="2.0.0" Source="$(DefaultNuGetFeed)" />
<ExternalDependency Include="NETStandard.Library" Version="2.0.0" Source="$(DefaultNuGetFeed)">
<NoWarn>KRB2004</NoWarn>
<VariableName>NETStandardImplicitPackageVersion</VariableName>
<TargetFramework>netstandard2.0</TargetFramework>
</ExternalDependency>
<ExternalDependency Include="NETStandard.Library" Version="2.0.0" Source="$(DefaultNuGetFeed)">
<!-- We have a dependency on NS.Library from the .NET Framework tfm in aspnet/EventNotification. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>NETStandardLibraryPackageVersion</VariableName>
<TargetFramework>net461</TargetFramework>
</ExternalDependency>
<ExternalDependency Include="NETStandard.Library" Version="2.0.0" Source="$(DefaultNuGetFeed)">
<!-- We have a dependency on NS.Library from a few .NET Framework packages in aspnet/Razor. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>NETStandardLibraryPackageVersion</VariableName>
<TargetFramework>net46</TargetFramework>
</ExternalDependency>
<ExternalDependency Include="Newtonsoft.Json.Bson" Version="1.0.1" Source="$(DefaultNuGetFeed)" />
<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. -->
@ -181,6 +200,7 @@
<ExternalDependency Include="Newtonsoft.Json" Version="10.0.1" Source="$(DefaultNuGetFeed)">
<!-- This version is used by runtime packages. -->
<NoWarn>KRB2004</NoWarn>
<VariableName>NewtonsoftJsonRuntimePackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="NuGet.Frameworks" Version="4.0.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Remotion.Linq" Version="2.1.1" Source="$(DefaultNuGetFeed)"/>
@ -213,14 +233,16 @@
<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>
<VariableName>XunitAssertStablePackageVersion</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 -->
<NoWarn>KRB2004</NoWarn>
</ExternalDependency>
<ExternalDependency Include="xunit.extensibility.core" Version="2.2.0" Source="$(DefaultNuGetFeed)" />
<ExternalDependency Include="xunit.runner.visualstudio" Version="2.3.0-beta2-build1317" Source="$(DefaultNuGetFeed)" Private="true"/>
<ExternalDependency Include="xunit.runner.visualstudio" Version="2.3.0-beta2-build1317" Source="$(DefaultNuGetFeed)" Private="true">
<VariableName>XunitRunnerVisualStudioPackageVersion</VariableName>
</ExternalDependency>
<ExternalDependency Include="xunit" Version="2.2.0" Source="$(DefaultNuGetFeed)">
<!-- It is okay to have multiple versions of test-only dependencies. -->
<NoWarn>KRB2004</NoWarn>
@ -231,8 +253,4 @@
<NoWarn>KRB2004</NoWarn>
</ExternalDependency>
</ItemGroup>
<PropertyGroup>
<InternalAspNetCoreSdkVersion>2.0.1-rtm-15400</InternalAspNetCoreSdkVersion>
</PropertyGroup>
</Project>

View File

@ -207,26 +207,6 @@
</RepoTasks.AnalyzeBuildGraph>
</Target>
<Target Name="UpdateRepoLineups" DependsOnTargets="ResolveRepoInfo">
<RepoTasks.GenerateLineup
Artifacts="@(ArtifactInfo)"
Repository="%(Repository.Identity)"
OutputPath="$(_CloneRepositoryRoot)%(Repository.Identity)\build\dependencies.targets"
UseFloatingVersions="true"
BuildNumber="$(BuildNumber)" />
</Target>
<Target Name="GenerateLineup" DependsOnTargets="ResolveRepoInfo">
<Message Text="Packages that will be produced:" Importance="High" />
<Message Text=" - %(ArtifactInfo.PackageId)/%(Version)" Importance="High" Condition="'%(ArtifactType)' == 'NuGetPackage'" />
<RepoTasks.GenerateLineup
Artifacts="@(ArtifactInfo)"
OutputPath="$(ArtifactsDir)dependencies.targets"
UseFloatingVersions="false"
BuildNumber="$(BuildNumber)" />
</Target>
<Target Name="SplitPackages">
<ItemGroup>
<PackageArtifactFile Include="$(BuildDir)*.nupkg" Exclude="$(BuildDir)*.symbols.nupkg" />

View File

@ -130,6 +130,15 @@ namespace RepoTasks
var matchesExternalDependency = false;
if (shippedPackageMap.TryGetValue(dependency.Key, out var shippedPackage))
{
if (string.IsNullOrEmpty(dependency.Value.Version))
{
Log.LogKoreBuildError(
project.FullPath,
KoreBuildErrors.EmptyPackageReferenceVersion,
message: $"Package reference to {dependency.Key} has an empty version");
continue;
}
matchesExternalDependency = shippedPackage.PackageInfo.Version.Equals(NuGetVersion.Parse(dependency.Value.Version));
}
else if (dependencyMap.TryGetValue(dependency.Key, out var externalVersions))
@ -152,7 +161,7 @@ namespace RepoTasks
{
continue;
}
else if (package.PackageInfo.Version.Equals(refVersion))
else if (package.PackageInfo.Version.Equals(refVersion.MinVersion))
{
continue;
}

View File

@ -1,87 +0,0 @@
// 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;
namespace RepoTasks
{
public class GenerateLineup : Task
{
[Required]
public ITaskItem[] Artifacts { get; set; }
[Required]
public string OutputPath { get; set; }
// Can be set to filter the lists of packages when produce a list for a specific repository
public string Repository { get; set; }
public bool UseFloatingVersions { get; set; }
public string BuildNumber { get; set; }
public override bool Execute()
{
OutputPath = OutputPath.Replace('\\', '/');
Directory.CreateDirectory(Path.GetDirectoryName(OutputPath));
if (UseFloatingVersions && string.IsNullOrEmpty(BuildNumber))
{
Log.LogWarning("Cannot compute floating versions when BuildNumber is not specified");
}
var items = new XElement("ItemGroup");
var root = new XElement("Project", items);
var doc = new XDocument(root);
var packages = new List<PackageInfo>();
foreach (var pkg in Artifacts.Select(ArtifactInfo.Parse)
.OfType<ArtifactInfo.Package>()
.Where(p => !p.IsSymbolsArtifact
&& (string.IsNullOrEmpty(Repository)
|| !Repository.Equals(p.RepoName, StringComparison.OrdinalIgnoreCase))))
{
packages.Add(pkg.PackageInfo);
}
foreach (var pkg in packages.OrderBy(i => i.Id))
{
var version = pkg.Version.ToString();
if (UseFloatingVersions && version.EndsWith(BuildNumber))
{
version = version.Substring(0, version.Length - BuildNumber.Length) + "*";
}
var refType = "DotNetCliTool".Equals(pkg.PackageType, StringComparison.OrdinalIgnoreCase)
? "DotNetCliToolReference"
: "PackageReference";
items.Add(new XElement(refType,
new XAttribute("Update", pkg.Id),
new XAttribute("Version", version)));
}
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 true;
}
}
}

View File

@ -57,28 +57,7 @@ namespace RepoTasks
}
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();
packageVarName = GetVariableName(pkg.ItemSpec);
}
var packageTfm = pkg.GetMetadata("TargetFramework");
@ -109,10 +88,36 @@ namespace RepoTasks
};
using (var writer = XmlWriter.Create(OutputPath, settings))
{
Log.LogMessage(MessageImportance.High, $"Generate {OutputPath}");
Log.LogMessage(MessageImportance.Normal, $"Generate {OutputPath}");
doc.Save(writer);
}
return !Log.HasLoggedErrors;
}
private string GetVariableName(string packageId)
{
var sb = new StringBuilder();
var first = true;
foreach (var ch in packageId)
{
if (ch == '.')
{
first = true;
continue;
}
if (first)
{
first = false;
sb.Append(char.ToUpperInvariant(ch));
}
else
{
sb.Append(ch);
}
}
sb.Append("PackageVersion");
return sb.ToString();
}
}
}

View File

@ -43,7 +43,7 @@ namespace RepoTasks
};
using (var writer = XmlWriter.Create(OutputPath, settings))
{
Log.LogMessage(MessageImportance.High, $"Generate {OutputPath}");
Log.LogMessage(MessageImportance.Normal, $"Generate {OutputPath}");
doc.Save(writer);
}
return !Log.HasLoggedErrors;

View File

@ -6,7 +6,6 @@
<UsingTask TaskName="RepoTasks.AnalyzeBuildGraph" AssemblyFile="$(_RepoTaskAssembly)" />
<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.GenerateRestoreSourcesPropsFile" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.VerifyCoherentVersions" AssemblyFile="$(_RepoTaskAssembly)" />

View File

@ -23,6 +23,7 @@ namespace RepoTasks.Utilities
public const int DotNetCliReferenceReferenceHasVersion = 4003;
public const int PackageVersionNotFoundInLineup = 4004;
public const int UndefinedExternalDependency = 4005;
public const int EmptyPackageReferenceVersion = 4006;
// Other unknown errors
public const int PolicyFailedToApply = 5000;

View File

@ -1,2 +1,2 @@
version:2.0.2-beta-15516
commithash:b7022c60cb24c59a29ca4bd9ad8f6dd29dc41509
version:2.0.2-beta-15522
commithash:f26cb086ebd8b5a187381bb9a431794f11d69025

View File

@ -5,11 +5,12 @@
<PropertyGroup>
<RestoreSources>$(DotNetRestoreSources)</RestoreSources>
<RestoreSources Condition="'$(DotNetBuildOffline)' != 'true' AND '$(AspNetUniverseBuildOffline)' != 'true' ">
$(RestoreSources);
https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
</RestoreSources>
<RestoreSources Condition="'$(DotNetBuildOffline)' != 'true'">
$(RestoreSources);
https://dotnet.myget.org/F/aspnet-2-0-2-october2017-patch/api/v3/index.json;
https://dotnet.myget.org/F/aspnetcore-master/api/v3/index.json;
https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json;
https://api.nuget.org/v3/index.json;
</RestoreSources>
@ -18,6 +19,7 @@
<PackageTags>aspnetcore</PackageTags>
<Description>Microsoft.AspNetCore.All</Description>
<EnableApiCheck>false</EnableApiCheck>
<RuntimeFrameworkVersion>$(CoreSetupPackageVersion)</RuntimeFrameworkVersion>
</PropertyGroup>
<ItemGroup>