Include ASP packages in offline cache (#5124)
* Archive asp.net package references * Archive asp.net package references * Change the hash input so it's the same on all platforms * Address PR comments
This commit is contained in:
parent
47fb245258
commit
b72d625168
12 changed files with 138 additions and 11 deletions
|
@ -69,6 +69,10 @@
|
||||||
<Output TaskParameter="BranchName" PropertyName="BranchName" />
|
<Output TaskParameter="BranchName" PropertyName="BranchName" />
|
||||||
</GenerateBuildVersionInfo>
|
</GenerateBuildVersionInfo>
|
||||||
|
|
||||||
|
<GenerateNuGetPackagesArchiveVersion RepoRoot="$(RepoRoot)">
|
||||||
|
<Output TaskParameter="Version" PropertyName="NuGetPackagesArchiveVersion"/>
|
||||||
|
</GenerateNuGetPackagesArchiveVersion>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<VersionBadge>$(BaseOutputDirectory)/$(VersionBadgeMoniker)_$(Configuration)_version_badge.svg</VersionBadge>
|
<VersionBadge>$(BaseOutputDirectory)/$(VersionBadgeMoniker)_$(Configuration)_version_badge.svg</VersionBadge>
|
||||||
<SdkVersion>$(NugetVersion)</SdkVersion>
|
<SdkVersion>$(NugetVersion)</SdkVersion>
|
||||||
|
@ -129,7 +133,6 @@
|
||||||
<CoreSetupBlobRootUrl>https://dotnetcli.azureedge.net/dotnet/$(CoreSetupChannel)</CoreSetupBlobRootUrl>
|
<CoreSetupBlobRootUrl>https://dotnetcli.azureedge.net/dotnet/$(CoreSetupChannel)</CoreSetupBlobRootUrl>
|
||||||
<SharedFrameworkArchiveBlobRootUrl>$(CoreSetupBlobRootUrl)/Binaries/$(SharedFrameworkVersion)</SharedFrameworkArchiveBlobRootUrl>
|
<SharedFrameworkArchiveBlobRootUrl>$(CoreSetupBlobRootUrl)/Binaries/$(SharedFrameworkVersion)</SharedFrameworkArchiveBlobRootUrl>
|
||||||
<CoreSetupInstallerBlobRootUrl>$(CoreSetupBlobRootUrl)/Installers</CoreSetupInstallerBlobRootUrl>
|
<CoreSetupInstallerBlobRootUrl>$(CoreSetupBlobRootUrl)/Installers</CoreSetupInstallerBlobRootUrl>
|
||||||
|
|
||||||
<CoreSetupDownloadDirectory>$(IntermediateDirectory)/coreSetupDownload/$(SharedFrameworkVersion)</CoreSetupDownloadDirectory>
|
<CoreSetupDownloadDirectory>$(IntermediateDirectory)/coreSetupDownload/$(SharedFrameworkVersion)</CoreSetupDownloadDirectory>
|
||||||
<CombinedSharedHostAndFrameworkArchive>$(CoreSetupDownloadDirectory)/combinedSharedHostAndFrameworkArchive</CombinedSharedHostAndFrameworkArchive>
|
<CombinedSharedHostAndFrameworkArchive>$(CoreSetupDownloadDirectory)/combinedSharedHostAndFrameworkArchive</CombinedSharedHostAndFrameworkArchive>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
<UsingTask TaskName="GenerateBuildVersionInfo" AssemblyFile="$(CLIBuildDll)" />
|
<UsingTask TaskName="GenerateBuildVersionInfo" AssemblyFile="$(CLIBuildDll)" />
|
||||||
<UsingTask TaskName="GenerateChecksums" AssemblyFile="$(CLIBuildDll)" />
|
<UsingTask TaskName="GenerateChecksums" AssemblyFile="$(CLIBuildDll)" />
|
||||||
<UsingTask TaskName="GenerateGuidFromName" AssemblyFile="$(CLIBuildDll)" />
|
<UsingTask TaskName="GenerateGuidFromName" AssemblyFile="$(CLIBuildDll)" />
|
||||||
|
<UsingTask TaskName="GenerateNuGetPackagesArchiveVersion" AssemblyFile="$(CLIBuildDll)" />
|
||||||
<UsingTask TaskName="GetCommitHash" AssemblyFile="$(CLIBuildDll)" />
|
<UsingTask TaskName="GetCommitHash" AssemblyFile="$(CLIBuildDll)" />
|
||||||
<UsingTask TaskName="GetCurrentRuntimeInformation" AssemblyFile="$(CLIBuildDll)" />
|
<UsingTask TaskName="GetCurrentRuntimeInformation" AssemblyFile="$(CLIBuildDll)" />
|
||||||
<UsingTask TaskName="MakeRelative" AssemblyFile="$(CLIBuildDll)" />
|
<UsingTask TaskName="MakeRelative" AssemblyFile="$(CLIBuildDll)" />
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<NuGetPackagesArchiveToUpload>
|
<NuGetPackagesArchiveToUpload>
|
||||||
<RelativeBlobPath>$(CoreSetupChannel)/Binaries/$(SharedFrameworkVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
|
<RelativeBlobPath>$(CoreSetupChannel)/Binaries/$(NuGetPackagesArchiveVersion)/$([System.String]::Copy('%(Filename)%(Extension)').Replace('\' ,'/'))</RelativeBlobPath>
|
||||||
</NuGetPackagesArchiveToUpload>
|
</NuGetPackagesArchiveToUpload>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
@ -61,6 +61,7 @@
|
||||||
<MakeDir Directories="$(NuGetPackagesArchiveProject);$(NuGetPackagesArchiveFolder)"/>
|
<MakeDir Directories="$(NuGetPackagesArchiveProject);$(NuGetPackagesArchiveFolder)"/>
|
||||||
|
|
||||||
<DotNetNew ToolPath="$(Stage2Directory)"
|
<DotNetNew ToolPath="$(Stage2Directory)"
|
||||||
|
TemplateType="Web"
|
||||||
WorkingDirectory="$(NuGetPackagesArchiveProject)" />
|
WorkingDirectory="$(NuGetPackagesArchiveProject)" />
|
||||||
|
|
||||||
<DotNetRestore ToolPath="$(Stage2Directory)"
|
<DotNetRestore ToolPath="$(Stage2Directory)"
|
||||||
|
@ -83,7 +84,7 @@
|
||||||
<Target Name="SetupNuGetPackagesArchiveInputsOutputs"
|
<Target Name="SetupNuGetPackagesArchiveInputsOutputs"
|
||||||
DependsOnTargets="Prepare;SetupStage">
|
DependsOnTargets="Prepare;SetupStage">
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<NugetPackagesArchiveName>nuGetPackagesArchive.$(SharedFrameworkVersion).lzma</NugetPackagesArchiveName>
|
<NugetPackagesArchiveName>nuGetPackagesArchive.$(NuGetPackagesArchiveVersion).lzma</NugetPackagesArchiveName>
|
||||||
<NuGetPackagesArchiveProject>$(IntermediateDirectory)/NuGetPackagesArchiveProject</NuGetPackagesArchiveProject>
|
<NuGetPackagesArchiveProject>$(IntermediateDirectory)/NuGetPackagesArchiveProject</NuGetPackagesArchiveProject>
|
||||||
<NuGetPackagesArchiveFolder>$(IntermediateDirectory)/NuGetPackagesArchiveFolder</NuGetPackagesArchiveFolder>
|
<NuGetPackagesArchiveFolder>$(IntermediateDirectory)/NuGetPackagesArchiveFolder</NuGetPackagesArchiveFolder>
|
||||||
<ArchiverDll>$(ToolsOutputDirectory)/Archiver.dll</ArchiverDll>
|
<ArchiverDll>$(ToolsOutputDirectory)/Archiver.dll</ArchiverDll>
|
||||||
|
|
|
@ -12,7 +12,19 @@ namespace Microsoft.DotNet.Cli.Build
|
||||||
|
|
||||||
protected override string Args
|
protected override string Args
|
||||||
{
|
{
|
||||||
get { return $""; }
|
get { return $"{GetTemplateType()}"; }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string TemplateType { get; set; }
|
||||||
|
|
||||||
|
private string GetTemplateType()
|
||||||
|
{
|
||||||
|
if (!string.IsNullOrEmpty(TemplateType))
|
||||||
|
{
|
||||||
|
return $"--type {TemplateType}";
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,75 @@
|
||||||
|
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
||||||
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
||||||
|
|
||||||
|
using Microsoft.Build.Construction;
|
||||||
|
using Microsoft.Build.Framework;
|
||||||
|
using Microsoft.Build.Utilities;
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Security.Cryptography;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Cli.Build
|
||||||
|
{
|
||||||
|
public class GenerateNuGetPackagesArchiveVersion : Task
|
||||||
|
{
|
||||||
|
public GenerateNuGetPackagesArchiveVersion()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
[Required]
|
||||||
|
public string RepoRoot { get; set; }
|
||||||
|
|
||||||
|
[Output]
|
||||||
|
public String Version { get; set; }
|
||||||
|
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
dataToHash += $"{packageRef.Include},";
|
||||||
|
if (packageRef.HasMetadata)
|
||||||
|
{
|
||||||
|
foreach (var metadata in packageRef.Metadata)
|
||||||
|
{
|
||||||
|
dataToHash += $"{metadata.Name}={metadata.Value};";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.LogMessage($"NuGet Packages Archive Data To Hash: '{dataToHash}'");
|
||||||
|
|
||||||
|
var sha256 = SHA256.Create();
|
||||||
|
var hashBytes = sha256.ComputeHash(Encoding.Unicode.GetBytes(dataToHash));
|
||||||
|
Version = GetHashString(hashBytes);
|
||||||
|
|
||||||
|
Log.LogMessage($"NuGet Packages Archive Version: '{Version}'");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string GetHashString(byte[] hashBytes)
|
||||||
|
{
|
||||||
|
StringBuilder builder = new StringBuilder(hashBytes.Length * 2);
|
||||||
|
foreach (var b in hashBytes)
|
||||||
|
{
|
||||||
|
builder.AppendFormat("{0:x2}", b);
|
||||||
|
}
|
||||||
|
return builder.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -16,6 +16,9 @@
|
||||||
<PackageReference Include="Microsoft.NETCore.Runtime.CoreCLR">
|
<PackageReference Include="Microsoft.NETCore.Runtime.CoreCLR">
|
||||||
<Version>1.0.4</Version>
|
<Version>1.0.4</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.Build">
|
||||||
|
<Version>$(CLI_MSBuild_Version)</Version>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.CSharp">
|
<PackageReference Include="Microsoft.CSharp">
|
||||||
<Version>4.0.1</Version>
|
<Version>4.0.1</Version>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
@ -90,7 +90,10 @@ namespace Microsoft.DotNet.Configurer
|
||||||
|
|
||||||
private bool CreateTemporaryProject(string workingDirectory)
|
private bool CreateTemporaryProject(string workingDirectory)
|
||||||
{
|
{
|
||||||
return RunCommand("new", Enumerable.Empty<string>(), workingDirectory);
|
return RunCommand(
|
||||||
|
"new",
|
||||||
|
new[] { "-t", "Web" },
|
||||||
|
workingDirectory);
|
||||||
}
|
}
|
||||||
|
|
||||||
private bool RestoreTemporaryProject(string extractedPackagesArchiveDirectory, string workingDirectory)
|
private bool RestoreTemporaryProject(string extractedPackagesArchiveDirectory, string workingDirectory)
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="**\*.cs" />
|
<Compile Include="**\*.cs" />
|
||||||
<Compile Include="..\dotnet\CommandLine\*.cs" />
|
<Compile Include="..\dotnet\CommandLine\*.cs;..\dotnet\CommonLocalizableStrings.cs;" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Microsoft.DotNet.Archive\Microsoft.DotNet.Archive.csproj" />
|
<ProjectReference Include="..\Microsoft.DotNet.Archive\Microsoft.DotNet.Archive.csproj" />
|
||||||
|
|
|
@ -62,7 +62,7 @@ namespace Microsoft.DotNet.Configurer.UnitTests
|
||||||
_dotnetNewCommandMock = new Mock<ICommand>();
|
_dotnetNewCommandMock = new Mock<ICommand>();
|
||||||
SetupCommandMock(_dotnetNewCommandMock);
|
SetupCommandMock(_dotnetNewCommandMock);
|
||||||
commandFactoryMock
|
commandFactoryMock
|
||||||
.Setup(c => c.Create("new", Enumerable.Empty<string>(), null, Constants.DefaultConfiguration))
|
.Setup(c => c.Create("new", new[] { "-t", "Web" }, null, Constants.DefaultConfiguration))
|
||||||
.Returns(_dotnetNewCommandMock.Object);
|
.Returns(_dotnetNewCommandMock.Object);
|
||||||
|
|
||||||
_dotnetRestoreCommandMock = new Mock<ICommand>();
|
_dotnetRestoreCommandMock = new Mock<ICommand>();
|
||||||
|
|
|
@ -127,6 +127,16 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
|
||||||
return new AndConstraint<DirectoryInfoAssertions>(new DirectoryInfoAssertions(dir));
|
return new AndConstraint<DirectoryInfoAssertions>(new DirectoryInfoAssertions(dir));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public AndConstraint<DirectoryInfoAssertions> HaveDirectories(IEnumerable<string> expectedDirs)
|
||||||
|
{
|
||||||
|
foreach (var expectedDir in expectedDirs)
|
||||||
|
{
|
||||||
|
HaveDirectory(expectedDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new AndConstraint<DirectoryInfoAssertions>(this);
|
||||||
|
}
|
||||||
|
|
||||||
public AndConstraint<DirectoryInfoAssertions> OnlyHaveFiles(IEnumerable<string> expectedFiles)
|
public AndConstraint<DirectoryInfoAssertions> OnlyHaveFiles(IEnumerable<string> expectedFiles)
|
||||||
{
|
{
|
||||||
var actualFiles = _dirInfo.EnumerateFiles("*", SearchOption.TopDirectoryOnly).Select(f => f.Name);
|
var actualFiles = _dirInfo.EnumerateFiles("*", SearchOption.TopDirectoryOnly).Select(f => f.Name);
|
||||||
|
|
|
@ -78,7 +78,7 @@ A command is running to initially populate your local package cache, to improve
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ItRestoresTheNuGetPackagesToTheNuGetCacheFolder()
|
public void ItCreatesASentinelFileUnderTheNuGetCacheFolder()
|
||||||
{
|
{
|
||||||
_nugetCacheFolder
|
_nugetCacheFolder
|
||||||
.Should()
|
.Should()
|
||||||
|
@ -86,11 +86,30 @@ A command is running to initially populate your local package cache, to improve
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ItCreatesASentinelFileUnderTheNuGetCacheFolder()
|
public void ItRestoresTheNuGetPackagesToTheNuGetCacheFolder()
|
||||||
{
|
{
|
||||||
|
List<string> expectedDirectories = new List<string>()
|
||||||
|
{
|
||||||
|
"microsoft.netcore.app",
|
||||||
|
"microsoft.aspnetcore.diagnostics",
|
||||||
|
"microsoft.aspnetcore.mvc",
|
||||||
|
"microsoft.aspnetcore.razor.tools",
|
||||||
|
"microsoft.aspnetcore.routing",
|
||||||
|
"microsoft.aspnetcore.server.iisintegration",
|
||||||
|
"microsoft.aspnetcore.server.kestrel",
|
||||||
|
"microsoft.aspnetcore.staticfiles",
|
||||||
|
"microsoft.extensions.configuration.environmentvariables",
|
||||||
|
"microsoft.extensions.configuration.json",
|
||||||
|
"microsoft.extensions.logging",
|
||||||
|
"microsoft.extensions.logging.console",
|
||||||
|
"microsoft.extensions.logging.debug",
|
||||||
|
"microsoft.extensions.options.configurationextensions",
|
||||||
|
"microsoft.visualstudio.web.browserlink.loader",
|
||||||
|
};
|
||||||
|
|
||||||
_nugetCacheFolder
|
_nugetCacheFolder
|
||||||
.Should()
|
.Should()
|
||||||
.HaveDirectory("microsoft.netcore.app");
|
.HaveDirectories(expectedDirectories);
|
||||||
}
|
}
|
||||||
|
|
||||||
private string GetDotnetVersion()
|
private string GetDotnetVersion()
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="**\*.cs" />
|
<Compile Include="**\*.cs" />
|
||||||
<Compile Include="..\..\src\dotnet-archive\*.cs;..\..\src\dotnet\CommandLine\*.cs" />
|
<Compile Include="..\..\src\dotnet-archive\*.cs;..\..\src\dotnet\CommandLine\*.cs;..\..\src\dotnet\CommonLocalizableStrings.cs;" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\src\Microsoft.DotNet.Archive\Microsoft.DotNet.Archive.csproj" />
|
<ProjectReference Include="..\..\src\Microsoft.DotNet.Archive\Microsoft.DotNet.Archive.csproj" />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue