Verify and mirror external dependencies and self-consistent package versions (#566)

Moves build logic from other infrastructure repos into aspnet/Universe.
This commit is contained in:
Nate McMaster 2017-09-29 10:25:47 -07:00 committed by GitHub
parent f564f0b68e
commit e841229782
23 changed files with 873 additions and 191 deletions

29
.editorconfig Normal file
View File

@ -0,0 +1,29 @@
; EditorConfig to support per-solution formatting.
; Use the EditorConfig VS add-in to make this work.
; http://editorconfig.org/
; This is the default for the codeline.
root = true
[*]
indent_style = space
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.{cs}]
indent_size = 4
dotnet_sort_system_directives_first = true:warning
[*.{xml,config,*proj,nuspec,props,resx,targets,yml,tasks}]
indent_size = 2
[*.json]
indent_size = 2
[*.{ps1,psm1}]
indent_size = 4
[*.sh]
indent_size = 4
end_of_line = lf

1
.gitignore vendored
View File

@ -20,3 +20,4 @@ node_modules
.deps
global.json
korebuild-lock.txt
*.binlog

View File

@ -2,6 +2,7 @@
<ItemDefinitionGroup>
<Repository>
<Branch>dev</Branch>
<Build>true</Build>
</Repository>
</ItemDefinitionGroup>

View File

@ -30,7 +30,7 @@
<!-- If there are duplicate properties, the properties which are defined later in the order would override the earlier ones -->
<RepositoryBuildArguments>$(RepositoryBuildArguments) '/p:Universe_Version=$(Version)'</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) '/p:Universe_LineupBuildDir=$(LineupBuildDir)'</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) '/p:Universe_DependencyLineupDir=$(_DependencyLineupDir)'</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) '/p:Universe_AdditionalRestoreSources=$(IntermediateMirrorPackageDir)'</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) '/p:Universe_IntermediateDir=$(IntermediateDir)'</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) '/p:CustomBeforeKoreBuildProps=$(MSBuildThisFileDirectory)repobuild\BeforeKoreBuild.props'</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) '/p:CustomAfterKoreBuildTargets=$(MSBuildThisFileDirectory)repobuild\AfterKoreBuild.targets'</RepositoryBuildArguments>
@ -59,8 +59,6 @@
<ItemGroup>
<RepositoryArtifacts Include="$(RepositoryArtifactsBuildDirectory)*" />
<RepositorySymbolNupkgs Include="$(RepositoryArtifactsBuildDirectory)*.symbols.nupkg" />
<RepositoryNupkgs Include="$(RepositoryArtifactsBuildDirectory)*.nupkg" Exclude="@(RepositorySymbolNupkgs)" />
<RepositoryMSBuildArtifacts Include="$(RepositoryArtifactsMSBuildDirectory)**\*.*" />
</ItemGroup>
@ -72,15 +70,6 @@
SourceFiles="@(RepositoryMSBuildArtifacts)"
DestinationFolder="$(ArtifactsDir)msbuild\$(RepositoryToBuild)\%(RecursiveDir)" />
<Message Text="Publishing the following packages to the volatile feed: @(RepositoryNupkgs -> '%(Filename)%(Extension)', ', ')"
Condition="'$(PublishPackages)'=='true' AND '@(RepositoryNupkgs)' != ''" />
<PushNuGetPackages
Packages="@(RepositoryNupkgs)"
Feed="$(NuGetPublishVolatileFeed)"
ApiKey="$(APIKey)"
Condition="'$(PublishPackages)'=='true' AND '@(RepositoryNupkgs)' != ''" />
<Message Text="============ Done building $(RepositoryToBuild) ============" Importance="High" />
</Target>

239
build/artifacts.props Normal file
View File

@ -0,0 +1,239 @@
<Project>
<ItemDefinitionGroup>
<PackageArtifact>
<Metapackage>false</Metapackage>
</PackageArtifact>
</ItemDefinitionGroup>
<ItemGroup>
<PackageArtifact Include="Microsoft.AspNet.Identity.AspNetCoreCompat" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.All" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Antiforgery" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.ApplicationInsights.HostingStartup" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.Cookies" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.Core" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.Facebook" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.Google" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.JwtBearer" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.MicrosoftAccount" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.OAuth" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authentication.Twitter" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authorization" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Authorization.Policy" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.AzureAppServices.HostingStartup" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.AzureAppServices.SiteExtension" Category="shipoob" />
<PackageArtifact Include="Microsoft.AspNetCore.AzureAppServicesIntegration" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Buffering" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.CertificateGeneration.Task" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Certificates.Configuration.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.ChunkingCookieManager.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.CookiePolicy" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Cors" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Cryptography.Internal" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Cryptography.KeyDerivation" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.AzureKeyVault" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.AzureStorage" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.Extensions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.Redis" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.DataProtection.SystemWeb" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Diagnostics" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Diagnostics.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Diagnostics.Elm" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Diagnostics.Identity.Service" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Dispatcher" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Dispatcher.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Hosting" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Hosting.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Hosting.Server.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Hosting.WebHostBuilderFactory.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Hosting.WindowsServices" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Html.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Http" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Http.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Http.Extensions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Http.Features" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.HttpOverrides" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.HttpSys.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service.AzureKeyVault" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service.Core" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service.EntityFrameworkCore" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service.IntegratedWebClient" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service.Mvc" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Service.Specification.Tests" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Identity.Specification.Tests" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.JsonPatch" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Localization" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Localization.Routing" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.MiddlewareAnalysis" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.ApiExplorer" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Core" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Cors" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.DataAnnotations" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Formatters.Json" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Formatters.Xml" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Localization" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Razor" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Razor.Extensions.Version1_X" Category="shipoob" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.RazorPages" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.TagHelpers" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.Testing" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.ViewFeatures" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Mvc.WebApiCompatShim" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.NodeServices" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.NodeServices.Sockets" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Owin" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Protocols.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Proxy" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.RangeHelper.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Razor" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Razor.Language" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Razor.Runtime" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Razor.TagHelpers.Testing.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.ResponseCaching" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.ResponseCaching.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.ResponseCompression" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Rewrite" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Routing" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Routing.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Routing.DecisionTree.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.HttpSys" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.IISIntegration" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.IntegrationTesting" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.Kestrel" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.Kestrel.Core" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.Kestrel.Https" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Libuv" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Session" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.SignalR" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.SignalR.Client" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.SignalR.Client.Core" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.SignalR.Common" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.SignalR.Core" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.SignalR.Redis" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Sockets" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Sockets.Abstractions" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Sockets.Client.Http" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Sockets.Common.Http" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.Sockets.Http" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.SpaServices" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.StaticFiles" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.TestHost" Category="ship" />
<PackageArtifact Include="Microsoft.AspNetCore.Testing" Category="noship" />
<PackageArtifact Include="Microsoft.AspNetCore.WebSockets" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.AspNetCore.WebUtilities" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.CodeAnalysis.Razor" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.CodeAnalysis.Razor.Workspaces" Category="shipoob" />
<PackageArtifact Include="Microsoft.CodeAnalysis.Remote.Razor" Category="shipoob" />
<PackageArtifact Include="Microsoft.Data.Sqlite" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Data.Sqlite.Core" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.DotNet.Watcher.Tools" Category="ship" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Design" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.InMemory" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Relational" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Relational.Specification.Tests" Category="ship" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Specification.Tests" Category="ship" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Sqlite" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.SqlServer" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Tools" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Category="ship" />
<PackageArtifact Include="Microsoft.Extensions.ActivatorUtilities.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.Caching.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Caching.Memory" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Caching.Redis" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Caching.SqlConfig.Tools" Category="ship" />
<PackageArtifact Include="Microsoft.Extensions.Caching.SqlServer" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.ClosedGenericMatcher.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.CommandLineUtils.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.Configuration" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.AzureKeyVault" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.Binder" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.CommandLine" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.DockerSecrets" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.FileExtensions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.Ini" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.Json" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.UserSecrets" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Configuration.Xml" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.CopyOnWriteDictionary.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.DependencyInjection" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.DependencyInjection.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.DependencyInjection.Specification.Tests" Category="ship" />
<PackageArtifact Include="Microsoft.Extensions.DiagnosticAdapter" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.FileProviders.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.FileProviders.Composite" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.FileProviders.Embedded" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.FileProviders.Physical" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.FileSystemGlobbing" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.HashCodeCombiner.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.Hosting.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Hosting" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Identity.Core" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Identity.Stores" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Localization" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Localization.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging.Abstractions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging.Analyzers" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.Logging.AzureAppServices" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging.Configuration" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging.Console" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging.Debug" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging.EventLog" Category="ship" />
<PackageArtifact Include="Microsoft.Extensions.Logging.EventSource" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Logging.Testing" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.Logging.TraceSource" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.ObjectMethodExecutor.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.ObjectPool" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Options" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Options.ConfigurationExtensions" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.ParameterDefaultValue.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.Primitives" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.Process.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.PropertyActivator.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.PropertyHelper.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.RazorViews.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.SecretManager.Tools" Category="ship" />
<PackageArtifact Include="Microsoft.Extensions.SecurityHelper.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.StackTrace.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.TypeNameHelper.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Extensions.WebEncoders" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Extensions.WebEncoders.Sources" Category="noship" />
<PackageArtifact Include="Microsoft.Net.Http.Headers" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.Owin.Security.Interop" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.LanguageServices.Razor" Category="shipoob" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.BrowserLink" Category="ship" Metapackage="true" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration.Contracts" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration.Core" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration.EntityFrameworkCore" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration.Templating" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGeneration.Utils" Category="ship" />
<PackageArtifact Include="Microsoft.VisualStudio.Web.CodeGenerators.Mvc" Category="ship" />
<PackageArtifact Include="Microsoft.Web.Xdt.Extensions" Category="shipoob" />
<PackageArtifact Include="RazorPageGenerator" Category="noship" />
</ItemGroup>
</Project>

View File

@ -1,12 +1,75 @@
<Project>
<!-- ASP.NET Core (non-Universe builds) -->
<ItemDefinitionGroup>
<ExternalDependency>
<!-- The NuGet package version. Floating versions not allowed. -->
<Version></Version>
<!-- Where does this pacakge come from -->
<Source></Source>
<!-- A list of warnings to suppress. -->
<NoWarn></NoWarn>
<!-- This dependency is 'Private', aka. it should not end up as a public-facing external dependency. This is validated by checking the nuspec on generated packages. -->
<Private>false</Private>
<!-- When true, this dependency should be mirrored to aspnetcore's nightly build feeds. -->
<Mirror>false</Mirror>
<!-- The dependency should be added to the partners lineup. -->
<Lineup>true</Lineup>
</ExternalDependency>
</ItemDefinitionGroup>
<!-- dotnet-core -->
<PropertyGroup>
<AspNetCoreFeed>https://dotnet.myget.org/F/aspnetcore-ci-dev/api/v3/index.json</AspNetCoreFeed>
<DotNetCoreFeed>https://dotnet.myget.org/f/dotnet-core/api/v3/index.json</DotNetCoreFeed>
</PropertyGroup>
<ItemGroup>
<ExternalDependency Include="Libuv" Version="1.10.0" Source="$(AspNetCoreFeed)"/>
<ExternalDependency Include="System.Memory" Version="4.4.0-preview3-25519-03" Source="$(DotNetCoreFeed)" Mirror="true" />
</ItemGroup>
<!-- CoreFX labs -->
<PropertyGroup>
<CoreFxLabFeed>https://dotnet.myget.org/f/dotnet-corefxlab/api/v3/index.json</CoreFxLabFeed>
</PropertyGroup>
<ItemGroup>
<ExternalDependency Include="System.Binary.Base64" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.Binary" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.Buffers.Experimental" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.Buffers.Primitives" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.Collections.Sequences" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.IO.Pipelines.Extensions" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.IO.Pipelines.Text.Primitives" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.IO.Pipelines" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Mirror="true" />
<ExternalDependency Include="System.Text.Encodings.Web.Utf8" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Mirror="true" />
<ExternalDependency Include="System.Text.Formatting" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.Text.Primitives" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.Text.Utf8String" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
<ExternalDependency Include="System.Threading.Tasks.Channels" Version="0.1.0-e170811-6" Source="$(CoreFxLabFeed)" Private="true" Mirror="true" />
</ItemGroup>
<!-- Roslyn -->
<PropertyGroup>
<RoslynFeed>https://dotnet.myget.org/F/roslyn/api/v3/index.json</RoslynFeed>
</PropertyGroup>
<ItemGroup>
<!-- These packages are required for Razor to build the VSIX for VS. -->
<ExternalDependency Include="Microsoft.CodeAnalysis.Common" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" Mirror="true" Lineup="false" />
<ExternalDependency Include="Microsoft.CodeAnalysis.CSharp" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" Mirror="true" Lineup="false" />
<ExternalDependency Include="Microsoft.CodeAnalysis.EditorFeatures.Text" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" Mirror="true" Lineup="false" />
<ExternalDependency Include="Microsoft.CodeAnalysis.Remote.Razor.ServiceHub" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" Mirror="true" Lineup="false" />
<ExternalDependency Include="Microsoft.CodeAnalysis.Workspaces.Common" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" Mirror="true" Lineup="false" />
<ExternalDependency Include="Microsoft.VisualStudio.LanguageServices.Razor.RemoteClient" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" Mirror="true" Lineup="false" />
<ExternalDependency Include="Microsoft.VisualStudio.LanguageServices" Version="2.6.0-beta1-61924-08" Source="$(RoslynFeed)" Private="true" Mirror="true" Lineup="false" />
</ItemGroup>
<!-- ASP.NET Core Module -->
<PropertyGroup>
<AspNetCoreModuleFeed>https://dotnet.myget.org/F/aspnetcoremodule/api/v3/index.json</AspNetCoreModuleFeed>
</PropertyGroup>
<ItemGroup>
<ExternalDependency Include="Microsoft.AspNetCore.AspNetCoreModule" Version="1.0.0-pre-10132" Source="$(AspNetCoreModuleFeed)" Private="true" Mirror="true" />
</ItemGroup>
<!-- nuget.org -->
@ -15,13 +78,14 @@
</PropertyGroup>
<ItemGroup>
<ExternalDependency Include="BenchmarkDotNet" Version="0.10.9" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="FSharp.Core" Version="4.2.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="FSharp.NET.Sdk" Version="1.0.5" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Google.Protobuf" Version="3.1.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="BenchmarkDotNet" Version="0.10.9" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="FSharp.Core" Version="4.2.1" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="FSharp.NET.Sdk" Version="1.0.5" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Google.Protobuf" Version="3.1.0" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Libuv" Version="1.10.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.1.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.AspNet.Identity.EntityFramework" Version="2.2.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.AspNet.WebApi.Client" Version="5.2.2" Source="$(AspNetCoreFeed)"/>
<ExternalDependency Include="Microsoft.AspNet.WebApi.Client" Version="5.2.2" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Azure.KeyVault" Version="2.3.2" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Azure.Management.Fluent" Version="1.1.3" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Build.Framework" Version="15.3.409" Source="$(DefaultNuGetFeed)"/>
@ -43,32 +107,32 @@
<ExternalDependency Include="Microsoft.Extensions.DependencyModel" Version="2.0.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="3.14.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.IdentityModel.Protocols.OpenIdConnect" Version="2.1.4" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.NET.Test.Sdk" Version="15.3.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.NET.Test.Sdk" Version="15.3.0" Source="$(DefaultNuGetFeed)" Private="true"/>
<ExternalDependency Include="Microsoft.NETCore.App" Version="1.0.5" TargetFramework="netcoreapp1.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.NETCore.App" Version="1.1.2" TargetFramework="netcoreapp1.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.NETCore.App" Version="2.0.0" TargetFramework="netcoreapp2.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.NETCore.Windows.ApiSets" Version="1.0.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Owin.Security.Cookies" Version="3.0.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Owin.Security" Version="3.0.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Owin.Testing" Version="3.0.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.Owin.Testing" Version="3.0.1" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.Owin" Version="3.0.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.ComponentModelHost" Version="15.0.26606" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Editor" Version="15.0.26606" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Language.Intellisense" Version="15.0.26606" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.LanguageServices" Version="2.3.1" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.OLE.Interop" Version="7.10.6070" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Shell.15.0" Version="15.0.26606" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.10.0" Version="10.0.30319" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.11.0" Version="11.0.61030" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.12.0" Version="12.0.30110" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.8.0" Version="8.0.50727" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.9.0" Version="9.0.30729" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop" Version="7.10.6071" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Text.Data" Version="15.0.26606" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.Text.UI" Version="15.0.26606" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Microsoft.VisualStudio.ComponentModelHost" Version="15.0.26606" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Editor" Version="15.0.26606" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Language.Intellisense" Version="15.0.26606" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.LanguageServices" Version="2.3.1" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.OLE.Interop" Version="7.10.6070" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Shell.15.0" Version="15.0.26606" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.10.0" Version="10.0.30319" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.11.0" Version="11.0.61030" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.12.0" Version="12.0.30110" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.8.0" Version="8.0.50727" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop.9.0" Version="9.0.30729" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Shell.Interop" Version="7.10.6071" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Text.Data" Version="15.0.26606" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="Microsoft.VisualStudio.Text.UI" Version="15.0.26606" Source="$(DefaultNuGetFeed)" Private="true" />
<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)"/>
<ExternalDependency Include="Moq" Version="4.7.49" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="MsgPack.Cli" Version="0.9.0-beta2" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="NETStandard.Library" Version="2.0.0" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="Newtonsoft.Json.Bson" Version="1.0.1" Source="$(DefaultNuGetFeed)"/>
@ -130,7 +194,7 @@
<ExternalDependency Include="xunit.assert" Version="2.3.0-beta4-build3742" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="xunit.core" Version="2.3.0-beta4-build3742" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="xunit.extensibility.core" Version="2.3.0-beta4-build3742" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="xunit.runner.visualstudio" Version="2.3.0-beta4-build3742" Source="$(DefaultNuGetFeed)"/>
<ExternalDependency Include="xunit.runner.visualstudio" Version="2.3.0-beta4-build3742" Source="$(DefaultNuGetFeed)" Private="true" />
<ExternalDependency Include="xunit" Version="2.3.0-beta4-build3742" Source="$(DefaultNuGetFeed)"/>
</ItemGroup>

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Internal.AspNetCore.Partners.Lineup</id>
<version>$version$</version>
<authors>Microsoft</authors>
<description>This package used to unify external dependency versions. Internal use only.</description>
<packageTypes>
<packageType name="lineup" />
</packageTypes>
<dependencies>
<!--
The list of dependencies will be augmented automatically by the build script.
-->
</dependencies>
</metadata>
</package>

