Generate and set DotNetRestoreSourcePropsPath

This commit is contained in:
Nate McMaster 2017-10-02 12:59:06 -07:00
parent a6a01db7a6
commit 372be2f638
6 changed files with 82 additions and 20 deletions

11
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}

View File

@ -18,8 +18,6 @@
</PropertyGroup>
<ItemGroup>
<PinPackageSources Include="$(BuildDir)" />
<PinPackageSources Include="$(_DependencyPackagesDirectory)" Condition="Exists('$(_DependencyPackagesDirectory)')" />
<PinnedArtifactInfo Include="@(ArtifactInfo)" Condition="'$(BuildGraphOf)' == ''" />
</ItemGroup>
@ -35,7 +33,6 @@
Artifacts="@(PinnedArtifactInfo)"
Repository="%(RepositoryBuildOrder.Identity)"
OutputPath="%(RepositoryBuildOrder.RepositoryPath)\build\dependencies.g.targets"
RestoreAdditionalSources="@(PinPackageSources)"
UseFloatingVersions="false"
Condition="'%(RepositoryBuildOrder.RepositoryPath)' != ''"
BuildNumber="$(BuildNumber)" />
@ -51,6 +48,7 @@
<Target Name="_BuildRepository">
<PropertyGroup>
<!-- If there are duplicate properties, the properties which are defined later in the order would override the earlier ones -->
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:DotNetRestoreSourcePropsPath=$(GeneratedRestoreSourcesPropsPath)</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:DotNetPackageVersionPropsPath=$(GeneratedPackageVersionPropsPath)</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) /p:BuildNumber=$(BuildNumber) /p:Configuration=$(Configuration) /p:CommitHash=$(CommitHash)</RepositoryBuildArguments>
<RepositoryBuildArguments>$(RepositoryBuildArguments) /noconsolelogger '/l:RepoTasks.FlowLogger,$(MSBuildThisFileDirectory)tasks\bin\publish\RepoTasks.dll;Summary;FlowId=$(RepositoryToBuild)'</RepositoryBuildArguments>

View File

@ -20,10 +20,10 @@
<!-- For external packages that come from feeds we don't mirror. -->
<IntermediateExternalPackageDir>$(IntermediateDir)ext\</IntermediateExternalPackageDir>
<GeneratedPackageVersionPropsPath>$(IntermediateDir)dependencies.props</GeneratedPackageVersionPropsPath>
<GeneratedRestoreSourcesPropsPath>$(IntermediateDir)sources.props</GeneratedRestoreSourcesPropsPath>
<TcVcsIdPrefix>Patch20_</TcVcsIdPrefix>
<PrepareDependsOn>$(PrepareDependsOn);CleanArtifacts;CleanUniverseArtifacts</PrepareDependsOn>
<CleanDependsOn>$(CleanDependsOn);CleanUniverseArtifacts</CleanDependsOn>
<CleanDependsOn>$(CleanDependsOn);CleanArtifacts;CleanUniverseArtifacts</CleanDependsOn>
<RestoreDependsOn>$(RestoreDependsOn);RestoreExternalDependencies</RestoreDependsOn>
<CompileDependsOn>$(CompileDependsOn);CloneRepositories;BuildRepositories</CompileDependsOn>
<PackageDependsOn>$(PackageDependsOn);SplitPackages</PackageDependsOn>
@ -42,17 +42,27 @@
DestinationFolder="$(IntermediateMirrorPackageDir)" />
</Target>
<Target Name="GeneratePackageVersionPropsFile" DependsOnTargets="ResolveRepoInfo">
<Target Name="GeneratePropsFiles" DependsOnTargets="ResolveRepoInfo">
<ItemGroup>
<_LineupPackages Include="@(ExternalDependency)" />
<_LineupPackages Include="%(ArtifactInfo.PackageId)" Version="%(ArtifactInfo.Version)" Condition=" '%(ArtifactInfo.ArtifactType)' == 'NuGetPackage' " />
<_LineupPackages Include="%(ShippedArtifactInfo.PackageId)" Version="%(ShippedArtifactInfo.Version)" Condition=" '%(ShippedArtifactInfo.ArtifactType)' == 'NuGetPackage' " />
<_LineupSources Include="$(_DependencyPackagesDirectory)" Condition="'$(_DependencyPackagesDirectory)' != '' AND Exists('$(_DependencyPackagesDirectory)')" />
<_LineupSources Include="$(BuildDir)" />
<_LineupSources Include="$(IntermediateExternalPackageDir)" />
<_LineupSources Include="$(IntermediateMirrorPackageDir)" />
</ItemGroup>
<RepoTasks.GeneratePackageVersionPropsFile
Packages="@(_LineupPackages)"
OutputPath="$(GeneratedPackageVersionPropsPath)" />
<Copy SourceFiles="$(GeneratedPackageVersionPropsPath)" DestinationFolder="$(ArtifactsDir)" />
<RepoTasks.GenerateRestoreSourcesPropsFile
Sources="@(_LineupSources)"
OutputPath="$(GeneratedRestoreSourcesPropsPath)" />
</Target>
<Target Name="CleanUniverseArtifacts">
@ -140,7 +150,7 @@
</Target>
<Target Name="BuildRepositories"
DependsOnTargets="_PrepareRepositories;_CreateRepositoriesListWithCommits;GeneratePackageVersionPropsFile;ComputeGraph;_BuildRepositories" />
DependsOnTargets="_PrepareRepositories;_CreateRepositoriesListWithCommits;GeneratePropsFiles;ComputeGraph;_BuildRepositories" />
<Target Name="ResolveRepoInfo" DependsOnTargets="_PrepareRepositories">
<MSBuild Projects="$(MSBuildProjectFullPath)"
@ -183,14 +193,14 @@
<Error Text="No solutions were found in '$(_CloneRepositoryRoot)'" Condition="@(Solution->Count()) == 0" />
</Target>
<Target Name="ComputeGraph" DependsOnTargets="ResolveRepoInfo;GeneratePackageVersionPropsFile">
<Target Name="ComputeGraph" DependsOnTargets="ResolveRepoInfo;GeneratePropsFiles">
<RepoTasks.AnalyzeBuildGraph
Solutions="@(Solution)"
Artifacts="@(ArtifactInfo)"
Dependencies="@(ExternalDependency)"
ShippedArtifacts="@(ShippedArtifactInfo)"
StartGraphAt="$(BuildGraphOf)"
Properties="Configuration=$(Configuration);BuildNumber=$(BuildNumber);DotNetPackageVersionPropsPath=$(GeneratedPackageVersionPropsPath)">
Properties="Configuration=$(Configuration);BuildNumber=$(BuildNumber);DotNetPackageVersionPropsPath=$(GeneratedPackageVersionPropsPath);DotNetRestoreSourcePropsPath=$(GeneratedRestoreSourcesPropsPath)">
<Output TaskParameter="RepositoryBuildOrder" ItemName="RepositoryBuildOrder" />
</RepoTasks.AnalyzeBuildGraph>
</Target>

