First time experience populating the NuGet cache with 1.1 packages.

This commit is contained in:
Eric Erhardt 2017-01-06 15:44:01 -06:00
parent dcbfa16380
commit 0cfc54c377
4 changed files with 90 additions and 50 deletions

View file

@ -21,7 +21,7 @@
<ItemGroup> <ItemGroup>
<NuGetPackagesArchiveToUpload> <NuGetPackagesArchiveToUpload>
<RelativeBlobPath>$(CoreSetupChannel)/Binaries/$(SharedFrameworkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath> <RelativeBlobPath>$(NugetPackagesArchiveRelativeBlobUrl)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
</NuGetPackagesArchiveToUpload> </NuGetPackagesArchiveToUpload>
</ItemGroup> </ItemGroup>
@ -61,20 +61,33 @@
<ItemGroup> <ItemGroup>
<FilesToClean Include="$(NuGetPackagesArchiveProject)/**/*" /> <FilesToClean Include="$(NuGetPackagesArchiveProject)/**/*" />
<FilesToClean Include="$(NuGetPackagesArchiveFolder)/**/*" /> <FilesToClean Include="$(NuGetPackagesArchiveFolder)/**/*" />
<NuGetPackagesArchiveDirectory Include="$(NuGetPackagesArchiveProject)/Web" />
<NuGetPackagesArchiveDirectory Include="$(NuGetPackagesArchiveProject)/Web1.1" />
<NuGetPackagesArchiveDirectory Include="$(NuGetPackagesArchiveFolder)" />
</ItemGroup> </ItemGroup>
<Delete Files="@(FilesToClean)" /> <Delete Files="@(FilesToClean)" />
<RemoveDir Directories="$(NuGetPackagesArchiveProject);$(NuGetPackagesArchiveFolder)" /> <RemoveDir Directories="@(NuGetPackagesArchiveDirectory)" />
<MakeDir Directories="$(NuGetPackagesArchiveProject);$(NuGetPackagesArchiveFolder)"/> <MakeDir Directories="@(NuGetPackagesArchiveDirectory)"/>
<DotNetNew ToolPath="$(Stage2Directory)" <DotNetNew ToolPath="$(Stage2Directory)"
TemplateType="Web" TemplateType="Web"
WorkingDirectory="$(NuGetPackagesArchiveProject)" /> WorkingDirectory="$(NuGetPackagesArchiveProject)/Web" />
<DotNetRestore ToolPath="$(Stage2Directory)" <DotNetRestore ToolPath="$(Stage2Directory)"
Packages="$(NuGetPackagesArchiveFolder)" Packages="$(NuGetPackagesArchiveFolder)"
SkipInvalidConfigurations="True" SkipInvalidConfigurations="True"
WorkingDirectory="$(NuGetPackagesArchiveProject)" /> WorkingDirectory="$(NuGetPackagesArchiveProject)/Web" />
<DotNetNew ToolPath="$(Stage2Directory)"
TemplateType="Web1.1"
WorkingDirectory="$(NuGetPackagesArchiveProject)/Web1.1" />
<DotNetRestore ToolPath="$(Stage2Directory)"
Packages="$(NuGetPackagesArchiveFolder)"
SkipInvalidConfigurations="True"
WorkingDirectory="$(NuGetPackagesArchiveProject)/Web1.1" />
<Delete Files="$(IntermediateArchive);$(IntermediateArchive).zip" /> <Delete Files="$(IntermediateArchive);$(IntermediateArchive).zip" />
@ -89,7 +102,7 @@
</Target> </Target>
<Target Name="SetupNuGetPackagesArchiveInputsOutputs" <Target Name="SetupNuGetPackagesArchiveInputsOutputs"
DependsOnTargets="Prepare;SetupStage"> DependsOnTargets="Prepare;SetupStage;SetupAzureBlobInformation">
<PropertyGroup> <PropertyGroup>
<NugetPackagesArchiveName>nuGetPackagesArchive.$(NuGetPackagesArchiveVersion).lzma</NugetPackagesArchiveName> <NugetPackagesArchiveName>nuGetPackagesArchive.$(NuGetPackagesArchiveVersion).lzma</NugetPackagesArchiveName>
<NuGetPackagesArchiveProject>$(IntermediateDirectory)/NuGetPackagesArchiveProject</NuGetPackagesArchiveProject> <NuGetPackagesArchiveProject>$(IntermediateDirectory)/NuGetPackagesArchiveProject</NuGetPackagesArchiveProject>
@ -97,7 +110,8 @@
<ArchiverDll>$(ToolsOutputDirectory)/Archiver.dll</ArchiverDll> <ArchiverDll>$(ToolsOutputDirectory)/Archiver.dll</ArchiverDll>
<IntermediateArchive>$(IntermediateDirectory)/$(NugetPackagesArchiveName)</IntermediateArchive> <IntermediateArchive>$(IntermediateDirectory)/$(NugetPackagesArchiveName)</IntermediateArchive>
<FinalArchive>$(Stage2Directory)/sdk/$(SdkVersion)/nuGetPackagesArchive.lzma</FinalArchive> <FinalArchive>$(Stage2Directory)/sdk/$(SdkVersion)/nuGetPackagesArchive.lzma</FinalArchive>
<NugetPackagesArchiveBlobUrl>$(SharedFrameworkArchiveBlobRootUrl)/$(NugetPackagesArchiveName)</NugetPackagesArchiveBlobUrl> <NugetPackagesArchiveRelativeBlobUrl>$(Product)/NuGetPackagesArchives</NugetPackagesArchiveRelativeBlobUrl>
<NugetPackagesArchiveBlobUrl>$(DotnetBlobRootUrl)/$(NugetPackagesArchiveRelativeBlobUrl)/$(NugetPackagesArchiveName)</NugetPackagesArchiveBlobUrl>
</PropertyGroup> </PropertyGroup>
</Target> </Target>
</Project> </Project>

View file

@ -24,29 +24,39 @@ namespace Microsoft.DotNet.Cli.Build
[Output] [Output]
public String Version { get; set; } public String Version { get; set; }
private static string[] s_TemplatesToArchive = new string[]
{
"CSharp_Web",
"CSharp_Web1.1",
};
public override bool Execute() public override bool Execute()
{ {
var webTemplatePath = Path.Combine(
RepoRoot,
"src",
"dotnet",
"commands",
"dotnet-new",
"CSharp_Web",
"$projectName$.csproj");
var rootElement = ProjectRootElement.Open(webTemplatePath);
var packageRefs = rootElement.Items.Where(i => i.ItemType == "PackageReference").ToList();
var dataToHash = string.Empty; var dataToHash = string.Empty;
foreach (var packageRef in packageRefs)
foreach (string templateToArchive in s_TemplatesToArchive)
{ {
dataToHash += $"{packageRef.Include},"; var templatePath = Path.Combine(
if (packageRef.HasMetadata) RepoRoot,
"src",
"dotnet",
"commands",
"dotnet-new",
templateToArchive,
"$projectName$.csproj");
var rootElement = ProjectRootElement.Open(templatePath);
var packageRefs = rootElement.Items.Where(i => i.ItemType == "PackageReference").ToList();
foreach (var packageRef in packageRefs)
{ {
foreach (var metadata in packageRef.Metadata) dataToHash += $"{packageRef.Include},";
if (packageRef.HasMetadata)
{ {
dataToHash += $"{metadata.Name}={metadata.Value};"; foreach (var metadata in packageRef.Metadata)
{
dataToHash += $"{metadata.Name}={metadata.Value};";
}
} }
} }
} }

View file

@ -10,6 +10,12 @@ namespace Microsoft.DotNet.Configurer
{ {
public class NuGetCachePrimer : INuGetCachePrimer public class NuGetCachePrimer : INuGetCachePrimer
{ {
private static string[] s_TemplatesUsedToPrimeCache = new string[]
{
"Web",
"Web1.1"
};
private readonly ICommandFactory _commandFactory; private readonly ICommandFactory _commandFactory;
private readonly IDirectory _directory; private readonly IDirectory _directory;
@ -52,7 +58,7 @@ namespace Microsoft.DotNet.Configurer
public void PrimeCache() public void PrimeCache()
{ {
if(SkipPrimingTheCache()) if (SkipPrimingTheCache())
{ {
return; return;
} }
@ -69,30 +75,37 @@ namespace Microsoft.DotNet.Configurer
private void PrimeCacheUsingArchive(string extractedPackagesArchiveDirectory) private void PrimeCacheUsingArchive(string extractedPackagesArchiveDirectory)
{ {
using (var temporaryDotnetNewDirectory = _directory.CreateTemporaryDirectory()) bool succeeded = true;
foreach (string template in s_TemplatesUsedToPrimeCache)
{ {
var workingDirectory = temporaryDotnetNewDirectory.DirectoryPath; if (succeeded)
var createProjectSucceeded = CreateTemporaryProject(workingDirectory);
if (createProjectSucceeded)
{ {
var restoreProjectSucceeded = using (var temporaryDotnetNewDirectory = _directory.CreateTemporaryDirectory())
RestoreTemporaryProject(extractedPackagesArchiveDirectory, workingDirectory);
if (restoreProjectSucceeded)
{ {
_nuGetCacheSentinel.CreateIfNotExists(); var workingDirectory = temporaryDotnetNewDirectory.DirectoryPath;
succeeded &= CreateTemporaryProject(workingDirectory, template);
if (succeeded)
{
succeeded &= RestoreTemporaryProject(extractedPackagesArchiveDirectory, workingDirectory);
}
} }
} }
} }
if (succeeded)
{
_nuGetCacheSentinel.CreateIfNotExists();
}
} }
private bool CreateTemporaryProject(string workingDirectory) private bool CreateTemporaryProject(string workingDirectory, string templateName)
{ {
return RunCommand( return RunCommand(
"new", "new",
new[] { "-t", "Web" }, new[] { "-t", templateName },
workingDirectory); workingDirectory);
} }
@ -100,14 +113,14 @@ namespace Microsoft.DotNet.Configurer
{ {
return RunCommand( return RunCommand(
"restore", "restore",
new[] {"-s", extractedPackagesArchiveDirectory}, new[] { "-s", extractedPackagesArchiveDirectory },
workingDirectory); workingDirectory);
} }
private bool RunCommand(string commandToExecute, IEnumerable<string> args, string workingDirectory) private bool RunCommand(string commandToExecute, IEnumerable<string> args, string workingDirectory)
{ {
var command = _commandFactory var command = _commandFactory
.Create(commandToExecute, args) .Create(commandToExecute, args)
.WorkingDirectory(workingDirectory) .WorkingDirectory(workingDirectory)
.CaptureStdOut() .CaptureStdOut()
.CaptureStdErr(); .CaptureStdErr();

View file

@ -64,6 +64,9 @@ namespace Microsoft.DotNet.Configurer.UnitTests
commandFactoryMock commandFactoryMock
.Setup(c => c.Create("new", new[] { "-t", "Web" }, null, Constants.DefaultConfiguration)) .Setup(c => c.Create("new", new[] { "-t", "Web" }, null, Constants.DefaultConfiguration))
.Returns(_dotnetNewCommandMock.Object); .Returns(_dotnetNewCommandMock.Object);
commandFactoryMock
.Setup(c => c.Create("new", new[] { "-t", "Web1.1" }, null, Constants.DefaultConfiguration))
.Returns(_dotnetNewCommandMock.Object);
_dotnetRestoreCommandMock = new Mock<ICommand>(); _dotnetRestoreCommandMock = new Mock<ICommand>();
SetupCommandMock(_dotnetRestoreCommandMock); SetupCommandMock(_dotnetRestoreCommandMock);
@ -124,25 +127,25 @@ namespace Microsoft.DotNet.Configurer.UnitTests
[Fact] [Fact]
public void It_runs_dotnet_new_using_the_temporary_folder() public void It_runs_dotnet_new_using_the_temporary_folder()
{ {
_dotnetNewCommandMock.Verify(c => c.WorkingDirectory(TEMPORARY_FOLDER_PATH), Times.Once); _dotnetNewCommandMock.Verify(c => c.WorkingDirectory(TEMPORARY_FOLDER_PATH), Times.Exactly(2));
} }
[Fact] [Fact]
public void It_runs_dotnet_new_capturing_stdout() public void It_runs_dotnet_new_capturing_stdout()
{ {
_dotnetNewCommandMock.Verify(c => c.CaptureStdOut(), Times.Once); _dotnetNewCommandMock.Verify(c => c.CaptureStdOut(), Times.Exactly(2));
} }
[Fact] [Fact]
public void It_runs_dotnet_new_capturing_stderr() public void It_runs_dotnet_new_capturing_stderr()
{ {
_dotnetNewCommandMock.Verify(c => c.CaptureStdErr(), Times.Once); _dotnetNewCommandMock.Verify(c => c.CaptureStdErr(), Times.Exactly(2));
} }
[Fact] [Fact]
public void It_actually_runs_dotnet_new() public void It_actually_runs_dotnet_new()
{ {
_dotnetNewCommandMock.Verify(c => c.Execute(), Times.Once); _dotnetNewCommandMock.Verify(c => c.Execute(), Times.Exactly(2));
} }
[Fact] [Fact]
@ -154,7 +157,7 @@ namespace Microsoft.DotNet.Configurer.UnitTests
new [] {"-s", $"{PACKAGES_ARCHIVE_PATH}"}, new [] {"-s", $"{PACKAGES_ARCHIVE_PATH}"},
null, null,
Constants.DefaultConfiguration), Constants.DefaultConfiguration),
Times.Once); Times.Exactly(2));
} }
[Fact] [Fact]
@ -184,25 +187,25 @@ namespace Microsoft.DotNet.Configurer.UnitTests
[Fact] [Fact]
public void It_runs_dotnet_restore_using_the_temporary_folder() public void It_runs_dotnet_restore_using_the_temporary_folder()
{ {
_dotnetRestoreCommandMock.Verify(c => c.WorkingDirectory(TEMPORARY_FOLDER_PATH), Times.Once); _dotnetRestoreCommandMock.Verify(c => c.WorkingDirectory(TEMPORARY_FOLDER_PATH), Times.Exactly(2));
} }
[Fact] [Fact]
public void It_runs_dotnet_restore_capturing_stdout() public void It_runs_dotnet_restore_capturing_stdout()
{ {
_dotnetRestoreCommandMock.Verify(c => c.CaptureStdOut(), Times.Once); _dotnetRestoreCommandMock.Verify(c => c.CaptureStdOut(), Times.Exactly(2));
} }
[Fact] [Fact]
public void It_runs_dotnet_restore_capturing_stderr() public void It_runs_dotnet_restore_capturing_stderr()
{ {
_dotnetRestoreCommandMock.Verify(c => c.CaptureStdErr(), Times.Once); _dotnetRestoreCommandMock.Verify(c => c.CaptureStdErr(), Times.Exactly(2));
} }
[Fact] [Fact]
public void It_actually_runs_dotnet_restore() public void It_actually_runs_dotnet_restore()
{ {
_dotnetRestoreCommandMock.Verify(c => c.Execute(), Times.Once); _dotnetRestoreCommandMock.Verify(c => c.Execute(), Times.Exactly(2));
} }
[Fact] [Fact]