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

Commit fffcbf2

Browse files
authored
Merge pull request #1581 from microsoft/dev/bemcmorr/platform-specific
Add platform-specific VSIX publishing
2 parents 64f73af + d86f980 commit fffcbf2

File tree

17 files changed

+87
-27
lines changed

17 files changed

+87
-27
lines changed

.github/workflows/build.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ jobs:
7272
- name: Check for linting errors
7373
run: gulp tslint
7474
- name: Build and pack extension
75-
run: vsce package --out vscode-arduino.vsix
75+
run: node build/package.js
7676
- name: Publish extension VSIX as artifact
7777
uses: actions/upload-artifact@v2
7878
with:
79-
name: VS Code extension VSIX (${{ matrix.os }})
80-
path: vscode-arduino.vsix
79+
name: VS Code extension VSIXes (${{ matrix.os }})
80+
path: out/vsix
8181

8282
- name: Run tests
8383
uses: GabrielBB/xvfb-action@v1

.vscodeignore

+5-1
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,8 @@ webpack.config.js
1717
node_modules/**
1818
vendor/**
1919
azure-pipelines.yml
20-
build/**
20+
build/**
21+
assets/platform/**
22+
23+
# A platform-specific directory in assets/platform/ will be added to the end of
24+
# this file by the packaging script.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on alpine-arm64.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on alpine-x64.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on darwin-arm64.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on darwin-x64.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on linux-arm64.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on linux-armhf.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on linux-x64.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on win32-arm64.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on win32-ia32.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
This is a placeholder file that should only be installed on win32-x64.

azure-pipelines.yml

+20-18
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ steps:
6666
displayName: Use Node 16.x
6767
inputs:
6868
versionSpec: 16.x
69-
- script: npm install --global gulp node-gyp vsce
69+
- script: npm install --global gulp node-gyp @vscode/vsce
7070
displayName: Install global dependencies
7171
- script: npm install
7272
displayName: Install project dependencies
@@ -87,15 +87,19 @@ steps:
8787
# Pack the extension now even though it's unsigned so that we ignore files
8888
# from .vscodeignore. This will reduce load on the signing server later and
8989
# ensure we only attempt to sign shipping files.
90-
- script: vsce package --out vscode-arduino.vsix
90+
- script: node build/package.js
9191
displayName: Build and pack extension
9292

93-
# Extract the VSIX, sign what we can, then pack it back up and publish it.
94-
- task: ExtractFiles@1
93+
# Extract the VSIXes, sign what we can, then pack it back up and publish it.
94+
- pwsh: |
95+
$path = Join-Path $Env:TEMP "7z-installer.exe"
96+
Invoke-WebRequest https://www.7-zip.org/a/7z2201-x64.exe -OutFile $path
97+
Start-Process -FilePath $path -Args "/S" -Verb RunAs -Wait
98+
Remove-Item $path
99+
Echo "##vso[task.prependpath]$Env:PROGRAMFILES\7-Zip\"
100+
displayName: Install 7zip
101+
- pwsh: Get-ChildItem out\vsix | Foreach-Object { 7z x $_.FullName -o$(Build.StagingDirectory)\vscode-arduino\$($_.BaseName) }
95102
displayName: Extract extension for signing
96-
inputs:
97-
archiveFilePatterns: vscode-arduino.vsix
98-
destinationFolder: $(Build.StagingDirectory)\vscode-arduino
99103
- task: NuGetToolInstaller@1
100104
displayName: Install NuGet
101105
- task: NuGetAuthenticate@0
@@ -111,23 +115,21 @@ steps:
111115
msbuildArguments: /p:SignType=$(SignType)
112116
# MicroBuild signing will always fail on public PRs.
113117
condition: ne(variables['Build.Reason'], 'PullRequest')
114-
- task: ArchiveFiles@2
118+
- pwsh: |
119+
Get-ChildItem -Directory $(Build.StagingDirectory)\vscode-arduino | Foreach-Object { 7z a ($_.FullName + ".vsix") ($_.FullName + "\*") -tzip }
120+
New-Item -Path $(Build.StagingDirectory)\vscode-arduino\vsix -ItemType Directory
121+
Get-Item $(Build.StagingDirectory)\vscode-arduino\*.vsix | Move-Item -Destination $(Build.StagingDirectory)\vscode-arduino\vsix
115122
displayName: Pack signed files
116-
inputs:
117-
rootFolderOrFile: $(Build.StagingDirectory)\vscode-arduino
118-
includeRootFolder: false
119-
archiveType: zip
120-
archiveFile: $(Build.StagingDirectory)\vscode-arduino.vsix
121123
- task: MSBuild@1
122-
displayName: Sign VSIX
124+
displayName: Sign VSIXes
123125
inputs:
124126
solution: .\build\SignVsix.proj
125127
msbuildArguments: /p:SignType=$(SignType)
126128
# MicroBuild signing will always fail on public PRs.
127129
condition: ne(variables['Build.Reason'], 'PullRequest')
128-
- publish: $(Build.StagingDirectory)\vscode-arduino.vsix
129-
artifact: VS Code extension VSIX
130-
displayName: Publish extension VSIX as artifact
130+
- publish: $(Build.StagingDirectory)\vscode-arduino\vsix
131+
artifact: VS Code extension VSIXes
132+
displayName: Publish extension VSIXes as artifact
131133

132134
# Install the Arduino IDE and run tests.
133135
- script: curl -LO https://downloads.arduino.cc/arduino-1.8.19-windows.zip
@@ -186,7 +188,7 @@ steps:
186188
action: create
187189
target: $(Build.SourceVersion)
188190
tagSource: auto
189-
assets: $(Build.StagingDirectory)\vscode-arduino.vsix
191+
assets: $(Build.StagingDirectory)\vscode-arduino\vsix\*.vsix
190192
isPreRelease: $[contains(variables['Build.SourceBranch'], '-rc')]
191193
condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags'))
192194

build/SignFiles.proj

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<Import Project="packages\Microsoft.VisualStudioEng.MicroBuild.Core.0.4.1\build\Microsoft.VisualStudioEng.MicroBuild.Core.props" />
44

55
<PropertyGroup>
6-
<BaseOutputDirectory>$(BUILD_STAGINGDIRECTORY)\vscode-arduino\extension</BaseOutputDirectory>
6+
<BaseOutputDirectory>$(BUILD_STAGINGDIRECTORY)\vscode-arduino</BaseOutputDirectory>
77
<!-- These properties are required by MicroBuild, which only signs files that are under these paths -->
88
<IntermediateOutputPath>$(BaseOutputDirectory)</IntermediateOutputPath>
99
<OutDir>$(BaseOutputDirectory)</OutDir>

build/SignVsix.proj

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
<Import Project="packages\Microsoft.VisualStudioEng.MicroBuild.Core.0.4.1\build\Microsoft.VisualStudioEng.MicroBuild.Core.props" />
44

55
<PropertyGroup>
6-
<BaseOutputDirectory>$(BUILD_STAGINGDIRECTORY)</BaseOutputDirectory>
6+
<BaseOutputDirectory>$(BUILD_STAGINGDIRECTORY)\vscode-arduino\vsix</BaseOutputDirectory>
77
<!-- These properties are required by MicroBuild, which only signs files that are under these paths -->
88
<IntermediateOutputPath>$(BaseOutputDirectory)</IntermediateOutputPath>
99
<OutDir>$(BaseOutputDirectory)</OutDir>
1010
</PropertyGroup>
1111

1212
<ItemGroup>
13-
<FilesToSign Include="$(OutDir)\vscode-arduino.vsix">
13+
<FilesToSign Include="$(OutDir)\*.vsix">
1414
<Authenticode>VsixSHA2</Authenticode>
1515
</FilesToSign>
1616
</ItemGroup>

build/package.js

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// Copyright (c) Microsoft Corporation.
2+
3+
const { execSync } = require("child_process");
4+
const { mkdirSync, readFileSync, writeFileSync } = require("fs");
5+
const { resolve } = require("path");
6+
const { argv } = require("process");
7+
8+
const flags = argv.slice(2).join(" ");
9+
10+
// Taken from https://code.visualstudio.com/api/working-with-extensions/publishing-extension#platformspecific-extensions
11+
const platforms = [
12+
"win32-x64",
13+
"win32-ia32",
14+
"win32-arm64",
15+
"linux-x64",
16+
"linux-arm64",
17+
"linux-armhf",
18+
"alpine-x64",
19+
"alpine-arm64",
20+
"darwin-x64",
21+
"darwin-arm64",
22+
];
23+
24+
// We include different files for each platform, so we need to build a custom
25+
// .vscodeignore file based on common file and platform-specific path.
26+
const ignoreFile = readFileSync(resolve(__dirname, "..", ".vscodeignore"), "utf8");
27+
const customIgnoreFilePath = resolve(__dirname, "..", "out", ".vscodeignore");
28+
29+
execSync('npm run build', { cwd: resolve(__dirname, ".."), stdio: "inherit" });
30+
mkdirSync(resolve(__dirname, "..", "out", "vsix"), { recursive: true });
31+
for (const platform of platforms) {
32+
writeFileSync(
33+
customIgnoreFilePath,
34+
ignoreFile + `!assets/platform/${platform}/**`
35+
);
36+
const command = `vsce package --target ${platform} --out out/vsix/vscode-arduino-${platform}.vsix ${flags}`;
37+
execSync(command, {
38+
cwd: resolve(__dirname, ".."),
39+
stdio: "inherit",
40+
});
41+
}

package.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"publisher": "vsciot-vscode",
77
"preview": true,
88
"engines": {
9-
"vscode": "^1.56.0"
9+
"vscode": "^1.61.0"
1010
},
1111
"icon": "images/arduino.png",
1212
"license": "SEE LICENSE IN LICENSE.txt",
@@ -595,7 +595,7 @@
595595
]
596596
},
597597
"scripts": {
598-
"vscode:prepublish": "gulp build --mode=production",
598+
"build": "gulp build --mode=production",
599599
"postinstall": "cd ./src/views && npm install",
600600
"test": "gulp test"
601601
},
@@ -669,5 +669,8 @@
669669
"node-sass": "^7.0.0",
670670
"es5-ext": "0.10.53",
671671
"string_decoder": "https://github.com/microsoft/vscode-arduino/releases/download/v0.4.12-rc2/string_decoder-10.0.0.tgz"
672+
},
673+
"vsce": {
674+
"ignoreFile": "out/.vscodeignore"
672675
}
673676
}

0 commit comments

Comments
 (0)