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>
|
<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>
|
|
@ -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};";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue