Skip to content
This repository was archived by the owner on Oct 1, 2024. It is now read-only.

Commit 43abfa9

Browse files
authored
Merge pull request #1403 from microsoft/signing
Add signing for VSIX, JS, and Windows files
2 parents bf6d9ab + c700ec7 commit 43abfa9

File tree

5 files changed

+132
-5
lines changed

5 files changed

+132
-5
lines changed

.vscodeignore

+3-1
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ gulpfile.js
1515
*.log
1616
webpack.config.js
1717
node_modules/**
18-
vendor/**
18+
vendor/**
19+
azure-pipelines.yml
20+
build/**

azure-pipelines.yml

+76-4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,16 @@
33

44
name: $(Date:yyyyMMdd)$(Rev:.r).0-$(SourceBranchName)
55

6+
parameters:
7+
- name: SignTypeOverride
8+
displayName: Signing type override
9+
type: string
10+
default: default
11+
values:
12+
- default
13+
- test
14+
- real
15+
616
pr:
717
- master
818
- dev
@@ -19,7 +29,27 @@ trigger:
1929
pool:
2030
name: VSEngSS-MicroBuild2019-1ES
2131

32+
variables:
33+
# MicroBuild requires TeamName to be set.
34+
TeamName: C++ Cross Platform and Cloud
35+
# If the user didn't override the signing type, then only real-sign on tags,
36+
# master, or dev.
37+
${{ if ne(parameters.SignTypeOverride, 'default') }}:
38+
SignType: ${{ parameters.SignTypeOverride }}
39+
${{ if and(eq(parameters.SignTypeOverride, 'default'), or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), eq(variables['Build.SourceBranchName'], 'master'), eq(variables['Build.SourceBranchName'], 'dev'))) }}:
40+
SignType: real
41+
${{ if and(eq(parameters.SignTypeOverride, 'default'), not(or(startsWith(variables['Build.SourceBranch'], 'refs/tags'), eq(variables['Build.SourceBranchName'], 'master'), eq(variables['Build.SourceBranchName'], 'dev')))) }}:
42+
SignType: test
43+
2244
steps:
45+
- task: MicroBuildSigningPlugin@3
46+
displayName: Install MicroBuild Signing
47+
inputs:
48+
signType: $(SignType)
49+
zipSources: false
50+
# MicroBuild signing will always fail on public PRs.
51+
condition: ne(variables['Build.Reason'], 'PullRequest')
52+
2353
# Run these scanners first so that they don't detect issues in dependencies.
2454
# Failures won't break the build until "Check for compliance errors" step.
2555
- task: CredScan@2
@@ -48,15 +78,54 @@ steps:
4878
- script: gulp genAikey
4979
displayName: Use production AI key
5080
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags'))
81+
# Pack the extension now even though it's unsigned so that we ignore files
82+
# from .vscodeignore. This will reduce load on the signing server later and
83+
# ensure we only attempt to sign shipping files.
5184
- script: vsce package --out vscode-arduino.vsix
5285
displayName: Build and pack extension
53-
- publish: vscode-arduino.vsix
54-
artifact: VS Code extension VSIX
55-
displayName: Publish extension VSIX as artifact
5686

5787
- task: ComponentGovernanceComponentDetection@0
5888
displayName: Detect components
5989

90+
# Extract the VSIX, sign what we can, then pack it back up and publish it.
91+
- task: ExtractFiles@1
92+
displayName: Extract extension for signing
93+
inputs:
94+
archiveFilePatterns: vscode-arduino.vsix
95+
destinationFolder: $(Build.StagingDirectory)\vscode-arduino
96+
- task: NuGetToolInstaller@1
97+
displayName: Install NuGet
98+
- task: NuGetAuthenticate@0
99+
displayName: Authenticate NuGet
100+
- script: nuget restore .\build\SignFiles.proj -PackagesDirectory .\build\packages
101+
displayName: Restore MicroBuild Core
102+
# MicroBuild signing will always fail on public PRs.
103+
condition: ne(variables['Build.Reason'], 'PullRequest')
104+
- task: MSBuild@1
105+
displayName: Sign files
106+
inputs:
107+
solution: .\build\SignFiles.proj
108+
msbuildArguments: /p:SignType=$(SignType)
109+
# MicroBuild signing will always fail on public PRs.
110+
condition: ne(variables['Build.Reason'], 'PullRequest')
111+
- task: ArchiveFiles@2
112+
displayName: Pack signed files
113+
inputs:
114+
rootFolderOrFile: $(Build.StagingDirectory)\vscode-arduino
115+
includeRootFolder: false
116+
archiveType: zip
117+
archiveFile: $(Build.StagingDirectory)\vscode-arduino.vsix
118+
- task: MSBuild@1
119+
displayName: Sign VSIX
120+
inputs:
121+
solution: .\build\SignVsix.proj
122+
msbuildArguments: /p:SignType=$(SignType)
123+
# MicroBuild signing will always fail on public PRs.
124+
condition: ne(variables['Build.Reason'], 'PullRequest')
125+
- publish: $(Build.StagingDirectory)\vscode-arduino.vsix
126+
artifact: VS Code extension VSIX
127+
displayName: Publish extension VSIX as artifact
128+
60129
# Install the Arduino IDE and run tests.
61130
- script: curl -LO https://downloads.arduino.cc/arduino-1.8.19-windows.zip
62131
displayName: Download Arduino IDE
@@ -114,6 +183,9 @@ steps:
114183
action: create
115184
target: $(Build.SourceVersion)
116185
tagSource: auto
117-
assets: $(Build.SourcesDirectory)\vscode-arduino.vsix
186+
assets: $(Build.StagingDirectory)\vscode-arduino.vsix
118187
isPreRelease: $[contains(variables['Build.SourceBranch'], '-rc')]
119188
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags'))
189+
190+
- task: MicroBuildCleanup@1
191+
displayName: Clean up MicroBuild

build/SignFiles.proj

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="SignFiles" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<Import Project="packages\Microsoft.VisualStudioEng.MicroBuild.Core.0.4.1\build\Microsoft.VisualStudioEng.MicroBuild.Core.props" />
4+
5+
<PropertyGroup>
6+
<BaseOutputDirectory>$(BUILD_STAGINGDIRECTORY)\vscode-arduino\extension</BaseOutputDirectory>
7+
<!-- These properties are required by MicroBuild, which only signs files that are under these paths -->
8+
<IntermediateOutputPath>$(BaseOutputDirectory)</IntermediateOutputPath>
9+
<OutDir>$(BaseOutputDirectory)</OutDir>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<FilesToSign Include="$(OutDir)\**\*.js" Exclude="$(OutDir)\**\node_modules\**\*.js">
14+
<Authenticode>Microsoft400</Authenticode>
15+
</FilesToSign>
16+
<!-- Authenticode only works on Windows files. If we get the ability to sign Linux and Mac executables, the signing
17+
steps should probably move to the serial-monitor-cli repo instead of doing all the signing here. -->
18+
<FilesToSign Include="$(OutDir)\out\serial-monitor-cli\win32\*.exe">
19+
<Authenticode>Microsoft400</Authenticode>
20+
</FilesToSign>
21+
<FilesToSign Include="$(OutDir)\out\serial-monitor-cli\win32\*.dll">
22+
<Authenticode>Microsoft400</Authenticode>
23+
</FilesToSign>
24+
<FilesToSign Include="$(OutDir)\**\node_modules\**\*.js">
25+
<Authenticode>3PartyScriptsSHA2</Authenticode>
26+
</FilesToSign>
27+
</ItemGroup>
28+
29+
<Import Project="packages\Microsoft.VisualStudioEng.MicroBuild.Core.0.4.1\build\Microsoft.VisualStudioEng.MicroBuild.Core.targets" />
30+
</Project>

build/SignVsix.proj

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project DefaultTargets="SignFiles" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
<Import Project="packages\Microsoft.VisualStudioEng.MicroBuild.Core.0.4.1\build\Microsoft.VisualStudioEng.MicroBuild.Core.props" />
4+
5+
<PropertyGroup>
6+
<BaseOutputDirectory>$(BUILD_STAGINGDIRECTORY)</BaseOutputDirectory>
7+
<!-- These properties are required by MicroBuild, which only signs files that are under these paths -->
8+
<IntermediateOutputPath>$(BaseOutputDirectory)</IntermediateOutputPath>
9+
<OutDir>$(BaseOutputDirectory)</OutDir>
10+
</PropertyGroup>
11+
12+
<ItemGroup>
13+
<FilesToSign Include="$(OutDir)\vscode-arduino.vsix">
14+
<Authenticode>VsixSHA2</Authenticode>
15+
</FilesToSign>
16+
</ItemGroup>
17+
18+
<Import Project="packages\Microsoft.VisualStudioEng.MicroBuild.Core.0.4.1\build\Microsoft.VisualStudioEng.MicroBuild.Core.targets" />
19+
</Project>

build/packages.config

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<packages>
3+
<package id="Microsoft.VisualStudioEng.MicroBuild.Core" version="0.4.1" developmentDependency="true" />
4+
</packages>

0 commit comments

Comments
 (0)