Support partial-graph builds
This merges pre-existing packages from previous builds of Universe with the list of packages to be produced in the current run. Pre-existing packages are expected to be in .deps/build/ and are expected to have only one version of a package id in that folder. This also requires any additional lineups to be in .deps/lineups/ so they can be filtered from the Internal.AspNetCore.Universe.Lineup file
This commit is contained in:
parent
708ae1797f
commit
425c1b83e6
|
|
@ -7,6 +7,7 @@
|
||||||
<LineupBuildDir>$(ArtifactsDir)lineups\</LineupBuildDir>
|
<LineupBuildDir>$(ArtifactsDir)lineups\</LineupBuildDir>
|
||||||
<_CloneRepositoryRoot>$(RepositoryRoot).r\</_CloneRepositoryRoot>
|
<_CloneRepositoryRoot>$(RepositoryRoot).r\</_CloneRepositoryRoot>
|
||||||
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\</_DependencyBuildDirectory>
|
<_DependencyBuildDirectory>$(RepositoryRoot).deps\build\</_DependencyBuildDirectory>
|
||||||
|
<_DependencyLineupDir>$(RepositoryRoot).deps\lineups\</_DependencyLineupDir>
|
||||||
<_DependencyPackagesDirectory>$(_DependencyBuildDirectory)</_DependencyPackagesDirectory>
|
<_DependencyPackagesDirectory>$(_DependencyBuildDirectory)</_DependencyPackagesDirectory>
|
||||||
<_RestoreGraphSpecsDirectory>$(IntermediateDir)package-specs\</_RestoreGraphSpecsDirectory>
|
<_RestoreGraphSpecsDirectory>$(IntermediateDir)package-specs\</_RestoreGraphSpecsDirectory>
|
||||||
|
|
||||||
|
|
@ -32,11 +33,40 @@
|
||||||
<MakeDir Directories="$(BuildDir);$(LineupBuildDir)" />
|
<MakeDir Directories="$(BuildDir);$(LineupBuildDir)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="GenerateLineup" DependsOnTargets="_GenerateBuildGraph">
|
<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>
|
||||||
|
|
||||||
|
<Target Name="GenerateLineup" DependsOnTargets="_GenerateBuildGraph;_ReadArtifactDependencyPackages">
|
||||||
|
<ItemGroup>
|
||||||
|
<_Dependency Remove="@(_Dependency)" />
|
||||||
|
|
||||||
|
<!-- 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>
|
||||||
|
|
||||||
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)..\lineups\Internal.AspNetCore.Universe.Lineup.nuspec"
|
<PackNuSpec NuSpecPath="$(MSBuildThisFileDirectory)..\lineups\Internal.AspNetCore.Universe.Lineup.nuspec"
|
||||||
DestinationFolder="$(LineupBuildDir)"
|
DestinationFolder="$(LineupBuildDir)"
|
||||||
Properties="version=$(Version)"
|
Properties="version=$(Version)"
|
||||||
Dependencies="@(PackagesProduced);@(ExternalDependency)">
|
Dependencies="@(_Dependency)">
|
||||||
<Output TaskParameter="Packages" ItemName="LineupPackage" />
|
<Output TaskParameter="Packages" ItemName="LineupPackage" />
|
||||||
</PackNuSpec>
|
</PackNuSpec>
|
||||||
</Target>
|
</Target>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -5,4 +5,6 @@
|
||||||
|
|
||||||
<UsingTask TaskName="RepoTasks.CalculateBuildGraph" AssemblyFile="$(_RepoTaskAssembly)" />
|
<UsingTask TaskName="RepoTasks.CalculateBuildGraph" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||||
<UsingTask TaskName="RepoTasks.PinVersions" AssemblyFile="$(_RepoTaskAssembly)" />
|
<UsingTask TaskName="RepoTasks.PinVersions" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||||
|
<UsingTask TaskName="RepoTasks.ReadPackageIdentity" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||||
|
<UsingTask TaskName="RepoTasks.ReadPackageDependencies" AssemblyFile="$(_RepoTaskAssembly)" />
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue