Skip to content

Commit 84c410b

Browse files
Add mariner signing (#47)
* Add mariner signing * Add neverCopy parameter * Add output mode * fix issues with OutputMode * Add validation for neversign * change default to copy if signed * Update EsrpSign.yml Co-authored-by: Aditya Patwardhan <adityap@microsoft.com> Co-authored-by: Aditya Patwardhan <adityap@microsoft.com>
1 parent 269bc0c commit 84c410b

2 files changed

Lines changed: 77 additions & 11 deletions

File tree

EsrpSign.yml

Lines changed: 71 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,32 @@ parameters:
88
- name: "pattern"
99
default: "*.dll,*.exe"
1010
- name: "useMinimatch"
11-
default: "false"
11+
type: boolean
12+
default: false
1213
- name: "signingService"
1314
default: "pwshSigning"
1415
- name: "shouldSign"
1516
default: "auto"
17+
- name: OutputMode
18+
type: string
19+
default: Default
20+
values:
21+
- Default
22+
- AlwaysCopy
23+
- NeverCopy
24+
- CopyIfSigned
1625
- name: "alwaysCopy"
17-
default: "False"
26+
type: boolean
27+
default: False
1828
- name: "useCustomEsrpJson"
19-
default: "false"
29+
type: boolean
30+
default: false
2031
- name: "verifySignature"
21-
default: "false"
32+
type: boolean
33+
default: false
2234
- name: "pageHash"
23-
default: "true"
35+
type: boolean
36+
default: true
2437
- name: "displayName"
2538
default: "ESRP Signing"
2639

@@ -39,6 +52,7 @@ steps:
3952
Write-Verbose -Verbose "signingService = '${{ parameters.signingService }}'"
4053
Write-Verbose -Verbose "shouldSign = '${{ parameters.shouldSign }}'"
4154
Write-Verbose -Verbose "alwaysCopy = '${{ parameters.alwaysCopy }}'"
55+
Write-Verbose -Verbose "outputMode = '${env:OUTPUT_MODE}'"
4256
Write-Verbose -Verbose "useCustomEsrpJson = '${{ parameters.useCustomEsrpJson }}'"
4357
Write-Verbose -Verbose "verifySignature = '${{ parameters.verifySignature }}'"
4458
Write-Verbose -Verbose "pageHash = '${{ parameters.pageHash }}'"
@@ -48,11 +62,44 @@ steps:
4862
throw "Only one of useCustomEsrpJson and certificateId must be set!"
4963
}
5064
51-
$vstsCommandString = "vso[task.setvariable variable=ESRP_TEMPLATE_CERT_ID]${{ parameters.certificateId }}"
65+
$certId = '${{ parameters.certificateId }}'
66+
67+
$vstsCommandString = "vso[task.setvariable variable=ESRP_TEMPLATE_CERT_ID]$certId"
68+
Write-Verbose -Message ("sending " + $vstsCommandString) -Verbose
69+
Write-Host "##$vstsCommandString"
70+
71+
[string] $VariableName = "EsrpJson"
72+
$vstsCommandString = "vso[task.setvariable variable=$VariableName][]"
73+
Write-Verbose -Message ("sending " + $vstsCommandString) -Verbose
74+
Write-Host "##$vstsCommandString"
75+
76+
$usePgp = $certId -like '*pgp'
77+
$vstsCommandString = "vso[task.setvariable variable=ESRP_TEMPLATE_USE_PGP]$usePgp"
5278
Write-Verbose -Message ("sending " + $vstsCommandString) -Verbose
5379
Write-Host "##$vstsCommandString"
5480
81+
if($env:ALWAYS_COPY -ne 'False') {
82+
Write-Warning "AlwaysCopy is replaced by OutputMode!"
83+
}
84+
85+
if($env:OUTPUT_MODE -ne 'Default' -and $env:ALWAYS_COPY -ne 'False' ) {
86+
throw "Only one of OutputMode and AlwaysCopy can be set!"
87+
} elseif ($env:ALWAYS_COPY -ne 'False') {
88+
$effectiveOutputMode = 'AlwaysCopy'
89+
} elseif ($env:OUTPUT_MODE -ne 'Default') {
90+
$effectiveOutputMode = $env:OUTPUT_MODE
91+
} else {
92+
# Default
93+
$effectiveOutputMode = 'CopyIfSigned'
94+
}
95+
96+
$vstsCommandString = "vso[task.setvariable variable=ESRP_TEMPLATE_COPY_MODE]$effectiveOutputMode"
97+
Write-Verbose -Message ("sending " + $vstsCommandString) -Verbose
98+
Write-Host "##$vstsCommandString"
5599
displayName: ${{ parameters.displayName }} - Log parameters
100+
env:
101+
ALWAYS_COPY: ${{ parameters.alwaysCopy }}
102+
OUTPUT_MODE: ${{ parameters.OutputMode }}
56103

