Skip to content

Commit 6ec0cb7

Browse files
authored
Switch to new signing tool for Windows releases (#190)
Allows us to reenable Nuget package signatures
1 parent e3108d2 commit 6ec0cb7

File tree

5 files changed

+34
-30
lines changed

5 files changed

+34
-30
lines changed

windows-release/azure-pipelines.yml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,8 @@ stages:
165165
jobs:
166166
- template: stage-pack-nuget.yml
167167
parameters:
168-
# Nuget signing is disabled because Azure Trusted Signing does not support it
169-
#${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
170-
# SigningCertificate: ${{ parameters.SigningCertificate }}
168+
${{ if and(parameters.SigningCertificate, ne(parameters.SigningCertificate, 'Unsigned')) }}:
169+
SigningCertificate: ${{ parameters.SigningCertificate }}
171170
DoFreethreaded: ${{ parameters.DoFreethreaded }}
172171

173172
- stage: Test

windows-release/sign-files.yml

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,23 @@
11
parameters:
22
Include: '*'
33
Exclude: ''
4+
Filter: ''
45
WorkingDir: '$(Build.BinariesDirectory)'
56
ExtractDir: ''
67
SigningCertificate: ''
78
ExportCommand: ''
9+
ContinueOnError: false
810

911
steps:
1012
- ${{ if parameters.SigningCertificate }}:
1113
- powershell: |
12-
cd (mkdir -Force _signing)
13-
iwr https://aka.ms/nugetclidl -o nuget.exe
14-
.\nuget.exe install Microsoft.Windows.SDK.BuildTools -x -o .
15-
.\nuget.exe install Microsoft.Trusted.Signing.Client -x -o .
16-
$md = @{
17-
Endpoint='$(TrustedSigningUri)';
18-
CodeSigningAccountName='$(TrustedSigningAccount)';
19-
CertificateProfileName='$(TrustedSigningCertificateName)';
20-
CorrelationId='$(SigningDescription)';
21-
ExcludeEnvironmentCredential=$false;
22-
ExcludeManagedIdentityCredential=$true;
23-
ExcludeSharedTokenCacheCredential=$true;
24-
ExcludeVisualStudioCredential=$true;
25-
ExcludeVisualStudioCodeCredential=$true;
26-
ExcludeAzureCliCredential=$true;
27-
ExcludeAzurePowershellCredential=$true;
28-
ExcludeInteractiveBrowserCredential=$true;
29-
};
30-
# ConvertTo-Json $md | Out-File -Encoding UTF8 .\metadata.json
31-
# but without including the BOM...
32-
[System.IO.File]::WriteAllText("$(Get-Location)\metadata.json", (ConvertTo-Json $md), [System.Text.UTF8Encoding]::new($false))
14+
dotnet tool install --global --prerelease sign
15+
$signtool = (gcm sign).Source
16+
$signargs = 'code trusted-signing -v Information ' + `
17+
'-fd sha256 -t http://timestamp.acs.microsoft.com -td sha256 ' + `
18+
'-tse "$(TrustedSigningUri)" -tsa "$(TrustedSigningAccount)" -tscp "$(TrustedSigningCertificateName)" ' + `
19+
'-d "$(SigningDescription)" '
3320
34-
$signtool = dir .\Microsoft.Windows.SDK.BuildTools\*\*\x64\signtool.exe | select -First 1
35-
$dlib = dir .\Microsoft.Trusted.Signing.Client\*\x64\Azure.CodeSigning.Dlib.dll | select -First 1
36-
$signargs = "sign /v /fd sha256 /tr http://timestamp.acs.microsoft.com /td sha256 " + `
37-
"/dlib ""$dlib"" /dmdf ""$(gi metadata.json)"""
3821
Write-Host "##vso[task.setvariable variable=__TrustedSigningCmd]$signtool"
3922
Write-Host "##vso[task.setvariable variable=__TrustedSigningArgs]$signargs"
4023
if ($env:EXPORT_COMMAND) {
@@ -53,16 +36,30 @@ steps:
5336
} else {
5437
$files = (dir ${{ parameters.Include }} -File)
5538
}
56-
& $env:TRUSTED_SIGNING_CMD @(-split $env:TRUSTED_SIGNING_ARGS) $files
39+
if ($env:FILTER) {
40+
($env:FILTER -split ';') -join "`n" | Out-File __filelist.txt -Encoding utf8
41+
} else {
42+
"*" | Out-File __filelist.txt -Encoding utf8
43+
}
44+
foreach ($f in $files) {
45+
& $env:TRUSTED_SIGNING_CMD @(-split $env:TRUSTED_SIGNING_ARGS) -fl __filelist.txt $f
46+
if (-not $?) { exit $LASTEXITCODE }
47+
}
48+
del __filelist.txt
5749
displayName: 'Sign binaries'
58-
retryCountOnTaskFailure: 3
50+
${{ if eq(parameters.ContinueOnError, 'false') }}:
51+
retryCountOnTaskFailure: 3
52+
${{ else }}:
53+
continueOnError: true
5954
workingDirectory: ${{ parameters.WorkingDir }}
6055
env:
6156
TRUSTED_SIGNING_CMD: $(__TrustedSigningCmd)
6257
TRUSTED_SIGNING_ARGS: $(__TrustedSigningArgs)
6358
AZURE_TENANT_ID: $(TrustedSigningTenantId)
6459
AZURE_CLIENT_ID: $(TrustedSigningClientId)
6560
AZURE_CLIENT_SECRET: $(TrustedSigningSecret)
61+
${{ if parameters.Filter }}:
62+
FILTER: ${{ parameters.Filter }}
6663
6764
6865
- ${{ if parameters.ExtractDir }}:

windows-release/stage-layout-msix.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ jobs:
6969
env:
7070
TCL_LIBRARY: $(TclLibrary)
7171
72+
# The dotnet sign tool shouldn't need this, but we do because of the sccd file
7273
- powershell: |
7374
$info = (gc "$(Pipeline.Workspace)\cert\certinfo.json" | ConvertFrom-JSON)
7475
Write-Host "Side-loadable APPX must be signed with '$($info.Subject)'"

windows-release/stage-pack-msix.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,8 @@ jobs:
131131
- template: sign-files.yml
132132
parameters:
133133
Include: '*.msix'
134+
# Additional filter to avoid recursively signing package contents
135+
Filter: '*.msix'
134136
WorkingDir: $(Build.BinariesDirectory)\unsigned_msix
135137
SigningCertificate: ${{ parameters.SigningCertificate }}
136138

windows-release/stage-pack-nuget.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,13 @@ jobs:
6969
- template: sign-files.yml
7070
parameters:
7171
Include: '*.nupkg'
72+
# Additional filter to avoid recursively signing package contents
73+
Filter: '*.nupkg'
7274
WorkingDir: $(Build.ArtifactStagingDirectory)
7375
SigningCertificate: ${{ parameters.SigningCertificate }}
76+
# Nuget signing is not supported by our test certificate, so ignore errors
77+
${{ if eq(parameters.SigningCertificate, 'TestSign') }}:
78+
ContinueOnError: true
7479

7580
- task: PublishBuildArtifacts@1
7681
displayName: 'Publish Artifact: nuget'

0 commit comments

Comments
 (0)