View File

@ -4,7 +4,7 @@
<id>Internal.AspNetCore.Universe.Lineup</id>
<version>$version$</version>
<authors>Microsoft</authors>
<description>This package used to unify dependency versions across all Universe repos. Internal use only.</description>
<description>This package used to unify ASP.NET Core package versions across all Universe repos. Internal use only.</description>
<packageTypes>
<packageType name="lineup" />
</packageTypes>

23
build/push.targets Normal file
View File

@ -0,0 +1,23 @@
<Project>
<Target Name="Push">
<Error Text="Missing required property: NuGetPublishFeed" Condition=" '$(NuGetPublishFeed)' == '' "/>
<ItemGroup>
<_PackagesToPush Include="$(BuildDir)*.nupkg" />
<_PackagesToPush Include="$(ArtifactsDir)mirror\*.nupkg" />
<_LineupPackagesToPush Include="$(BuildDir)*.nupkg" />
</ItemGroup>
<PushNuGetPackages
Packages="@(_PackagesToPush)"
Feed="$(NuGetPublishFeed)"
Condition="@(_PackagesToPush->Count()) != 0"
ApiKey="$(APIKey)" />
<PushNuGetPackages
Packages="@(_LineupPackagesToPush)"
Feed="$(NuGetPublishFeed)"
Condition="@(_LineupPackagesToPush->Count()) != 0"
ApiKey="$(APIKey)" />
</Target>
</Project>

View File

@ -1,13 +1,10 @@
<Project>
<Import Project="..\version.xml" />
<Import Project="artifacts.props" />
<Import Project="dependencies.props" />
<PropertyGroup>
<!-- This repo does not have solutions to build -->
<DisableDefaultTargets>true</DisableDefaultTargets>
<Version>$(VersionPrefix)</Version>
<Version Condition="'$(VersionSuffix)' != ''">$(Version)-$(VersionSuffix)</Version>
<Version Condition="'$(BuildNumber)' != ''">$(Version)-$(BuildNumber)</Version>
</PropertyGroup>
</Project>

View File

@ -2,8 +2,6 @@
<Import Project="RepositoryBuild.targets" />
<PropertyGroup>
<NuGetPublishVolatileFeed>https://dotnet.myget.org/F/aspnetcore-volatile-dev/api/v2/package</NuGetPublishVolatileFeed>
<LineupBuildDir>$(ArtifactsDir)lineups\</LineupBuildDir>
<_CloneRepositoryRoot>$(RepositoryRoot).r\</_CloneRepositoryRoot>
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\</_DependencyBuildDirectory>
@ -20,75 +18,84 @@
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'=='' AND '$(CompileOnly)'=='true'">/t:Package /t:VerifyPackages</_RepositoryBuildTargets>
<_RepositoryBuildTargets Condition="'$(_RepositoryBuildTargets)'==''">/t:Verify</_RepositoryBuildTargets>
<PrepareDependsOn>$(PrepareDependsOn);CleanUniverseArtifacts</PrepareDependsOn>
<CleanDependsOn>$(CleanDependsOn);CleanUniverseArtifacts</CleanDependsOn>
<BuildDependsOn>$(BuildDependsOn);CloneRepositories;BuildRepositories</BuildDependsOn>
<!-- For external packages that come from feeds will mirrored to aspnetcore feeds. -->
<IntermediateMirrorPackageDir>$(IntermediateDir)mirror\</IntermediateMirrorPackageDir>
<!-- For external packages that come from feeds we don't mirror. -->
<IntermediateExternalPackageDir>$(IntermediateDir)ext\</IntermediateExternalPackageDir>
<PrepareDependsOn>$(PrepareDependsOn);VerifyPackageArtifactConfig;CleanArtifacts;CleanUniverseArtifacts</PrepareDependsOn>
<RestoreDependsOn>$(RestoreDependsOn);RestoreExternalDependencies</RestoreDependsOn>
<CleanDependsOn>$(CleanDependsOn);CleanArtifacts;CleanUniverseArtifacts</CleanDependsOn>
<CompileDependsOn>$(CompileDependsOn);CloneRepositories;BuildRepositories</CompileDependsOn>
<PackageDependsOn>$(PackageDependsOn);CopyPackagesByCategory</PackageDependsOn>
<VerifyDependsOn>$(VerifyDependsOn);VerifyCoherentVersions</VerifyDependsOn>
</PropertyGroup>
<Import Project="$(_RepositoryListToImport)" />
<Target Name="CleanUniverseArtifacts">
<RemoveDir Directories="$(_CloneRepositoryRoot)" Condition="Exists('$(_CloneRepositoryRoot)') AND '$(ClearRepositoryCloneRoot)' != 'false'" />
<RemoveDir Directories="$(BuildDir);$(LineupBuildDir);$(IntermediateDir)" />
<MakeDir Directories="$(BuildDir);$(LineupBuildDir)" />
<RemoveDir Directories="$(LineupBuildDir)" />
<MakeDir Directories="$(LineupBuildDir)" />
</Target>
<Target Name="_ReadArtifactDependencyPackages">
<ItemGroup>
<_DependencyPackageFiles Include="$(_DependencyPackagesDirectory)*.nupkg"
Exclude="$(_DependencyPackagesDirectory)*.symbols.nupkg"
Condition=" '$(_DependencyPackagesDirectory)' != '' " />
<_DependencyLineupFiles Include="$(_DependencyLineupDir)*.nupkg"
Exclude="$(_DependencyLineupDir)Internal.AspNetCore.Universe.Lineup.*.nupkg"
Condition=" '$(_DependencyLineupDir)' != '' " />
</ItemGroup>
<RepoTasks.ReadPackageIdentity PackageFiles="@(_DependencyPackageFiles)">
<Output TaskParameter="PackageDefinitions" ItemName="ArtifactDependency" />
</RepoTasks.ReadPackageIdentity>
<RepoTasks.ReadPackageDependencies PackageFiles="@(_DependencyLineupFiles)">
<Output TaskParameter="PackageDefinitions" ItemName="DependencyLineupDependency" />
</RepoTasks.ReadPackageDependencies>
<Target Name="RestoreExternalDependencies">
<DownloadNuGetPackages
Packages="@(ExternalDependency->WithMetadataValue('Mirror', 'true'))"
DestinationFolder="$(IntermediateMirrorPackageDir)" />
</Target>
<Target Name="GenerateLineup" DependsOnTargets="_GenerateBuildGraph;_ReadArtifactDependencyPackages">
<ItemGroup>
<_Dependency Remove="@(_Dependency)" />
<Target Name="ResolveRepoInfo" DependsOnTargets="_PrepareRepositories">
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="GetArtifactInfo"
Properties="RepositoryRoot=$(_CloneRepositoryRoot)%(Repository.Identity)\;KoreBuildRestoreTargetsImported=true;Configuration=$(Configuration);BuildNumber=$(BuildNumber)"
ContinueOnError="WarnAndContinue">
<Output TaskParameter="TargetOutputs" ItemName="ArtifactInfo" />
</MSBuild>
<!-- order matters. It defines the precendence of what ends up in the lineup. -->
<_Dependency Include="@(PackagesProduced)" />
<_Dependency Include="@(ExternalDependency)" Exclude="@(_Dependency)" />
<!-- avoid duplicating dependency lineups into the universe lineup -->
<_Dependency Include="@(ArtifactDependency)" Exclude="@(_Dependency);@(DependencyLineupDependency)" />
</ItemGroup>
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="ResolveSolutions"
Properties="RepositoryRoot=$(_CloneRepositoryRoot)%(Repository.Identity)\;KoreBuildRestoreTargetsImported=true;Configuration=$(Configuration);BuildNumber=$(BuildNumber)"
ContinueOnError="WarnAndContinue">
<Output TaskParameter="TargetOutputs" ItemName="Solution" />
</MSBuild>
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)..\lineups\Internal.AspNetCore.Universe.Lineup.nuspec"
<Error Text="No solutions were found in '$(_CloneRepositoryRoot)'" Condition="@(Solution->Count()) == 0" />
</Target>
<Target Name="GenerateLineup" DependsOnTargets="ResolveRepoInfo">
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)lineups\Internal.AspNetCore.Partners.Lineup.nuspec"
DestinationFolder="$(LineupBuildDir)"
Properties="version=$(Version)"
Dependencies="@(_Dependency)">
Dependencies="@(ExternalDependency->WithMetadataValue('Lineup', 'true'))">
<Output TaskParameter="Packages" ItemName="LineupPackage" />
</PackNuSpec>
</Target>
<Target Name="PublishLineupPackage" Condition="'$(PublishPackages)'=='true' AND @(LineupPackage->Count()) != 0" >
<PushNuGetPackages
Packages="@(LineupPackage)"
Feed="$(NuGetPublishVolatileFeed)"
ApiKey="$(APIKey)" />
<ItemGroup>
<PackageArtifactInfo Include="%(ArtifactInfo.PackageId)" Version="%(ArtifactInfo.Version)" Condition="'%(ArtifactInfo.ArtifactType)' == 'NuGetPackage'" />
</ItemGroup>
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)lineups\Internal.AspNetCore.Universe.Lineup.nuspec"
DestinationFolder="$(LineupBuildDir)"
Properties="version=$(Version)"
Dependencies="@(PackageArtifactInfo)">
<Output TaskParameter="Packages" ItemName="LineupPackage" />
</PackNuSpec>
</Target>
<Target Name="_PrepareRepositories">
<ItemGroup Condition="'$(KOREBUILD_REPOSITORY_INCLUDE)'!=''">
<_RepositoriesToInclude Include="$(KOREBUILD_REPOSITORY_INCLUDE)" />
<Repository Update="@(Repository)" Build="false" />
<Repository
Remove="@(Repository)"
Condition="'@(Repository)'!='@(_RepositoriesToInclude)' AND '%(Identity)'!=''" />
Update="@(Repository)"
Condition="'@(Repository)'=='@(_RepositoriesToInclude)' AND '%(Identity)'!=''"
Build="true" />
</ItemGroup>
<ItemGroup Condition="'$(KOREBUILD_REPOSITORY_EXCLUDE)'!=''">
<RepositoriesToExclude Include="$(KOREBUILD_REPOSITORY_EXCLUDE)" />
<Repository Remove="@(RepositoriesToExclude)" />
<Repository Update="@(RepositoriesToExclude)" Build="false" />
</ItemGroup>
<Error Text="KOREBUILD_REPOSITORY_EXCLUDE AND KOREBUILD_REPOSITORY_INCLUDE are specified."
@ -102,6 +109,8 @@
Command="git config --get remote.origin.url"
ConsoleToMSBuild="true"
WorkingDirectory="$(RepositoryRoot)"
IgnoreStandardErrorWarningFormat="true"
StandardOutputImportance="low"
IgnoreExitCode="true">
<Output TaskParameter="ConsoleOutput" PropertyName="UniverseCloneUrl" />
</Exec>
@ -166,12 +175,14 @@
Condition="'$(GateBranchExitCode)'!='0'"
WorkingDirectory="$(_CloneRepositoryRoot)"
EnvironmentVariables="GIT_TERMINAL_PROMPT=0"
IgnoreStandardErrorWarningFormat="true"
Timeout="180000" />
<Message Text="Resetting $(CloneRepository) commit to $(CloneRepositoryCommit) ..." Importance="High" Condition="'$(CloneRepositoryCommit)'!=''"/>
<Exec
Command="git reset --quiet --hard $(CloneRepositoryCommit)"
WorkingDirectory="$(_CloneRepositoryRoot)$(CloneRepository)"
IgnoreStandardErrorWarningFormat="true"
Condition="'$(CloneRepositoryCommit)'!=''" />
</Target>
@ -183,7 +194,8 @@
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="ResolveSolutions"
Properties="RepositoryRoot=$(_CloneRepositoryRoot)%(Repository.Identity)\"
ContinueOnError="WarnAndContinue">
ContinueOnError="WarnAndContinue"
Condition="%(Repository.Build)">
<Output TaskParameter="TargetOutputs" ItemName="Solution" />
</MSBuild>
@ -213,12 +225,11 @@
<Target Name="_GenerateBuildGraph" DependsOnTargets="_GenerateRestoreGraphSpecs">
<RepoTasks.CalculateBuildGraph
Repositories="@(Repository)"
Repositories="@(Repository->WithMetadataValue('Build', 'true'))"
StartGraphAt="$(BuildGraphOf)"
DefaultPackageVersion="$(Version)"
PackageSpecsDirectory="$(_RestoreGraphSpecsDirectory)">
<Output TaskParameter="RepositoriesToBuildInOrder" ItemName="RepositoryToBuildInOrder" />
<Output TaskParameter="PackagesProduced" ItemName="PackagesProduced" />
</RepoTasks.CalculateBuildGraph>
</Target>
@ -227,16 +238,46 @@
NuGetConfigPath="$(_CloneRepositoryRoot)%(Repository.Identity)\NuGet.config"
SourceName="Dependencies"
SourceUri="$(_DependencyPackagesDirectory)"
Condition="Exists('$(_DependencyPackagesDirectory)')" />
Condition="Exists('$(_DependencyPackagesDirectory)') AND %(Repository.Build)" />
<MakeDir Directories="$(BuildDir)" Condition="!Exists('$(BuildDir)')" />
<UpdatePackageSource
NuGetConfigPath="$(_CloneRepositoryRoot)%(Repository.Identity)\NuGet.config"
SourceName="Artifacts"
Condition="%(Repository.Build)"
SourceUri="$(BuildDir)" />
</Target>
<Target Name="CopyPackagesByCategory">
<ItemGroup>
<PackageArtifactFile Include="$(BuildDir)*.nupkg" Exclude="$(BuildDir)*.symbols.nupkg" />
<ExternalDependencyPackage Include="@(ExternalDependency->WithMetadataValue('Mirror', 'true'))" Category="mirror" />
<_MirroredPackageFiles Include="$(IntermediateMirrorPackageDir)*.nupkg" />
</ItemGroup>
<RepoTasks.CopyPackagesToSplitFolders
Packages="@(PackageArtifact);@(ExternalDependencyPackage)"
Files="@(PackageArtifactFile);@(_MirroredPackageFiles)"
DestinationFolder="$(ArtifactsDir)"
Overwrite="true" />
</Target>
<Target Name="VerifyPackageArtifactConfig">
<Error Text="Invalid configuration of %(PackageArtifact.Identity). Packages marked as Metapackage='true' must be Category='ship'."
Condition="'%(PackageArtifact.Category)' != 'ship' AND '%(PackageArtifact.Metapackage)' == 'true' " />
</Target>
<Target Name="VerifyCoherentVersions" DependsOnTargets="ResolveRepoInfo">
<ItemGroup>
<ShippingPackageFiles Include="$(ArtifactsDir)ship\*.nupkg" />
</ItemGroup>
<RepoTasks.VerifyCoherentVersions
PackageFiles="@(ShippingPackageFiles)"
ExternalDependencies="@(ExternalDependency)" />
</Target>
<Target Name="_CreateRepositoriesListWithCommits" DependsOnTargets="_GetRepositoryCommits">
<PropertyGroup>
<RepositoryFileWithCommit>$(BuildDir)$(_RepositoryListFileName)</RepositoryFileWithCommit>

View File

@ -2,5 +2,6 @@
<Project>
<ItemGroup>
<PackageLineup Update="Internal.AspNetCore.Universe.Lineup" Version="$(Universe_Version)" />
<PackageLineup Update="Internal.AspNetCore.Partners.Lineup" Version="$(Universe_Version)" />
</ItemGroup>
</Project>

View File

@ -5,6 +5,9 @@
<PolicyRestorePackagesPath>$([MSBuild]::NormalizeDirectory($(Universe_IntermediateDir)))packages\</PolicyRestorePackagesPath>
<!-- Restore from the locally-built artifacts directory -->
<PolicyRestoreAdditionalSources Condition=" Exists('$(Universe_LineupBuildDir)') ">$(PolicyRestoreAdditionalSources);$(Universe_LineupBuildDir)</PolicyRestoreAdditionalSources>
<PolicyRestoreAdditionalSources Condition=" Exists('$(Universe_DependencyLineupDir)') ">$(PolicyRestoreAdditionalSources);$(Universe_DependencyLineupDir)</PolicyRestoreAdditionalSources>
</PropertyGroup>
<ItemGroup>
<AdditionalRestoreSources Include="$(Universe_AdditionalRestoreSources)" Condition="'$(Universe_AdditionalRestoreSources)' != ''"/>
</ItemGroup>
</Project>

View File

@ -35,9 +35,6 @@ namespace RepoTasks
[Output]
public ITaskItem[] RepositoriesToBuildInOrder { get; set; }
[Output]
public ITaskItem[] PackagesProduced { get; set; }
public override bool Execute()
{
var graphSpecProvider = new DependencyGraphSpecProvider(PackageSpecsDirectory.Trim());
@ -74,17 +71,6 @@ namespace RepoTasks
.Select(r => r.repository)
.ToArray();
var packages = new List<ITaskItem>();
foreach (var project in repositories.SelectMany(p => p.Projects))
{
var pkg = new TaskItem(project.Name);
var version = project.Version ?? DefaultPackageVersion;
pkg.SetMetadata("Version", version);
packages.Add(pkg);
}
PackagesProduced = packages.ToArray();
return true;
}
}

View File

@ -0,0 +1,110 @@
// 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.IO;
using System.Text;
using Microsoft.Build.Framework;
using NuGet.Packaging;
using NuGet.Packaging.Core;
using RepoTasks.ProjectModel;
namespace RepoTasks
{
public class CopyPackagesToSplitFolders : Microsoft.Build.Utilities.Task
{
/// <summary>
/// The item group containing the nuget packages to split in different folders.
/// </summary>
[Required]
public ITaskItem[] Packages { get; set; }
[Required]
public ITaskItem[] Files { get; set; }
/// <summary>
/// The folder where packages should be copied. Subfolders will be created based on package category.
/// </summary>
[Required]
public string DestinationFolder { get; set; }
public bool Overwrite { get; set; }
public override bool Execute()
{
if (Files?.Length == 0)
{
Log.LogError("No packages were found.");
return false;
}
var expectedPackages = PackageCollection.FromItemGroup(Packages);
Directory.CreateDirectory(DestinationFolder);
foreach (var file in Files)
{
PackageIdentity identity;
using (var reader = new PackageArchiveReader(file.ItemSpec))
{
identity = reader.GetIdentity();
}
if (!expectedPackages.TryGetCategory(identity.Id, out var category))
{
Log.LogError($"Unexpected package artifact with id: {identity.Id}");
continue;
}
string destDir;
switch (category)
{
case PackageCategory.Unknown:
throw new InvalidOperationException($"Package {identity} does not have a recognized package category.");
case PackageCategory.Shipping:
destDir = Path.Combine(DestinationFolder, "ship");
break;
case PackageCategory.NoShip:
destDir = Path.Combine(DestinationFolder, "noship");
break;
case PackageCategory.ShipOob:
destDir = Path.Combine(DestinationFolder, "shipoob");
break;
case PackageCategory.Mirror:
destDir = Path.Combine(DestinationFolder, "mirror");
break;
default:
throw new NotImplementedException();
}
Directory.CreateDirectory(destDir);
var destFile = Path.Combine(destDir, Path.GetFileName(file.ItemSpec));
if (!Overwrite && File.Exists(destFile))
{
Log.LogError($"File already exists in {destFile}");
continue;
}
Log.LogMessage($"Copying {file.ItemSpec} to {destFile}");
File.Copy(file.ItemSpec, destFile, Overwrite);
expectedPackages.Remove(identity.Id);
}
if (expectedPackages.Count != 0)
{
var error = new StringBuilder();
foreach (var key in expectedPackages.Keys)
{
error.Append(" - ").AppendLine(key);
}
Log.LogError($"Expected the following packages, but they were not found:" + error.ToString());
return false;
}
return !Log.HasLoggedErrors;
}
}
}

View File

@ -0,0 +1,15 @@
// 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.
namespace RepoTasks.ProjectModel
{
public enum PackageCategory
{
Unknown = 0,
Shipping,
NoShip,
ShipOob,
Mirror,
}
}

View File

@ -0,0 +1,69 @@
// 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.IO;
using System.Linq;
using Microsoft.Build.Framework;
namespace RepoTasks.ProjectModel
{
public class PackageCollection
{
private readonly IDictionary<string, PackageCategory> _packages = new Dictionary<string, PackageCategory>(StringComparer.OrdinalIgnoreCase);
private PackageCollection()
{
}
public bool TryGetCategory(string packageId, out PackageCategory category) => _packages.TryGetValue(packageId, out category);
public void Remove(string packageId) => _packages.Remove(packageId);
public int Count => _packages.Count;
public IEnumerable<string> Keys => _packages.Keys;
public static PackageCollection FromItemGroup(ITaskItem[] items)
{
var list = new PackageCollection();
if (items == null)
{
return list;
}
foreach (var item in items)
{
PackageCategory category;
switch (item.GetMetadata("Category")?.ToLowerInvariant())
{
case "ship":
category = PackageCategory.Shipping;
break;
case "noship":
category = PackageCategory.NoShip;
break;
case "shipoob":
category = PackageCategory.ShipOob;
break;
case "mirror":
category = PackageCategory.Mirror;
break;
default:
category = PackageCategory.Unknown;
break;
}
if (list._packages.ContainsKey(item.ItemSpec))
{
throw new InvalidDataException($"Duplicate package id detected: {item.ItemSpec}");
}
list._packages.Add(item.ItemSpec, category);
}
return list;
}
}
}

View File

@ -0,0 +1,42 @@
// 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.IO;
using NuGet.Frameworks;
using NuGet.Packaging;
using NuGet.Versioning;
namespace RepoTasks.ProjectModel
{
internal class PackageInfo
{
public PackageInfo(string id,
NuGetVersion version,
IReadOnlyList<PackageDependencyGroup> dependencyGroups,
string source,
string packageType = "Dependency")
{
if (string.IsNullOrEmpty(id))
{
throw new ArgumentException(nameof(id));
}
Id = id;
Version = version ?? throw new ArgumentNullException(nameof(version));
PackageType = packageType;
Source = source;
DependencyGroups = dependencyGroups ?? Array.Empty<PackageDependencyGroup>();
}
public string Id { get; }
public NuGetVersion Version { get; }
public string PackageType { get; }
/// <summary>
/// Can be a https feed or a file path. May be null.
/// </summary>
public string Source { get; }
public IReadOnlyList<PackageDependencyGroup> DependencyGroups { get; }
}
}

View File

@ -1,44 +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;
using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using NuGet.Packaging;
namespace RepoTasks
{
public class ReadPackageDependencies : Task
{
[Required]
public ITaskItem[] PackageFiles { get; set; }
[Output]
public ITaskItem[] PackageDefinitions { get; set; }
public override bool Execute()
{
PackageDefinitions = PackageFiles.SelectMany(item =>
{
using (var package = new PackageArchiveReader(item.ItemSpec))
{
var identity = package.GetIdentity();
var metadata = new NuspecReader(package.GetNuspec());
var groups = metadata.GetDependencyGroups()?.ToList();
if (groups == null)
{
return Enumerable.Empty<ITaskItem>();
}
return groups.SelectMany(g =>
g.Packages.Select(p => new TaskItem(p.Id, new Hashtable { ["Version"] = p.VersionRange.MinVersion.ToString() })));
}
})
.ToArray();
return true;
}
}
}

View File

@ -1,37 +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.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using NuGet.Packaging;
namespace RepoTasks
{
public class ReadPackageIdentity : Task
{
[Required]
public ITaskItem[] PackageFiles { get; set; }
[Output]
public ITaskItem[] PackageDefinitions { get; set; }
public override bool Execute()
{
PackageDefinitions = PackageFiles.Select(item =>
{
using (var package = new PackageArchiveReader(item.ItemSpec))
{
var identity = package.GetIdentity();
var packageItem = new TaskItem(identity.Id);
packageItem.SetMetadata("Version", identity.Version.ToString());
return packageItem;
}
})
.ToArray();
return true;
}
}
}

View File

@ -4,7 +4,7 @@
</PropertyGroup>
<UsingTask TaskName="RepoTasks.CalculateBuildGraph" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.CopyPackagesToSplitFolders" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.PinVersions" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.ReadPackageIdentity" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.ReadPackageDependencies" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.VerifyCoherentVersions" AssemblyFile="$(_RepoTaskAssembly)" />
</Project>

View File

@ -0,0 +1,137 @@
// 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.IO;
using System.Linq;
using System.Text;
using Microsoft.Build.Framework;
using NuGet.Frameworks;
using NuGet.Packaging;
using NuGet.Packaging.Core;
using NuGet.Versioning;
using RepoTasks.ProjectModel;
namespace RepoTasks
{
public class VerifyCoherentVersions : Microsoft.Build.Utilities.Task
{
[Required]
public ITaskItem[] PackageFiles { get; set; }
[Required]
public ITaskItem[] ExternalDependencies { get; set; }
public override bool Execute()
{
var packageLookup = new Dictionary<string, PackageInfo>(StringComparer.OrdinalIgnoreCase);
var dependencyMap = new Dictionary<string, List<ExternalDependency>>(StringComparer.OrdinalIgnoreCase);
foreach (var dep in ExternalDependencies)
{
if (!dependencyMap.TryGetValue(dep.ItemSpec, out var list))
{
dependencyMap[dep.ItemSpec] = list = new List<ExternalDependency>();
}
var externalDep = new ExternalDependency
{
Version = dep.GetMetadata("Version"),
IsPrivate = bool.TryParse(dep.GetMetadata("Private"), out var isPrivate) && isPrivate,
};
list.Add(externalDep);
}
foreach (var file in PackageFiles)
{
PackageInfo package;
using (var reader = new PackageArchiveReader(file.ItemSpec))
{
var identity = reader.GetIdentity();
var metadata = new PackageBuilder(reader.GetNuspec(), basePath: null);
package = new PackageInfo(identity.Id, identity.Version,
source: Path.GetDirectoryName(file.ItemSpec),
dependencyGroups: metadata.DependencyGroups.ToArray());
}
if (packageLookup.TryGetValue(package.Id, out var existingPackage))
{
throw new Exception("Multiple copies of the following package were found: " +
Environment.NewLine +
existingPackage +
Environment.NewLine +
package);
}
packageLookup[package.Id] = package;
}
foreach (var packageInfo in packageLookup.Values)
{
Visit(packageLookup, dependencyMap, packageInfo);
}
Log.LogMessage(MessageImportance.High, $"Verified {PackageFiles.Length} package(s) have coherent versions");
return !Log.HasLoggedErrors;
}
private class ExternalDependency
{
public string Version { get; set; }
public bool IsPrivate { get; set; }
}
private void Visit(
IReadOnlyDictionary<string, PackageInfo> packageLookup,
IReadOnlyDictionary<string, List<ExternalDependency>> dependencyMap,
PackageInfo packageInfo)
{
Log.LogMessage(MessageImportance.Low, $"Processing package {packageInfo.Id}");
try
{
foreach (var dependencySet in packageInfo.DependencyGroups)
{
foreach (var dependency in dependencySet.Packages)
{
PackageInfo dependencyPackageInfo;
var depVersion = dependency.VersionRange.MinVersion.ToString();
if (dependencyMap.TryGetValue(dependency.Id, out var externalDependencies))
{
var matchedVersion = externalDependencies.FirstOrDefault(d => depVersion.Equals(d.Version));
if (matchedVersion == null)
{
var versions = string.Join(" or ", externalDependencies.Select(d => d.Version));
Log.LogError($"Package {packageInfo.Id} has an external dependency on the wrong version of {dependency.Id}. "
+ $"It uses {depVersion} but only {versions} is allowed.");
}
else if (matchedVersion.IsPrivate)
{
Log.LogError($"Package {packageInfo.Id} has an external dependency on {dependency.Id}/{depVersion} which is marked as Private=true.");
}
continue;
}
else if (!packageLookup.TryGetValue(dependency.Id, out dependencyPackageInfo))
{
Log.LogError($"Package {packageInfo.Id} has an undefined external dependency on {dependency.Id}/{depVersion}");
continue;
}
if (dependencyPackageInfo.Version != dependency.VersionRange.MinVersion)
{
// For any dependency in the universe
// Add a mismatch if the min version doesn't work out
// (we only really care about >= minVersion)
Log.LogError($"{packageInfo.Id} depends on {dependency.Id} " +
$"{dependency.VersionRange} ({dependencySet.TargetFramework}) when the latest build is {depVersion}.");
}
}
}
}
catch (Exception ex)
{
Log.LogError($"Unexpected error while attempting to verify package {packageInfo.Id}.\r\n{ex}");
}
}
}
}

View File

@ -1,8 +1,7 @@
<!-- This file may be overwritten by automation. -->
<Project>
<PropertyGroup>
<KoreBuildChannel>dev</KoreBuildChannel>
<VersionPrefix>2.1.0</VersionPrefix>
<VersionSuffix>preview1</VersionSuffix>
<VersionSuffix Condition=" '$(VersionSuffix)' != '' AND '$(BuildNumber)' != '' ">$(VersionSuffix)-$(BuildNumber)</VersionSuffix>
</PropertyGroup>
</Project>