View File

@ -25,9 +25,6 @@ namespace RepoTasks
// Can be set to filter the lists of packages when produce a list for a specific repository
public string Repository { get; set; }
// Items to add to the RestoreAdditionalProjectSources list in project
public ITaskItem[] RestoreAdditionalSources { get; set; }
public bool UseFloatingVersions { get; set; }
public string BuildNumber { get; set; }
@ -43,16 +40,9 @@ namespace RepoTasks
}
var items = new XElement("ItemGroup");
var props = new XElement("PropertyGroup");
var root = new XElement("Project", props, items);
var root = new XElement("Project", items);
var doc = new XDocument(root);
if (RestoreAdditionalSources?.Length > 0)
{
var sources = RestoreAdditionalSources.Aggregate("$(RestoreAdditionalProjectSources)", (sum, piece) => sum + ";" + piece.ItemSpec);
props.Add(new XElement("RestoreAdditionalProjectSources", sources));
}
var packages = new List<PackageInfo>();
foreach (var pkg in Artifacts.Select(ArtifactInfo.Parse)

View File

@ -0,0 +1,52 @@
// 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 System.IO;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace RepoTasks
{
public class GenerateRestoreSourcesPropsFile : Task
{
[Required]
public ITaskItem[] Sources { get; set; }
[Required]
public string OutputPath { get; set; }
public override bool Execute()
{
OutputPath = OutputPath.Replace('\\', '/');
Directory.CreateDirectory(Path.GetDirectoryName(OutputPath));
var sources = new XElement("DotNetRestoreSources");
var doc = new XDocument(new XElement("Project", new XElement("PropertyGroup", sources)));
var sb = new StringBuilder();
foreach (var source in Sources)
{
sb.Append(source.ItemSpec).AppendLine(";");
}
sources.SetValue(sb.ToString());
var settings = new XmlWriterSettings
{
OmitXmlDeclaration = true,
};
using (var writer = XmlWriter.Create(OutputPath, settings))
{
Log.LogMessage(MessageImportance.High, $"Generate {OutputPath}");
doc.Save(writer);
}
return !Log.HasLoggedErrors;
}
}
}

View File

@ -8,5 +8,6 @@
<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)" />
</Project>