Skip to content

Commit 20bd340

Browse files
authored
Skip already signed packages (dotnet#1142)
1 parent e49c019 commit 20bd340

File tree

5 files changed

+151
-4
lines changed

5 files changed

+151
-4
lines changed

build/Prepare.targets

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,38 @@
1717

1818
<Target Name="ExtractInputs">
1919
<ItemGroup>
20-
<UnsignedPackages Include="$(UnsignedPackagesDir)*.nupkg" />
21-
<UnsignedVSIX Include="$(DepsDirectory)build\*.vsix" />
20+
<_InputPackages Include="$(UnsignedPackagesDir)*.nupkg" />
21+
<_InputVSIX Include="$(DepsDirectory)build\*.vsix" />
2222
<UnsignedSharedFx Include="$(DepsDirectory)runtime\*.zip" />
2323
<UnsignedOobArchive Include="$(DepsDirectory)build\AspNetCoreModule.zip" Condition="Exists('$(DepsDirectory)build\AspNetCoreModule.zip')" />
2424
<UnsignedOobArchive Include="$(DepsDirectory)build\runtime-site-extension-*.zip" />
2525
<PoliCheckPackages Include="@(UnsignedPackages)" />
2626
<UnsignedMPacks Include="$(DepsDirectory)build\**\*.mpack" />
27+
</ItemGroup>
28+
29+
<!-- Filter already signed .nupkgs -->
30+
<FilterSignedPackagesFiles Files="@(_InputPackages)">
31+
<Output TaskParameter="Signed" ItemName="AlreadySignedPackages" />
32+
<Output TaskParameter="Unsigned" ItemName="UnsignedPackages" />
33+
</FilterSignedPackagesFiles>
34+
35+
<StupidCopy Condition="'@(AlreadySignedPackages)' != ''"
36+
SourceFiles="@(AlreadySignedPackages)"
37+
DestinationFolder="$(PackagesOutputPath)" />
38+
39+
<!-- Filter already signed .vsix -->
40+
<FilterSignedPackagesFiles Files="@(_InputVSIX)">
41+
<Output TaskParameter="Signed" ItemName="AlreadySignedVSIX" />
42+
<Output TaskParameter="Unsigned" ItemName="UnsignedVSIX" />
43+
</FilterSignedPackagesFiles>
2744

45+
<MakeDir Directories="$(SignedVSIXPath)%(AlreadySignedVSIX.FileName)\" />
46+
47+
<StupidCopy Condition="'@(AlreadySignedVSIX)' != ''"
48+
SourceFiles="%(AlreadySignedVSIX.FullPath);$(DepsDirectory)build\%(AlreadySignedVSIX.FileName).json"
49+
DestinationFolder="$(SignedVSIXPath)%(AlreadySignedVSIX.FileName)\" />
50+
51+
<ItemGroup>
2852
<_UnzipFiles Include="@(UnsignedPackages)" Destination="$(UnsignedPackagesPath)" />
2953
<_UnzipFiles Include="@(UnsignedVSIX)" Destination="$(UnsignedVSIXPath)" />
3054
<_UnzipFiles Include="@(UnsignedSharedFx)" Destination="$(UnsignedSharedFxPath)" />

build/Sign.targets

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,18 @@
162162
</PropertyGroup>
163163

164164
<ItemGroup>
165-
<_UnsignedJars Include="$(UnsignedPackagesDir)**\*.jar" />
165+
<_InputJar Include="$(UnsignedPackagesDir)**\*.jar" />
166166
</ItemGroup>
167+
168+
<!-- Filter already signed .jar -->
169+
<FilterSignedPackagesFiles Files="@(_InputJar)">
170+
<Output TaskParameter="Signed" ItemName="AlreadySignedJar" />
171+
<Output TaskParameter="Unsigned" ItemName="_UnsignedJars" />
172+
</FilterSignedPackagesFiles>
173+
174+
<StupidCopy Condition="'@(AlreadySignedJar)' != ''"
175+
SourceFiles="@(AlreadySignedJar)"
176+
DestinationFolder="$(PackagesOutputPath)" />
167177

168178
<Microsoft.Build.OOB.ESRP.CreateSignManifests Condition="'@(_UnsignedJars)'!=''"
169179
ApplicationId="$(ESRPApplicationId)"
@@ -373,7 +383,8 @@
373383
<ZipArchive
374384
File="$(OutputFile)"
375385
SourceFiles="@(Files)"
376-
WorkingDirectory="$(ZipRoot)" />
386+
WorkingDirectory="$(ZipRoot)"
387+
Overwrite="true" />
377388
</Target>
378389

379390
<Target Name="SignCheck" >
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
using System.Collections.Concurrent;
2+
using System.Diagnostics;
3+
using System.IO;
4+
using System.IO.Compression;
5+
using System.Threading.Tasks;
6+
using Microsoft.Build.Framework;
7+
8+
namespace RepoTasks
9+
{
10+
/// <summary>
11+
/// Determine which files are already signed.
12+
/// </summary>
13+
public class FilterSignedPackagesFiles : Microsoft.Build.Utilities.Task
14+
{
15+
/// <summary>
16+
/// The files to be hashed.
17+
/// </summary>
18+
[Required]
19+
public ITaskItem[] Files { get; set; }
20+
21+
/// <summary>
22+
/// The files which are signed.
23+
/// </summary>
24+
[Output]
25+
public ITaskItem[] Signed { get; set; }
26+
27+
/// <summary>
28+
/// The files which are not
29+
/// </summary>
30+
[Output]
31+
public ITaskItem[] Unsigned { get; set; }
32+
33+
public override bool Execute()
34+
{
35+
var signed = new ConcurrentBag<ITaskItem>();
36+
var unsigned = new ConcurrentBag<ITaskItem>();
37+
Parallel.ForEach(Files, file =>
38+
{
39+
if (IsPackageSigned(file.ItemSpec))
40+
{
41+
signed.Add(file);
42+
}
43+
else
44+
{
45+
Log.LogMessage(MessageImportance.High, "Package {0} is not signed.", Path.GetFileName(file.ItemSpec));
46+
unsigned.Add(file);
47+
}
48+
});
49+
50+
Signed = signed.ToArray();
51+
Unsigned = unsigned.ToArray();
52+
Log.LogMessage(MessageImportance.High, "Found {0} signed and {1} unsigned files", Signed.Length, Unsigned.Length);
53+
Debug.Assert(Signed.Length + Unsigned.Length == Files.Length, "Make sure all files are accounted for");
54+
return !Log.HasLoggedErrors;
55+
}
56+
57+
private bool IsPackageSigned(string filePath)
58+
{
59+
using (var file = File.OpenRead(filePath))
60+
using (var zip = new ZipArchive(file, ZipArchiveMode.Read))
61+
{
62+
switch (Path.GetExtension(filePath).ToLowerInvariant())
63+
{
64+
case ".nupkg":
65+
return zip.GetEntry(".signature.p7s") != null;
66+
case ".vsix":
67+
return zip.GetEntry("package/services/digital-signature/_rels/origin.psdor.rels") != null;
68+
case ".jar":
69+
return zip.GetEntry("META-INF/MSFTSIG.RSA") != null;
70+
default:
71+
Log.LogError("Unrecognized package type: {0}", filePath);
72+
return false;
73+
}
74+
}
75+
}
76+
}
77+
}

build/tasks/RepoTasks.tasks

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
<UsingTask TaskName="RepoTasks.GetFileHash" AssemblyFile="$(_RepoTaskAssembly)" />
99
<UsingTask TaskName="RepoTasks.FilterAuthenticodeSignedFiles" AssemblyFile="$(_RepoTaskAssembly)" />
10+
<UsingTask TaskName="RepoTasks.FilterSignedPackagesFiles" AssemblyFile="$(_RepoTaskAssembly)" />
1011
<UsingTask TaskName="RepoTasks.StupidCopy" AssemblyFile="$(_RepoTaskAssembly)" />
1112
<UsingTask TaskName="RepoTasks.VerifyPoliCheckResults" AssemblyFile="$(_RepoTaskAssembly)" />
1213
<UsingTask TaskName="Microsoft.Build.OOB.ESRP.CreateSignManifests" AssemblyFile="$(_RepoTaskAssembly)" />

build/tasks/tasks.sln

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 15
4+
VisualStudioVersion = 15.0.26124.0
5+
MinimumVisualStudioVersion = 15.0.26124.0
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RepoTasks", "RepoTasks.csproj", "{78054E53-3D57-4401-AFAA-B31F50E64CEC}"
7+
EndProject
8+
Global
9+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
10+
Debug|Any CPU = Debug|Any CPU
11+
Debug|x64 = Debug|x64
12+
Debug|x86 = Debug|x86
13+
Release|Any CPU = Release|Any CPU
14+
Release|x64 = Release|x64
15+
Release|x86 = Release|x86
16+
EndGlobalSection
17+
GlobalSection(SolutionProperties) = preSolution
18+
HideSolutionNode = FALSE
19+
EndGlobalSection
20+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
21+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
22+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Debug|Any CPU.Build.0 = Debug|Any CPU
23+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Debug|x64.ActiveCfg = Debug|Any CPU
24+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Debug|x64.Build.0 = Debug|Any CPU
25+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Debug|x86.ActiveCfg = Debug|Any CPU
26+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Debug|x86.Build.0 = Debug|Any CPU
27+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Release|Any CPU.ActiveCfg = Release|Any CPU
28+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Release|Any CPU.Build.0 = Release|Any CPU
29+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Release|x64.ActiveCfg = Release|Any CPU
30+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Release|x64.Build.0 = Release|Any CPU
31+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Release|x86.ActiveCfg = Release|Any CPU
32+
{78054E53-3D57-4401-AFAA-B31F50E64CEC}.Release|x86.Build.0 = Release|Any CPU
33+
EndGlobalSection
34+
EndGlobal

0 commit comments

Comments
 (0)