Ensure the LZMA includes CLI global tools .nupkg, nupkg.sha512, and .nuspec files (#829)

This commit is contained in:
Nate McMaster 2018-01-30 15:22:31 -08:00 committed by GitHub
parent 303ff3d022
commit 05174814f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 99 additions and 8 deletions

View File

@ -55,19 +55,14 @@
<RepoTasks.JoinItems
Left="@(ArtifactInfo)" LeftKey="PackageId" LeftMetadata="*" LeftItemSpec="PackageId"
Right="@(PackageArtifact->WithMetadataValue('LZMA', 'true')->WithMetadataValue('PackageType', 'DotnetTool'))">
<Output TaskParameter="JoinResult" ItemName="_DotnetToolPackages" />
<Output TaskParameter="JoinResult" ItemName="_DotnetToolPackageId" />
</RepoTasks.JoinItems>
<ItemGroup>
<_DotnetToolPackages Update="@(_DotnetToolPackages)">
<DestFileName>$([System.String]::new('%(PackageId).%(Version)').ToLowerInvariant())</DestFileName>
<DestDirName>$([System.String]::new('%(PackageId)/%(Version)').ToLowerInvariant())</DestDirName>
</_DotnetToolPackages>
<_DotnetToolPackages Include="$(MetapackageRestoreSource)%(_DotnetToolPackageId.Identity).%(_DotnetToolPackageId.Version).nupkg" />
</ItemGroup>
<!-- No need to extract global CLI tool packages. They are extracted from the CliFallbackFolder into $HOME/.dotnet/tools by dotnet-install-tool. -->
<MakeDir Directories="$(FallbackStagingDir)\%(_DotnetToolPackages.DestDirName)\" Condition="'%(Identity)'!= ''" />
<Copy SourceFiles="$(MetapackageRestoreSource)%(_DotnetToolPackages.Identity).%(Version).nupkg" DestinationFiles="$(FallbackStagingDir)\%(DestDirName)\%(DestFileName).nupkg" Condition="'%(Identity)'!= ''" />
<RepoTasks.CreateNuGetV3FolderFeed Packages="@(_DotnetToolPackages)" DestinationFolder="$(FallbackStagingDir)" Overwrite="true" />
<!-- Create the archive -->
<Exec Command="$(ArchiverPath) -a $(FallbackOutputPath) $(FallbackStagingDir)" />

View File

@ -0,0 +1,95 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using NuGet.Packaging;
using NuGet.Packaging.Core;
using NuGet.Versioning;
namespace RepoTasks
{
/// <summary>
/// Layouts nuget packages as a V3 feed
/// </summary>
public class CreateNuGetV3FolderFeed : Task
{
[Required]
public ITaskItem[] Packages { get; set; }
[Required]
public string DestinationFolder { get; set; }
public bool Overwrite { get; set; }
public override bool Execute()
{
Directory.CreateDirectory(DestinationFolder);
foreach (var file in Packages)
{
PackageIdentity identity;
using (var reader = new PackageArchiveReader(file.ItemSpec))
{
identity = reader.GetIdentity();
}
Log.LogMessage(MessageImportance.High, "Adding {0} to feed '{1}'", identity, DestinationFolder);
var packageFolder = Path.Combine(DestinationFolder, identity.Id.ToLowerInvariant(), identity.Version.ToNormalizedString());
var nuspecFile = Path.Combine(packageFolder, $"{identity.Id.ToLowerInvariant()}.{identity.Version.ToNormalizedString()}.nuspec");
var nupkgFile = Path.Combine(packageFolder, $"{identity.Id.ToLowerInvariant()}.{identity.Version.ToNormalizedString()}.nupkg");
var sha512File = Path.Combine(packageFolder, $"{identity.Id.ToLowerInvariant()}.{identity.Version.ToNormalizedString()}.nupkg.sha512");
if (!Overwrite && File.Exists(nuspecFile))
{
Log.LogError("File already exists: {0}", nuspecFile);
continue;
}
if (!Overwrite && File.Exists(nupkgFile))
{
Log.LogError("File already exists: {0}", nupkgFile);
continue;
}
if (!Overwrite && File.Exists(sha512File))
{
Log.LogError("File already exists: {0}", sha512File);
continue;
}
Directory.CreateDirectory(packageFolder);
using (var reader = new PackageArchiveReader(file.ItemSpec))
using (var nuspec = File.Create(nuspecFile))
using (var metadata = reader.GetNuspec())
{
Log.LogMessage("Creating {0}", nuspecFile);
metadata.CopyTo(nuspec);
}
Log.LogMessage("Copying {0}", nupkgFile);
File.Copy(file.ItemSpec, nupkgFile);
Log.LogMessage("Creating {0}", sha512File);
File.WriteAllText(sha512File, GetFileHash(file.ItemSpec));
}
return !Log.HasLoggedErrors;
}
private static string GetFileHash(string filePath)
{
byte[] hash;
using (var algorithm = new SHA512Managed())
using (var stream = File.OpenRead(filePath))
{
hash = algorithm.ComputeHash(stream);
}
return Convert.ToBase64String(hash);
}
}
}

View File

@ -11,6 +11,7 @@
<UsingTask TaskName="RepoTasks.ConsolidateManifests" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.CopyPackagesToSplitFolders" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.CreateCommonManifest" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.CreateNuGetV3FolderFeed" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.GenerateRestoreSourcesPropsFile" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.JoinItems" AssemblyFile="$(_RepoTaskAssembly)" />
<UsingTask TaskName="RepoTasks.OrderBy" AssemblyFile="$(_RepoTaskAssembly)" />