First time experience populating the NuGet cache with 1.1 packages.
This commit is contained in:
parent
dcbfa16380
commit
0cfc54c377
4 changed files with 90 additions and 50 deletions
|
@ -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>
|
|
@ -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};";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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]
|
||||
|
|
Loading…
Add table
Reference in a new issue