diff --git a/build/compile/Microsoft.DotNet.Cli.LzmaArchive.targets b/build/compile/Microsoft.DotNet.Cli.LzmaArchive.targets index e2b2bfbc0..54e67a46e 100644 --- a/build/compile/Microsoft.DotNet.Cli.LzmaArchive.targets +++ b/build/compile/Microsoft.DotNet.Cli.LzmaArchive.targets @@ -21,7 +21,7 @@ - $(CoreSetupChannel)/Binaries/$(SharedFrameworkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/')) + $(NugetPackagesArchiveRelativeBlobUrl)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/')) @@ -61,20 +61,33 @@ + + + + - - + + + WorkingDirectory="$(NuGetPackagesArchiveProject)/Web" /> + WorkingDirectory="$(NuGetPackagesArchiveProject)/Web" /> + + + + @@ -89,7 +102,7 @@ + DependsOnTargets="Prepare;SetupStage;SetupAzureBlobInformation"> nuGetPackagesArchive.$(NuGetPackagesArchiveVersion).lzma $(IntermediateDirectory)/NuGetPackagesArchiveProject @@ -97,7 +110,8 @@ $(ToolsOutputDirectory)/Archiver.dll $(IntermediateDirectory)/$(NugetPackagesArchiveName) $(Stage2Directory)/sdk/$(SdkVersion)/nuGetPackagesArchive.lzma - $(SharedFrameworkArchiveBlobRootUrl)/$(NugetPackagesArchiveName) + $(Product)/NuGetPackagesArchives + $(DotnetBlobRootUrl)/$(NugetPackagesArchiveRelativeBlobUrl)/$(NugetPackagesArchiveName) \ No newline at end of file diff --git a/build_projects/dotnet-cli-build/GenerateNuGetPackagesArchiveVersion.cs b/build_projects/dotnet-cli-build/GenerateNuGetPackagesArchiveVersion.cs index e05d0a407..fffa5213e 100644 --- a/build_projects/dotnet-cli-build/GenerateNuGetPackagesArchiveVersion.cs +++ b/build_projects/dotnet-cli-build/GenerateNuGetPackagesArchiveVersion.cs @@ -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};"; + } } } } diff --git a/src/Microsoft.DotNet.Configurer/NuGetCachePrimer.cs b/src/Microsoft.DotNet.Configurer/NuGetCachePrimer.cs index f7c9ad71c..212966ada 100644 --- a/src/Microsoft.DotNet.Configurer/NuGetCachePrimer.cs +++ b/src/Microsoft.DotNet.Configurer/NuGetCachePrimer.cs @@ -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 args, string workingDirectory) { - var command = _commandFactory - .Create(commandToExecute, args) + var command = _commandFactory + .Create(commandToExecute, args) .WorkingDirectory(workingDirectory) .CaptureStdOut() .CaptureStdErr(); diff --git a/test/Microsoft.DotNet.Configurer.UnitTests/GivenANuGetCachePrimer.cs b/test/Microsoft.DotNet.Configurer.UnitTests/GivenANuGetCachePrimer.cs index eab2f990b..a89a6562a 100644 --- a/test/Microsoft.DotNet.Configurer.UnitTests/GivenANuGetCachePrimer.cs +++ b/test/Microsoft.DotNet.Configurer.UnitTests/GivenANuGetCachePrimer.cs @@ -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(); 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]