57104
- pwsh: |
58105
if ('${{ parameters.shouldSign }}' -eq 'auto') {
@@ -117,20 +164,33 @@ steps:
117164
displayName: ${{ parameters.displayName }}
118165

119166
- pwsh: |
167+
if(${env:EsrpJson} -eq '[]') {
168+
throw "No Json generated, exiting! Update template to support ${{ parameters.certificateId }}"
169+
}
120170
Write-Verbose -Verbose "EsrpJson = '${env:EsrpJson}'"
121171
displayName: ${{ parameters.displayName }} - Log Json
122172

123173
- pwsh: |
124174
Write-Verbose "BUILD_OUTPUT_PATH- ${{ parameters.buildOutputPath }}" -Verbose
125175
Write-Verbose "SIGNED_OUTPUT_PATH- ${{ parameters.signOutputPath }}" -Verbose
176+
$mode = $env:ESRP_TEMPLATE_COPY_MODE
177+
126178
if(!(Test-Path '${{ parameters.signOutputPath }}'))
127179
{
180+
if($mode -eq 'NeverCopy') {
181+
throw "Output path does not exist and copy mode is NeverCopy, exiting!"
182+
}
128183
Write-Verbose "Creating SIGNED_OUTPUT_PATH- ${{ parameters.signOutputPath }}" -Verbose
129184
$null = New-Item -Path '${{ parameters.signOutputPath }}' -ItemType Directory -force
130185
}
131-
Copy-Item -Path ${{ parameters.buildOutputPath }}\* -Dest ${{ parameters.signOutputPath }}\ -Recurse -Force -Verbose
132-
displayName: ${{ parameters.displayName }} - Copy unsigned files to signed output directory
133-
condition: and(succeeded(), or(eq(variables['ESRP_TEMPLATE_SHOULD_SIGN'], 'True'),ne('${{ parameters.alwaysCopy }}', 'False')))
186+
187+
if($mode -eq 'AlwaysCopy' -or ($mode -eq 'CopyIfSigned' -and $env:ESRP_TEMPLATE_SHOULD_SIGN -eq $true)) {
188+
Write-Verbose "Copying files to SIGNED_OUTPUT_PATH- ${{ parameters.signOutputPath }} because mode is $mode" -Verbose
189+
Copy-Item -Path ${{ parameters.buildOutputPath }}\* -Dest ${{ parameters.signOutputPath }}\ -Recurse -Force -Verbose
190+
} else {
191+
Write-Verbose "Not copying files to SIGNED_OUTPUT_PATH- ${{ parameters.signOutputPath }} because mode is $mode" -Verbose
192+
}
193+
displayName: ${{ parameters.displayName }} - Prepare signed output directory
134194
timeoutInMinutes: 10
135195

136196
- task: SFP.build-tasks.custom-build-task-1.EsrpCodeSigning@1
@@ -142,7 +202,8 @@ steps:
142202
inlineOperation: $(EsrpJson)
143203
Pattern: ${{ parameters.pattern }}
144204
UseMinimatch: ${{ parameters.useMinimatch }}
145-
condition: and(succeeded(), eq(variables['ESRP_TEMPLATE_SHOULD_SIGN'], 'True'))
205+
condition: |
206+
and(succeeded(), eq(variables['ESRP_TEMPLATE_SHOULD_SIGN'], 'True'))
146207
timeoutInMinutes: 30
147208

148209
- pwsh: |

template-compliance/pgp-sign.yml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,9 @@ steps:
3434
Write-Verbose -Message ("sending " + $vstsCommandString) -Verbose
3535
Write-Host "##$vstsCommandString"
3636
displayName: ${{ parameters.displayName }} - Generate PGP signing JSON
37-
condition: and(succeeded(), eq(variables['ESRP_TEMPLATE_SHOULD_SIGN'], 'True'), or(eq(variables['ESRP_TEMPLATE_CERT_ID'], 'CP-450779-Pgp'),eq(variables['ESRP_TEMPLATE_CERT_ID'], 'CP-450778-Pgp')))
37+
condition: |
38+
and(
39+
succeeded(),
40+
eq(variables['ESRP_TEMPLATE_SHOULD_SIGN'], 'True'),
41+
eq(variables['ESRP_TEMPLATE_USE_PGP'], 'True')
42+
)

0 commit comments

Comments
 (0)