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

View file

@ -24,29 +24,39 @@ namespace Microsoft.DotNet.Cli.Build
[Output]
public String Version { get; set; }
private static string[] s_TemplatesToArchive = new string[]
{
"CSharp_Web",
"CSharp_Web1.1",
};
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;
foreach (var packageRef in packageRefs)
foreach (string templateToArchive in s_TemplatesToArchive)
{
dataToHash += $"{packageRef.Include},";
if (packageRef.HasMetadata)
var templatePath = Path.Combine(
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
{
private static string[] s_TemplatesUsedToPrimeCache = new string[]
{
"Web",
"Web1.1"
};
private readonly ICommandFactory _commandFactory;
private readonly IDirectory _directory;
@ -52,7 +58,7 @@ namespace Microsoft.DotNet.Configurer
public void PrimeCache()
{
if(SkipPrimingTheCache())
if (SkipPrimingTheCache())
{
return;
}
@ -69,30 +75,37 @@ namespace Microsoft.DotNet.Configurer
private void PrimeCacheUsingArchive(string extractedPackagesArchiveDirectory)
{
using (var temporaryDotnetNewDirectory = _directory.CreateTemporaryDirectory())
bool succeeded = true;
foreach (string template in s_TemplatesUsedToPrimeCache)
{
var workingDirectory = temporaryDotnetNewDirectory.DirectoryPath;
var createProjectSucceeded = CreateTemporaryProject(workingDirectory);
if (createProjectSucceeded)
if (succeeded)
{
var restoreProjectSucceeded =
RestoreTemporaryProject(extractedPackagesArchiveDirectory, workingDirectory);
if (restoreProjectSucceeded)
using (var temporaryDotnetNewDirectory = _directory.CreateTemporaryDirectory())
{
_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(
"new",
new[] { "-t", "Web" },
new[] { "-t", templateName },
workingDirectory);
}
@ -100,14 +113,14 @@ namespace Microsoft.DotNet.Configurer
{
return RunCommand(
"restore",
new[] {"-s", extractedPackagesArchiveDirectory},
new[] { "-s", extractedPackagesArchiveDirectory },
workingDirectory);
}
private bool RunCommand(string commandToExecute, IEnumerable<string> args, string workingDirectory)
{
var command = _commandFactory
.Create(commandToExecute, args)
var command = _commandFactory
.Create(commandToExecute, args)
.WorkingDirectory(workingDirectory)
.CaptureStdOut()
.CaptureStdErr();

View file

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