mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-13 17:22:15 -05:00
Merge from vscode merge-base (#22780)
* Revert "Revert "Merge from vscode merge-base (#22769)" (#22779)"
This reverts commit 47a1745180.
* Fix notebook download task
* Remove done call from extensions-ci
This commit is contained in:
@@ -770,6 +770,7 @@
|
|||||||
"chart.js",
|
"chart.js",
|
||||||
"plotly.js",
|
"plotly.js",
|
||||||
"angular2-grid",
|
"angular2-grid",
|
||||||
|
"kburtram-query-plan",
|
||||||
"html-to-image",
|
"html-to-image",
|
||||||
"turndown",
|
"turndown",
|
||||||
"gridstack",
|
"gridstack",
|
||||||
@@ -1146,6 +1147,7 @@
|
|||||||
"extensions/azuremonitor/src/prompts/**",
|
"extensions/azuremonitor/src/prompts/**",
|
||||||
"extensions/azuremonitor/src/typings/findRemove.d.ts",
|
"extensions/azuremonitor/src/typings/findRemove.d.ts",
|
||||||
"extensions/kusto/src/prompts/**",
|
"extensions/kusto/src/prompts/**",
|
||||||
|
"extensions/mssql/src/hdfs/webhdfs.ts",
|
||||||
"extensions/mssql/src/prompts/**",
|
"extensions/mssql/src/prompts/**",
|
||||||
"extensions/mssql/src/typings/bufferStreamReader.d.ts",
|
"extensions/mssql/src/typings/bufferStreamReader.d.ts",
|
||||||
"extensions/mssql/src/typings/findRemove.d.ts",
|
"extensions/mssql/src/typings/findRemove.d.ts",
|
||||||
|
|||||||
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
@@ -5,5 +5,3 @@
|
|||||||
* Ensure that the code is up-to-date with the `main` branch.
|
* Ensure that the code is up-to-date with the `main` branch.
|
||||||
* Include a description of the proposed changes and how to test them.
|
* Include a description of the proposed changes and how to test them.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
This PR fixes #
|
|
||||||
|
|||||||
22
.github/workflows/bad-tag.yml
vendored
Normal file
22
.github/workflows/bad-tag.yml
vendored
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Bad Tag
|
||||||
|
on:
|
||||||
|
create
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
main:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
if: github.event.ref == '1.999.0'
|
||||||
|
steps:
|
||||||
|
- name: Checkout Actions
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: "microsoft/vscode-github-triage-actions"
|
||||||
|
ref: stable
|
||||||
|
path: ./actions
|
||||||
|
- name: Install Actions
|
||||||
|
run: npm install --production --prefix ./actions
|
||||||
|
- name: Run Bad Tag
|
||||||
|
uses: ./actions/tag-alert
|
||||||
|
with:
|
||||||
|
token: ${{secrets.VSCODE_ISSUE_TRIAGE_BOT_PAT}}
|
||||||
|
tag-name: '1.999.0'
|
||||||
177
.github/workflows/basic.yml
vendored
Normal file
177
.github/workflows/basic.yml
vendored
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
name: Basic checks
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
main:
|
||||||
|
if: github.ref != 'refs/heads/main'
|
||||||
|
name: Compilation, Unit and Integration Tests
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 40
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# TODO: rename azure-pipelines/linux/xvfb.init to github-actions
|
||||||
|
- name: Setup Build Environment
|
||||||
|
run: |
|
||||||
|
sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
|
||||||
|
sudo chmod +x /etc/init.d/xvfb
|
||||||
|
sudo update-rc.d xvfb defaults
|
||||||
|
sudo service xvfb start
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
|
||||||
|
- name: Compute node modules cache key
|
||||||
|
id: nodeModulesCacheKey
|
||||||
|
run: echo "::set-output name=value::$(node build/azure-pipelines/common/computeNodeModulesCacheKey.js)"
|
||||||
|
- name: Cache node modules
|
||||||
|
id: cacheNodeModules
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: "**/node_modules"
|
||||||
|
key: ${{ runner.os }}-cacheNodeModules23-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
restore-keys: ${{ runner.os }}-cacheNodeModules23-
|
||||||
|
- name: Get yarn cache directory path
|
||||||
|
id: yarnCacheDirPath
|
||||||
|
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||||
|
- name: Cache yarn directory
|
||||||
|
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
uses: actions/cache@v3
|
||||||
|
with:
|
||||||
|
path: ${{ steps.yarnCacheDirPath.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
restore-keys: ${{ runner.os }}-yarnCacheDir-
|
||||||
|
- name: Execute yarn
|
||||||
|
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
env:
|
||||||
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||||
|
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
|
run: yarn --frozen-lockfile --network-timeout 180000
|
||||||
|
|
||||||
|
- name: Compile and Download
|
||||||
|
run: yarn npm-run-all --max_old_space_size=4095 -lp compile "electron x64"
|
||||||
|
|
||||||
|
- name: Run Unit Tests
|
||||||
|
id: electron-unit-tests
|
||||||
|
run: DISPLAY=:10 ./scripts/test.sh
|
||||||
|
|
||||||
|
- name: Run Integration Tests (Electron)
|
||||||
|
id: electron-integration-tests
|
||||||
|
run: DISPLAY=:10 ./scripts/test-integration.sh
|
||||||
|
|
||||||
|
# {{SQL CARBON TODO}} Bring back "Hygiene and Layering" and "Warm up node modules cache"
|
||||||
|
# hygiene:
|
||||||
|
# if: github.ref != 'refs/heads/main'
|
||||||
|
# name: Hygiene and Layering
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# timeout-minutes: 40
|
||||||
|
# env:
|
||||||
|
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# - uses: actions/setup-node@v3
|
||||||
|
# with:
|
||||||
|
# node-version: 16
|
||||||
|
|
||||||
|
# - name: Compute node modules cache key
|
||||||
|
# id: nodeModulesCacheKey
|
||||||
|
# run: echo "::set-output name=value::$(node build/azure-pipelines/common/computeNodeModulesCacheKey.js)"
|
||||||
|
# - name: Cache node modules
|
||||||
|
# id: cacheNodeModules
|
||||||
|
# uses: actions/cache@v3
|
||||||
|
# with:
|
||||||
|
# path: "**/node_modules"
|
||||||
|
# key: ${{ runner.os }}-cacheNodeModules23-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
# restore-keys: ${{ runner.os }}-cacheNodeModules23-
|
||||||
|
# - name: Get yarn cache directory path
|
||||||
|
# id: yarnCacheDirPath
|
||||||
|
# if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
# run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||||
|
# - name: Cache yarn directory
|
||||||
|
# if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
# uses: actions/cache@v3
|
||||||
|
# with:
|
||||||
|
# path: ${{ steps.yarnCacheDirPath.outputs.dir }}
|
||||||
|
# key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
# restore-keys: ${{ runner.os }}-yarnCacheDir-
|
||||||
|
# - name: Execute yarn
|
||||||
|
# if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
# env:
|
||||||
|
# PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||||
|
# ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
|
# run: yarn --frozen-lockfile --network-timeout 180000
|
||||||
|
|
||||||
|
# - name: Run Hygiene Checks
|
||||||
|
# run: yarn gulp hygiene
|
||||||
|
|
||||||
|
# - name: Run Valid Layers Checks
|
||||||
|
# run: yarn valid-layers-check
|
||||||
|
|
||||||
|
# - name: Compile /build/
|
||||||
|
# run: yarn --cwd build compile
|
||||||
|
|
||||||
|
# - name: Check clean git state
|
||||||
|
# run: ./.github/workflows/check-clean-git-state.sh
|
||||||
|
|
||||||
|
# - name: Run eslint
|
||||||
|
# run: yarn eslint
|
||||||
|
|
||||||
|
# - name: Run vscode-dts Compile Checks
|
||||||
|
# run: yarn vscode-dts-compile-check
|
||||||
|
|
||||||
|
# - name: Run Trusted Types Checks
|
||||||
|
# run: yarn tsec-compile-check
|
||||||
|
|
||||||
|
# warm-cache:
|
||||||
|
# name: Warm up node modules cache
|
||||||
|
# if: github.ref == 'refs/heads/main'
|
||||||
|
# runs-on: ubuntu-latest
|
||||||
|
# timeout-minutes: 40
|
||||||
|
# env:
|
||||||
|
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
# steps:
|
||||||
|
# - uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# - uses: actions/setup-node@v3
|
||||||
|
# with:
|
||||||
|
# node-version: 16
|
||||||
|
|
||||||
|
# - name: Compute node modules cache key
|
||||||
|
# id: nodeModulesCacheKey
|
||||||
|
# run: echo "::set-output name=value::$(node build/azure-pipelines/common/computeNodeModulesCacheKey.js)"
|
||||||
|
# - name: Cache node modules
|
||||||
|
# id: cacheNodeModules
|
||||||
|
# uses: actions/cache@v3
|
||||||
|
# with:
|
||||||
|
# path: "**/node_modules"
|
||||||
|
# key: ${{ runner.os }}-cacheNodeModules23-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
# restore-keys: ${{ runner.os }}-cacheNodeModules23-
|
||||||
|
# - name: Get yarn cache directory path
|
||||||
|
# id: yarnCacheDirPath
|
||||||
|
# if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
# run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||||
|
# - name: Cache yarn directory
|
||||||
|
# if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
# uses: actions/cache@v3
|
||||||
|
# with:
|
||||||
|
# path: ${{ steps.yarnCacheDirPath.outputs.dir }}
|
||||||
|
# key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
# restore-keys: ${{ runner.os }}-yarnCacheDir-
|
||||||
|
# - name: Execute yarn
|
||||||
|
# if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
# env:
|
||||||
|
# PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||||
|
# ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
|
# run: yarn --frozen-lockfile --network-timeout 180000
|
||||||
118
.github/workflows/ci.yml
vendored
118
.github/workflows/ci.yml
vendored
@@ -1,27 +1,29 @@
|
|||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
on:
|
on: workflow_dispatch
|
||||||
push:
|
|
||||||
branches:
|
# on:
|
||||||
- main
|
# push:
|
||||||
- release/*
|
# branches:
|
||||||
pull_request:
|
# - main
|
||||||
branches:
|
# - release/*
|
||||||
- main
|
# pull_request:
|
||||||
- release/*
|
# branches:
|
||||||
|
# - main
|
||||||
|
# - release/*
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
windows:
|
windows:
|
||||||
name: Windows
|
name: Windows
|
||||||
runs-on: windows-2019
|
runs-on: windows-2022
|
||||||
timeout-minutes: 30
|
timeout-minutes: 60
|
||||||
env:
|
env:
|
||||||
CHILD_CONCURRENCY: "1"
|
CHILD_CONCURRENCY: "1"
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
- uses: actions/setup-node@v2
|
- uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
@@ -248,8 +250,8 @@ jobs:
|
|||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: "**/node_modules"
|
path: "**/node_modules"
|
||||||
key: ${{ runner.os }}-cacheNodeModules14-${{ steps.nodeModulesCacheKey.outputs.value }}
|
key: ${{ runner.os }}-cacheNodeModules23-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
restore-keys: ${{ runner.os }}-cacheNodeModules14-
|
restore-keys: ${{ runner.os }}-cacheNodeModules23-
|
||||||
- name: Get yarn cache directory path
|
- name: Get yarn cache directory path
|
||||||
id: yarnCacheDirPath
|
id: yarnCacheDirPath
|
||||||
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
@@ -273,24 +275,98 @@ jobs:
|
|||||||
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
run: yarn --frozen-lockfile --network-timeout 180000
|
run: yarn --frozen-lockfile --network-timeout 180000
|
||||||
|
|
||||||
|
- name: Compile and Download
|
||||||
|
run: yarn npm-run-all --max_old_space_size=4095 -lp compile "electron x64" playwright-install download-builtin-extensions
|
||||||
|
|
||||||
|
- name: Compile Integration Tests
|
||||||
|
run: yarn --cwd test/integration/browser compile
|
||||||
|
|
||||||
|
# This is required for keytar unittests, otherwise we hit
|
||||||
|
# https://github.com/atom/node-keytar/issues/76
|
||||||
|
- name: Create temporary keychain
|
||||||
|
run: |
|
||||||
|
security create-keychain -p pwd $RUNNER_TEMP/buildagent.keychain
|
||||||
|
security default-keychain -s $RUNNER_TEMP/buildagent.keychain
|
||||||
|
security unlock-keychain -p pwd $RUNNER_TEMP/buildagent.keychain
|
||||||
|
|
||||||
|
- name: Run Unit Tests (Electron)
|
||||||
|
run: DISPLAY=:10 ./scripts/test.sh
|
||||||
|
|
||||||
|
- name: Run Unit Tests (node.js)
|
||||||
|
run: yarn test-node
|
||||||
|
|
||||||
|
- name: Run Unit Tests (Browser, Chromium)
|
||||||
|
run: DISPLAY=:10 yarn test-browser-no-install --browser chromium
|
||||||
|
|
||||||
|
- name: Run Integration Tests (Electron)
|
||||||
|
run: DISPLAY=:10 ./scripts/test-integration.sh
|
||||||
|
|
||||||
|
- name: Run Integration Tests (Browser, Webkit)
|
||||||
|
run: DISPLAY=:10 ./scripts/test-web-integration.sh --browser webkit
|
||||||
|
|
||||||
|
- name: Run Integration Tests (Remote)
|
||||||
|
timeout-minutes: 15
|
||||||
|
run: DISPLAY=:10 ./scripts/test-remote-integration.sh
|
||||||
|
|
||||||
|
hygiene:
|
||||||
|
name: Hygiene and Layering
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 40
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 16
|
||||||
|
|
||||||
|
- name: Compute node modules cache key
|
||||||
|
id: nodeModulesCacheKey
|
||||||
|
run: echo "::set-output name=value::$(node build/azure-pipelines/common/computeNodeModulesCacheKey.js)"
|
||||||
|
- name: Cache node modules
|
||||||
|
id: cacheNodeModules
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: "**/node_modules"
|
||||||
|
key: ${{ runner.os }}-cacheNodeModules23-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
restore-keys: ${{ runner.os }}-cacheNodeModules23-
|
||||||
|
- name: Get yarn cache directory path
|
||||||
|
id: yarnCacheDirPath
|
||||||
|
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
run: echo "::set-output name=dir::$(yarn cache dir)"
|
||||||
|
- name: Cache yarn directory
|
||||||
|
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ steps.yarnCacheDirPath.outputs.dir }}
|
||||||
|
key: ${{ runner.os }}-yarnCacheDir-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
|
restore-keys: ${{ runner.os }}-yarnCacheDir-
|
||||||
|
- name: Execute yarn
|
||||||
|
if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' }}
|
||||||
|
env:
|
||||||
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||||
|
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
|
run: yarn --frozen-lockfile --network-timeout 180000
|
||||||
|
|
||||||
|
- name: Download Playwright
|
||||||
|
run: yarn playwright-install
|
||||||
|
|
||||||
- name: Run Hygiene Checks
|
- name: Run Hygiene Checks
|
||||||
run: yarn gulp hygiene
|
run: yarn gulp hygiene
|
||||||
|
|
||||||
- name: Run Valid Layers Checks
|
- name: Run Valid Layers Checks
|
||||||
run: yarn valid-layers-check
|
run: yarn valid-layers-check
|
||||||
|
|
||||||
# - name: Run Monaco Editor Checks {{SQL CARBON EDIT}} Remove Monaco checks
|
|
||||||
# run: yarn monaco-compile-check
|
|
||||||
|
|
||||||
- name: Compile /build/
|
- name: Compile /build/
|
||||||
run: yarn --cwd build compile
|
run: yarn --cwd build compile
|
||||||
|
|
||||||
|
- name: Check clean git state
|
||||||
|
run: ./.github/workflows/check-clean-git-state.sh
|
||||||
|
|
||||||
- name: Run eslint
|
- name: Run eslint
|
||||||
run: yarn eslint
|
run: yarn eslint
|
||||||
|
|
||||||
# {{SQL CARBON EDIT}} Don't need this
|
|
||||||
# - name: Run Monaco Editor Checks
|
|
||||||
# run: yarn monaco-compile-check
|
|
||||||
|
|
||||||
# {{SQL CARBON EDIT}} Don't need this
|
# {{SQL CARBON EDIT}} Don't need this
|
||||||
# - name: Run vscode-dts Compile Checks
|
# - name: Run vscode-dts Compile Checks
|
||||||
|
|||||||
2
.vscode/extensions.json
vendored
2
.vscode/extensions.json
vendored
@@ -4,6 +4,6 @@
|
|||||||
"recommendations": [
|
"recommendations": [
|
||||||
"dbaeumer.vscode-eslint",
|
"dbaeumer.vscode-eslint",
|
||||||
"EditorConfig.EditorConfig",
|
"EditorConfig.EditorConfig",
|
||||||
"redhat.vscode-yaml"
|
"ms-vscode.vscode-selfhost-test-provider"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
185
.vscode/launch.json
vendored
185
.vscode/launch.json
vendored
@@ -13,14 +13,182 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
|
"timeout": 0,
|
||||||
|
"port": 5870,
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js",
|
||||||
|
"${workspaceFolder}/extensions/*/out/**/*.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "pwa-chrome",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "Attach to Shared Process",
|
||||||
|
"timeout": 30000,
|
||||||
|
"port": 9222,
|
||||||
|
"urlFilter": "*sharedProcess.html*",
|
||||||
|
"presentation": {
|
||||||
|
"hidden": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "Attach to Search Process",
|
||||||
|
"port": 5876,
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "Attach to Pty Host Process",
|
||||||
|
"port": 5877,
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "Attach to CLI Process",
|
||||||
|
"port": 5874,
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "node",
|
||||||
|
"request": "attach",
|
||||||
|
"name": "Attach to Main Process",
|
||||||
|
"timeout": 30000,
|
||||||
|
"port": 5875,
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
],
|
||||||
|
"presentation": {
|
||||||
|
"hidden": true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "extensionHost",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"name": "Launch Azure Data Studio",
|
"name": "VS Code Emmet Tests",
|
||||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh",
|
"runtimeExecutable": "${execPath}",
|
||||||
"windows": {
|
"args": [
|
||||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.bat",
|
"${workspaceFolder}/extensions/emmet/test-workspace",
|
||||||
},
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/emmet",
|
||||||
"runtimeArgs": [
|
"--extensionTestsPath=${workspaceFolder}/extensions/emmet/out/test"
|
||||||
"--no-cached-data"
|
],
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
],
|
||||||
|
"presentation": {
|
||||||
|
"group": "5_tests",
|
||||||
|
"order": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "extensionHost",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "VS Code Configuration Editing Tests",
|
||||||
|
"runtimeExecutable": "${execPath}",
|
||||||
|
"args": [
|
||||||
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/configuration-editing",
|
||||||
|
"--extensionTestsPath=${workspaceFolder}/extensions/configuration-editing/out/test"
|
||||||
|
],
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
],
|
||||||
|
"presentation": {
|
||||||
|
"group": "5_tests",
|
||||||
|
"order": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "extensionHost",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "VS Code Git Tests",
|
||||||
|
"runtimeExecutable": "${execPath}",
|
||||||
|
"args": [
|
||||||
|
"/tmp/my4g9l",
|
||||||
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/git",
|
||||||
|
"--extensionTestsPath=${workspaceFolder}/extensions/git/out/test"
|
||||||
|
],
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/extensions/git/out/**/*.js"
|
||||||
|
],
|
||||||
|
"presentation": {
|
||||||
|
"group": "5_tests",
|
||||||
|
"order": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "extensionHost",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "VS Code Github Tests",
|
||||||
|
"runtimeExecutable": "${execPath}",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/extensions/github/testWorkspace",
|
||||||
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/github",
|
||||||
|
"--extensionTestsPath=${workspaceFolder}/extensions/github/out/test"
|
||||||
|
],
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/extensions/github/out/**/*.js"
|
||||||
|
],
|
||||||
|
"presentation": {
|
||||||
|
"group": "5_tests",
|
||||||
|
"order": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "extensionHost",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "VS Code API Tests (single folder)",
|
||||||
|
"runtimeExecutable": "${execPath}",
|
||||||
|
"args": [
|
||||||
|
// "${workspaceFolder}", // Uncomment for running out of sources.
|
||||||
|
"${workspaceFolder}/extensions/vscode-api-tests/testWorkspace",
|
||||||
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-api-tests",
|
||||||
|
"--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out/singlefolder-tests",
|
||||||
|
"--disable-extensions"
|
||||||
|
],
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
],
|
||||||
|
"presentation": {
|
||||||
|
"group": "5_tests",
|
||||||
|
"order": 3
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "extensionHost",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "VS Code API Tests (workspace)",
|
||||||
|
"runtimeExecutable": "${execPath}",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/extensions/vscode-api-tests/testworkspace.code-workspace",
|
||||||
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-api-tests",
|
||||||
|
"--extensionTestsPath=${workspaceFolder}/extensions/vscode-api-tests/out/workspace-tests"
|
||||||
|
],
|
||||||
|
"outFiles": [
|
||||||
|
"${workspaceFolder}/out/**/*.js"
|
||||||
|
],
|
||||||
|
"presentation": {
|
||||||
|
"group": "5_tests",
|
||||||
|
"order": 4
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "extensionHost",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "VS Code Tokenizer Tests",
|
||||||
|
"runtimeExecutable": "${execPath}",
|
||||||
|
"args": [
|
||||||
|
"${workspaceFolder}/extensions/vscode-colorize-tests/test",
|
||||||
|
"--extensionDevelopmentPath=${workspaceFolder}/extensions/vscode-colorize-tests",
|
||||||
|
"--extensionTestsPath=${workspaceFolder}/extensions/vscode-colorize-tests/out"
|
||||||
],
|
],
|
||||||
"outFiles": [
|
"outFiles": [
|
||||||
"${workspaceFolder}/out/**/*.js"
|
"${workspaceFolder}/out/**/*.js"
|
||||||
@@ -53,6 +221,9 @@
|
|||||||
"runtimeArgs": [
|
"runtimeArgs": [
|
||||||
"--inspect=5875",
|
"--inspect=5875",
|
||||||
"--no-cached-data",
|
"--no-cached-data",
|
||||||
|
"--crash-reporter-directory=${workspaceFolder}/.profile-oss/crashes",
|
||||||
|
// for general runtime freezes: https://github.com/microsoft/vscode/issues/127861#issuecomment-904144910
|
||||||
|
"--disable-features=CalculateNativeWinOcclusion",
|
||||||
],
|
],
|
||||||
"webRoot": "${workspaceFolder}",
|
"webRoot": "${workspaceFolder}",
|
||||||
"cascadeTerminateToConfigurations": [
|
"cascadeTerminateToConfigurations": [
|
||||||
|
|||||||
2
.vscode/notebooks/api.github-issues
vendored
2
.vscode/notebooks/api.github-issues
vendored
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"May 2022\""
|
"value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"July 2022\""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1,
|
||||||
|
|||||||
2
.vscode/notebooks/endgame.github-issues
vendored
2
.vscode/notebooks/endgame.github-issues
vendored
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-unpkg\n\n$MILESTONE=milestone:\"April 2022\""
|
"value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-remotehub repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-unpkg\n\n$MILESTONE=milestone:\"July 2022\""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1,
|
||||||
|
|||||||
2
.vscode/notebooks/inbox.github-issues
vendored
2
.vscode/notebooks/inbox.github-issues
vendored
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "$inbox -label:\"needs more info\" sort:created-desc"
|
"value": "$inbox -label:\"info-needed\" sort:created-desc"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
|
|||||||
4
.vscode/notebooks/my-endgame.github-issues
vendored
4
.vscode/notebooks/my-endgame.github-issues
vendored
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal\n\n$MILESTONE=milestone:\"April 2022\"\n\n$MINE=assignee:@me"
|
"value": "$REPOS=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-js-debug repo:microsoft/vscode-remote-release repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remotehub repo:microsoft/vscode-remote-repositories-github repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal\n\n$MILESTONE=milestone:\"July 2022\"\n\n$MINE=assignee:@me"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1,
|
||||||
@@ -147,7 +147,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "$REPOS $MILESTONE -$MINE is:issue is:closed author:@me sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:needs-triage -label:verification-found"
|
"value": "$REPOS $MILESTONE -$MINE is:issue is:closed author:@me sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:triage-needed -label:verification-found"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1,
|
||||||
|
|||||||
4
.vscode/notebooks/my-work.github-issues
vendored
4
.vscode/notebooks/my-work.github-issues
vendored
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "// list of repos we work in\n$repos=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce\n\n// current milestone name\n$milestone=milestone:\"May 2022\""
|
"value": "// list of repos we work in\n$repos=repo:microsoft/vscode repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-unpkg repo:microsoft/vscode-references-view repo:microsoft/vscode-anycode repo:microsoft/vscode-hexeditor repo:microsoft/vscode-extension-telemetry repo:microsoft/vscode-livepreview repo:microsoft/vscode-remotehub repo:microsoft/vscode-settings-sync-server repo:microsoft/vscode-remote-repositories-github repo:microsoft/monaco-editor repo:microsoft/vscode-vsce\n\n// current milestone name\n$milestone=milestone:\"July 2022\""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1,
|
||||||
@@ -114,7 +114,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "$repos assignee:@me is:open label:\"needs more info\"",
|
"value": "$repos assignee:@me is:open label:\"needs more info\""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1,
|
||||||
|
|||||||
2
.vscode/notebooks/verification.github-issues
vendored
2
.vscode/notebooks/verification.github-issues
vendored
@@ -12,7 +12,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "$repos=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-jupyter repo:microsoft/vscode-python\n$milestone=milestone:\"March 2022\""
|
"value": "$repos=repo:microsoft/vscode repo:microsoft/vscode-internalbacklog repo:microsoft/vscode-dev repo:microsoft/vscode-remote-release repo:microsoft/vscode-js-debug repo:microsoft/vscode-pull-request-github repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-jupyter repo:microsoft/vscode-python\n$milestone=milestone:\"May 2022\""
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 1,
|
"kind": 1,
|
||||||
|
|||||||
8
.vscode/notebooks/vscode-dev.github-issues
vendored
8
.vscode/notebooks/vscode-dev.github-issues
vendored
@@ -7,7 +7,7 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "repo:microsoft/vscode-dev milestone:\"December 2021\" is:open"
|
"value": "repo:microsoft/vscode-dev milestone:\"May 2022\" is:open"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
@@ -32,11 +32,11 @@
|
|||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "repo:microsoft/vscode-remote-repositories-github milestone:\"December 2021\" is:open"
|
"value": "repo:microsoft/vscode-remote-repositories-github milestone:\"May 2022\" is:open"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "repo:microsoft/vscode-remotehub milestone:\"December 2021\" is:open"
|
"value": "repo:microsoft/vscode-remotehub milestone:\"May 2022\" is:open"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
@@ -67,6 +67,13 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"git.ignoreLimitWarning": true,
|
"git.ignoreLimitWarning": true,
|
||||||
|
"git.branchProtection": [
|
||||||
|
"main",
|
||||||
|
"release/*"
|
||||||
|
],
|
||||||
|
"git.branchProtectionPrompt": "alwaysCommitToNewBranch",
|
||||||
|
"git.branchRandomName.enable": true,
|
||||||
|
"git.mergeEditor": true,
|
||||||
"remote.extensionKind": {
|
"remote.extensionKind": {
|
||||||
"msjsdiag.debugger-for-chrome": "workspace"
|
"msjsdiag.debugger-for-chrome": "workspace"
|
||||||
},
|
},
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1 +1 @@
|
|||||||
2022-10-06T02:27:18.022Z
|
2022-07-19T07:55:26.168Z
|
||||||
|
|||||||
1
build/.gitignore
vendored
Normal file
1
build/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.yarnrc
|
||||||
@@ -139,6 +139,14 @@ vscode-encrypt/binding.gyp
|
|||||||
vscode-encrypt/README.md
|
vscode-encrypt/README.md
|
||||||
!vscode-encrypt/build/Release/vscode-encrypt-native.node
|
!vscode-encrypt/build/Release/vscode-encrypt-native.node
|
||||||
|
|
||||||
|
vscode-policy-watcher/build/**
|
||||||
|
vscode-policy-watcher/.husky/**
|
||||||
|
vscode-policy-watcher/src/**
|
||||||
|
vscode-policy-watcher/binding.gyp
|
||||||
|
vscode-policy-watcher/README.md
|
||||||
|
vscode-policy-watcher/index.d.ts
|
||||||
|
!vscode-policy-watcher/build/Release/vscode-policy-watcher.node
|
||||||
|
|
||||||
vscode-windows-ca-certs/**/*
|
vscode-windows-ca-certs/**/*
|
||||||
!vscode-windows-ca-certs/package.json
|
!vscode-windows-ca-certs/package.json
|
||||||
!vscode-windows-ca-certs/**/*.node
|
!vscode-windows-ca-certs/**/*.node
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
@@ -14,7 +14,7 @@ shasum.update(fs.readFileSync(path.join(ROOT, 'build/.cachesalt')));
|
|||||||
shasum.update(fs.readFileSync(path.join(ROOT, '.yarnrc')));
|
shasum.update(fs.readFileSync(path.join(ROOT, '.yarnrc')));
|
||||||
shasum.update(fs.readFileSync(path.join(ROOT, 'remote/.yarnrc')));
|
shasum.update(fs.readFileSync(path.join(ROOT, 'remote/.yarnrc')));
|
||||||
// Add `package.json` and `yarn.lock` files
|
// Add `package.json` and `yarn.lock` files
|
||||||
for (let dir of dirs) {
|
for (const dir of dirs) {
|
||||||
const packageJsonPath = path.join(ROOT, dir, 'package.json');
|
const packageJsonPath = path.join(ROOT, dir, 'package.json');
|
||||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());
|
||||||
const relevantPackageJsonSections = {
|
const relevantPackageJsonSections = {
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
@@ -19,7 +17,7 @@ shasum.update(fs.readFileSync(path.join(ROOT, '.yarnrc')));
|
|||||||
shasum.update(fs.readFileSync(path.join(ROOT, 'remote/.yarnrc')));
|
shasum.update(fs.readFileSync(path.join(ROOT, 'remote/.yarnrc')));
|
||||||
|
|
||||||
// Add `package.json` and `yarn.lock` files
|
// Add `package.json` and `yarn.lock` files
|
||||||
for (let dir of dirs) {
|
for (const dir of dirs) {
|
||||||
const packageJsonPath = path.join(ROOT, dir, 'package.json');
|
const packageJsonPath = path.join(ROOT, dir, 'package.json');
|
||||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath).toString());
|
||||||
const relevantPackageJsonSections = {
|
const relevantPackageJsonSections = {
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const crypto = require("crypto");
|
const crypto = require("crypto");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import { Readable } from 'stream';
|
import { Readable } from 'stream';
|
||||||
import * as crypto from 'crypto';
|
import * as crypto from 'crypto';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const identity_1 = require("@azure/identity");
|
const identity_1 = require("@azure/identity");
|
||||||
const cosmos_1 = require("@azure/cosmos");
|
const cosmos_1 = require("@azure/cosmos");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import { ClientSecretCredential } from '@azure/identity';
|
import { ClientSecretCredential } from '@azure/identity';
|
||||||
import { CosmosClient } from '@azure/cosmos';
|
import { CosmosClient } from '@azure/cosmos';
|
||||||
import { retry } from './retry';
|
import { retry } from './retry';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const identity_1 = require("@azure/identity");
|
const identity_1 = require("@azure/identity");
|
||||||
const cosmos_1 = require("@azure/cosmos");
|
const cosmos_1 = require("@azure/cosmos");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import { ClientSecretCredential } from '@azure/identity';
|
import { ClientSecretCredential } from '@azure/identity';
|
||||||
import { CosmosClient } from '@azure/cosmos';
|
import { CosmosClient } from '@azure/cosmos';
|
||||||
import { retry } from './retry';
|
import { retry } from './retry';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.retry = void 0;
|
exports.retry = void 0;
|
||||||
async function retry(fn) {
|
async function retry(fn) {
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
export async function retry<T>(fn: () => Promise<T>): Promise<T> {
|
export async function retry<T>(fn: () => Promise<T>): Promise<T> {
|
||||||
let lastError: Error | undefined;
|
let lastError: Error | undefined;
|
||||||
|
|
||||||
|
|||||||
@@ -35,25 +35,66 @@ steps:
|
|||||||
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
||||||
displayName: Merge distro
|
displayName: Merge distro
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
mkdir -p .build
|
||||||
|
node build/azure-pipelines/common/computeNodeModulesCacheKey.js x64 $ENABLE_TERRAPIN > .build/yarnlockhash
|
||||||
|
displayName: Prepare yarn cache flags
|
||||||
|
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
|
||||||
|
path: .build/node_modules_cache
|
||||||
|
cacheHitVar: NODE_MODULES_RESTORED
|
||||||
|
displayName: Restore node_modules cache
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
tar -xzf .build/node_modules_cache/cache.tgz
|
||||||
|
displayName: Extract node_modules cache
|
||||||
|
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
npm install -g node-gyp@latest
|
||||||
|
node-gyp --version
|
||||||
|
displayName: Update node-gyp
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
npx https://aka.ms/enablesecurefeed standAlone
|
npx https://aka.ms/enablesecurefeed standAlone
|
||||||
timeoutInMinutes: 5
|
timeoutInMinutes: 5
|
||||||
retryCountOnTaskFailure: 3
|
retryCountOnTaskFailure: 3
|
||||||
condition: and(succeeded(), eq(variables['ENABLE_TERRAPIN'], 'true'))
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
|
||||||
displayName: Switch to Terrapin packages
|
displayName: Switch to Terrapin packages
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
export npm_config_arch=$(VSCODE_ARCH)
|
||||||
|
export npm_config_node_gyp=$(which node-gyp)
|
||||||
|
|
||||||
for i in {1..3}; do # try 3 times, for Terrapin
|
for i in {1..3}; do # try 3 times, for Terrapin
|
||||||
yarn --cwd build --frozen-lockfile --check-files && break
|
yarn --frozen-lockfile --check-files && break
|
||||||
if [ $i -eq 3 ]; then
|
if [ $i -eq 3 ]; then
|
||||||
echo "Yarn failed too many times" >&2
|
echo "Yarn failed too many times" >&2
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
echo "Yarn failed $i, trying again..."
|
echo "Yarn failed $i, trying again..."
|
||||||
done
|
done
|
||||||
displayName: Install build dependencies
|
env:
|
||||||
|
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||||
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
|
displayName: Install dependencies
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
|
||||||
|
mkdir -p .build/node_modules_cache
|
||||||
|
tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
displayName: Create node_modules archive
|
||||||
|
|
||||||
- download: current
|
- download: current
|
||||||
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
|
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
|
||||||
|
|||||||
@@ -1,270 +1,213 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
- name: VSCODE_RUN_UNIT_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_INTEGRATION_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_SMOKE_TESTS
|
||||||
|
type: boolean
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- task: NodeTool@0
|
|
||||||
inputs:
|
|
||||||
versionSpec: "16.x"
|
|
||||||
|
|
||||||
- task: AzureKeyVault@1
|
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
|
||||||
inputs:
|
|
||||||
azureSubscription: "vscode-builds-subscription"
|
|
||||||
KeyVaultName: vscode
|
|
||||||
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
|
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@2
|
|
||||||
inputs:
|
|
||||||
artifact: Compilation
|
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
|
||||||
displayName: Download compilation output
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
|
||||||
displayName: Extract compilation output
|
|
||||||
|
|
||||||
# Set up the credentials to retrieve distro repo and setup git persona
|
|
||||||
# to create a merge commit for when we merge distro into oss
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
cat << EOF > ~/.netrc
|
|
||||||
machine github.com
|
|
||||||
login vscode
|
|
||||||
password $(github-distro-mixin-password)
|
|
||||||
EOF
|
|
||||||
|
|
||||||
git config user.email "vscode@microsoft.com"
|
|
||||||
git config user.name "VSCode"
|
|
||||||
displayName: Prepare tooling
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
|
||||||
git checkout FETCH_HEAD
|
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
|
||||||
displayName: Checkout override commit
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
|
||||||
displayName: Merge distro
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
mkdir -p .build
|
|
||||||
node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH $ENABLE_TERRAPIN > .build/yarnlockhash
|
|
||||||
displayName: Prepare yarn cache flags
|
|
||||||
|
|
||||||
- task: Cache@2
|
|
||||||
inputs:
|
|
||||||
key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
|
|
||||||
path: .build/node_modules_cache
|
|
||||||
cacheHitVar: NODE_MODULES_RESTORED
|
|
||||||
displayName: Restore node_modules cache
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
tar -xzf .build/node_modules_cache/cache.tgz
|
|
||||||
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
|
|
||||||
displayName: Extract node_modules cache
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
npm install -g node-gyp@latest
|
|
||||||
node-gyp --version
|
|
||||||
displayName: Update node-gyp
|
|
||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
npx https://aka.ms/enablesecurefeed standAlone
|
|
||||||
timeoutInMinutes: 5
|
|
||||||
retryCountOnTaskFailure: 3
|
|
||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
|
|
||||||
displayName: Switch to Terrapin packages
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
export npm_config_arch=$(VSCODE_ARCH)
|
|
||||||
export npm_config_node_gyp=$(which node-gyp)
|
|
||||||
|
|
||||||
for i in {1..3}; do # try 3 times, for Terrapin
|
|
||||||
yarn --frozen-lockfile --check-files && break
|
|
||||||
if [ $i -eq 3 ]; then
|
|
||||||
echo "Yarn failed too many times" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "Yarn failed $i, trying again..."
|
|
||||||
done
|
|
||||||
env:
|
|
||||||
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
|
||||||
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
|
||||||
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
|
||||||
displayName: Install dependencies
|
|
||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
|
|
||||||
mkdir -p .build/node_modules_cache
|
|
||||||
tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt
|
|
||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
|
||||||
displayName: Create node_modules archive
|
|
||||||
|
|
||||||
# This script brings in the right resources (images, icons, etc) based on the quality (insiders, stable, exploration)
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
node build/azure-pipelines/mixin
|
|
||||||
displayName: Mix in quality
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
|
||||||
yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
|
|
||||||
displayName: Build client
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
node build/azure-pipelines/mixin --server
|
|
||||||
displayName: Mix in server quality
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
|
||||||
yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci
|
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
|
||||||
yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
|
|
||||||
displayName: Build Server
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
|
yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
|
||||||
displayName: Download Electron and Playwright
|
displayName: Download Electron and Playwright
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
# Setting hardened entitlements is a requirement for:
|
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
|
||||||
# * Running tests on Big Sur (because Big Sur has additional security precautions)
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
|
./scripts/test.sh --tfs "Unit Tests"
|
||||||
security default-keychain -s $(agent.tempdirectory)/buildagent.keychain
|
displayName: Run unit tests (Electron)
|
||||||
security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
|
timeoutInMinutes: 15
|
||||||
echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12
|
|
||||||
security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign
|
|
||||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain
|
|
||||||
VSCODE_ARCH=$(VSCODE_ARCH) DEBUG=electron-osx-sign* node build/darwin/sign.js
|
|
||||||
displayName: Set Hardened Entitlements
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
./scripts/test.sh --build --tfs "Unit Tests"
|
yarn test-node
|
||||||
displayName: Run unit tests (Electron)
|
displayName: Run unit tests (node.js)
|
||||||
timeoutInMinutes: 15
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
yarn test-node --build
|
DEBUG=*browser* yarn test-browser-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests"
|
||||||
displayName: Run unit tests (node.js)
|
displayName: Run unit tests (Browser, Chromium & Webkit)
|
||||||
timeoutInMinutes: 15
|
timeoutInMinutes: 30
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
DEBUG=*browser* yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
|
set -e
|
||||||
displayName: Run unit tests (Browser, Chromium & Webkit)
|
./scripts/test.sh --build --tfs "Unit Tests"
|
||||||
timeoutInMinutes: 30
|
displayName: Run unit tests (Electron)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
# Figure out the full absolute path of the product we just built
|
set -e
|
||||||
# including the remote server and configure the integration tests
|
yarn test-node --build
|
||||||
# to run with these builds instead of running out of sources.
|
displayName: Run unit tests (node.js)
|
||||||
set -e
|
timeoutInMinutes: 15
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
|
||||||
./scripts/test-integration.sh --build --tfs "Integration Tests"
|
|
||||||
displayName: Run integration tests (Electron)
|
|
||||||
timeoutInMinutes: 20
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
|
DEBUG=*browser* yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
|
||||||
./scripts/test-web-integration.sh --browser webkit
|
displayName: Run unit tests (Browser, Chromium & Webkit)
|
||||||
displayName: Run integration tests (Browser, Webkit)
|
timeoutInMinutes: 30
|
||||||
timeoutInMinutes: 20
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
|
||||||
set -e
|
- script: |
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
set -e
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
yarn gulp \
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
compile-extension:configuration-editing \
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
compile-extension:css-language-features-server \
|
||||||
./scripts/test-remote-integration.sh
|
compile-extension:emmet \
|
||||||
displayName: Run integration tests (Remote)
|
compile-extension:git \
|
||||||
timeoutInMinutes: 20
|
compile-extension:github-authentication \
|
||||||
|
compile-extension:html-language-features-server \
|
||||||
|
compile-extension:ipynb \
|
||||||
|
compile-extension:json-language-features-server \
|
||||||
|
compile-extension:markdown-language-features-server \
|
||||||
|
compile-extension:markdown-language-features \
|
||||||
|
compile-extension-media \
|
||||||
|
compile-extension:microsoft-authentication \
|
||||||
|
compile-extension:typescript-language-features \
|
||||||
|
compile-extension:vscode-api-tests \
|
||||||
|
compile-extension:vscode-colorize-tests \
|
||||||
|
compile-extension:vscode-notebook-tests \
|
||||||
|
compile-extension:vscode-test-resolver
|
||||||
|
displayName: Build integration tests
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
ps -ef
|
./scripts/test-integration.sh --tfs "Integration Tests"
|
||||||
displayName: Diagnostics before smoke test run
|
displayName: Run integration tests (Electron)
|
||||||
continueOnError: true
|
timeoutInMinutes: 20
|
||||||
condition: succeededOrFailed()
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
|
# Figure out the full absolute path of the product we just built
|
||||||
yarn smoketest-no-compile --web --tracing --headless
|
# including the remote server and configure the integration tests
|
||||||
timeoutInMinutes: 10
|
# to run with these builds instead of running out of sources.
|
||||||
displayName: Run smoke tests (Browser, Chromium)
|
set -e
|
||||||
|
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
||||||
|
./scripts/test-integration.sh --build --tfs "Integration Tests"
|
||||||
|
displayName: Run integration tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
./scripts/test-web-integration.sh --browser webkit
|
||||||
yarn smoketest-no-compile --tracing --build "$APP_ROOT/$APP_NAME"
|
displayName: Run integration tests (Browser, Webkit)
|
||||||
timeoutInMinutes: 20
|
timeoutInMinutes: 20
|
||||||
displayName: Run smoke tests (Electron)
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
||||||
yarn smoketest-no-compile --tracing --remote --build "$APP_ROOT/$APP_NAME"
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
||||||
timeoutInMinutes: 20
|
./scripts/test-remote-integration.sh
|
||||||
displayName: Run smoke tests (Remote)
|
displayName: Run integration tests (Remote)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:
|
||||||
set -e
|
- script: |
|
||||||
ps -ef
|
set -e
|
||||||
displayName: Diagnostics after smoke test run
|
ps -ef
|
||||||
continueOnError: true
|
displayName: Diagnostics before smoke test run
|
||||||
condition: succeededOrFailed()
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- script: |
|
||||||
artifactName: crash-dump-macos-$(VSCODE_ARCH)
|
set -e
|
||||||
targetPath: .build/crashes
|
yarn --cwd test/smoke compile
|
||||||
displayName: "Publish Crash Reports"
|
displayName: Compile smoke tests
|
||||||
continueOnError: true
|
|
||||||
condition: failed()
|
|
||||||
|
|
||||||
# In order to properly symbolify above crash reports
|
- script: |
|
||||||
# (if any), we need the compiled native modules too
|
set -e
|
||||||
- task: PublishPipelineArtifact@0
|
yarn smoketest-no-compile --tracing
|
||||||
inputs:
|
timeoutInMinutes: 20
|
||||||
artifactName: node-modules-macos-$(VSCODE_ARCH)
|
displayName: Run smoke tests (Electron)
|
||||||
targetPath: node_modules
|
|
||||||
displayName: "Publish Node Modules"
|
|
||||||
continueOnError: true
|
|
||||||
condition: failed()
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- script: |
|
||||||
artifactName: logs-macos-$(VSCODE_ARCH)-$(System.JobAttempt)
|
set -e
|
||||||
targetPath: .build/logs
|
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
displayName: "Publish Log Files"
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
continueOnError: true
|
yarn smoketest-no-compile --tracing --build "$APP_ROOT/$APP_NAME"
|
||||||
condition: failed()
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Electron)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
|
||||||
|
yarn smoketest-no-compile --web --tracing --headless
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Browser, Chromium)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn gulp compile-extension:vscode-test-resolver
|
||||||
|
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
||||||
|
yarn smoketest-no-compile --tracing --remote --build "$APP_ROOT/$APP_NAME"
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Remote)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
ps -ef
|
||||||
|
displayName: Diagnostics after smoke test run
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: .build/crashes
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: crash-dump-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: crash-dump-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: crash-dump-macos-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Crash Reports"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
|
# In order to properly symbolify above crash reports
|
||||||
|
# (if any), we need the compiled native modules too
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: node_modules
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: node-modules-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: node-modules-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: node-modules-macos-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Node Modules"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: .build/logs
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: logs-macos-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: logs-macos-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: logs-macos-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Log Files"
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
- task: PublishTestResults@2
|
- task: PublishTestResults@2
|
||||||
displayName: Publish Tests Results
|
displayName: Publish Tests Results
|
||||||
|
|||||||
@@ -51,6 +51,50 @@ steps:
|
|||||||
set -e
|
set -e
|
||||||
tar -xzf .build/node_modules_cache/cache.tgz
|
tar -xzf .build/node_modules_cache/cache.tgz
|
||||||
displayName: Extract node_modules cache
|
displayName: Extract node_modules cache
|
||||||
|
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
npm install -g node-gyp@latest
|
||||||
|
node-gyp --version
|
||||||
|
displayName: Update node-gyp
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
npx https://aka.ms/enablesecurefeed standAlone
|
||||||
|
timeoutInMinutes: 5
|
||||||
|
retryCountOnTaskFailure: 3
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
|
||||||
|
displayName: Switch to Terrapin packages
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
export npm_config_arch=$(VSCODE_ARCH)
|
||||||
|
export npm_config_node_gyp=$(which node-gyp)
|
||||||
|
|
||||||
|
for i in {1..3}; do # try 3 times, for Terrapin
|
||||||
|
yarn --frozen-lockfile --check-files && break
|
||||||
|
if [ $i -eq 3 ]; then
|
||||||
|
echo "Yarn failed too many times" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Yarn failed $i, trying again..."
|
||||||
|
done
|
||||||
|
env:
|
||||||
|
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||||
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
|
displayName: Install dependencies
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
|
||||||
|
mkdir -p .build/node_modules_cache
|
||||||
|
tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
displayName: Create node_modules archive
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@@ -1,50 +1,73 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_PUBLISH
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
- name: VSCODE_RUN_UNIT_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_INTEGRATION_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_SMOKE_TESTS
|
||||||
|
type: boolean
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 1
|
||||||
|
retryCountOnTaskFailure: 3
|
||||||
|
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "16.x"
|
versionSpec: "16.x"
|
||||||
|
|
||||||
- task: AzureKeyVault@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
- task: AzureKeyVault@1
|
||||||
inputs:
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
inputs:
|
||||||
KeyVaultName: vscode
|
azureSubscription: "vscode-builds-subscription"
|
||||||
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
|
KeyVaultName: vscode
|
||||||
|
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@2
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- task: DownloadPipelineArtifact@2
|
||||||
artifact: Compilation
|
inputs:
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
artifact: Compilation
|
||||||
displayName: Download compilation output
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
|
displayName: Download compilation output
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
set -e
|
||||||
displayName: Extract compilation output
|
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
||||||
|
displayName: Extract compilation output
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
cat << EOF > ~/.netrc
|
set -e
|
||||||
machine github.com
|
cat << EOF > ~/.netrc
|
||||||
login vscode
|
machine github.com
|
||||||
password $(github-distro-mixin-password)
|
login vscode
|
||||||
EOF
|
password $(github-distro-mixin-password)
|
||||||
|
EOF
|
||||||
|
|
||||||
git config user.email "vscode@microsoft.com"
|
git config user.email "vscode@microsoft.com"
|
||||||
git config user.name "VSCode"
|
git config user.name "VSCode"
|
||||||
displayName: Prepare tooling
|
displayName: Prepare tooling
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
set -e
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
git checkout FETCH_HEAD
|
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
git checkout FETCH_HEAD
|
||||||
displayName: Checkout override commit
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
|
displayName: Checkout override commit
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
set -e
|
||||||
displayName: Merge distro
|
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
||||||
|
displayName: Merge distro
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
mkdir -p .build
|
mkdir -p .build
|
||||||
@@ -64,13 +87,6 @@ steps:
|
|||||||
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
|
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
displayName: Extract node_modules cache
|
displayName: Extract node_modules cache
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
npm install -g node-gyp@latest
|
|
||||||
node-gyp --version
|
|
||||||
displayName: Update node-gyp
|
|
||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
npx https://aka.ms/enablesecurefeed standAlone
|
npx https://aka.ms/enablesecurefeed standAlone
|
||||||
@@ -107,115 +123,142 @@ steps:
|
|||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
displayName: Create node_modules archive
|
displayName: Create node_modules archive
|
||||||
|
|
||||||
# This script brings in the right resources (images, icons, etc) based on the quality (insiders, stable, exploration)
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
- script: |
|
# This script brings in the right resources (images, icons, etc) based on the quality (insiders, stable, exploration)
|
||||||
set -e
|
- script: |
|
||||||
node build/azure-pipelines/mixin
|
set -e
|
||||||
displayName: Mix in quality
|
node build/azure-pipelines/mixin
|
||||||
|
displayName: Mix in quality
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
set -e
|
||||||
yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
displayName: Build client
|
yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
|
||||||
|
displayName: Build client
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
node build/azure-pipelines/mixin --server
|
set -e
|
||||||
displayName: Mix in server quality
|
node build/azure-pipelines/mixin --server
|
||||||
|
displayName: Mix in server quality
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
set -e
|
||||||
yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci
|
||||||
yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
displayName: Build Server
|
yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
|
||||||
|
displayName: Build Server
|
||||||
|
|
||||||
# Setting hardened entitlements is a requirement for:
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
# * Apple notarization
|
- script: |
|
||||||
# * Running tests on Big Sur (because Big Sur has additional security precautions)
|
set -e
|
||||||
- script: |
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
set -e
|
yarn gulp "transpile-client" "transpile-extensions"
|
||||||
security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
|
displayName: Transpile
|
||||||
security default-keychain -s $(agent.tempdirectory)/buildagent.keychain
|
|
||||||
security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
|
|
||||||
echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12
|
|
||||||
security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign
|
|
||||||
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain
|
|
||||||
VSCODE_ARCH=$(VSCODE_ARCH) DEBUG=electron-osx-sign* node build/darwin/sign.js
|
|
||||||
displayName: Set Hardened Entitlements
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
set -e
|
- template: product-build-darwin-test.yml
|
||||||
pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd
|
parameters:
|
||||||
displayName: Archive build
|
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
# Setting hardened entitlements is a requirement for:
|
||||||
|
# * Apple notarization
|
||||||
|
# * Running tests on Big Sur (because Big Sur has additional security precautions)
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
|
||||||
|
security default-keychain -s $(agent.tempdirectory)/buildagent.keychain
|
||||||
|
security unlock-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
|
||||||
|
echo "$(macos-developer-certificate)" | base64 -D > $(agent.tempdirectory)/cert.p12
|
||||||
|
security import $(agent.tempdirectory)/cert.p12 -k $(agent.tempdirectory)/buildagent.keychain -P "$(macos-developer-certificate-key)" -T /usr/bin/codesign
|
||||||
|
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k pwd $(agent.tempdirectory)/buildagent.keychain
|
||||||
|
VSCODE_ARCH=$(VSCODE_ARCH) DEBUG=electron-osx-sign* node build/darwin/sign.js
|
||||||
|
displayName: Set Hardened Entitlements
|
||||||
|
|
||||||
# package Remote Extension Host
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
pushd .. && mv vscode-reh-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH) && zip -Xry vscode-server-darwin-$(VSCODE_ARCH).zip vscode-server-darwin-$(VSCODE_ARCH) && popd
|
- script: |
|
||||||
|
set -e
|
||||||
|
pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd
|
||||||
|
displayName: Archive build
|
||||||
|
|
||||||
# package Remote Extension Host (Web)
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
pushd .. && mv vscode-reh-web-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH)-web && zip -Xry vscode-server-darwin-$(VSCODE_ARCH)-web.zip vscode-server-darwin-$(VSCODE_ARCH)-web && popd
|
- script: |
|
||||||
displayName: Prepare to publish servers
|
set -e
|
||||||
|
|
||||||
- publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
|
# package Remote Extension Host
|
||||||
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
|
pushd .. && mv vscode-reh-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH) && zip -Xry vscode-server-darwin-$(VSCODE_ARCH).zip vscode-server-darwin-$(VSCODE_ARCH) && popd
|
||||||
displayName: Publish client archive
|
|
||||||
|
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH).zip
|
# package Remote Extension Host (Web)
|
||||||
artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned
|
pushd .. && mv vscode-reh-web-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH)-web && zip -Xry vscode-server-darwin-$(VSCODE_ARCH)-web.zip vscode-server-darwin-$(VSCODE_ARCH)-web && popd
|
||||||
displayName: Publish server archive
|
displayName: Prepare to publish servers
|
||||||
|
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web.zip
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned
|
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
displayName: Publish web server archive
|
displayName: Generate SBOM (client)
|
||||||
|
inputs:
|
||||||
|
BuildDropPath: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
|
PackageName: Visual Studio Code
|
||||||
|
|
||||||
- task: AzureCLI@2
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
inputs:
|
- publish: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)/_manifest
|
||||||
azureSubscription: "vscode-builds-subscription"
|
displayName: Publish SBOM (client)
|
||||||
scriptType: pscore
|
artifact: vscode_client_darwin_$(VSCODE_ARCH)_sbom
|
||||||
scriptLocation: inlineScript
|
|
||||||
addSpnToEnvironment: true
|
|
||||||
inlineScript: |
|
|
||||||
Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
|
|
||||||
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"
|
|
||||||
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
set -e
|
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
AZURE_STORAGE_ACCOUNT="ticino" \
|
displayName: Generate SBOM (server)
|
||||||
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
|
inputs:
|
||||||
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
|
BuildDropPath: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
|
||||||
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
|
PackageName: Visual Studio Code Server
|
||||||
VSCODE_ARCH="$(VSCODE_ARCH)" \
|
|
||||||
node build/azure-pipelines/upload-configuration
|
|
||||||
displayName: Upload configuration (for Bing settings search)
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
continueOnError: true
|
|
||||||
|
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
displayName: Generate SBOM (client)
|
- publish: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)/_manifest
|
||||||
inputs:
|
displayName: Publish SBOM (server)
|
||||||
BuildDropPath: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
artifact: vscode_server_darwin_$(VSCODE_ARCH)_sbom
|
||||||
PackageName: Visual Studio Code
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)/_manifest
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
displayName: Publish SBOM (client)
|
- publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
|
||||||
artifact: vscode_client_darwin_$(VSCODE_ARCH)_sbom
|
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
displayName: Publish client archive
|
||||||
|
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
displayName: Generate SBOM (server)
|
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH).zip
|
||||||
inputs:
|
artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned
|
||||||
BuildDropPath: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
|
displayName: Publish server archive
|
||||||
PackageName: Visual Studio Code Server
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)/_manifest
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
displayName: Publish SBOM (server)
|
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web.zip
|
||||||
artifact: vscode_server_darwin_$(VSCODE_ARCH)_sbom
|
artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
displayName: Publish web server archive
|
||||||
|
|
||||||
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
- task: AzureCLI@2
|
||||||
|
inputs:
|
||||||
|
azureSubscription: "vscode-builds-subscription"
|
||||||
|
scriptType: pscore
|
||||||
|
scriptLocation: inlineScript
|
||||||
|
addSpnToEnvironment: true
|
||||||
|
inlineScript: |
|
||||||
|
Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
|
||||||
|
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"
|
||||||
|
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
|
||||||
|
|
||||||
|
- ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
AZURE_STORAGE_ACCOUNT="ticino" \
|
||||||
|
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
|
||||||
|
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
|
||||||
|
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
|
||||||
|
VSCODE_ARCH="$(VSCODE_ARCH)" \
|
||||||
|
node build/azure-pipelines/upload-configuration
|
||||||
|
displayName: Upload configuration (for Bing settings search)
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
|
||||||
|
continueOnError: true
|
||||||
|
|||||||
@@ -112,18 +112,19 @@ steps:
|
|||||||
displayName: Run unit tests
|
displayName: Run unit tests
|
||||||
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
||||||
|
|
||||||
- script: |
|
# {{SQL CARBON TODO}} Reenable "Run Core Integration Tests"
|
||||||
# Figure out the full absolute path of the product we just built
|
# - script: |
|
||||||
# including the remote server and configure the integration tests
|
# # Figure out the full absolute path of the product we just built
|
||||||
# to run with these builds instead of running out of sources.
|
# # including the remote server and configure the integration tests
|
||||||
set -e
|
# # to run with these builds instead of running out of sources.
|
||||||
APP_ROOT=$(agent.builddirectory)/azuredatastudio-darwin-x64
|
# set -e
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
# APP_ROOT=$(agent.builddirectory)/azuredatastudio-darwin-x64
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
# APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-darwin" \
|
# INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
||||||
./scripts/test-integration.sh --build --tfs "Integration Tests"
|
# VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-darwin" \
|
||||||
displayName: Run core integration tests
|
# ./scripts/test-integration.sh --build --tfs "Integration Tests"
|
||||||
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
# displayName: Run core integration tests
|
||||||
|
# condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@@ -4,9 +4,7 @@ pool:
|
|||||||
trigger:
|
trigger:
|
||||||
branches:
|
branches:
|
||||||
include: ["main", "release/*"]
|
include: ["main", "release/*"]
|
||||||
pr:
|
pr: none
|
||||||
branches:
|
|
||||||
include: ["main", "release/*"]
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
|
|||||||
@@ -118,7 +118,9 @@ steps:
|
|||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
docker run -e VSCODE_QUALITY -v $(pwd):/root/vscode -v ~/.netrc:/root/.netrc vscodehub.azurecr.io/vscode-linux-build-agent:alpine-$(VSCODE_ARCH) /root/vscode/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh
|
docker run -e VSCODE_QUALITY -e GITHUB_TOKEN -v $(pwd):/root/vscode -v ~/.netrc:/root/.netrc vscodehub.azurecr.io/vscode-linux-build-agent:alpine-$(VSCODE_ARCH) /root/vscode/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
displayName: Prebuild
|
displayName: Prebuild
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
|
|||||||
272
build/azure-pipelines/linux/product-build-linux-client-test.yml
Normal file
272
build/azure-pipelines/linux/product-build-linux-client-test.yml
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
- name: VSCODE_RUN_UNIT_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_INTEGRATION_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_SMOKE_TESTS
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
|
yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
|
||||||
|
displayName: Download Electron and Playwright
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 libgbm1
|
||||||
|
sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
|
||||||
|
sudo chmod +x /etc/init.d/xvfb
|
||||||
|
sudo update-rc.d xvfb defaults
|
||||||
|
sudo service xvfb start
|
||||||
|
displayName: Setup build environment
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
|
ELECTRON_ROOT=.build/electron
|
||||||
|
sudo chown root $APP_ROOT/chrome-sandbox
|
||||||
|
sudo chown root $ELECTRON_ROOT/chrome-sandbox
|
||||||
|
sudo chmod 4755 $APP_ROOT/chrome-sandbox
|
||||||
|
sudo chmod 4755 $ELECTRON_ROOT/chrome-sandbox
|
||||||
|
stat $APP_ROOT/chrome-sandbox
|
||||||
|
stat $ELECTRON_ROOT/chrome-sandbox
|
||||||
|
displayName: Change setuid helper binary permission
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
DISPLAY=:10 ./scripts/test.sh --tfs "Unit Tests"
|
||||||
|
displayName: Run unit tests (Electron)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn test-node
|
||||||
|
displayName: Run unit tests (node.js)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
DEBUG=*browser* yarn test-browser-no-install --browser chromium --tfs "Browser Unit Tests"
|
||||||
|
displayName: Run unit tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
./scripts/test.sh --build --tfs "Unit Tests"
|
||||||
|
displayName: Run unit tests (Electron)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn test-node --build
|
||||||
|
displayName: Run unit tests (node.js)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
DEBUG=*browser* yarn test-browser-no-install --build --browser chromium --tfs "Browser Unit Tests"
|
||||||
|
displayName: Run unit tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn gulp \
|
||||||
|
compile-extension:configuration-editing \
|
||||||
|
compile-extension:css-language-features-server \
|
||||||
|
compile-extension:emmet \
|
||||||
|
compile-extension:git \
|
||||||
|
compile-extension:github-authentication \
|
||||||
|
compile-extension:html-language-features-server \
|
||||||
|
compile-extension:ipynb \
|
||||||
|
compile-extension:json-language-features-server \
|
||||||
|
compile-extension:markdown-language-features-server \
|
||||||
|
compile-extension:markdown-language-features \
|
||||||
|
compile-extension-media \
|
||||||
|
compile-extension:microsoft-authentication \
|
||||||
|
compile-extension:typescript-language-features \
|
||||||
|
compile-extension:vscode-api-tests \
|
||||||
|
compile-extension:vscode-colorize-tests \
|
||||||
|
compile-extension:vscode-notebook-tests \
|
||||||
|
compile-extension:vscode-test-resolver
|
||||||
|
displayName: Build integration tests
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
DISPLAY=:10 ./scripts/test-integration.sh --tfs "Integration Tests"
|
||||||
|
displayName: Run integration tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
./scripts/test-web-integration.sh --browser chromium
|
||||||
|
displayName: Run integration tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
./scripts/test-remote-integration.sh
|
||||||
|
displayName: Run integration tests (Remote)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
# Figure out the full absolute path of the product we just built
|
||||||
|
# including the remote server and configure the integration tests
|
||||||
|
# to run with these builds instead of running out of sources.
|
||||||
|
set -e
|
||||||
|
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
|
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
||||||
|
INTEGRATION_TEST_APP_NAME="$APP_NAME" \
|
||||||
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
||||||
|
./scripts/test-integration.sh --build --tfs "Integration Tests"
|
||||||
|
displayName: Run integration tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \
|
||||||
|
./scripts/test-web-integration.sh --browser chromium
|
||||||
|
displayName: Run integration tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
|
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
||||||
|
INTEGRATION_TEST_APP_NAME="$APP_NAME" \
|
||||||
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
||||||
|
./scripts/test-remote-integration.sh
|
||||||
|
displayName: Run integration tests (Remote)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
ps -ef
|
||||||
|
cat /proc/sys/fs/inotify/max_user_watches
|
||||||
|
lsof | wc -l
|
||||||
|
displayName: Diagnostics before smoke test run (processes, max_user_watches, number of opened file handles)
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn --cwd test/smoke compile
|
||||||
|
displayName: Compile smoke tests
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn smoketest-no-compile --tracing
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Electron)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Browser, Chromium)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn gulp compile-extension:vscode-test-resolver
|
||||||
|
yarn smoketest-no-compile --remote --tracing
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Remote)
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
|
yarn smoketest-no-compile --tracing --build "$APP_PATH"
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Electron)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \
|
||||||
|
yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Browser, Chromium)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
yarn gulp compile-extension:vscode-test-resolver
|
||||||
|
APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
||||||
|
yarn smoketest-no-compile --tracing --remote --build "$APP_PATH"
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
displayName: Run smoke tests (Remote)
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
ps -ef
|
||||||
|
cat /proc/sys/fs/inotify/max_user_watches
|
||||||
|
lsof | wc -l
|
||||||
|
displayName: Diagnostics after smoke test run (processes, max_user_watches, number of opened file handles)
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: .build/crashes
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: crash-dump-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: crash-dump-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: crash-dump-linux-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Crash Reports"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
|
# In order to properly symbolify above crash reports
|
||||||
|
# (if any), we need the compiled native modules too
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: node_modules
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: node-modules-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: node-modules-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: node-modules-linux-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Node Modules"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: .build/logs
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: logs-linux-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: logs-linux-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: logs-linux-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Log Files"
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- task: PublishTestResults@2
|
||||||
|
displayName: Publish Tests Results
|
||||||
|
inputs:
|
||||||
|
testResultsFiles: "*-results.xml"
|
||||||
|
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
|
||||||
|
condition: succeededOrFailed()
|
||||||
@@ -1,79 +1,113 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_PUBLISH
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
- name: VSCODE_RUN_UNIT_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_INTEGRATION_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_SMOKE_TESTS
|
||||||
|
type: boolean
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 1
|
||||||
|
retryCountOnTaskFailure: 3
|
||||||
|
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "16.x"
|
versionSpec: "16.x"
|
||||||
|
|
||||||
- task: AzureKeyVault@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
- task: AzureKeyVault@1
|
||||||
inputs:
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
inputs:
|
||||||
KeyVaultName: vscode
|
azureSubscription: "vscode-builds-subscription"
|
||||||
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
KeyVaultName: vscode
|
||||||
|
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@2
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- task: DownloadPipelineArtifact@2
|
||||||
artifact: Compilation
|
inputs:
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
artifact: Compilation
|
||||||
displayName: Download compilation output
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
|
displayName: Download compilation output
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@2
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- task: DownloadPipelineArtifact@2
|
||||||
artifact: reh_node_modules-$(VSCODE_ARCH)
|
inputs:
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
artifact: reh_node_modules-$(VSCODE_ARCH)
|
||||||
displayName: Download server build dependencies
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
displayName: Download server build dependencies
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
# Start X server
|
set -e
|
||||||
/etc/init.d/xvfb start
|
# Start X server
|
||||||
# Start dbus session
|
/etc/init.d/xvfb start
|
||||||
DBUS_LAUNCH_RESULT=$(sudo dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address)
|
# Start dbus session
|
||||||
echo "##vso[task.setvariable variable=DBUS_SESSION_BUS_ADDRESS]$DBUS_LAUNCH_RESULT"
|
DBUS_LAUNCH_RESULT=$(sudo dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address)
|
||||||
displayName: Setup system services
|
echo "##vso[task.setvariable variable=DBUS_SESSION_BUS_ADDRESS]$DBUS_LAUNCH_RESULT"
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
|
displayName: Setup system services
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
set -e
|
||||||
displayName: Extract compilation output
|
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
||||||
|
displayName: Extract compilation output
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
cat << EOF > ~/.netrc
|
set -e
|
||||||
machine github.com
|
cat << EOF > ~/.netrc
|
||||||
login vscode
|
machine github.com
|
||||||
password $(github-distro-mixin-password)
|
login vscode
|
||||||
EOF
|
password $(github-distro-mixin-password)
|
||||||
|
EOF
|
||||||
|
|
||||||
git config user.email "vscode@microsoft.com"
|
git config user.email "vscode@microsoft.com"
|
||||||
git config user.name "VSCode"
|
git config user.name "VSCode"
|
||||||
displayName: Prepare tooling
|
displayName: Prepare tooling
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
set -e
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
git checkout FETCH_HEAD
|
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
git checkout FETCH_HEAD
|
||||||
displayName: Checkout override commit
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
|
displayName: Checkout override commit
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
set -e
|
||||||
displayName: Merge distro
|
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
||||||
|
displayName: Merge distro
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
mkdir -p .build
|
mkdir -p .build
|
||||||
node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH $ENABLE_TERRAPIN > .build/yarnlockhash
|
node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH $ENABLE_TERRAPIN > .build/yarnlockhash
|
||||||
displayName: Prepare yarn cache flags
|
displayName: Prepare yarn cache flags
|
||||||
|
|
||||||
- task: Cache@2
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- task: Cache@2
|
||||||
key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
|
inputs:
|
||||||
path: .build/node_modules_cache
|
key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash"
|
||||||
cacheHitVar: NODE_MODULES_RESTORED
|
path: .build/node_modules_cache
|
||||||
displayName: Restore node_modules cache
|
cacheHitVar: NODE_MODULES_RESTORED
|
||||||
|
displayName: Restore node_modules cache
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
|
||||||
|
path: .build/node_modules_cache
|
||||||
|
cacheHitVar: NODE_MODULES_RESTORED
|
||||||
|
displayName: Restore node_modules cache
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
@@ -91,6 +125,7 @@ steps:
|
|||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
node build/npm/setupBuildYarnrc
|
||||||
for i in {1..3}; do # try 3 times, for Terrapin
|
for i in {1..3}; do # try 3 times, for Terrapin
|
||||||
yarn --cwd build --frozen-lockfile --check-files && break
|
yarn --cwd build --frozen-lockfile --check-files && break
|
||||||
if [ $i -eq 3 ]; then
|
if [ $i -eq 3 ]; then
|
||||||
@@ -103,7 +138,16 @@ steps:
|
|||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
export npm_config_arch=$(NPM_ARCH)
|
if [ "$NPM_ARCH" = "armv7l" ]; then
|
||||||
|
# There is no target_arch="armv7l" supported by node_gyp,
|
||||||
|
# arm versions for compilation are decided based on the CC
|
||||||
|
# macros.
|
||||||
|
# Mapping value is based on
|
||||||
|
# https://github.com/nodejs/node/blob/0903515e126c2697042d6546c6aa4b72e1a4b33e/configure.py#L49-L50
|
||||||
|
export npm_config_arch="arm"
|
||||||
|
else
|
||||||
|
export npm_config_arch=$(NPM_ARCH)
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "$CC" ] || [ -z "$CXX" ]; then
|
if [ -z "$CC" ] || [ -z "$CXX" ]; then
|
||||||
# Download clang based on chromium revision used by vscode
|
# Download clang based on chromium revision used by vscode
|
||||||
@@ -143,12 +187,13 @@ steps:
|
|||||||
displayName: Install dependencies
|
displayName: Install dependencies
|
||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
rm -rf remote/node_modules
|
set -e
|
||||||
tar -xzf $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz --directory $(Build.SourcesDirectory)/remote
|
rm -rf remote/node_modules
|
||||||
displayName: Extract server node_modules output
|
tar -xzf $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz --directory $(Build.SourcesDirectory)/remote
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
displayName: Extract server node_modules output
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
@@ -158,267 +203,136 @@ steps:
|
|||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
displayName: Create node_modules archive
|
displayName: Create node_modules archive
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
node build/azure-pipelines/mixin
|
set -e
|
||||||
displayName: Mix in quality
|
node build/azure-pipelines/mixin
|
||||||
|
displayName: Mix in quality
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
set -e
|
||||||
yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
displayName: Build
|
yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
|
||||||
|
displayName: Build
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
node build/azure-pipelines/mixin --server
|
set -e
|
||||||
displayName: Mix in server quality
|
node build/azure-pipelines/mixin --server
|
||||||
|
displayName: Mix in server quality
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
set -e
|
||||||
yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
|
||||||
yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
displayName: Build Server
|
yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
|
||||||
|
displayName: Build Server
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
set -e
|
||||||
yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
displayName: Download Electron and Playwright
|
yarn gulp "transpile-client" "transpile-extensions"
|
||||||
|
displayName: Transpile
|
||||||
|
|
||||||
- script: |
|
- ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
set -e
|
- template: product-build-linux-client-test.yml
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
parameters:
|
||||||
ELECTRON_ROOT=.build/electron
|
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
|
||||||
sudo chown root $APP_ROOT/chrome-sandbox
|
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
|
||||||
sudo chown root $ELECTRON_ROOT/chrome-sandbox
|
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
|
||||||
sudo chmod 4755 $APP_ROOT/chrome-sandbox
|
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
|
||||||
sudo chmod 4755 $ELECTRON_ROOT/chrome-sandbox
|
|
||||||
stat $APP_ROOT/chrome-sandbox
|
|
||||||
stat $ELECTRON_ROOT/chrome-sandbox
|
|
||||||
displayName: Change setuid helper binary permission
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- script: |
|
||||||
./scripts/test.sh --build --tfs "Unit Tests"
|
set -e
|
||||||
displayName: Run unit tests (Electron)
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
|
||||||
timeoutInMinutes: 15
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
displayName: Build deb, rpm packages
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- script: |
|
||||||
yarn test-node --build
|
set -e
|
||||||
displayName: Run unit tests (node.js)
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
|
||||||
timeoutInMinutes: 15
|
displayName: Prepare snap package
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- task: UseDotNet@2
|
||||||
DEBUG=*browser* yarn test-browser-no-install --build --browser chromium --tfs "Browser Unit Tests"
|
inputs:
|
||||||
displayName: Run unit tests (Browser, Chromium)
|
version: 2.x
|
||||||
timeoutInMinutes: 15
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
# Figure out the full absolute path of the product we just built
|
- task: EsrpClientTool@1
|
||||||
# including the remote server and configure the integration tests
|
displayName: Download ESRPClient
|
||||||
# to run with these builds instead of running out of sources.
|
|
||||||
set -e
|
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
|
||||||
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
|
||||||
INTEGRATION_TEST_APP_NAME="$APP_NAME" \
|
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
|
||||||
./scripts/test-integration.sh --build --tfs "Integration Tests"
|
|
||||||
displayName: Run integration tests (Electron)
|
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \
|
set -e
|
||||||
./scripts/test-web-integration.sh --browser chromium
|
node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" rpm $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm'
|
||||||
displayName: Run integration tests (Browser, Chromium)
|
displayName: Codesign rpm
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- script: |
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
set -e
|
||||||
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
VSCODE_ARCH="$(VSCODE_ARCH)" \
|
||||||
INTEGRATION_TEST_APP_NAME="$APP_NAME" \
|
./build/azure-pipelines/linux/prepare-publish.sh
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
displayName: Prepare for Publish
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
|
||||||
./scripts/test-remote-integration.sh
|
|
||||||
displayName: Run integration tests (Remote)
|
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
ps -ef
|
displayName: Generate SBOM (client)
|
||||||
cat /proc/sys/fs/inotify/max_user_watches
|
inputs:
|
||||||
lsof | wc -l
|
BuildDropPath: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
displayName: Diagnostics before smoke test run (processes, max_user_watches, number of opened file handles)
|
PackageName: Visual Studio Code
|
||||||
continueOnError: true
|
|
||||||
condition: and(succeededOrFailed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- publish: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/_manifest
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \
|
displayName: Publish SBOM (client)
|
||||||
yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
|
artifact: vscode_client_linux_$(VSCODE_ARCH)_sbom
|
||||||
timeoutInMinutes: 10
|
|
||||||
displayName: Run smoke tests (Browser, Chromium)
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
displayName: Generate SBOM (server)
|
||||||
yarn smoketest-no-compile --tracing --build "$APP_PATH"
|
inputs:
|
||||||
timeoutInMinutes: 20
|
BuildDropPath: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)
|
||||||
displayName: Run smoke tests (Electron)
|
PackageName: Visual Studio Code Server
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- publish: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)/_manifest
|
||||||
APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
displayName: Publish SBOM (server)
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)" \
|
artifact: vscode_server_linux_$(VSCODE_ARCH)_sbom
|
||||||
yarn smoketest-no-compile --tracing --remote --build "$APP_PATH"
|
|
||||||
timeoutInMinutes: 20
|
|
||||||
displayName: Run smoke tests (Remote)
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- publish: $(DEB_PATH)
|
||||||
ps -ef
|
artifact: vscode_client_linux_$(VSCODE_ARCH)_deb-package
|
||||||
cat /proc/sys/fs/inotify/max_user_watches
|
displayName: Publish deb package
|
||||||
lsof | wc -l
|
|
||||||
displayName: Diagnostics after smoke test run (processes, max_user_watches, number of opened file handles)
|
|
||||||
continueOnError: true
|
|
||||||
condition: and(succeededOrFailed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
inputs:
|
- publish: $(RPM_PATH)
|
||||||
artifactName: crash-dump-linux-$(VSCODE_ARCH)
|
artifact: vscode_client_linux_$(VSCODE_ARCH)_rpm-package
|
||||||
targetPath: .build/crashes
|
displayName: Publish rpm package
|
||||||
displayName: "Publish Crash Reports"
|
|
||||||
continueOnError: true
|
|
||||||
condition: failed()
|
|
||||||
|
|
||||||
# In order to properly symbolify above crash reports
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
# (if any), we need the compiled native modules too
|
- publish: $(TARBALL_PATH)
|
||||||
- task: PublishPipelineArtifact@0
|
artifact: vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned
|
||||||
inputs:
|
displayName: Publish client archive
|
||||||
artifactName: node-modules-linux-$(VSCODE_ARCH)
|
|
||||||
targetPath: node_modules
|
|
||||||
displayName: "Publish Node Modules"
|
|
||||||
continueOnError: true
|
|
||||||
condition: failed()
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
inputs:
|
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz
|
||||||
artifactName: logs-linux-$(VSCODE_ARCH)-$(System.JobAttempt)
|
artifact: vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned
|
||||||
targetPath: .build/logs
|
displayName: Publish server archive
|
||||||
displayName: "Publish Log Files"
|
|
||||||
continueOnError: true
|
|
||||||
condition: and(failed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- task: PublishTestResults@2
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
displayName: Publish Tests Results
|
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz
|
||||||
inputs:
|
artifact: vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned
|
||||||
testResultsFiles: "*-results.xml"
|
displayName: Publish web server archive
|
||||||
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
|
|
||||||
condition: and(succeededOrFailed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
set -e
|
- task: PublishPipelineArtifact@0
|
||||||
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
|
displayName: "Publish Pipeline Artifact"
|
||||||
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
|
inputs:
|
||||||
displayName: Build deb, rpm packages
|
artifactName: "snap-$(VSCODE_ARCH)"
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
targetPath: .build/linux/snap-tarball
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
|
|
||||||
displayName: Prepare snap package
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- task: UseDotNet@2
|
|
||||||
inputs:
|
|
||||||
version: 2.x
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- task: EsrpClientTool@1
|
|
||||||
displayName: Download ESRPClient
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" rpm $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm'
|
|
||||||
displayName: Codesign rpm
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- script: |
|
|
||||||
set -e
|
|
||||||
VSCODE_ARCH="$(VSCODE_ARCH)" \
|
|
||||||
./build/azure-pipelines/linux/prepare-publish.sh
|
|
||||||
displayName: Prepare for Publish
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(DEB_PATH)
|
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_deb-package
|
|
||||||
displayName: Publish deb package
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(RPM_PATH)
|
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_rpm-package
|
|
||||||
displayName: Publish rpm package
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(TARBALL_PATH)
|
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned
|
|
||||||
displayName: Publish client archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz
|
|
||||||
artifact: vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned
|
|
||||||
displayName: Publish server archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz
|
|
||||||
artifact: vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned
|
|
||||||
displayName: Publish web server archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
|
||||||
displayName: "Publish Pipeline Artifact"
|
|
||||||
inputs:
|
|
||||||
artifactName: "snap-$(VSCODE_ARCH)"
|
|
||||||
targetPath: .build/linux/snap-tarball
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
|
||||||
displayName: Generate SBOM (client)
|
|
||||||
inputs:
|
|
||||||
BuildDropPath: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
|
||||||
PackageName: Visual Studio Code
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/_manifest
|
|
||||||
displayName: Publish SBOM (client)
|
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_sbom
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
|
||||||
displayName: Generate SBOM (server)
|
|
||||||
inputs:
|
|
||||||
BuildDropPath: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)
|
|
||||||
PackageName: Visual Studio Code Server
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)/_manifest
|
|
||||||
displayName: Publish SBOM (server)
|
|
||||||
artifact: vscode_server_linux_$(VSCODE_ARCH)_sbom
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|||||||
@@ -1,49 +1,58 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "16.x"
|
versionSpec: "16.x"
|
||||||
|
|
||||||
- task: AzureKeyVault@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
- task: AzureKeyVault@1
|
||||||
inputs:
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
inputs:
|
||||||
KeyVaultName: vscode
|
azureSubscription: "vscode-builds-subscription"
|
||||||
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
KeyVaultName: vscode
|
||||||
|
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
||||||
|
|
||||||
- task: Docker@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: "Pull Docker image"
|
- task: Docker@1
|
||||||
inputs:
|
displayName: "Pull Docker image"
|
||||||
azureSubscriptionEndpoint: "vscode-builds-subscription"
|
inputs:
|
||||||
azureContainerRegistry: vscodehub.azurecr.io
|
azureSubscriptionEndpoint: "vscode-builds-subscription"
|
||||||
command: "Run an image"
|
azureContainerRegistry: vscodehub.azurecr.io
|
||||||
imageName: "vscode-linux-build-agent:centos7-devtoolset8-arm64"
|
command: "Run an image"
|
||||||
containerCommand: uname
|
imageName: "vscode-linux-build-agent:centos7-devtoolset8-arm64"
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
containerCommand: uname
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
cat << EOF > ~/.netrc
|
set -e
|
||||||
machine github.com
|
cat << EOF > ~/.netrc
|
||||||
login vscode
|
machine github.com
|
||||||
password $(github-distro-mixin-password)
|
login vscode
|
||||||
EOF
|
password $(github-distro-mixin-password)
|
||||||
|
EOF
|
||||||
|
|
||||||
git config user.email "vscode@microsoft.com"
|
git config user.email "vscode@microsoft.com"
|
||||||
git config user.name "VSCode"
|
git config user.name "VSCode"
|
||||||
displayName: Prepare tooling
|
displayName: Prepare tooling
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
set -e
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
git checkout FETCH_HEAD
|
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
git checkout FETCH_HEAD
|
||||||
displayName: Checkout override commit
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
|
displayName: Checkout override commit
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
set -e
|
||||||
displayName: Merge distro
|
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
||||||
|
displayName: Merge distro
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
@@ -61,17 +70,19 @@ steps:
|
|||||||
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
|
||||||
|
|
||||||
- script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: Register Docker QEMU
|
- script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
displayName: Register Docker QEMU
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
docker run -e VSCODE_QUALITY -e GITHUB_TOKEN -v $(pwd):/root/vscode -v ~/.netrc:/root/.netrc vscodehub.azurecr.io/vscode-linux-build-agent:centos7-devtoolset8-arm64 /root/vscode/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh
|
set -e
|
||||||
displayName: Install dependencies via qemu
|
docker run -e VSCODE_QUALITY -e GITHUB_TOKEN -v $(pwd):/root/vscode -v ~/.netrc:/root/.netrc vscodehub.azurecr.io/vscode-linux-build-agent:centos7-devtoolset8-arm64 /root/vscode/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh
|
||||||
env:
|
displayName: Install dependencies via qemu
|
||||||
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
env:
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@@ -136,54 +136,56 @@ steps:
|
|||||||
displayName: Run core integration tests
|
displayName: Run core integration tests
|
||||||
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'), ne(variables['EXTENSIONS_ONLY'], 'true'))
|
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'), ne(variables['EXTENSIONS_ONLY'], 'true'))
|
||||||
|
|
||||||
- script: |
|
# {{SQL CARBON TODO}} Reenable "Run Extension Unit Tests (Continue on Error)" and "Run Extension Unit Tests (Fail on Error)" and "Archive Logs"
|
||||||
# Figure out the full absolute path of the product we just built
|
# - script: |
|
||||||
# including the remote server and configure the unit tests
|
# # Figure out the full absolute path of the product we just built
|
||||||
# to run with these builds instead of running out of sources.
|
# # including the remote server and configure the unit tests
|
||||||
set -e
|
# # to run with these builds instead of running out of sources.
|
||||||
APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
|
# set -e
|
||||||
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
# APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
# APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
||||||
NO_CLEANUP=1 \
|
# INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
|
# NO_CLEANUP=1 \
|
||||||
DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
|
# VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
|
||||||
displayName: Run Extension Unit Tests (Continue on Error)
|
# DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
|
||||||
continueOnError: true
|
# displayName: Run Extension Unit Tests (Continue on Error)
|
||||||
condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), eq(variables['EXTENSION_UNIT_TESTS_FAIL_ON_ERROR'], 'false')))
|
# continueOnError: true
|
||||||
|
# condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), eq(variables['EXTENSION_UNIT_TESTS_FAIL_ON_ERROR'], 'false')))
|
||||||
|
|
||||||
- script: |
|
# - script: |
|
||||||
# Figure out the full absolute path of the product we just built
|
# # Figure out the full absolute path of the product we just built
|
||||||
# including the remote server and configure the unit tests
|
# # including the remote server and configure the unit tests
|
||||||
# to run with these builds instead of running out of sources.
|
# # to run with these builds instead of running out of sources.
|
||||||
set -e
|
# set -e
|
||||||
APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
|
# APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
|
||||||
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
# APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
# INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
|
||||||
NO_CLEANUP=1 \
|
# NO_CLEANUP=1 \
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
|
# VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
|
||||||
DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
|
# DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
|
||||||
displayName: Run Extension Unit Tests (Fail on Error)
|
# displayName: Run Extension Unit Tests (Fail on Error)
|
||||||
condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), ne(variables['EXTENSION_UNIT_TESTS_FAIL_ON_ERROR'], 'false')))
|
# condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), ne(variables['EXTENSION_UNIT_TESTS_FAIL_ON_ERROR'], 'false')))
|
||||||
|
|
||||||
- bash: |
|
# - bash: |
|
||||||
set -e
|
# set -e
|
||||||
mkdir -p $(Build.ArtifactStagingDirectory)/logs/linux-x64
|
# mkdir -p $(Build.ArtifactStagingDirectory)/logs/linux-x64
|
||||||
cd /tmp
|
# cd /tmp
|
||||||
for folder in adsuser*/
|
# for folder in adsuser*/
|
||||||
do
|
# do
|
||||||
folder=${folder%/}
|
# folder=${folder%/}
|
||||||
# Only archive directories we want for debugging purposes
|
# # Only archive directories we want for debugging purposes
|
||||||
tar -czvf $(Build.ArtifactStagingDirectory)/logs/linux-x64/$folder.tar.gz $folder/User $folder/logs
|
# tar -czvf $(Build.ArtifactStagingDirectory)/logs/linux-x64/$folder.tar.gz $folder/User $folder/logs
|
||||||
done
|
# done
|
||||||
displayName: Archive Logs
|
# displayName: Archive Logs
|
||||||
continueOnError: true
|
# continueOnError: true
|
||||||
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
# condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
||||||
|
|
||||||
- script: |
|
# {{SQL CARBON TODO}} - Reenable
|
||||||
set -e
|
# - script: |
|
||||||
yarn gulp vscode-linux-x64-build-deb
|
# set -e
|
||||||
displayName: Build Deb
|
# yarn gulp vscode-linux-x64-build-deb
|
||||||
condition: and(succeeded(), ne(variables['EXTENSIONS_ONLY'], 'true'))
|
# displayName: Build Deb
|
||||||
|
# condition: and(succeeded(), ne(variables['EXTENSIONS_ONLY'], 'true'))
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const json = require("gulp-json-editor");
|
const json = require("gulp-json-editor");
|
||||||
const buffer = require('gulp-buffer');
|
const buffer = require('gulp-buffer');
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as json from 'gulp-json-editor';
|
import * as json from 'gulp-json-editor';
|
||||||
const buffer = require('gulp-buffer');
|
const buffer = require('gulp-buffer');
|
||||||
import * as filter from 'gulp-filter';
|
import * as filter from 'gulp-filter';
|
||||||
|
|||||||
59
build/azure-pipelines/product-build-pr-cache.yml
Normal file
59
build/azure-pipelines/product-build-pr-cache.yml
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 1
|
||||||
|
retryCountOnTaskFailure: 3
|
||||||
|
|
||||||
|
- task: NodeTool@0
|
||||||
|
inputs:
|
||||||
|
versionSpec: "16.x"
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
mkdir -p .build
|
||||||
|
node build/azure-pipelines/common/computeNodeModulesCacheKey.js $VSCODE_ARCH $ENABLE_TERRAPIN > .build/yarnlockhash
|
||||||
|
displayName: Prepare yarn cache flags
|
||||||
|
|
||||||
|
- task: Cache@2
|
||||||
|
inputs:
|
||||||
|
key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash"
|
||||||
|
path: .build/node_modules_cache
|
||||||
|
cacheHitVar: NODE_MODULES_RESTORED
|
||||||
|
displayName: Restore node_modules cache
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
tar -xzf .build/node_modules_cache/cache.tgz
|
||||||
|
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
displayName: Extract node_modules cache
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
npx https://aka.ms/enablesecurefeed standAlone
|
||||||
|
timeoutInMinutes: 5
|
||||||
|
retryCountOnTaskFailure: 3
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
|
||||||
|
displayName: Switch to Terrapin packages
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
for i in {1..3}; do # try 3 times, for Terrapin
|
||||||
|
yarn --frozen-lockfile --check-files && break
|
||||||
|
if [ $i -eq 3 ]; then
|
||||||
|
echo "Yarn failed too many times" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "Yarn failed $i, trying again..."
|
||||||
|
done
|
||||||
|
env:
|
||||||
|
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
|
||||||
|
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
|
||||||
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
|
displayName: Install dependencies
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
set -e
|
||||||
|
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
|
||||||
|
mkdir -p .build/node_modules_cache
|
||||||
|
tar -czf .build/node_modules_cache/cache.tgz --files-from .build/node_modules_list.txt
|
||||||
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
|
displayName: Create node_modules archive
|
||||||
189
build/azure-pipelines/product-build-pr.yml
Normal file
189
build/azure-pipelines/product-build-pr.yml
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
trigger:
|
||||||
|
- main
|
||||||
|
- release/*
|
||||||
|
|
||||||
|
pr:
|
||||||
|
branches:
|
||||||
|
include: ["main", "release/*"]
|
||||||
|
|
||||||
|
variables:
|
||||||
|
- name: Codeql.SkipTaskAutoInjection
|
||||||
|
value: true
|
||||||
|
- name: skipComponentGovernanceDetection
|
||||||
|
value: true
|
||||||
|
- name: ENABLE_TERRAPIN
|
||||||
|
value: false
|
||||||
|
- name: VSCODE_CIBUILD
|
||||||
|
value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}
|
||||||
|
- name: VSCODE_PUBLISH
|
||||||
|
value: false
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
value: oss
|
||||||
|
- name: VSCODE_STEP_ON_IT
|
||||||
|
value: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
- ${{ if ne(variables['VSCODE_CIBUILD'], true) }}:
|
||||||
|
- job: Compile
|
||||||
|
displayName: Compile & Hygiene
|
||||||
|
pool: vscode-1es-vscode-linux-20.04
|
||||||
|
timeoutInMinutes: 30
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: product-compile.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
|
||||||
|
- job: Linuxx64UnitTest
|
||||||
|
displayName: Linux (Unit Tests)
|
||||||
|
pool: vscode-1es-vscode-linux-20.04
|
||||||
|
timeoutInMinutes: 30
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
NPM_ARCH: x64
|
||||||
|
DISPLAY: ":10"
|
||||||
|
steps:
|
||||||
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: true
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
|
||||||
|
- job: Linuxx64IntegrationTest
|
||||||
|
displayName: Linux (Integration Tests)
|
||||||
|
pool: vscode-1es-vscode-linux-20.04
|
||||||
|
timeoutInMinutes: 30
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
NPM_ARCH: x64
|
||||||
|
DISPLAY: ":10"
|
||||||
|
steps:
|
||||||
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: true
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
|
||||||
|
- job: Linuxx64SmokeTest
|
||||||
|
displayName: Linux (Smoke Tests)
|
||||||
|
pool: vscode-1es-vscode-linux-20.04
|
||||||
|
timeoutInMinutes: 30
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
NPM_ARCH: x64
|
||||||
|
DISPLAY: ":10"
|
||||||
|
steps:
|
||||||
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: true
|
||||||
|
|
||||||
|
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
|
||||||
|
- job: Linuxx64MaintainNodeModulesCache
|
||||||
|
displayName: Linux (Maintain node_modules cache)
|
||||||
|
pool: vscode-1es-vscode-linux-20.04
|
||||||
|
timeoutInMinutes: 30
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: product-build-pr-cache.yml
|
||||||
|
|
||||||
|
# - job: macOSUnitTest
|
||||||
|
# displayName: macOS (Unit Tests)
|
||||||
|
# pool:
|
||||||
|
# vmImage: macOS-latest
|
||||||
|
# timeoutInMinutes: 60
|
||||||
|
# variables:
|
||||||
|
# BUILDSECMON_OPT_IN: true
|
||||||
|
# VSCODE_ARCH: x64
|
||||||
|
# steps:
|
||||||
|
# - template: darwin/product-build-darwin.yml
|
||||||
|
# parameters:
|
||||||
|
# VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
# VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
# VSCODE_RUN_UNIT_TESTS: true
|
||||||
|
# VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
# VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
# - job: macOSIntegrationTest
|
||||||
|
# displayName: macOS (Integration Tests)
|
||||||
|
# pool:
|
||||||
|
# vmImage: macOS-latest
|
||||||
|
# timeoutInMinutes: 60
|
||||||
|
# variables:
|
||||||
|
# BUILDSECMON_OPT_IN: true
|
||||||
|
# VSCODE_ARCH: x64
|
||||||
|
# steps:
|
||||||
|
# - template: darwin/product-build-darwin.yml
|
||||||
|
# parameters:
|
||||||
|
# VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
# VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
# VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
# VSCODE_RUN_INTEGRATION_TESTS: true
|
||||||
|
# VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
# - job: macOSSmokeTest
|
||||||
|
# displayName: macOS (Smoke Tests)
|
||||||
|
# pool:
|
||||||
|
# vmImage: macOS-latest
|
||||||
|
# timeoutInMinutes: 60
|
||||||
|
# variables:
|
||||||
|
# BUILDSECMON_OPT_IN: true
|
||||||
|
# VSCODE_ARCH: x64
|
||||||
|
# steps:
|
||||||
|
# - template: darwin/product-build-darwin.yml
|
||||||
|
# parameters:
|
||||||
|
# VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
# VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
# VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
# VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
# VSCODE_RUN_SMOKE_TESTS: true
|
||||||
|
|
||||||
|
# - job: WindowsUnitTests
|
||||||
|
# displayName: Windows (Unit Tests)
|
||||||
|
# pool: vscode-1es-vscode-windows-2019
|
||||||
|
# timeoutInMinutes: 60
|
||||||
|
# variables:
|
||||||
|
# VSCODE_ARCH: x64
|
||||||
|
# steps:
|
||||||
|
# - template: win32/product-build-win32.yml
|
||||||
|
# parameters:
|
||||||
|
# VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
# VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
# VSCODE_RUN_UNIT_TESTS: true
|
||||||
|
# VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
# VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
# - job: WindowsIntegrationTests
|
||||||
|
# displayName: Windows (Integration Tests)
|
||||||
|
# pool: vscode-1es-vscode-windows-2019
|
||||||
|
# timeoutInMinutes: 60
|
||||||
|
# variables:
|
||||||
|
# VSCODE_ARCH: x64
|
||||||
|
# steps:
|
||||||
|
# - template: win32/product-build-win32.yml
|
||||||
|
# parameters:
|
||||||
|
# VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
# VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
# VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
# VSCODE_RUN_INTEGRATION_TESTS: true
|
||||||
|
# VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
# - job: WindowsSmokeTests
|
||||||
|
# displayName: Windows (Smoke Tests)
|
||||||
|
# pool: vscode-1es-vscode-windows-2019
|
||||||
|
# timeoutInMinutes: 60
|
||||||
|
# variables:
|
||||||
|
# VSCODE_ARCH: x64
|
||||||
|
# steps:
|
||||||
|
# - template: win32/product-build-win32.yml
|
||||||
|
# parameters:
|
||||||
|
# VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
# VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
# VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
# VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
# VSCODE_RUN_SMOKE_TESTS: true
|
||||||
@@ -8,6 +8,10 @@ schedules:
|
|||||||
- main
|
- main
|
||||||
- joao/web
|
- joao/web
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
branches:
|
||||||
|
include: ["main", "release/*"]
|
||||||
|
|
||||||
parameters:
|
parameters:
|
||||||
- name: VSCODE_DISTRO_REF
|
- name: VSCODE_DISTRO_REF
|
||||||
displayName: Distro Ref (Private build)
|
displayName: Distro Ref (Private build)
|
||||||
@@ -104,9 +108,11 @@ variables:
|
|||||||
- name: VSCODE_BUILD_STAGE_WINDOWS
|
- name: VSCODE_BUILD_STAGE_WINDOWS
|
||||||
value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}
|
value: ${{ or(eq(parameters.VSCODE_BUILD_WIN32, true), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}
|
||||||
- name: VSCODE_BUILD_STAGE_LINUX
|
- name: VSCODE_BUILD_STAGE_LINUX
|
||||||
value: ${{ or(eq(parameters.VSCODE_BUILD_LINUX, true), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true), eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true), eq(parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64, true), eq(parameters.VSCODE_BUILD_WEB, true)) }}
|
value: ${{ or(eq(parameters.VSCODE_BUILD_LINUX, true), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true), eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true), eq(parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64, true)) }}
|
||||||
- name: VSCODE_BUILD_STAGE_MACOS
|
- name: VSCODE_BUILD_STAGE_MACOS
|
||||||
value: ${{ or(eq(parameters.VSCODE_BUILD_MACOS, true), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}
|
value: ${{ or(eq(parameters.VSCODE_BUILD_MACOS, true), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}
|
||||||
|
- name: VSCODE_BUILD_STAGE_WEB
|
||||||
|
value: ${{ eq(parameters.VSCODE_BUILD_WEB, true) }}
|
||||||
- name: VSCODE_CIBUILD
|
- name: VSCODE_CIBUILD
|
||||||
value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}
|
value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}
|
||||||
- name: VSCODE_PUBLISH
|
- name: VSCODE_PUBLISH
|
||||||
@@ -162,6 +168,8 @@ stages:
|
|||||||
VSCODE_ARCH: x64
|
VSCODE_ARCH: x64
|
||||||
steps:
|
steps:
|
||||||
- template: product-compile.yml
|
- template: product-compile.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
|
||||||
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}:
|
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}:
|
||||||
- stage: Windows
|
- stage: Windows
|
||||||
@@ -169,13 +177,60 @@ stages:
|
|||||||
- Compile
|
- Compile
|
||||||
pool: vscode-1es-windows
|
pool: vscode-1es-windows
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:
|
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
|
||||||
|
- job: WindowsUnitTests
|
||||||
|
displayName: Unit Tests
|
||||||
|
timeoutInMinutes: 60
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: win32/product-build-win32.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: true
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
- job: WindowsIntegrationTests
|
||||||
|
displayName: Integration Tests
|
||||||
|
timeoutInMinutes: 60
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: win32/product-build-win32.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: true
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
- job: WindowsSmokeTests
|
||||||
|
displayName: Smoke Tests
|
||||||
|
timeoutInMinutes: 60
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: win32/product-build-win32.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: true
|
||||||
|
|
||||||
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32, true)) }}:
|
||||||
- job: Windows
|
- job: Windows
|
||||||
timeoutInMinutes: 120
|
timeoutInMinutes: 120
|
||||||
variables:
|
variables:
|
||||||
VSCODE_ARCH: x64
|
VSCODE_ARCH: x64
|
||||||
steps:
|
steps:
|
||||||
- template: win32/product-build-win32.yml
|
- template: win32/product-build-win32.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
|
||||||
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}:
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}:
|
||||||
- job: Windows32
|
- job: Windows32
|
||||||
@@ -184,6 +239,12 @@ stages:
|
|||||||
VSCODE_ARCH: ia32
|
VSCODE_ARCH: ia32
|
||||||
steps:
|
steps:
|
||||||
- template: win32/product-build-win32.yml
|
- template: win32/product-build-win32.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
|
||||||
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
|
||||||
- job: WindowsARM64
|
- job: WindowsARM64
|
||||||
@@ -192,6 +253,12 @@ stages:
|
|||||||
VSCODE_ARCH: arm64
|
VSCODE_ARCH: arm64
|
||||||
steps:
|
steps:
|
||||||
- template: win32/product-build-win32.yml
|
- template: win32/product-build-win32.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
|
||||||
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}:
|
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}:
|
||||||
- stage: LinuxServerDependencies
|
- stage: LinuxServerDependencies
|
||||||
@@ -206,13 +273,17 @@ stages:
|
|||||||
NPM_ARCH: x64
|
NPM_ARCH: x64
|
||||||
steps:
|
steps:
|
||||||
- template: linux/product-build-linux-server.yml
|
- template: linux/product-build-linux-server.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
|
||||||
- job: arm64
|
- job: arm64
|
||||||
variables:
|
variables:
|
||||||
VSCODE_ARCH: arm64
|
VSCODE_ARCH: arm64
|
||||||
steps:
|
steps:
|
||||||
- template: linux/product-build-linux-server.yml
|
- template: linux/product-build-linux-server.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
|
||||||
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}:
|
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}:
|
||||||
- stage: Linux
|
- stage: Linux
|
||||||
@@ -221,7 +292,54 @@ stages:
|
|||||||
- LinuxServerDependencies
|
- LinuxServerDependencies
|
||||||
pool: vscode-1es-linux
|
pool: vscode-1es-linux
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
|
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
|
||||||
|
- job: Linuxx64UnitTest
|
||||||
|
displayName: Unit Tests
|
||||||
|
container: vscode-bionic-x64
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
NPM_ARCH: x64
|
||||||
|
DISPLAY: ":10"
|
||||||
|
steps:
|
||||||
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: true
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
- job: Linuxx64IntegrationTest
|
||||||
|
displayName: Integration Tests
|
||||||
|
container: vscode-bionic-x64
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
NPM_ARCH: x64
|
||||||
|
DISPLAY: ":10"
|
||||||
|
steps:
|
||||||
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: true
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
- job: Linuxx64SmokeTest
|
||||||
|
displayName: Smoke Tests
|
||||||
|
container: vscode-bionic-x64
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
NPM_ARCH: x64
|
||||||
|
DISPLAY: ":10"
|
||||||
|
steps:
|
||||||
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: true
|
||||||
|
|
||||||
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}:
|
||||||
- job: Linuxx64
|
- job: Linuxx64
|
||||||
container: vscode-bionic-x64
|
container: vscode-bionic-x64
|
||||||
variables:
|
variables:
|
||||||
@@ -230,6 +348,12 @@ stages:
|
|||||||
DISPLAY: ":10"
|
DISPLAY: ":10"
|
||||||
steps:
|
steps:
|
||||||
- template: linux/product-build-linux-client.yml
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
|
||||||
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true), ne(variables['VSCODE_PUBLISH'], 'false')) }}:
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true), ne(variables['VSCODE_PUBLISH'], 'false')) }}:
|
||||||
- job: LinuxSnap
|
- job: LinuxSnap
|
||||||
@@ -249,6 +373,12 @@ stages:
|
|||||||
NPM_ARCH: armv7l
|
NPM_ARCH: armv7l
|
||||||
steps:
|
steps:
|
||||||
- template: linux/product-build-linux-client.yml
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
|
||||||
# TODO@joaomoreno: We don't ship ARM snaps for now
|
# TODO@joaomoreno: We don't ship ARM snaps for now
|
||||||
- ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}:
|
- ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}:
|
||||||
@@ -269,6 +399,12 @@ stages:
|
|||||||
NPM_ARCH: arm64
|
NPM_ARCH: arm64
|
||||||
steps:
|
steps:
|
||||||
- template: linux/product-build-linux-client.yml
|
- template: linux/product-build-linux-client.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
|
||||||
# TODO@joaomoreno: We don't ship ARM snaps for now
|
# TODO@joaomoreno: We don't ship ARM snaps for now
|
||||||
- ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
|
- ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
|
||||||
@@ -296,13 +432,6 @@ stages:
|
|||||||
steps:
|
steps:
|
||||||
- template: linux/product-build-alpine.yml
|
- template: linux/product-build-alpine.yml
|
||||||
|
|
||||||
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WEB, true)) }}:
|
|
||||||
- job: LinuxWeb
|
|
||||||
variables:
|
|
||||||
VSCODE_ARCH: x64
|
|
||||||
steps:
|
|
||||||
- template: web/product-build-web.yml
|
|
||||||
|
|
||||||
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_MACOS'], true)) }}:
|
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_MACOS'], true)) }}:
|
||||||
- stage: macOS
|
- stage: macOS
|
||||||
dependsOn:
|
dependsOn:
|
||||||
@@ -312,20 +441,76 @@ stages:
|
|||||||
variables:
|
variables:
|
||||||
BUILDSECMON_OPT_IN: true
|
BUILDSECMON_OPT_IN: true
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
|
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
|
||||||
- job: macOSTest
|
- job: macOSUnitTest
|
||||||
|
displayName: Unit Tests
|
||||||
timeoutInMinutes: 90
|
timeoutInMinutes: 90
|
||||||
variables:
|
variables:
|
||||||
VSCODE_ARCH: x64
|
VSCODE_ARCH: x64
|
||||||
steps:
|
steps:
|
||||||
- template: darwin/product-build-darwin-test.yml
|
- template: darwin/product-build-darwin.yml
|
||||||
- ${{ if eq(variables['VSCODE_CIBUILD'], false) }}:
|
parameters:
|
||||||
- job: macOS
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: true
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
- job: macOSIntegrationTest
|
||||||
|
displayName: Integration Tests
|
||||||
|
timeoutInMinutes: 90
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: darwin/product-build-darwin.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: true
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
- job: macOSSmokeTest
|
||||||
|
displayName: Smoke Tests
|
||||||
|
timeoutInMinutes: 90
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: darwin/product-build-darwin.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: true
|
||||||
|
|
||||||
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS, true)) }}:
|
||||||
|
- job: macOS
|
||||||
|
timeoutInMinutes: 90
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: darwin/product-build-darwin.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_STEP_ON_IT, false) }}:
|
||||||
|
- job: macOSTest
|
||||||
timeoutInMinutes: 90
|
timeoutInMinutes: 90
|
||||||
variables:
|
variables:
|
||||||
VSCODE_ARCH: x64
|
VSCODE_ARCH: x64
|
||||||
steps:
|
steps:
|
||||||
- template: darwin/product-build-darwin.yml
|
- template: darwin/product-build-darwin.yml
|
||||||
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: ${{ eq(parameters.VSCODE_STEP_ON_IT, false) }}
|
||||||
|
|
||||||
|
- ${{ if eq(variables['VSCODE_PUBLISH'], true) }}:
|
||||||
- job: macOSSign
|
- job: macOSSign
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- macOS
|
- macOS
|
||||||
@@ -342,7 +527,14 @@ stages:
|
|||||||
VSCODE_ARCH: arm64
|
VSCODE_ARCH: arm64
|
||||||
steps:
|
steps:
|
||||||
- template: darwin/product-build-darwin.yml
|
- template: darwin/product-build-darwin.yml
|
||||||
- ${{ if eq(variables['VSCODE_CIBUILD'], false) }}:
|
parameters:
|
||||||
|
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
||||||
|
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
|
||||||
|
VSCODE_RUN_UNIT_TESTS: false
|
||||||
|
VSCODE_RUN_INTEGRATION_TESTS: false
|
||||||
|
VSCODE_RUN_SMOKE_TESTS: false
|
||||||
|
|
||||||
|
- ${{ if eq(variables['VSCODE_PUBLISH'], true) }}:
|
||||||
- job: macOSARM64Sign
|
- job: macOSARM64Sign
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- macOSARM64
|
- macOSARM64
|
||||||
@@ -362,7 +554,8 @@ stages:
|
|||||||
VSCODE_ARCH: universal
|
VSCODE_ARCH: universal
|
||||||
steps:
|
steps:
|
||||||
- template: darwin/product-build-darwin-universal.yml
|
- template: darwin/product-build-darwin-universal.yml
|
||||||
- ${{ if eq(variables['VSCODE_CIBUILD'], false) }}:
|
|
||||||
|
- ${{ if eq(variables['VSCODE_PUBLISH'], true) }}:
|
||||||
- job: macOSUniversalSign
|
- job: macOSUniversalSign
|
||||||
dependsOn:
|
dependsOn:
|
||||||
- macOSUniversal
|
- macOSUniversal
|
||||||
@@ -372,6 +565,19 @@ stages:
|
|||||||
steps:
|
steps:
|
||||||
- template: darwin/product-build-darwin-sign.yml
|
- template: darwin/product-build-darwin-sign.yml
|
||||||
|
|
||||||
|
- ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WEB'], true)) }}:
|
||||||
|
- stage: Web
|
||||||
|
dependsOn:
|
||||||
|
- Compile
|
||||||
|
pool: vscode-1es-linux
|
||||||
|
jobs:
|
||||||
|
- ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}:
|
||||||
|
- job: Web
|
||||||
|
variables:
|
||||||
|
VSCODE_ARCH: x64
|
||||||
|
steps:
|
||||||
|
- template: web/product-build-web.yml
|
||||||
|
|
||||||
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), ne(variables['VSCODE_PUBLISH'], 'false')) }}:
|
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), ne(variables['VSCODE_PUBLISH'], 'false')) }}:
|
||||||
- stage: Publish
|
- stage: Publish
|
||||||
dependsOn:
|
dependsOn:
|
||||||
|
|||||||
@@ -1,39 +1,47 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "16.x"
|
versionSpec: "16.x"
|
||||||
|
|
||||||
- task: AzureKeyVault@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
- task: AzureKeyVault@1
|
||||||
inputs:
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
inputs:
|
||||||
KeyVaultName: vscode
|
azureSubscription: "vscode-builds-subscription"
|
||||||
SecretsFilter: "github-distro-mixin-password"
|
KeyVaultName: vscode
|
||||||
|
SecretsFilter: "github-distro-mixin-password"
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
cat << EOF > ~/.netrc
|
set -e
|
||||||
machine github.com
|
cat << EOF > ~/.netrc
|
||||||
login vscode
|
machine github.com
|
||||||
password $(github-distro-mixin-password)
|
login vscode
|
||||||
EOF
|
password $(github-distro-mixin-password)
|
||||||
|
EOF
|
||||||
|
|
||||||
git config user.email "vscode@microsoft.com"
|
git config user.email "vscode@microsoft.com"
|
||||||
git config user.name "VSCode"
|
git config user.name "VSCode"
|
||||||
displayName: Prepare tooling
|
displayName: Prepare tooling
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
set -e
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
git checkout FETCH_HEAD
|
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
git checkout FETCH_HEAD
|
||||||
displayName: Checkout override commit
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
|
displayName: Checkout override commit
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
set -e
|
||||||
displayName: Merge distro
|
git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
|
||||||
|
displayName: Merge distro
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
mkdir -p .build
|
mkdir -p .build
|
||||||
@@ -94,11 +102,12 @@ steps:
|
|||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
displayName: Create node_modules archive
|
displayName: Create node_modules archive
|
||||||
|
|
||||||
# Mixin must run before optimize, because the CSS loader will inline small SVGs
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
- script: |
|
# Mixin must run before optimize, because the CSS loader will inline small SVGs
|
||||||
set -e
|
- script: |
|
||||||
node build/azure-pipelines/mixin
|
set -e
|
||||||
displayName: Mix in quality
|
node build/azure-pipelines/mixin
|
||||||
|
displayName: Mix in quality
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
@@ -107,59 +116,65 @@ steps:
|
|||||||
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
displayName: Compile & Hygiene
|
displayName: Compile & Hygiene
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
yarn --cwd test/smoke compile
|
set -e
|
||||||
yarn --cwd test/integration/browser compile
|
yarn --cwd test/smoke compile
|
||||||
displayName: Compile test suites
|
yarn --cwd test/integration/browser compile
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
displayName: Compile test suites
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- task: AzureCLI@2
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- task: AzureCLI@2
|
||||||
azureSubscription: "vscode-builds-subscription"
|
inputs:
|
||||||
scriptType: pscore
|
azureSubscription: "vscode-builds-subscription"
|
||||||
scriptLocation: inlineScript
|
scriptType: pscore
|
||||||
addSpnToEnvironment: true
|
scriptLocation: inlineScript
|
||||||
inlineScript: |
|
addSpnToEnvironment: true
|
||||||
Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
|
inlineScript: |
|
||||||
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"
|
Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
|
||||||
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
|
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_ID]$env:servicePrincipalId"
|
||||||
|
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
AZURE_STORAGE_ACCOUNT="ticino" \
|
set -e
|
||||||
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
|
AZURE_STORAGE_ACCOUNT="ticino" \
|
||||||
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
|
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
|
||||||
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
|
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
|
||||||
node build/azure-pipelines/upload-sourcemaps
|
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
|
||||||
displayName: Upload sourcemaps
|
node build/azure-pipelines/upload-sourcemaps
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
displayName: Upload sourcemaps
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -
|
- script: |
|
||||||
./build/azure-pipelines/common/extract-telemetry.sh
|
set -
|
||||||
displayName: Extract Telemetry
|
./build/azure-pipelines/common/extract-telemetry.sh
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
displayName: Extract Telemetry
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
tar -cz --ignore-failed-read -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out
|
set -e
|
||||||
displayName: Compress compilation artifact
|
tar -cz --ignore-failed-read -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out
|
||||||
|
displayName: Compress compilation artifact
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- task: PublishPipelineArtifact@1
|
||||||
targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
inputs:
|
||||||
artifactName: Compilation
|
targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
||||||
displayName: Publish compilation artifact
|
artifactName: Compilation
|
||||||
|
displayName: Publish compilation artifact
|
||||||
|
|
||||||
- script: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
set -e
|
- script: |
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
set -e
|
||||||
yarn download-builtin-extensions-cg
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
displayName: Built-in extensions component details
|
yarn download-builtin-extensions-cg
|
||||||
|
displayName: Built-in extensions component details
|
||||||
|
|
||||||
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: "Component Detection"
|
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
|
||||||
inputs:
|
displayName: "Component Detection"
|
||||||
sourceScanPath: $(Build.SourcesDirectory)
|
inputs:
|
||||||
continueOnError: true
|
sourceScanPath: $(Build.SourcesDirectory)
|
||||||
|
continueOnError: true
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ $stages = @(
|
|||||||
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
|
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
|
||||||
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
|
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
|
||||||
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
|
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
|
||||||
|
if ($env:VSCODE_BUILD_STAGE_WEB -eq 'True') { 'Web' }
|
||||||
)
|
)
|
||||||
|
|
||||||
do {
|
do {
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ steps:
|
|||||||
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
|
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
|
||||||
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
|
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
|
||||||
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
|
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
|
||||||
|
if ($env:VSCODE_BUILD_STAGE_WEB -eq 'True') { 'Web' }
|
||||||
)
|
)
|
||||||
Write-Host "Stages to check: $stages"
|
Write-Host "Stages to check: $stages"
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const cp = require("child_process");
|
const cp = require("child_process");
|
||||||
let tag = '';
|
let tag = '';
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as cp from 'child_process';
|
import * as cp from 'child_process';
|
||||||
|
|
||||||
let tag = '';
|
let tag = '';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const cp = require("child_process");
|
const cp = require("child_process");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as cp from 'child_process';
|
import * as cp from 'child_process';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const es = require("event-stream");
|
const es = require("event-stream");
|
||||||
const Vinyl = require("vinyl");
|
const Vinyl = require("vinyl");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as es from 'event-stream';
|
import * as es from 'event-stream';
|
||||||
import * as Vinyl from 'vinyl';
|
import * as Vinyl from 'vinyl';
|
||||||
import * as vfs from 'vinyl-fs';
|
import * as vfs from 'vinyl-fs';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.getSettingsSearchBuildId = exports.shouldSetupSettingsSearch = void 0;
|
exports.getSettingsSearchBuildId = exports.shouldSetupSettingsSearch = void 0;
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
@@ -52,7 +52,7 @@ function generateVSCodeConfigurationTask() {
|
|||||||
const timer = setTimeout(() => {
|
const timer = setTimeout(() => {
|
||||||
codeProc.kill();
|
codeProc.kill();
|
||||||
reject(new Error('export-default-configuration process timed out'));
|
reject(new Error('export-default-configuration process timed out'));
|
||||||
}, 12 * 1000);
|
}, 60 * 1000);
|
||||||
codeProc.on('error', err => {
|
codeProc.on('error', err => {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
reject(err);
|
reject(err);
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as os from 'os';
|
import * as os from 'os';
|
||||||
import * as cp from 'child_process';
|
import * as cp from 'child_process';
|
||||||
@@ -63,7 +61,7 @@ function generateVSCodeConfigurationTask(): Promise<string | undefined> {
|
|||||||
const timer = setTimeout(() => {
|
const timer = setTimeout(() => {
|
||||||
codeProc.kill();
|
codeProc.kill();
|
||||||
reject(new Error('export-default-configuration process timed out'));
|
reject(new Error('export-default-configuration process timed out'));
|
||||||
}, 12 * 1000);
|
}, 60 * 1000);
|
||||||
|
|
||||||
codeProc.on('error', err => {
|
codeProc.on('error', err => {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const es = require("event-stream");
|
const es = require("event-stream");
|
||||||
const vfs = require("vinyl-fs");
|
const vfs = require("vinyl-fs");
|
||||||
const merge = require("gulp-merge-json");
|
const merge = require("gulp-merge-json");
|
||||||
const gzip = require("gulp-gzip");
|
const gzip = require("gulp-gzip");
|
||||||
const identity_1 = require("@azure/identity");
|
const identity_1 = require("@azure/identity");
|
||||||
|
const path = require("path");
|
||||||
|
const fs_1 = require("fs");
|
||||||
const azure = require('gulp-azure-storage');
|
const azure = require('gulp-azure-storage');
|
||||||
const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
|
const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
|
||||||
const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
|
const credential = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
|
||||||
@@ -18,8 +20,8 @@ function main() {
|
|||||||
.pipe(merge({
|
.pipe(merge({
|
||||||
fileName: 'combined.nls.metadata.json',
|
fileName: 'combined.nls.metadata.json',
|
||||||
jsonSpace: '',
|
jsonSpace: '',
|
||||||
|
concatArrays: true,
|
||||||
edit: (parsedJson, file) => {
|
edit: (parsedJson, file) => {
|
||||||
let key;
|
|
||||||
if (file.base === 'out-vscode-web-min') {
|
if (file.base === 'out-vscode-web-min') {
|
||||||
return { vscode: parsedJson };
|
return { vscode: parsedJson };
|
||||||
}
|
}
|
||||||
@@ -63,7 +65,11 @@ function main() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
key = 'vscode.' + file.relative.split('/')[0];
|
// Get extension id and use that as the key
|
||||||
|
const folderPath = path.join(file.base, file.relative.split('/')[0]);
|
||||||
|
const manifest = (0, fs_1.readFileSync)(path.join(folderPath, 'package.json'), 'utf-8');
|
||||||
|
const manifestJson = JSON.parse(manifest);
|
||||||
|
const key = manifestJson.publisher + '.' + manifestJson.name;
|
||||||
return { [key]: parsedJson };
|
return { [key]: parsedJson };
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
|
|||||||
@@ -3,14 +3,14 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as es from 'event-stream';
|
import * as es from 'event-stream';
|
||||||
import * as Vinyl from 'vinyl';
|
import * as Vinyl from 'vinyl';
|
||||||
import * as vfs from 'vinyl-fs';
|
import * as vfs from 'vinyl-fs';
|
||||||
import * as merge from 'gulp-merge-json';
|
import * as merge from 'gulp-merge-json';
|
||||||
import * as gzip from 'gulp-gzip';
|
import * as gzip from 'gulp-gzip';
|
||||||
import { ClientSecretCredential } from '@azure/identity';
|
import { ClientSecretCredential } from '@azure/identity';
|
||||||
|
import path = require('path');
|
||||||
|
import { readFileSync } from 'fs';
|
||||||
const azure = require('gulp-azure-storage');
|
const azure = require('gulp-azure-storage');
|
||||||
|
|
||||||
const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
|
const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
|
||||||
@@ -33,8 +33,8 @@ function main(): Promise<void> {
|
|||||||
.pipe(merge({
|
.pipe(merge({
|
||||||
fileName: 'combined.nls.metadata.json',
|
fileName: 'combined.nls.metadata.json',
|
||||||
jsonSpace: '',
|
jsonSpace: '',
|
||||||
|
concatArrays: true,
|
||||||
edit: (parsedJson, file) => {
|
edit: (parsedJson, file) => {
|
||||||
let key;
|
|
||||||
if (file.base === 'out-vscode-web-min') {
|
if (file.base === 'out-vscode-web-min') {
|
||||||
return { vscode: parsedJson };
|
return { vscode: parsedJson };
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,12 @@ function main(): Promise<void> {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
key = 'vscode.' + file.relative.split('/')[0];
|
|
||||||
|
// Get extension id and use that as the key
|
||||||
|
const folderPath = path.join(file.base, file.relative.split('/')[0]);
|
||||||
|
const manifest = readFileSync(path.join(folderPath, 'package.json'), 'utf-8');
|
||||||
|
const manifestJson = JSON.parse(manifest);
|
||||||
|
const key = manifestJson.publisher + '.' + manifestJson.name;
|
||||||
return { [key]: parsedJson };
|
return { [key]: parsedJson };
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
@@ -113,4 +118,3 @@ main().catch(err => {
|
|||||||
console.error(err);
|
console.error(err);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
const es = require("event-stream");
|
const es = require("event-stream");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as es from 'event-stream';
|
import * as es from 'event-stream';
|
||||||
import * as Vinyl from 'vinyl';
|
import * as Vinyl from 'vinyl';
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ steps:
|
|||||||
|
|
||||||
cd $ROOT && tar --owner=0 --group=0 -czf $WEB_TARBALL_PATH $WEB_BUILD_NAME
|
cd $ROOT && tar --owner=0 --group=0 -czf $WEB_TARBALL_PATH $WEB_BUILD_NAME
|
||||||
displayName: Prepare for publish
|
displayName: Prepare for publish
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-web.tar.gz
|
- publish: $(Agent.BuildDirectory)/vscode-web.tar.gz
|
||||||
artifact: vscode_web_linux_standalone_archive-unsigned
|
artifact: vscode_web_linux_standalone_archive-unsigned
|
||||||
|
|||||||
247
build/azure-pipelines/win32/product-build-win32-test.yml
Normal file
247
build/azure-pipelines/win32/product-build-win32-test.yml
Normal file
@@ -0,0 +1,247 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
- name: VSCODE_RUN_UNIT_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_INTEGRATION_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_SMOKE_TESTS
|
||||||
|
type: boolean
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
|
exec { yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install" }
|
||||||
|
displayName: Download Electron and Playwright
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn electron $(VSCODE_ARCH) }
|
||||||
|
exec { .\scripts\test.bat --tfs "Unit Tests" }
|
||||||
|
displayName: Run unit tests (Electron)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn test-node }
|
||||||
|
displayName: Run unit tests (node.js)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { node test/unit/browser/index.js --sequential --browser chromium --browser firefox --tfs "Browser Unit Tests" }
|
||||||
|
displayName: Run unit tests (Browser, Chromium & Firefox)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn electron $(VSCODE_ARCH) }
|
||||||
|
exec { .\scripts\test.bat --build --tfs "Unit Tests" }
|
||||||
|
displayName: Run unit tests (Electron)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn test-node --build }
|
||||||
|
displayName: Run unit tests (node.js)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn test-browser-no-install --sequential --build --browser chromium --browser firefox --tfs "Browser Unit Tests" }
|
||||||
|
displayName: Run unit tests (Browser, Chromium & Firefox)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn gulp `
|
||||||
|
compile-extension:configuration-editing `
|
||||||
|
compile-extension:css-language-features-server `
|
||||||
|
compile-extension:emmet `
|
||||||
|
compile-extension:git `
|
||||||
|
compile-extension:github-authentication `
|
||||||
|
compile-extension:html-language-features-server `
|
||||||
|
compile-extension:ipynb `
|
||||||
|
compile-extension:json-language-features-server `
|
||||||
|
compile-extension:markdown-language-features-server `
|
||||||
|
compile-extension:markdown-language-features `
|
||||||
|
compile-extension-media `
|
||||||
|
compile-extension:microsoft-authentication `
|
||||||
|
compile-extension:typescript-language-features `
|
||||||
|
compile-extension:vscode-api-tests `
|
||||||
|
compile-extension:vscode-colorize-tests `
|
||||||
|
compile-extension:vscode-notebook-tests `
|
||||||
|
compile-extension:vscode-test-resolver `
|
||||||
|
}
|
||||||
|
displayName: Build integration tests
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { .\scripts\test-integration.bat --tfs "Integration Tests" }
|
||||||
|
displayName: Run integration tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { .\scripts\test-web-integration.bat --browser firefox }
|
||||||
|
displayName: Run integration tests (Browser, Firefox)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { .\scripts\test-remote-integration.bat }
|
||||||
|
displayName: Run integration tests (Remote)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- powershell: |
|
||||||
|
# Figure out the full absolute path of the product we just built
|
||||||
|
# including the remote server and configure the integration tests
|
||||||
|
# to run with these builds instead of running out of sources.
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
|
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
|
||||||
|
$AppNameShort = $AppProductJson.nameShort
|
||||||
|
exec { $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"; $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)"; .\scripts\test-integration.bat --build --tfs "Integration Tests" }
|
||||||
|
displayName: Run integration tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)"; .\scripts\test-web-integration.bat --browser firefox }
|
||||||
|
displayName: Run integration tests (Browser, Firefox)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
|
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
|
||||||
|
$AppNameShort = $AppProductJson.nameShort
|
||||||
|
exec { $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"; $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)"; .\scripts\test-remote-integration.bat }
|
||||||
|
displayName: Run integration tests (Remote)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
exec {.\build\azure-pipelines\win32\listprocesses.bat }
|
||||||
|
displayName: Diagnostics before smoke test run
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn --cwd test/smoke compile }
|
||||||
|
displayName: Compile smoke tests
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { yarn smoketest-no-compile --tracing }
|
||||||
|
displayName: Run smoke tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
|
exec { yarn smoketest-no-compile --tracing --build "$AppRoot" }
|
||||||
|
displayName: Run smoke tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)"
|
||||||
|
exec { yarn smoketest-no-compile --web --tracing --headless }
|
||||||
|
displayName: Run smoke tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
|
$env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)"
|
||||||
|
exec { yarn gulp compile-extension:vscode-test-resolver }
|
||||||
|
exec { yarn smoketest-no-compile --tracing --remote --build "$AppRoot" }
|
||||||
|
displayName: Run smoke tests (Remote)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
exec {.\build\azure-pipelines\win32\listprocesses.bat }
|
||||||
|
displayName: Diagnostics after smoke test run
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- ${{ if or(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: .build\crashes
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: crash-dump-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: crash-dump-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: crash-dump-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Crash Reports"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
|
# In order to properly symbolify above crash reports
|
||||||
|
# (if any), we need the compiled native modules too
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: node_modules
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: node-modules-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: node-modules-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: node-modules-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Node Modules"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
|
- task: PublishPipelineArtifact@0
|
||||||
|
inputs:
|
||||||
|
targetPath: .build\logs
|
||||||
|
${{ if and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
|
||||||
|
artifactName: logs-windows-$(VSCODE_ARCH)-integration-$(System.JobAttempt)
|
||||||
|
${{ elseif and(eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
|
artifactName: logs-windows-$(VSCODE_ARCH)-smoke-$(System.JobAttempt)
|
||||||
|
${{ else }}:
|
||||||
|
artifactName: logs-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
|
displayName: "Publish Log Files"
|
||||||
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
- task: PublishTestResults@2
|
||||||
|
displayName: Publish Tests Results
|
||||||
|
inputs:
|
||||||
|
testResultsFiles: "*-results.xml"
|
||||||
|
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
|
||||||
|
condition: succeededOrFailed()
|
||||||
@@ -1,4 +1,21 @@
|
|||||||
|
parameters:
|
||||||
|
- name: VSCODE_PUBLISH
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_QUALITY
|
||||||
|
type: string
|
||||||
|
- name: VSCODE_RUN_UNIT_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_INTEGRATION_TESTS
|
||||||
|
type: boolean
|
||||||
|
- name: VSCODE_RUN_SMOKE_TESTS
|
||||||
|
type: boolean
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- checkout: self
|
||||||
|
fetchDepth: 1
|
||||||
|
retryCountOnTaskFailure: 3
|
||||||
|
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "16.x"
|
versionSpec: "16.x"
|
||||||
@@ -8,51 +25,58 @@ steps:
|
|||||||
versionSpec: "3.x"
|
versionSpec: "3.x"
|
||||||
addToPath: true
|
addToPath: true
|
||||||
|
|
||||||
- task: AzureKeyVault@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
- task: AzureKeyVault@1
|
||||||
inputs:
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
inputs:
|
||||||
KeyVaultName: vscode
|
azureSubscription: "vscode-builds-subscription"
|
||||||
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
KeyVaultName: vscode
|
||||||
|
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
||||||
|
|
||||||
- task: DownloadPipelineArtifact@2
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
inputs:
|
- task: DownloadPipelineArtifact@2
|
||||||
artifact: Compilation
|
inputs:
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
artifact: Compilation
|
||||||
displayName: Download compilation output
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
|
displayName: Download compilation output
|
||||||
|
|
||||||
- task: ExtractFiles@1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: Extract compilation output
|
- task: ExtractFiles@1
|
||||||
inputs:
|
displayName: Extract compilation output
|
||||||
archiveFilePatterns: "$(Build.ArtifactStagingDirectory)/compilation.tar.gz"
|
inputs:
|
||||||
cleanDestinationFolder: false
|
archiveFilePatterns: "$(Build.ArtifactStagingDirectory)/compilation.tar.gz"
|
||||||
|
cleanDestinationFolder: false
|
||||||
- powershell: |
|
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
$ErrorActionPreference = "Stop"
|
- powershell: |
|
||||||
"machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
exec { git config user.email "vscode@microsoft.com" }
|
"machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
|
||||||
exec { git config user.name "VSCode" }
|
|
||||||
displayName: Prepare tooling
|
exec { git config user.email "vscode@microsoft.com" }
|
||||||
|
exec { git config user.name "VSCode" }
|
||||||
- powershell: |
|
displayName: Prepare tooling
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
|
||||||
$ErrorActionPreference = "Stop"
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
|
- powershell: |
|
||||||
exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) }
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
Write-Host "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
$ErrorActionPreference = "Stop"
|
||||||
exec { git checkout FETCH_HEAD }
|
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) }
|
||||||
displayName: Checkout override commit
|
Write-Host "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
||||||
|
exec { git checkout FETCH_HEAD }
|
||||||
- powershell: |
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
displayName: Checkout override commit
|
||||||
$ErrorActionPreference = "Stop"
|
|
||||||
exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") }
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
displayName: Merge distro
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") }
|
||||||
|
displayName: Merge distro
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
|
if (!(Test-Path ".build")) { New-Item -Path ".build" -ItemType Directory }
|
||||||
"$(VSCODE_ARCH)" | Out-File -Encoding ascii -NoNewLine .build\arch
|
"$(VSCODE_ARCH)" | Out-File -Encoding ascii -NoNewLine .build\arch
|
||||||
"$env:ENABLE_TERRAPIN" | Out-File -Encoding ascii -NoNewLine .build\terrapin
|
"$env:ENABLE_TERRAPIN" | Out-File -Encoding ascii -NoNewLine .build\terrapin
|
||||||
node build/azure-pipelines/common/computeNodeModulesCacheKey.js > .build/yarnlockhash
|
node build/azure-pipelines/common/computeNodeModulesCacheKey.js > .build/yarnlockhash
|
||||||
@@ -104,291 +128,176 @@ steps:
|
|||||||
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
|
||||||
displayName: Create node_modules archive
|
displayName: Create node_modules archive
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
exec { node build/azure-pipelines/mixin }
|
$ErrorActionPreference = "Stop"
|
||||||
displayName: Mix in quality
|
exec { node build/azure-pipelines/mixin }
|
||||||
|
displayName: Mix in quality
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
$ErrorActionPreference = "Stop"
|
||||||
exec { yarn npm-run-all -lp "electron $(VSCODE_ARCH)" }
|
exec { node build\lib\policies }
|
||||||
displayName: Download Electron
|
displayName: Generate Group Policy definitions
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
$ErrorActionPreference = "Stop"
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" }
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)"
|
exec { yarn gulp "transpile-client" "transpile-extensions" }
|
||||||
displayName: Build
|
displayName: Transpile
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
$ErrorActionPreference = "Stop"
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" }
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
displayName: Prepare Package
|
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" }
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)"
|
||||||
|
displayName: Build
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
exec { node build/azure-pipelines/mixin --server }
|
$ErrorActionPreference = "Stop"
|
||||||
displayName: Mix in quality
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
|
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" }
|
||||||
|
displayName: Prepare Package
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
$ErrorActionPreference = "Stop"
|
||||||
exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" }
|
exec { node build/azure-pipelines/mixin --server }
|
||||||
exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" }
|
displayName: Mix in quality
|
||||||
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(CodeSigningFolderPath),$(agent.builddirectory)/vscode-reh-win32-$(VSCODE_ARCH)"
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
displayName: Build Server
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
$ErrorActionPreference = "Stop"
|
||||||
exec { yarn npm-run-all -lp "playwright-install" }
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
displayName: Download Playwright
|
exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" }
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" }
|
||||||
|
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(CodeSigningFolderPath),$(agent.builddirectory)/vscode-reh-win32-$(VSCODE_ARCH)"
|
||||||
|
displayName: Build Server
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- template: product-build-win32-test.yml
|
||||||
$ErrorActionPreference = "Stop"
|
parameters:
|
||||||
exec { yarn electron $(VSCODE_ARCH) }
|
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
|
||||||
exec { .\scripts\test.bat --build --tfs "Unit Tests" }
|
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
|
||||||
displayName: Run unit tests (Electron)
|
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
|
||||||
timeoutInMinutes: 15
|
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- task: UseDotNet@2
|
||||||
$ErrorActionPreference = "Stop"
|
inputs:
|
||||||
exec { yarn test-node --build }
|
version: 3.x
|
||||||
displayName: Run unit tests (node.js)
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
timeoutInMinutes: 15
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- task: EsrpClientTool@1
|
||||||
$ErrorActionPreference = "Stop"
|
displayName: Download ESRPClient
|
||||||
exec { yarn test-browser-no-install --sequential --build --browser chromium --browser firefox --tfs "Browser Unit Tests" }
|
|
||||||
displayName: Run unit tests (Browser, Chromium & Firefox)
|
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
# Figure out the full absolute path of the product we just built
|
- powershell: |
|
||||||
# including the remote server and configure the integration tests
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
# to run with these builds instead of running out of sources.
|
$ErrorActionPreference = "Stop"
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$EsrpClientTool = (gci -directory -filter EsrpClientTool_* $(Agent.RootDirectory)\_tasks | Select-Object -last 1).FullName
|
||||||
$ErrorActionPreference = "Stop"
|
$EsrpCliZip = (gci -recurse -filter esrpcli.*.zip $EsrpClientTool | Select-Object -last 1).FullName
|
||||||
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
mkdir -p $(Agent.TempDirectory)\esrpcli
|
||||||
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
|
Expand-Archive -Path $EsrpCliZip -DestinationPath $(Agent.TempDirectory)\esrpcli
|
||||||
$AppNameShort = $AppProductJson.nameShort
|
$EsrpCliDllPath = (gci -recurse -filter esrpcli.dll $(Agent.TempDirectory)\esrpcli | Select-Object -last 1).FullName
|
||||||
exec { $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"; $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)"; .\scripts\test-integration.bat --build --tfs "Integration Tests" }
|
echo "##vso[task.setvariable variable=EsrpCliDllPath]$EsrpCliDllPath"
|
||||||
displayName: Run integration tests (Electron)
|
displayName: Find ESRP CLI
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
exec { $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)"; .\scripts\test-web-integration.bat --browser firefox }
|
$ErrorActionPreference = "Stop"
|
||||||
displayName: Run integration tests (Browser, Firefox)
|
exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.dll,*.exe,*.node' }
|
||||||
timeoutInMinutes: 20
|
displayName: Codesign
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
$ErrorActionPreference = "Stop"
|
||||||
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
|
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-archive" }
|
||||||
$AppNameShort = $AppProductJson.nameShort
|
displayName: Package archive
|
||||||
exec { $env:INTEGRATION_TEST_ELECTRON_PATH = "$AppRoot\$AppNameShort.exe"; $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)"; .\scripts\test-remote-integration.bat }
|
|
||||||
displayName: Run integration tests (Remote)
|
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
exec {.\build\azure-pipelines\win32\listprocesses.bat }
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
displayName: Diagnostics before smoke test run
|
$ErrorActionPreference = "Stop"
|
||||||
continueOnError: true
|
$env:ESRPPKI = "$(ESRP-PKI)"
|
||||||
condition: and(succeededOrFailed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
$env:ESRPAADUsername = "$(esrp-aad-username)"
|
||||||
|
$env:ESRPAADPassword = "$(esrp-aad-password)"
|
||||||
|
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-system-setup" --sign }
|
||||||
|
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-user-setup" --sign }
|
||||||
|
displayName: Package setups
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- powershell: |
|
||||||
$ErrorActionPreference = "Stop"
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)"
|
$ErrorActionPreference = "Stop"
|
||||||
exec { yarn smoketest-no-compile --web --tracing --headless }
|
.\build\azure-pipelines\win32\prepare-publish.ps1
|
||||||
displayName: Run smoke tests (Browser, Chromium)
|
displayName: Publish
|
||||||
timeoutInMinutes: 10
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
$ErrorActionPreference = "Stop"
|
displayName: Generate SBOM (client)
|
||||||
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
inputs:
|
||||||
exec { yarn smoketest-no-compile --tracing --build "$AppRoot" }
|
BuildDropPath: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)
|
||||||
displayName: Run smoke tests (Electron)
|
PackageName: Visual Studio Code
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- publish: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/_manifest
|
||||||
$ErrorActionPreference = "Stop"
|
displayName: Publish SBOM (client)
|
||||||
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
artifact: vscode_client_win32_$(VSCODE_ARCH)_sbom
|
||||||
$env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)"
|
|
||||||
exec { yarn smoketest-no-compile --tracing --remote --build "$AppRoot" }
|
|
||||||
displayName: Run smoke tests (Remote)
|
|
||||||
timeoutInMinutes: 20
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- powershell: |
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
exec {.\build\azure-pipelines\win32\listprocesses.bat }
|
displayName: Generate SBOM (server)
|
||||||
displayName: Diagnostics after smoke test run
|
inputs:
|
||||||
continueOnError: true
|
BuildDropPath: $(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)
|
||||||
condition: and(succeededOrFailed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
PackageName: Visual Studio Code Server
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
inputs:
|
- publish: $(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)/_manifest
|
||||||
artifactName: crash-dump-windows-$(VSCODE_ARCH)
|
displayName: Publish SBOM (server)
|
||||||
targetPath: .build\crashes
|
artifact: vscode_server_win32_$(VSCODE_ARCH)_sbom
|
||||||
displayName: "Publish Crash Reports"
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
continueOnError: true
|
|
||||||
condition: failed()
|
|
||||||
|
|
||||||
# In order to properly symbolify above crash reports
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
# (if any), we need the compiled native modules too
|
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\$(ARCHIVE_NAME)
|
||||||
- task: PublishPipelineArtifact@0
|
artifact: vscode_client_win32_$(VSCODE_ARCH)_archive
|
||||||
inputs:
|
displayName: Publish archive
|
||||||
artifactName: node-modules-windows-$(VSCODE_ARCH)
|
|
||||||
targetPath: node_modules
|
|
||||||
displayName: "Publish Node Modules"
|
|
||||||
continueOnError: true
|
|
||||||
condition: failed()
|
|
||||||
|
|
||||||
- task: PublishPipelineArtifact@0
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
inputs:
|
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\$(SYSTEM_SETUP_NAME)
|
||||||
artifactName: logs-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
|
artifact: vscode_client_win32_$(VSCODE_ARCH)_setup
|
||||||
targetPath: .build\logs
|
displayName: Publish system setup
|
||||||
displayName: "Publish Log Files"
|
|
||||||
continueOnError: true
|
|
||||||
condition: and(failed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- task: PublishTestResults@2
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
displayName: Publish Tests Results
|
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\user-setup\$(USER_SETUP_NAME)
|
||||||
inputs:
|
artifact: vscode_client_win32_$(VSCODE_ARCH)_user-setup
|
||||||
testResultsFiles: "*-results.xml"
|
displayName: Publish user setup
|
||||||
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
condition: and(succeededOrFailed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- task: UseDotNet@2
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
inputs:
|
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH).zip
|
||||||
version: 3.x
|
artifact: vscode_server_win32_$(VSCODE_ARCH)_archive
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
displayName: Publish server archive
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- task: EsrpClientTool@1
|
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
||||||
displayName: Download ESRPClient
|
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH)-web.zip
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
artifact: vscode_web_win32_$(VSCODE_ARCH)_archive
|
||||||
|
displayName: Publish web server archive
|
||||||
- powershell: |
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
|
||||||
$ErrorActionPreference = "Stop"
|
|
||||||
$EsrpClientTool = (gci -directory -filter EsrpClientTool_* $(Agent.RootDirectory)\_tasks | Select-Object -last 1).FullName
|
|
||||||
$EsrpCliZip = (gci -recurse -filter esrpcli.*.zip $EsrpClientTool | Select-Object -last 1).FullName
|
|
||||||
mkdir -p $(Agent.TempDirectory)\esrpcli
|
|
||||||
Expand-Archive -Path $EsrpCliZip -DestinationPath $(Agent.TempDirectory)\esrpcli
|
|
||||||
$EsrpCliDllPath = (gci -recurse -filter esrpcli.dll $(Agent.TempDirectory)\esrpcli | Select-Object -last 1).FullName
|
|
||||||
echo "##vso[task.setvariable variable=EsrpCliDllPath]$EsrpCliDllPath"
|
|
||||||
displayName: Find ESRP CLI
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- powershell: |
|
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
|
||||||
$ErrorActionPreference = "Stop"
|
|
||||||
exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.dll,*.exe,*.node' }
|
|
||||||
displayName: Codesign
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- powershell: |
|
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
|
||||||
$ErrorActionPreference = "Stop"
|
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-archive" }
|
|
||||||
displayName: Package archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- powershell: |
|
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
|
||||||
$ErrorActionPreference = "Stop"
|
|
||||||
$env:ESRPPKI = "$(ESRP-PKI)"
|
|
||||||
$env:ESRPAADUsername = "$(esrp-aad-username)"
|
|
||||||
$env:ESRPAADPassword = "$(esrp-aad-password)"
|
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-system-setup" --sign }
|
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-user-setup" --sign }
|
|
||||||
displayName: Package setups
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- powershell: |
|
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
|
||||||
$ErrorActionPreference = "Stop"
|
|
||||||
.\build\azure-pipelines\win32\prepare-publish.ps1
|
|
||||||
displayName: Publish
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\$(ARCHIVE_NAME)
|
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_archive
|
|
||||||
displayName: Publish archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\$(SYSTEM_SETUP_NAME)
|
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_setup
|
|
||||||
displayName: Publish system setup
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\user-setup\$(USER_SETUP_NAME)
|
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_user-setup
|
|
||||||
displayName: Publish user setup
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH).zip
|
|
||||||
artifact: vscode_server_win32_$(VSCODE_ARCH)_archive
|
|
||||||
displayName: Publish server archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH)-web.zip
|
|
||||||
artifact: vscode_web_win32_$(VSCODE_ARCH)_archive
|
|
||||||
displayName: Publish web server archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
|
||||||
displayName: Generate SBOM (client)
|
|
||||||
inputs:
|
|
||||||
BuildDropPath: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)
|
|
||||||
PackageName: Visual Studio Code
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- publish: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/_manifest
|
|
||||||
displayName: Publish SBOM (client)
|
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_sbom
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
|
||||||
|
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
|
||||||
displayName: Generate SBOM (server)
|
|
||||||
inputs:
|
|
||||||
BuildDropPath: $(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)
|
|
||||||
PackageName: Visual Studio Code Server
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- publish: $(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)/_manifest
|
|
||||||
displayName: Publish SBOM (server)
|
|
||||||
artifact: vscode_server_win32_$(VSCODE_ARCH)_sbom
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const vscode_universal_bundler_1 = require("vscode-universal-bundler");
|
const vscode_universal_bundler_1 = require("vscode-universal-bundler");
|
||||||
const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
|
const cross_spawn_promise_1 = require("@malept/cross-spawn-promise");
|
||||||
@@ -71,7 +71,7 @@ async function main() {
|
|||||||
outAppPath,
|
outAppPath,
|
||||||
force: true
|
force: true
|
||||||
});
|
});
|
||||||
let productJson = await fs.readJson(productJsonPath);
|
const productJson = await fs.readJson(productJsonPath);
|
||||||
Object.assign(productJson, {
|
Object.assign(productJson, {
|
||||||
darwinUniversalAssetId: 'darwin-universal'
|
darwinUniversalAssetId: 'darwin-universal'
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import { makeUniversalApp } from 'vscode-universal-bundler';
|
import { makeUniversalApp } from 'vscode-universal-bundler';
|
||||||
import { spawn } from '@malept/cross-spawn-promise';
|
import { spawn } from '@malept/cross-spawn-promise';
|
||||||
import * as fs from 'fs-extra';
|
import * as fs from 'fs-extra';
|
||||||
@@ -80,7 +78,7 @@ async function main() {
|
|||||||
force: true
|
force: true
|
||||||
});
|
});
|
||||||
|
|
||||||
let productJson = await fs.readJson(productJsonPath);
|
const productJson = await fs.readJson(productJsonPath);
|
||||||
Object.assign(productJson, {
|
Object.assign(productJson, {
|
||||||
darwinUniversalAssetId: 'darwin-universal'
|
darwinUniversalAssetId: 'darwin-universal'
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
const codesign = require("electron-osx-sign");
|
const codesign = require("electron-osx-sign");
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as codesign from 'electron-osx-sign';
|
import * as codesign from 'electron-osx-sign';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as util from '../lib/util';
|
import * as util from '../lib/util';
|
||||||
|
|||||||
@@ -52,7 +52,6 @@ module.exports.unicodeFilter = [
|
|||||||
'!extensions/typescript-language-features/test-workspace/**',
|
'!extensions/typescript-language-features/test-workspace/**',
|
||||||
'!extensions/vscode-api-tests/testWorkspace/**',
|
'!extensions/vscode-api-tests/testWorkspace/**',
|
||||||
'!extensions/vscode-api-tests/testWorkspace2/**',
|
'!extensions/vscode-api-tests/testWorkspace2/**',
|
||||||
'!extensions/vscode-custom-editor-tests/test-workspace/**',
|
|
||||||
'!extensions/**/dist/**',
|
'!extensions/**/dist/**',
|
||||||
'!extensions/**/out/**',
|
'!extensions/**/out/**',
|
||||||
'!extensions/**/snippets/**',
|
'!extensions/**/snippets/**',
|
||||||
@@ -93,7 +92,6 @@ module.exports.indentationFilter = [
|
|||||||
'!extensions/markdown-math/notebook-out/**',
|
'!extensions/markdown-math/notebook-out/**',
|
||||||
'!extensions/vscode-api-tests/testWorkspace/**',
|
'!extensions/vscode-api-tests/testWorkspace/**',
|
||||||
'!extensions/vscode-api-tests/testWorkspace2/**',
|
'!extensions/vscode-api-tests/testWorkspace2/**',
|
||||||
'!extensions/vscode-custom-editor-tests/test-workspace/**',
|
|
||||||
'!build/monaco/**',
|
'!build/monaco/**',
|
||||||
'!build/win32/**',
|
'!build/win32/**',
|
||||||
|
|
||||||
|
|||||||
@@ -17,34 +17,41 @@ const compilation = require('./lib/compilation');
|
|||||||
const monacoapi = require('./lib/monaco-api');
|
const monacoapi = require('./lib/monaco-api');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
|
|
||||||
let root = path.dirname(__dirname);
|
const root = path.dirname(__dirname);
|
||||||
let sha1 = util.getVersion(root);
|
const sha1 = util.getVersion(root);
|
||||||
let semver = require('./monaco/package.json').version;
|
const semver = require('./monaco/package.json').version;
|
||||||
let headerVersion = semver + '(' + sha1 + ')';
|
const headerVersion = semver + '(' + sha1 + ')';
|
||||||
|
|
||||||
// Build
|
// Build
|
||||||
|
|
||||||
let editorEntryPoints = [
|
const editorEntryPoints = [
|
||||||
{
|
{
|
||||||
name: 'vs/editor/editor.main',
|
name: 'vs/editor/editor.main',
|
||||||
include: [],
|
include: [],
|
||||||
exclude: ['vs/css', 'vs/nls'],
|
exclude: ['vs/css', 'vs/nls'],
|
||||||
prepend: ['out-editor-build/vs/css.js', 'out-editor-build/vs/nls.js'],
|
prepend: [
|
||||||
|
{ path: 'out-editor-build/vs/css.js', amdModuleId: 'vs/css' },
|
||||||
|
{ path: 'out-editor-build/vs/nls.js', amdModuleId: 'vs/nls' }
|
||||||
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'vs/base/common/worker/simpleWorker',
|
name: 'vs/base/common/worker/simpleWorker',
|
||||||
include: ['vs/editor/common/services/editorSimpleWorker'],
|
include: ['vs/editor/common/services/editorSimpleWorker'],
|
||||||
prepend: ['vs/loader.js'],
|
exclude: ['vs/nls'],
|
||||||
append: ['vs/base/worker/workerMain'],
|
prepend: [
|
||||||
|
{ path: 'vs/loader.js' },
|
||||||
|
{ path: 'vs/nls.js', amdModuleId: 'vs/nls' },
|
||||||
|
{ path: 'vs/base/worker/workerMain.js' }
|
||||||
|
],
|
||||||
dest: 'vs/base/worker/workerMain.js'
|
dest: 'vs/base/worker/workerMain.js'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
let editorResources = [
|
const editorResources = [
|
||||||
'out-editor-build/vs/base/browser/ui/codicons/**/*.ttf'
|
'out-editor-build/vs/base/browser/ui/codicons/**/*.ttf'
|
||||||
];
|
];
|
||||||
|
|
||||||
let BUNDLED_FILE_HEADER = [
|
const BUNDLED_FILE_HEADER = [
|
||||||
'/*!-----------------------------------------------------------',
|
'/*!-----------------------------------------------------------',
|
||||||
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
||||||
' * Version: ' + headerVersion,
|
' * Version: ' + headerVersion,
|
||||||
@@ -109,12 +116,6 @@ const createESMSourcesAndResourcesTask = task.define('extract-editor-esm', () =>
|
|||||||
'inlineEntryPoint:0.ts',
|
'inlineEntryPoint:0.ts',
|
||||||
'inlineEntryPoint:1.ts',
|
'inlineEntryPoint:1.ts',
|
||||||
'vs/loader.js',
|
'vs/loader.js',
|
||||||
'vs/nls.ts',
|
|
||||||
'vs/nls.build.js',
|
|
||||||
'vs/nls.d.ts',
|
|
||||||
'vs/css.js',
|
|
||||||
'vs/css.build.js',
|
|
||||||
'vs/css.d.ts',
|
|
||||||
'vs/base/worker/workerMain.ts',
|
'vs/base/worker/workerMain.ts',
|
||||||
],
|
],
|
||||||
renames: {
|
renames: {
|
||||||
@@ -224,7 +225,7 @@ const appendJSToESMImportsTask = task.define('append-js-to-esm-imports', () => {
|
|||||||
result.push(line);
|
result.push(line);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
let modifiedLine = (
|
const modifiedLine = (
|
||||||
line
|
line
|
||||||
.replace(/^import(.*)\'([^']+)\'/, `import$1'$2.js'`)
|
.replace(/^import(.*)\'([^']+)\'/, `import$1'$2.js'`)
|
||||||
.replace(/^export \* from \'([^']+)\'/, `export * from '$1.js'`)
|
.replace(/^export \* from \'([^']+)\'/, `export * from '$1.js'`)
|
||||||
@@ -239,10 +240,10 @@ const appendJSToESMImportsTask = task.define('append-js-to-esm-imports', () => {
|
|||||||
* @param {string} contents
|
* @param {string} contents
|
||||||
*/
|
*/
|
||||||
function toExternalDTS(contents) {
|
function toExternalDTS(contents) {
|
||||||
let lines = contents.split(/\r\n|\r|\n/);
|
const lines = contents.split(/\r\n|\r|\n/);
|
||||||
let killNextCloseCurlyBrace = false;
|
let killNextCloseCurlyBrace = false;
|
||||||
for (let i = 0; i < lines.length; i++) {
|
for (let i = 0; i < lines.length; i++) {
|
||||||
let line = lines[i];
|
const line = lines[i];
|
||||||
|
|
||||||
if (killNextCloseCurlyBrace) {
|
if (killNextCloseCurlyBrace) {
|
||||||
if ('}' === line) {
|
if ('}' === line) {
|
||||||
@@ -316,7 +317,7 @@ const finalEditorResourcesTask = task.define('final-editor-resources', () => {
|
|||||||
// package.json
|
// package.json
|
||||||
gulp.src('build/monaco/package.json')
|
gulp.src('build/monaco/package.json')
|
||||||
.pipe(es.through(function (data) {
|
.pipe(es.through(function (data) {
|
||||||
let json = JSON.parse(data.contents.toString());
|
const json = JSON.parse(data.contents.toString());
|
||||||
json.private = false;
|
json.private = false;
|
||||||
data.contents = Buffer.from(JSON.stringify(json, null, ' '));
|
data.contents = Buffer.from(JSON.stringify(json, null, ' '));
|
||||||
this.emit('data', data);
|
this.emit('data', data);
|
||||||
@@ -360,10 +361,10 @@ const finalEditorResourcesTask = task.define('final-editor-resources', () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let relativePathToMap = path.relative(path.join(data.relative), path.join('min-maps', data.relative + '.map'));
|
const relativePathToMap = path.relative(path.join(data.relative), path.join('min-maps', data.relative + '.map'));
|
||||||
|
|
||||||
let strContents = data.contents.toString();
|
let strContents = data.contents.toString();
|
||||||
let newStr = '//# sourceMappingURL=' + relativePathToMap.replace(/\\/g, '/');
|
const newStr = '//# sourceMappingURL=' + relativePathToMap.replace(/\\/g, '/');
|
||||||
strContents = strContents.replace(/\/\/# sourceMappingURL=[^ ]+$/, newStr);
|
strContents = strContents.replace(/\/\/# sourceMappingURL=[^ ]+$/, newStr);
|
||||||
|
|
||||||
data.contents = Buffer.from(strContents);
|
data.contents = Buffer.from(strContents);
|
||||||
@@ -483,13 +484,13 @@ function createTscCompileTask(watch) {
|
|||||||
cwd: path.join(__dirname, '..'),
|
cwd: path.join(__dirname, '..'),
|
||||||
// stdio: [null, 'pipe', 'inherit']
|
// stdio: [null, 'pipe', 'inherit']
|
||||||
});
|
});
|
||||||
let errors = [];
|
const errors = [];
|
||||||
let reporter = createReporter('monaco');
|
const reporter = createReporter('monaco');
|
||||||
|
|
||||||
/** @type {NodeJS.ReadWriteStream | undefined} */
|
/** @type {NodeJS.ReadWriteStream | undefined} */
|
||||||
let report;
|
let report;
|
||||||
// eslint-disable-next-line no-control-regex
|
// eslint-disable-next-line no-control-regex
|
||||||
let magic = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; // https://stackoverflow.com/questions/25245716/remove-all-ansi-colors-styles-from-strings
|
const magic = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; // https://stackoverflow.com/questions/25245716/remove-all-ansi-colors-styles-from-strings
|
||||||
|
|
||||||
child.stdout.on('data', data => {
|
child.stdout.on('data', data => {
|
||||||
let str = String(data);
|
let str = String(data);
|
||||||
@@ -502,12 +503,12 @@ function createTscCompileTask(watch) {
|
|||||||
report.end();
|
report.end();
|
||||||
|
|
||||||
} else if (str) {
|
} else if (str) {
|
||||||
let match = /(.*\(\d+,\d+\): )(.*: )(.*)/.exec(str);
|
const match = /(.*\(\d+,\d+\): )(.*: )(.*)/.exec(str);
|
||||||
if (match) {
|
if (match) {
|
||||||
// trying to massage the message so that it matches the gulp-tsb error messages
|
// trying to massage the message so that it matches the gulp-tsb error messages
|
||||||
// e.g. src/vs/base/common/strings.ts(663,5): error TS2322: Type '1234' is not assignable to type 'string'.
|
// e.g. src/vs/base/common/strings.ts(663,5): error TS2322: Type '1234' is not assignable to type 'string'.
|
||||||
let fullpath = path.join(root, match[1]);
|
const fullpath = path.join(root, match[1]);
|
||||||
let message = match[3];
|
const message = match[3];
|
||||||
reporter(fullpath + message);
|
reporter(fullpath + message);
|
||||||
} else {
|
} else {
|
||||||
reporter(str);
|
reporter(str);
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ const compilations = [
|
|||||||
'json-language-features/client/tsconfig.json',
|
'json-language-features/client/tsconfig.json',
|
||||||
'json-language-features/server/tsconfig.json',
|
'json-language-features/server/tsconfig.json',
|
||||||
'markdown-language-features/preview-src/tsconfig.json',
|
'markdown-language-features/preview-src/tsconfig.json',
|
||||||
|
'markdown-language-features/server/tsconfig.json',
|
||||||
'markdown-language-features/tsconfig.json',
|
'markdown-language-features/tsconfig.json',
|
||||||
'markdown-math/tsconfig.json',
|
'markdown-math/tsconfig.json',
|
||||||
'merge-conflict/tsconfig.json',
|
'merge-conflict/tsconfig.json',
|
||||||
@@ -63,12 +64,13 @@ const compilations = [
|
|||||||
'npm/tsconfig.json',
|
'npm/tsconfig.json',
|
||||||
'php-language-features/tsconfig.json',
|
'php-language-features/tsconfig.json',
|
||||||
'search-result/tsconfig.json',
|
'search-result/tsconfig.json',
|
||||||
|
'references-view/tsconfig.json',
|
||||||
'simple-browser/tsconfig.json',
|
'simple-browser/tsconfig.json',
|
||||||
'typescript-language-features/test-workspace/tsconfig.json',
|
'typescript-language-features/test-workspace/tsconfig.json',
|
||||||
'typescript-language-features/tsconfig.json',
|
'typescript-language-features/tsconfig.json',
|
||||||
'vscode-api-tests/tsconfig.json',
|
'vscode-api-tests/tsconfig.json',
|
||||||
'vscode-colorize-tests/tsconfig.json',
|
'vscode-colorize-tests/tsconfig.json',
|
||||||
'vscode-custom-editor-tests/tsconfig.json',
|
'vscode-notebook-tests/tsconfig.json',
|
||||||
'vscode-test-resolver/tsconfig.json'
|
'vscode-test-resolver/tsconfig.json'
|
||||||
];
|
];
|
||||||
*/
|
*/
|
||||||
@@ -93,7 +95,7 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
const baseUrl = getBaseUrl(out);
|
const baseUrl = getBaseUrl(out);
|
||||||
|
|
||||||
let headerId, headerOut;
|
let headerId, headerOut;
|
||||||
let index = relativeDirname.indexOf('/');
|
const index = relativeDirname.indexOf('/');
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
headerId = 'microsoft.' + relativeDirname; // {{SQL CARBON EDIT}}
|
headerId = 'microsoft.' + relativeDirname; // {{SQL CARBON EDIT}}
|
||||||
headerOut = 'out';
|
headerOut = 'out';
|
||||||
@@ -102,9 +104,9 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
headerOut = relativeDirname.substr(index + 1) + '/out';
|
headerOut = relativeDirname.substr(index + 1) + '/out';
|
||||||
}
|
}
|
||||||
|
|
||||||
function createPipeline(build, emitError) {
|
function createPipeline(build, emitError, transpileOnly) {
|
||||||
const nlsDev = require('vscode-nls-dev');
|
const nlsDev = require('vscode-nls-dev');
|
||||||
const tsb = require('gulp-tsb');
|
const tsb = require('./lib/tsb');
|
||||||
const sourcemaps = require('gulp-sourcemaps');
|
const sourcemaps = require('gulp-sourcemaps');
|
||||||
|
|
||||||
const reporter = createReporter('extensions');
|
const reporter = createReporter('extensions');
|
||||||
@@ -112,7 +114,7 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
overrideOptions.inlineSources = Boolean(build);
|
overrideOptions.inlineSources = Boolean(build);
|
||||||
overrideOptions.base = path.dirname(absolutePath);
|
overrideOptions.base = path.dirname(absolutePath);
|
||||||
|
|
||||||
const compilation = tsb.create(absolutePath, overrideOptions, false, err => reporter(err.toString()));
|
const compilation = tsb.create(absolutePath, overrideOptions, { verbose: false, transpileOnly, transpileOnlyIncludesDts: transpileOnly }, err => reporter(err.toString()));
|
||||||
|
|
||||||
const pipeline = function () {
|
const pipeline = function () {
|
||||||
const input = es.through();
|
const input = es.through();
|
||||||
@@ -154,6 +156,16 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
|
|
||||||
const cleanTask = task.define(`clean-extension-${name}`, util.rimraf(out));
|
const cleanTask = task.define(`clean-extension-${name}`, util.rimraf(out));
|
||||||
|
|
||||||
|
const transpileTask = task.define(`transpile-extension:${name}`, task.series(cleanTask, () => {
|
||||||
|
const pipeline = createPipeline(false, true, true);
|
||||||
|
const nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));
|
||||||
|
const input = es.merge(nonts, pipeline.tsProjectSrc());
|
||||||
|
|
||||||
|
return input
|
||||||
|
.pipe(pipeline())
|
||||||
|
.pipe(gulp.dest(out));
|
||||||
|
}));
|
||||||
|
|
||||||
const compileTask = task.define(`compile-extension:${name}`, task.series(cleanTask, () => {
|
const compileTask = task.define(`compile-extension:${name}`, task.series(cleanTask, () => {
|
||||||
const pipeline = createPipeline(false, true);
|
const pipeline = createPipeline(false, true);
|
||||||
const nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));
|
const nonts = gulp.src(src, srcOpts).pipe(filter(['**', '!**/*.ts']));
|
||||||
@@ -186,12 +198,16 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Tasks
|
// Tasks
|
||||||
|
gulp.task(transpileTask);
|
||||||
gulp.task(compileTask);
|
gulp.task(compileTask);
|
||||||
gulp.task(watchTask);
|
gulp.task(watchTask);
|
||||||
|
|
||||||
return { compileTask, watchTask, compileBuildTask };
|
return { transpileTask, compileTask, watchTask, compileBuildTask };
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const transpileExtensionsTask = task.define('transpile-extensions', task.parallel(...tasks.map(t => t.transpileTask)));
|
||||||
|
gulp.task(transpileExtensionsTask);
|
||||||
|
|
||||||
const compileExtensionsTask = task.define('compile-extensions', task.parallel(...tasks.map(t => t.compileTask)));
|
const compileExtensionsTask = task.define('compile-extensions', task.parallel(...tasks.map(t => t.compileTask)));
|
||||||
gulp.task(compileExtensionsTask);
|
gulp.task(compileExtensionsTask);
|
||||||
exports.compileExtensionsTask = compileExtensionsTask;
|
exports.compileExtensionsTask = compileExtensionsTask;
|
||||||
@@ -225,7 +241,8 @@ const cleanExtensionsBuildTask = task.define('clean-extensions-build', util.rimr
|
|||||||
const compileExtensionsBuildTask = task.define('compile-extensions-build', task.series(
|
const compileExtensionsBuildTask = task.define('compile-extensions-build', task.series(
|
||||||
cleanExtensionsBuildTask,
|
cleanExtensionsBuildTask,
|
||||||
task.define('bundle-extensions-build', () => ext.packageLocalExtensionsStream(false).pipe(gulp.dest('.build'))),
|
task.define('bundle-extensions-build', () => ext.packageLocalExtensionsStream(false).pipe(gulp.dest('.build'))),
|
||||||
task.define('bundle-marketplace-extensions-build', () => ext.packageMarketplaceExtensionsStream(false, product.extensionsGallery?.serviceUrl).pipe(gulp.dest('.build'))),
|
// {{SQL CARBON EDIT}} - add { } around call to avoid async not called error
|
||||||
|
task.define('bundle-marketplace-extensions-build', () => { ext.packageMarketplaceExtensionsStream(false, product.extensionsGallery?.serviceUrl).pipe(gulp.dest('.build')) }),
|
||||||
));
|
));
|
||||||
|
|
||||||
gulp.task(compileExtensionsBuildTask);
|
gulp.task(compileExtensionsBuildTask);
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ function checkPackageJSON(actualPath) {
|
|||||||
const actual = require(path.join(__dirname, '..', actualPath));
|
const actual = require(path.join(__dirname, '..', actualPath));
|
||||||
const rootPackageJSON = require('../package.json');
|
const rootPackageJSON = require('../package.json');
|
||||||
const checkIncluded = (set1, set2) => {
|
const checkIncluded = (set1, set2) => {
|
||||||
for (let depName in set1) {
|
for (const depName in set1) {
|
||||||
if (depName === 'typescript') {
|
if (depName === 'typescript') {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ require('events').EventEmitter.defaultMaxListeners = 100;
|
|||||||
const gulp = require('gulp');
|
const gulp = require('gulp');
|
||||||
const util = require('./lib/util');
|
const util = require('./lib/util');
|
||||||
const task = require('./lib/task');
|
const task = require('./lib/task');
|
||||||
const { compileTask, watchTask, compileApiProposalNamesTask, watchApiProposalNamesTask } = require('./lib/compilation');
|
const { transpileTask, compileTask, watchTask, compileApiProposalNamesTask, watchApiProposalNamesTask } = require('./lib/compilation');
|
||||||
const { monacoTypecheckTask/* , monacoTypecheckWatchTask */ } = require('./gulpfile.editor');
|
const { monacoTypecheckTask/* , monacoTypecheckWatchTask */ } = require('./gulpfile.editor');
|
||||||
const { compileExtensionsTask, watchExtensionsTask, compileExtensionMediaTask } = require('./gulpfile.extensions');
|
const { compileExtensionsTask, watchExtensionsTask, compileExtensionMediaTask } = require('./gulpfile.extensions');
|
||||||
|
|
||||||
@@ -19,6 +19,10 @@ const { compileExtensionsTask, watchExtensionsTask, compileExtensionMediaTask }
|
|||||||
gulp.task(compileApiProposalNamesTask);
|
gulp.task(compileApiProposalNamesTask);
|
||||||
gulp.task(watchApiProposalNamesTask);
|
gulp.task(watchApiProposalNamesTask);
|
||||||
|
|
||||||
|
// Transpile only
|
||||||
|
const transpileClientTask = task.define('transpile-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), transpileTask('src', 'out')));
|
||||||
|
gulp.task(transpileClientTask);
|
||||||
|
|
||||||
// Fast compile for development time
|
// Fast compile for development time
|
||||||
const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));
|
const compileClientTask = task.define('compile-client', task.series(util.rimraf('out'), util.buildWebNodePaths('out'), compileApiProposalNamesTask, compileTask('src', 'out', false)));
|
||||||
gulp.task(compileClientTask);
|
gulp.task(compileClientTask);
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ const serverEntryPoints = [
|
|||||||
name: 'vs/workbench/api/node/extensionHostProcess',
|
name: 'vs/workbench/api/node/extensionHostProcess',
|
||||||
exclude: ['vs/css', 'vs/nls']
|
exclude: ['vs/css', 'vs/nls']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'vs/platform/files/node/watcher/watcherMain',
|
name: 'vs/platform/files/node/watcher/watcherMain',
|
||||||
exclude: ['vs/css', 'vs/nls']
|
exclude: ['vs/css', 'vs/nls']
|
||||||
},
|
},
|
||||||
@@ -135,7 +135,7 @@ try {
|
|||||||
|
|
||||||
// Include workbench web
|
// Include workbench web
|
||||||
...vscodeWebEntryPoints
|
...vscodeWebEntryPoints
|
||||||
];
|
];
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
serverWithWebEntryPoints = [
|
serverWithWebEntryPoints = [
|
||||||
// Include all of server
|
// Include all of server
|
||||||
@@ -356,14 +356,14 @@ function copyConfigTask(folder) {
|
|||||||
const json = require('gulp-json-editor');
|
const json = require('gulp-json-editor');
|
||||||
|
|
||||||
return gulp.src(['remote/pkg-package.json'], { base: 'remote' })
|
return gulp.src(['remote/pkg-package.json'], { base: 'remote' })
|
||||||
.pipe(rename(path => path.basename += '.' + folder))
|
.pipe(rename(path => path.basename += '.' + folder))
|
||||||
.pipe(json(obj => {
|
.pipe(json(obj => {
|
||||||
const pkg = obj.pkg;
|
const pkg = obj.pkg;
|
||||||
pkg.scripts = pkg.scripts && pkg.scripts.map(p => path.join(destination, p));
|
pkg.scripts = pkg.scripts && pkg.scripts.map(p => path.join(destination, p));
|
||||||
pkg.assets = pkg.assets && pkg.assets.map(p => path.join(destination, p));
|
pkg.assets = pkg.assets && pkg.assets.map(p => path.join(destination, p));
|
||||||
return obj;
|
return obj;
|
||||||
}))
|
}))
|
||||||
.pipe(vfs.dest('out-vscode-reh-pkg'));
|
.pipe(vfs.dest('out-vscode-reh-pkg'));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ const vscodeResources = [
|
|||||||
'out-build/vs/base/browser/ui/codicons/codicon/**',
|
'out-build/vs/base/browser/ui/codicons/codicon/**',
|
||||||
'out-build/vs/base/parts/sandbox/electron-browser/preload.js',
|
'out-build/vs/base/parts/sandbox/electron-browser/preload.js',
|
||||||
'out-build/vs/platform/environment/node/userDataPath.js',
|
'out-build/vs/platform/environment/node/userDataPath.js',
|
||||||
'out-build/vs/platform/extensions/node/extensionHostStarterWorkerMain.js',
|
|
||||||
'out-build/vs/workbench/browser/media/*-theme.css',
|
'out-build/vs/workbench/browser/media/*-theme.css',
|
||||||
'out-build/vs/workbench/contrib/debug/**/*.json',
|
'out-build/vs/workbench/contrib/debug/**/*.json',
|
||||||
'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
|
'out-build/vs/workbench/contrib/externalTerminal/**/*.scpt',
|
||||||
@@ -76,7 +75,7 @@ const vscodeResources = [
|
|||||||
'out-build/vs/workbench/contrib/tasks/**/*.json',
|
'out-build/vs/workbench/contrib/tasks/**/*.json',
|
||||||
'out-build/vs/platform/files/**/*.exe',
|
'out-build/vs/platform/files/**/*.exe',
|
||||||
'out-build/vs/platform/files/**/*.md',
|
'out-build/vs/platform/files/**/*.md',
|
||||||
'out-build/vs/code/electron-browser/workbench/**',
|
'out-build/vs/code/electron-sandbox/workbench/**',
|
||||||
'out-build/vs/code/electron-browser/sharedProcess/sharedProcess.js',
|
'out-build/vs/code/electron-browser/sharedProcess/sharedProcess.js',
|
||||||
'out-build/vs/code/electron-sandbox/issue/issueReporter.js',
|
'out-build/vs/code/electron-sandbox/issue/issueReporter.js',
|
||||||
'out-build/sql/**/*.{svg,png,cur,html}',
|
'out-build/sql/**/*.{svg,png,cur,html}',
|
||||||
@@ -187,9 +186,9 @@ gulp.task(core);
|
|||||||
* @return {Object} A map of paths to checksums.
|
* @return {Object} A map of paths to checksums.
|
||||||
*/
|
*/
|
||||||
function computeChecksums(out, filenames) {
|
function computeChecksums(out, filenames) {
|
||||||
let result = {};
|
const result = {};
|
||||||
filenames.forEach(function (filename) {
|
filenames.forEach(function (filename) {
|
||||||
let fullPath = path.join(process.cwd(), out, filename);
|
const fullPath = path.join(process.cwd(), out, filename);
|
||||||
result[filename] = computeChecksum(fullPath);
|
result[filename] = computeChecksum(fullPath);
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
@@ -202,9 +201,9 @@ function computeChecksums(out, filenames) {
|
|||||||
* @return {string} The checksum for `filename`.
|
* @return {string} The checksum for `filename`.
|
||||||
*/
|
*/
|
||||||
function computeChecksum(filename) {
|
function computeChecksum(filename) {
|
||||||
let contents = fs.readFileSync(filename);
|
const contents = fs.readFileSync(filename);
|
||||||
|
|
||||||
let hash = crypto
|
const hash = crypto
|
||||||
.createHash('md5')
|
.createHash('md5')
|
||||||
.update(contents)
|
.update(contents)
|
||||||
.digest('base64')
|
.digest('base64')
|
||||||
@@ -230,8 +229,8 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
|
|||||||
'vs/workbench/workbench.desktop.main.js',
|
'vs/workbench/workbench.desktop.main.js',
|
||||||
'vs/workbench/workbench.desktop.main.css',
|
'vs/workbench/workbench.desktop.main.css',
|
||||||
'vs/workbench/api/node/extensionHostProcess.js',
|
'vs/workbench/api/node/extensionHostProcess.js',
|
||||||
'vs/code/electron-browser/workbench/workbench.html',
|
'vs/code/electron-sandbox/workbench/workbench.html',
|
||||||
'vs/code/electron-browser/workbench/workbench.js'
|
'vs/code/electron-sandbox/workbench/workbench.js'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const src = gulp.src(out + '/**', { base: '.' })
|
const src = gulp.src(out + '/**', { base: '.' })
|
||||||
@@ -322,6 +321,7 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
|
|||||||
all = es.merge(all, gulp.src('resources/linux/code.png', { base: '.' }));
|
all = es.merge(all, gulp.src('resources/linux/code.png', { base: '.' }));
|
||||||
} else if (platform === 'darwin') {
|
} else if (platform === 'darwin') {
|
||||||
const shortcut = gulp.src('resources/darwin/bin/code.sh')
|
const shortcut = gulp.src('resources/darwin/bin/code.sh')
|
||||||
|
.pipe(replace('@@APPNAME@@', product.applicationName))
|
||||||
.pipe(rename('bin/code'));
|
.pipe(rename('bin/code'));
|
||||||
|
|
||||||
all = es.merge(all, shortcut);
|
all = es.merge(all, shortcut);
|
||||||
@@ -366,10 +366,14 @@ function packageTask(platform, arch, sourceFolderName, destinationFolderName, op
|
|||||||
|
|
||||||
result = es.merge(result, gulp.src('resources/win32/VisualElementsManifest.xml', { base: 'resources/win32' })
|
result = es.merge(result, gulp.src('resources/win32/VisualElementsManifest.xml', { base: 'resources/win32' })
|
||||||
.pipe(rename(product.nameShort + '.VisualElementsManifest.xml')));
|
.pipe(rename(product.nameShort + '.VisualElementsManifest.xml')));
|
||||||
|
|
||||||
|
result = es.merge(result, gulp.src('.build/policies/win32/**', { base: '.build/policies/win32' })
|
||||||
|
.pipe(rename(f => f.dirname = `policies/${f.dirname}`)));
|
||||||
|
|
||||||
} else if (platform === 'linux') {
|
} else if (platform === 'linux') {
|
||||||
result = es.merge(result, gulp.src('resources/linux/bin/code.sh', { base: '.' })
|
result = es.merge(result, gulp.src('resources/linux/bin/code.sh', { base: '.' })
|
||||||
.pipe(replace('@@PRODNAME@@', product.nameLong))
|
.pipe(replace('@@PRODNAME@@', product.nameLong))
|
||||||
.pipe(replace('@@NAME@@', product.applicationName))
|
.pipe(replace('@@APPNAME@@', product.applicationName))
|
||||||
.pipe(rename('bin/' + product.applicationName)));
|
.pipe(rename('bin/' + product.applicationName)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -523,7 +527,7 @@ gulp.task(task.define(
|
|||||||
|
|
||||||
gulp.task('vscode-translations-pull', function () {
|
gulp.task('vscode-translations-pull', function () {
|
||||||
return es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => {
|
return es.merge([...i18n.defaultLanguages, ...i18n.extraLanguages].map(language => {
|
||||||
let includeDefault = !!innoSetupConfig[language.id].defaultInfo;
|
const includeDefault = !!innoSetupConfig[language.id].defaultInfo;
|
||||||
return i18n.pullSetupXlfFiles(apiHostname, apiName, apiToken, language, includeDefault).pipe(vfs.dest(`../vscode-translations-import/${language.id}/setup`));
|
return i18n.pullSetupXlfFiles(apiHostname, apiName, apiToken, language, includeDefault).pipe(vfs.dest(`../vscode-translations-import/${language.id}/setup`));
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ const task = require('./lib/task');
|
|||||||
const packageJson = require('../package.json');
|
const packageJson = require('../package.json');
|
||||||
const product = require('../product.json');
|
const product = require('../product.json');
|
||||||
const rpmDependenciesGenerator = require('./linux/rpm/dependencies-generator');
|
const rpmDependenciesGenerator = require('./linux/rpm/dependencies-generator');
|
||||||
|
const debianDependenciesGenerator = require('./linux/debian/dependencies-generator');
|
||||||
|
const sysrootInstaller = require('./linux/debian/install-sysroot');
|
||||||
|
const debianRecommendedDependencies = require('./linux/debian/dep-lists').recommendedDeps;
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const root = path.dirname(__dirname);
|
const root = path.dirname(__dirname);
|
||||||
const commit = util.getVersion(root);
|
const commit = util.getVersion(root);
|
||||||
@@ -75,12 +78,16 @@ function prepareDebPackage(arch) {
|
|||||||
let size = 0;
|
let size = 0;
|
||||||
const control = code.pipe(es.through(
|
const control = code.pipe(es.through(
|
||||||
function (f) { size += f.isDirectory() ? 4096 : f.contents.length; },
|
function (f) { size += f.isDirectory() ? 4096 : f.contents.length; },
|
||||||
function () {
|
async function () {
|
||||||
const that = this;
|
const that = this;
|
||||||
|
const sysroot = await sysrootInstaller.getSysroot(debArch);
|
||||||
|
const dependencies = debianDependenciesGenerator.getDependencies(binaryDir, product.applicationName, debArch, sysroot);
|
||||||
gulp.src('resources/linux/debian/control.template', { base: '.' })
|
gulp.src('resources/linux/debian/control.template', { base: '.' })
|
||||||
.pipe(replace('@@NAME@@', product.applicationName))
|
.pipe(replace('@@NAME@@', product.applicationName))
|
||||||
.pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision))
|
.pipe(replace('@@VERSION@@', packageJson.version + '-' + linuxPackageRevision))
|
||||||
.pipe(replace('@@ARCHITECTURE@@', debArch))
|
.pipe(replace('@@ARCHITECTURE@@', debArch))
|
||||||
|
.pipe(replace('@@DEPENDS@@', dependencies.join(', ')))
|
||||||
|
.pipe(replace('@@RECOMMENDS@@', debianRecommendedDependencies.join(', ')))
|
||||||
.pipe(replace('@@INSTALLEDSIZE@@', Math.ceil(size / 1024)))
|
.pipe(replace('@@INSTALLEDSIZE@@', Math.ceil(size / 1024)))
|
||||||
.pipe(rename('DEBIAN/control'))
|
.pipe(rename('DEBIAN/control'))
|
||||||
.pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); }));
|
.pipe(es.through(function (f) { that.emit('data', f); }, function () { that.emit('end'); }));
|
||||||
@@ -212,7 +219,7 @@ function buildRpmPackage(arch) {
|
|||||||
|
|
||||||
return shell.task([
|
return shell.task([
|
||||||
'mkdir -p ' + destination,
|
'mkdir -p ' + destination,
|
||||||
'HOME="$(pwd)/' + destination + '" fakeroot rpmbuild -bb ' + rpmBuildPath + '/SPECS/' + product.applicationName + '.spec --target=' + rpmArch,
|
'HOME="$(pwd)/' + destination + '" rpmbuild -bb ' + rpmBuildPath + '/SPECS/' + product.applicationName + '.spec --target=' + rpmArch,
|
||||||
'cp "' + rpmOut + '/$(ls ' + rpmOut + ')" ' + destination + '/'
|
'cp "' + rpmOut + '/$(ls ' + rpmOut + ')" ' + destination + '/'
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,7 +208,7 @@ function packageTask(sourceFolderName, destinationFolderName) {
|
|||||||
gulp.src('resources/server/code-512.png', { base: 'resources/server' })
|
gulp.src('resources/server/code-512.png', { base: 'resources/server' })
|
||||||
);
|
);
|
||||||
|
|
||||||
let all = es.merge(
|
const all = es.merge(
|
||||||
packageJsonStream,
|
packageJsonStream,
|
||||||
license,
|
license,
|
||||||
sources,
|
sources,
|
||||||
@@ -218,7 +218,7 @@ function packageTask(sourceFolderName, destinationFolderName) {
|
|||||||
pwaicons
|
pwaicons
|
||||||
);
|
);
|
||||||
|
|
||||||
let result = all
|
const result = all
|
||||||
.pipe(util.skipDirectories())
|
.pipe(util.skipDirectories())
|
||||||
.pipe(util.fixWin32DirectoryPermissions());
|
.pipe(util.fixWin32DirectoryPermissions());
|
||||||
|
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ function hygiene(some, linting = true) {
|
|||||||
const m = /([^\t\n\r\x20-\x7E⊃⊇✔︎✓🎯⚠️🛑🔴🚗🚙🚕🎉✨❗⇧⌥⌘×÷¦⋯…↑↓→→←↔⟷·•●◆▼⟪⟫┌└├⏎↩√φ]+)/g.exec(line);
|
const m = /([^\t\n\r\x20-\x7E⊃⊇✔︎✓🎯⚠️🛑🔴🚗🚙🚕🎉✨❗⇧⌥⌘×÷¦⋯…↑↓→→←↔⟷·•●◆▼⟪⟫┌└├⏎↩√φ]+)/g.exec(line);
|
||||||
if (m) {
|
if (m) {
|
||||||
console.error(
|
console.error(
|
||||||
file.relative + `(${i + 1},${m.index + 1}): Unexpected unicode character: "${m[0]}". To suppress, use // allow-any-unicode-next-line`
|
file.relative + `(${i + 1},${m.index + 1}): Unexpected unicode character: "${m[0]}" (charCode: ${m[0].charCodeAt(0)}). To suppress, use // allow-any-unicode-next-line`
|
||||||
);
|
);
|
||||||
errorCount++;
|
errorCount++;
|
||||||
}
|
}
|
||||||
@@ -115,8 +115,8 @@ function hygiene(some, linting = true) {
|
|||||||
})
|
})
|
||||||
.then(
|
.then(
|
||||||
(result) => {
|
(result) => {
|
||||||
let original = result.src.replace(/\r\n/gm, '\n');
|
const original = result.src.replace(/\r\n/gm, '\n');
|
||||||
let formatted = result.dest.replace(/\r\n/gm, '\n');
|
const formatted = result.dest.replace(/\r\n/gm, '\n');
|
||||||
|
|
||||||
if (original !== formatted) {
|
if (original !== formatted) {
|
||||||
console.error(
|
console.error(
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.createAsar = void 0;
|
exports.createAsar = void 0;
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
@@ -81,7 +81,7 @@ function createAsar(folderPath, unpackGlobs, destFilename) {
|
|||||||
out.push(file.contents);
|
out.push(file.contents);
|
||||||
}
|
}
|
||||||
}, function () {
|
}, function () {
|
||||||
let finish = () => {
|
const finish = () => {
|
||||||
{
|
{
|
||||||
const headerPickle = pickle.createEmpty();
|
const headerPickle = pickle.createEmpty();
|
||||||
headerPickle.writeString(JSON.stringify(filesystem.header));
|
headerPickle.writeString(JSON.stringify(filesystem.header));
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as es from 'event-stream';
|
import * as es from 'event-stream';
|
||||||
const pickle = require('chromium-pickle-js');
|
const pickle = require('chromium-pickle-js');
|
||||||
@@ -98,7 +96,7 @@ export function createAsar(folderPath: string, unpackGlobs: string[], destFilena
|
|||||||
}
|
}
|
||||||
}, function () {
|
}, function () {
|
||||||
|
|
||||||
let finish = () => {
|
const finish = () => {
|
||||||
{
|
{
|
||||||
const headerPickle = pickle.createEmpty();
|
const headerPickle = pickle.createEmpty();
|
||||||
headerPickle.writeString(JSON.stringify(filesystem.header));
|
headerPickle.writeString(JSON.stringify(filesystem.header));
|
||||||
|
|||||||
@@ -98,12 +98,12 @@ function writeControlFile(control) {
|
|||||||
fs.writeFileSync(controlFilePath, JSON.stringify(control, null, 2));
|
fs.writeFileSync(controlFilePath, JSON.stringify(control, null, 2));
|
||||||
}
|
}
|
||||||
function getBuiltInExtensions() {
|
function getBuiltInExtensions() {
|
||||||
log('Syncronizing built-in extensions...');
|
log('Synchronizing built-in extensions...');
|
||||||
log(`You can manage built-in extensions with the ${ansiColors.cyan('--builtin')} flag`);
|
log(`You can manage built-in extensions with the ${ansiColors.cyan('--builtin')} flag`);
|
||||||
const control = readControlFile();
|
const control = readControlFile();
|
||||||
const streams = [];
|
const streams = [];
|
||||||
for (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {
|
for (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {
|
||||||
let controlState = control[extension.name] || 'marketplace';
|
const controlState = control[extension.name] || 'marketplace';
|
||||||
control[extension.name] = controlState;
|
control[extension.name] = controlState;
|
||||||
streams.push(syncExtension(extension, controlState));
|
streams.push(syncExtension(extension, controlState));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -136,14 +136,14 @@ function writeControlFile(control: IControlFile): void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getBuiltInExtensions(): Promise<void> {
|
export function getBuiltInExtensions(): Promise<void> {
|
||||||
log('Syncronizing built-in extensions...');
|
log('Synchronizing built-in extensions...');
|
||||||
log(`You can manage built-in extensions with the ${ansiColors.cyan('--builtin')} flag`);
|
log(`You can manage built-in extensions with the ${ansiColors.cyan('--builtin')} flag`);
|
||||||
|
|
||||||
const control = readControlFile();
|
const control = readControlFile();
|
||||||
const streams: Stream[] = [];
|
const streams: Stream[] = [];
|
||||||
|
|
||||||
for (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {
|
for (const extension of [...builtInExtensions, ...webBuiltInExtensions]) {
|
||||||
let controlState = control[extension.name] || 'marketplace';
|
const controlState = control[extension.name] || 'marketplace';
|
||||||
control[extension.name] = controlState;
|
control[extension.name] = controlState;
|
||||||
|
|
||||||
streams.push(syncExtension(extension, controlState));
|
streams.push(syncExtension(extension, controlState));
|
||||||
|
|||||||
@@ -43,14 +43,20 @@ function bundle(entryPoints, config, callback) {
|
|||||||
if (!config.paths['vs/css']) {
|
if (!config.paths['vs/css']) {
|
||||||
config.paths['vs/css'] = 'out-build/vs/css.build';
|
config.paths['vs/css'] = 'out-build/vs/css.build';
|
||||||
}
|
}
|
||||||
|
config.buildForceInvokeFactory = config.buildForceInvokeFactory || {};
|
||||||
|
config.buildForceInvokeFactory['vs/nls'] = true;
|
||||||
|
config.buildForceInvokeFactory['vs/css'] = true;
|
||||||
loader.config(config);
|
loader.config(config);
|
||||||
loader(['require'], (localRequire) => {
|
loader(['require'], (localRequire) => {
|
||||||
const resolvePath = (path) => {
|
const resolvePath = (entry) => {
|
||||||
const r = localRequire.toUrl(path);
|
let r = localRequire.toUrl(entry.path);
|
||||||
if (!/\.js/.test(r)) {
|
if (!r.endsWith('.js')) {
|
||||||
return r + '.js';
|
r += '.js';
|
||||||
}
|
}
|
||||||
return r;
|
// avoid packaging the build version of plugins:
|
||||||
|
r = r.replace('vs/nls.build.js', 'vs/nls.js');
|
||||||
|
r = r.replace('vs/css.build.js', 'vs/css.js');
|
||||||
|
return { path: r, amdModuleId: entry.amdModuleId };
|
||||||
};
|
};
|
||||||
for (const moduleId in entryPointsMap) {
|
for (const moduleId in entryPointsMap) {
|
||||||
const entryPoint = entryPointsMap[moduleId];
|
const entryPoint = entryPointsMap[moduleId];
|
||||||
@@ -299,9 +305,18 @@ function emitEntryPoint(modulesMap, deps, entryPoint, includedModules, prepend,
|
|||||||
if (module.shim) {
|
if (module.shim) {
|
||||||
mainResult.sources.push(emitShimmedModule(c, deps[c], module.shim, module.path, contents));
|
mainResult.sources.push(emitShimmedModule(c, deps[c], module.shim, module.path, contents));
|
||||||
}
|
}
|
||||||
else {
|
else if (module.defineLocation) {
|
||||||
mainResult.sources.push(emitNamedModule(c, module.defineLocation, module.path, contents));
|
mainResult.sources.push(emitNamedModule(c, module.defineLocation, module.path, contents));
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
const moduleCopy = {
|
||||||
|
id: module.id,
|
||||||
|
path: module.path,
|
||||||
|
defineLocation: module.defineLocation,
|
||||||
|
dependencies: module.dependencies
|
||||||
|
};
|
||||||
|
throw new Error(`Cannot bundle module '${module.id}' for entry point '${entryPoint}' because it has no shim and it lacks a defineLocation: ${JSON.stringify(moduleCopy)}`);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
Object.keys(usedPlugins).forEach((pluginName) => {
|
Object.keys(usedPlugins).forEach((pluginName) => {
|
||||||
const plugin = usedPlugins[pluginName];
|
const plugin = usedPlugins[pluginName];
|
||||||
@@ -322,10 +337,13 @@ function emitEntryPoint(modulesMap, deps, entryPoint, includedModules, prepend,
|
|||||||
plugin.writeFile(pluginName, entryPoint, req, write, {});
|
plugin.writeFile(pluginName, entryPoint, req, write, {});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const toIFile = (path) => {
|
const toIFile = (entry) => {
|
||||||
const contents = readFileAndRemoveBOM(path);
|
let contents = readFileAndRemoveBOM(entry.path);
|
||||||
|
if (entry.amdModuleId) {
|
||||||
|
contents = contents.replace(/^define\(/m, `define("${entry.amdModuleId}",`);
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
path: path,
|
path: entry.path,
|
||||||
contents: contents
|
contents: contents
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ interface IPosition {
|
|||||||
interface IBuildModuleInfo {
|
interface IBuildModuleInfo {
|
||||||
id: string;
|
id: string;
|
||||||
path: string;
|
path: string;
|
||||||
defineLocation: IPosition;
|
defineLocation: IPosition | null;
|
||||||
dependencies: string[];
|
dependencies: string[];
|
||||||
shim: string;
|
shim: string;
|
||||||
exports: any;
|
exports: any;
|
||||||
@@ -42,12 +42,17 @@ interface ILoaderPluginReqFunc {
|
|||||||
toUrl(something: string): string;
|
toUrl(something: string): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface IExtraFile {
|
||||||
|
path: string;
|
||||||
|
amdModuleId?: string;
|
||||||
|
}
|
||||||
|
|
||||||
export interface IEntryPoint {
|
export interface IEntryPoint {
|
||||||
name: string;
|
name: string;
|
||||||
include?: string[];
|
include?: string[];
|
||||||
exclude?: string[];
|
exclude?: string[];
|
||||||
prepend?: string[];
|
prepend?: IExtraFile[];
|
||||||
append?: string[];
|
append?: IExtraFile[];
|
||||||
dest?: string;
|
dest?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,6 +97,13 @@ interface IPartialBundleResult {
|
|||||||
export interface ILoaderConfig {
|
export interface ILoaderConfig {
|
||||||
isBuild?: boolean;
|
isBuild?: boolean;
|
||||||
paths?: { [path: string]: any };
|
paths?: { [path: string]: any };
|
||||||
|
/*
|
||||||
|
* Normally, during a build, no module factories are invoked. This can be used
|
||||||
|
* to forcefully execute a module's factory.
|
||||||
|
*/
|
||||||
|
buildForceInvokeFactory: {
|
||||||
|
[moduleId: string]: boolean;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,15 +144,21 @@ export function bundle(entryPoints: IEntryPoint[], config: ILoaderConfig, callba
|
|||||||
if (!config.paths['vs/css']) {
|
if (!config.paths['vs/css']) {
|
||||||
config.paths['vs/css'] = 'out-build/vs/css.build';
|
config.paths['vs/css'] = 'out-build/vs/css.build';
|
||||||
}
|
}
|
||||||
|
config.buildForceInvokeFactory = config.buildForceInvokeFactory || {};
|
||||||
|
config.buildForceInvokeFactory['vs/nls'] = true;
|
||||||
|
config.buildForceInvokeFactory['vs/css'] = true;
|
||||||
loader.config(config);
|
loader.config(config);
|
||||||
|
|
||||||
loader(['require'], (localRequire: any) => {
|
loader(['require'], (localRequire: any) => {
|
||||||
const resolvePath = (path: string) => {
|
const resolvePath = (entry: IExtraFile) => {
|
||||||
const r = localRequire.toUrl(path);
|
let r = localRequire.toUrl(entry.path);
|
||||||
if (!/\.js/.test(r)) {
|
if (!r.endsWith('.js')) {
|
||||||
return r + '.js';
|
r += '.js';
|
||||||
}
|
}
|
||||||
return r;
|
// avoid packaging the build version of plugins:
|
||||||
|
r = r.replace('vs/nls.build.js', 'vs/nls.js');
|
||||||
|
r = r.replace('vs/css.build.js', 'vs/css.js');
|
||||||
|
return { path: r, amdModuleId: entry.amdModuleId };
|
||||||
};
|
};
|
||||||
for (const moduleId in entryPointsMap) {
|
for (const moduleId in entryPointsMap) {
|
||||||
const entryPoint = entryPointsMap[moduleId];
|
const entryPoint = entryPointsMap[moduleId];
|
||||||
@@ -403,8 +421,8 @@ function emitEntryPoint(
|
|||||||
deps: IGraph,
|
deps: IGraph,
|
||||||
entryPoint: string,
|
entryPoint: string,
|
||||||
includedModules: string[],
|
includedModules: string[],
|
||||||
prepend: string[],
|
prepend: IExtraFile[],
|
||||||
append: string[],
|
append: IExtraFile[],
|
||||||
dest: string | undefined
|
dest: string | undefined
|
||||||
): IEmitEntryPointResult {
|
): IEmitEntryPointResult {
|
||||||
if (!dest) {
|
if (!dest) {
|
||||||
@@ -444,8 +462,16 @@ function emitEntryPoint(
|
|||||||
|
|
||||||
if (module.shim) {
|
if (module.shim) {
|
||||||
mainResult.sources.push(emitShimmedModule(c, deps[c], module.shim, module.path, contents));
|
mainResult.sources.push(emitShimmedModule(c, deps[c], module.shim, module.path, contents));
|
||||||
} else {
|
} else if (module.defineLocation) {
|
||||||
mainResult.sources.push(emitNamedModule(c, module.defineLocation, module.path, contents));
|
mainResult.sources.push(emitNamedModule(c, module.defineLocation, module.path, contents));
|
||||||
|
} else {
|
||||||
|
const moduleCopy = {
|
||||||
|
id: module.id,
|
||||||
|
path: module.path,
|
||||||
|
defineLocation: module.defineLocation,
|
||||||
|
dependencies: module.dependencies
|
||||||
|
};
|
||||||
|
throw new Error(`Cannot bundle module '${module.id}' for entry point '${entryPoint}' because it has no shim and it lacks a defineLocation: ${JSON.stringify(moduleCopy)}`);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -470,10 +496,13 @@ function emitEntryPoint(
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const toIFile = (path: string): IFile => {
|
const toIFile = (entry: IExtraFile): IFile => {
|
||||||
const contents = readFileAndRemoveBOM(path);
|
let contents = readFileAndRemoveBOM(entry.path);
|
||||||
|
if (entry.amdModuleId) {
|
||||||
|
contents = contents.replace(/^define\(/m, `define("${entry.amdModuleId}",`);
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
path: path,
|
path: entry.path,
|
||||||
contents: contents
|
contents: contents
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.watchApiProposalNamesTask = exports.compileApiProposalNamesTask = exports.watchTask = exports.compileTask = void 0;
|
exports.watchApiProposalNamesTask = exports.compileApiProposalNamesTask = exports.watchTask = exports.compileTask = exports.transpileTask = void 0;
|
||||||
const es = require("event-stream");
|
const es = require("event-stream");
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const gulp = require("gulp");
|
const gulp = require("gulp");
|
||||||
@@ -22,7 +22,7 @@ const watch = require('./watch');
|
|||||||
const reporter = (0, reporter_1.createReporter)();
|
const reporter = (0, reporter_1.createReporter)();
|
||||||
function getTypeScriptCompilerOptions(src) {
|
function getTypeScriptCompilerOptions(src) {
|
||||||
const rootDir = path.join(__dirname, `../../${src}`);
|
const rootDir = path.join(__dirname, `../../${src}`);
|
||||||
let options = {};
|
const options = {};
|
||||||
options.verbose = false;
|
options.verbose = false;
|
||||||
options.sourceMap = true;
|
options.sourceMap = true;
|
||||||
if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
|
if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
|
||||||
@@ -34,8 +34,8 @@ function getTypeScriptCompilerOptions(src) {
|
|||||||
options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 0 : 1;
|
options.newLine = /\r\n/.test(fs.readFileSync(__filename, 'utf8')) ? 0 : 1;
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
function createCompile(src, build, emitError) {
|
function createCompile(src, build, emitError, transpileOnly) {
|
||||||
const tsb = require('gulp-tsb');
|
const tsb = require('./tsb');
|
||||||
const sourcemaps = require('gulp-sourcemaps');
|
const sourcemaps = require('gulp-sourcemaps');
|
||||||
const projectPath = path.join(__dirname, '../../', src, 'tsconfig.json');
|
const projectPath = path.join(__dirname, '../../', src, 'tsconfig.json');
|
||||||
const overrideOptions = Object.assign(Object.assign({}, getTypeScriptCompilerOptions(src)), { inlineSources: Boolean(build) });
|
const overrideOptions = Object.assign(Object.assign({}, getTypeScriptCompilerOptions(src)), { inlineSources: Boolean(build) });
|
||||||
@@ -69,7 +69,7 @@ function createCompile(src, build, emitError) {
|
|||||||
.pipe(noDeclarationsFilter)
|
.pipe(noDeclarationsFilter)
|
||||||
.pipe(build ? nls.nls() : es.through())
|
.pipe(build ? nls.nls() : es.through())
|
||||||
.pipe(noDeclarationsFilter.restore)
|
.pipe(noDeclarationsFilter.restore)
|
||||||
.pipe(sourcemaps.write('.', {
|
.pipe(transpileOnly ? es.through() : sourcemaps.write('.', {
|
||||||
addComment: false,
|
addComment: false,
|
||||||
includeContent: !!build,
|
includeContent: !!build,
|
||||||
sourceRoot: overrideOptions.sourceRoot
|
sourceRoot: overrideOptions.sourceRoot
|
||||||
@@ -83,14 +83,24 @@ function createCompile(src, build, emitError) {
|
|||||||
};
|
};
|
||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
function transpileTask(src, out) {
|
||||||
|
return function () {
|
||||||
|
const transpile = createCompile(src, false, true, true);
|
||||||
|
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
|
||||||
|
return srcPipe
|
||||||
|
.pipe(transpile())
|
||||||
|
.pipe(gulp.dest(out));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
exports.transpileTask = transpileTask;
|
||||||
function compileTask(src, out, build) {
|
function compileTask(src, out, build) {
|
||||||
return function () {
|
return function () {
|
||||||
if (os.totalmem() < 4000000000) {
|
if (os.totalmem() < 4000000000) {
|
||||||
throw new Error('compilation requires 4GB of RAM');
|
throw new Error('compilation requires 4GB of RAM');
|
||||||
}
|
}
|
||||||
const compile = createCompile(src, build, true);
|
const compile = createCompile(src, build, true, false);
|
||||||
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
|
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
|
||||||
let generator = new MonacoGenerator(false);
|
const generator = new MonacoGenerator(false);
|
||||||
if (src === 'src') {
|
if (src === 'src') {
|
||||||
generator.execute();
|
generator.execute();
|
||||||
}
|
}
|
||||||
@@ -103,10 +113,10 @@ function compileTask(src, out, build) {
|
|||||||
exports.compileTask = compileTask;
|
exports.compileTask = compileTask;
|
||||||
function watchTask(out, build) {
|
function watchTask(out, build) {
|
||||||
return function () {
|
return function () {
|
||||||
const compile = createCompile('src', build);
|
const compile = createCompile('src', build, false, false);
|
||||||
const src = gulp.src('src/**', { base: 'src' });
|
const src = gulp.src('src/**', { base: 'src' });
|
||||||
const watchSrc = watch('src/**', { base: 'src', readDelay: 200 });
|
const watchSrc = watch('src/**', { base: 'src', readDelay: 200 });
|
||||||
let generator = new MonacoGenerator(true);
|
const generator = new MonacoGenerator(true);
|
||||||
generator.execute();
|
generator.execute();
|
||||||
return watchSrc
|
return watchSrc
|
||||||
.pipe(generator.stream)
|
.pipe(generator.stream)
|
||||||
@@ -122,7 +132,7 @@ class MonacoGenerator {
|
|||||||
this._isWatch = isWatch;
|
this._isWatch = isWatch;
|
||||||
this.stream = es.through();
|
this.stream = es.through();
|
||||||
this._watchedFiles = {};
|
this._watchedFiles = {};
|
||||||
let onWillReadFile = (moduleId, filePath) => {
|
const onWillReadFile = (moduleId, filePath) => {
|
||||||
if (!this._isWatch) {
|
if (!this._isWatch) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -159,7 +169,7 @@ class MonacoGenerator {
|
|||||||
}, 20);
|
}, 20);
|
||||||
}
|
}
|
||||||
_run() {
|
_run() {
|
||||||
let r = monacodts.run3(this._declarationResolver);
|
const r = monacodts.run3(this._declarationResolver);
|
||||||
if (!r && !this._isWatch) {
|
if (!r && !this._isWatch) {
|
||||||
// The build must always be able to generate the monaco.d.ts
|
// The build must always be able to generate the monaco.d.ts
|
||||||
throw new Error(`monaco.d.ts generation error - Cannot continue`);
|
throw new Error(`monaco.d.ts generation error - Cannot continue`);
|
||||||
@@ -188,6 +198,15 @@ class MonacoGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
function generateApiProposalNames() {
|
function generateApiProposalNames() {
|
||||||
|
let eol;
|
||||||
|
try {
|
||||||
|
const src = fs.readFileSync('src/vs/workbench/services/extensions/common/extensionsApiProposals.ts', 'utf-8');
|
||||||
|
const match = /\r?\n/m.exec(src);
|
||||||
|
eol = match ? match[0] : os.EOL;
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
eol = os.EOL;
|
||||||
|
}
|
||||||
const pattern = /vscode\.proposed\.([a-zA-Z]+)\.d\.ts$/;
|
const pattern = /vscode\.proposed\.([a-zA-Z]+)\.d\.ts$/;
|
||||||
const proposalNames = new Set();
|
const proposalNames = new Set();
|
||||||
const input = es.through();
|
const input = es.through();
|
||||||
@@ -214,7 +233,7 @@ function generateApiProposalNames() {
|
|||||||
'});',
|
'});',
|
||||||
'export type ApiProposalName = keyof typeof allApiProposals;',
|
'export type ApiProposalName = keyof typeof allApiProposals;',
|
||||||
'',
|
'',
|
||||||
].join(os.EOL);
|
].join(eol);
|
||||||
this.emit('data', new File({
|
this.emit('data', new File({
|
||||||
path: 'vs/workbench/services/extensions/common/extensionsApiProposals.ts',
|
path: 'vs/workbench/services/extensions/common/extensionsApiProposals.ts',
|
||||||
contents: Buffer.from(contents)
|
contents: Buffer.from(contents)
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ const reporter = createReporter();
|
|||||||
|
|
||||||
function getTypeScriptCompilerOptions(src: string): ts.CompilerOptions {
|
function getTypeScriptCompilerOptions(src: string): ts.CompilerOptions {
|
||||||
const rootDir = path.join(__dirname, `../../${src}`);
|
const rootDir = path.join(__dirname, `../../${src}`);
|
||||||
let options: ts.CompilerOptions = {};
|
const options: ts.CompilerOptions = {};
|
||||||
options.verbose = false;
|
options.verbose = false;
|
||||||
options.sourceMap = true;
|
options.sourceMap = true;
|
||||||
if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
|
if (process.env['VSCODE_NO_SOURCEMAP']) { // To be used by developers in a hurry
|
||||||
@@ -39,8 +39,8 @@ function getTypeScriptCompilerOptions(src: string): ts.CompilerOptions {
|
|||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createCompile(src: string, build: boolean, emitError?: boolean) {
|
function createCompile(src: string, build: boolean, emitError: boolean, transpileOnly: boolean) {
|
||||||
const tsb = require('gulp-tsb') as typeof import('gulp-tsb');
|
const tsb = require('./tsb') as typeof import('./tsb');
|
||||||
const sourcemaps = require('gulp-sourcemaps') as typeof import('gulp-sourcemaps');
|
const sourcemaps = require('gulp-sourcemaps') as typeof import('gulp-sourcemaps');
|
||||||
|
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ function createCompile(src: string, build: boolean, emitError?: boolean) {
|
|||||||
.pipe(noDeclarationsFilter)
|
.pipe(noDeclarationsFilter)
|
||||||
.pipe(build ? nls.nls() : es.through())
|
.pipe(build ? nls.nls() : es.through())
|
||||||
.pipe(noDeclarationsFilter.restore)
|
.pipe(noDeclarationsFilter.restore)
|
||||||
.pipe(sourcemaps.write('.', {
|
.pipe(transpileOnly ? es.through() : sourcemaps.write('.', {
|
||||||
addComment: false,
|
addComment: false,
|
||||||
includeContent: !!build,
|
includeContent: !!build,
|
||||||
sourceRoot: overrideOptions.sourceRoot
|
sourceRoot: overrideOptions.sourceRoot
|
||||||
@@ -96,6 +96,19 @@ function createCompile(src: string, build: boolean, emitError?: boolean) {
|
|||||||
return pipeline;
|
return pipeline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function transpileTask(src: string, out: string): () => NodeJS.ReadWriteStream {
|
||||||
|
|
||||||
|
return function () {
|
||||||
|
|
||||||
|
const transpile = createCompile(src, false, true, true);
|
||||||
|
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
|
||||||
|
|
||||||
|
return srcPipe
|
||||||
|
.pipe(transpile())
|
||||||
|
.pipe(gulp.dest(out));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export function compileTask(src: string, out: string, build: boolean): () => NodeJS.ReadWriteStream {
|
export function compileTask(src: string, out: string, build: boolean): () => NodeJS.ReadWriteStream {
|
||||||
|
|
||||||
return function () {
|
return function () {
|
||||||
@@ -104,9 +117,9 @@ export function compileTask(src: string, out: string, build: boolean): () => Nod
|
|||||||
throw new Error('compilation requires 4GB of RAM');
|
throw new Error('compilation requires 4GB of RAM');
|
||||||
}
|
}
|
||||||
|
|
||||||
const compile = createCompile(src, build, true);
|
const compile = createCompile(src, build, true, false);
|
||||||
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
|
const srcPipe = gulp.src(`${src}/**`, { base: `${src}` });
|
||||||
let generator = new MonacoGenerator(false);
|
const generator = new MonacoGenerator(false);
|
||||||
if (src === 'src') {
|
if (src === 'src') {
|
||||||
generator.execute();
|
generator.execute();
|
||||||
}
|
}
|
||||||
@@ -121,12 +134,12 @@ export function compileTask(src: string, out: string, build: boolean): () => Nod
|
|||||||
export function watchTask(out: string, build: boolean): () => NodeJS.ReadWriteStream {
|
export function watchTask(out: string, build: boolean): () => NodeJS.ReadWriteStream {
|
||||||
|
|
||||||
return function () {
|
return function () {
|
||||||
const compile = createCompile('src', build);
|
const compile = createCompile('src', build, false, false);
|
||||||
|
|
||||||
const src = gulp.src('src/**', { base: 'src' });
|
const src = gulp.src('src/**', { base: 'src' });
|
||||||
const watchSrc = watch('src/**', { base: 'src', readDelay: 200 });
|
const watchSrc = watch('src/**', { base: 'src', readDelay: 200 });
|
||||||
|
|
||||||
let generator = new MonacoGenerator(true);
|
const generator = new MonacoGenerator(true);
|
||||||
generator.execute();
|
generator.execute();
|
||||||
|
|
||||||
return watchSrc
|
return watchSrc
|
||||||
@@ -150,7 +163,7 @@ class MonacoGenerator {
|
|||||||
this._isWatch = isWatch;
|
this._isWatch = isWatch;
|
||||||
this.stream = es.through();
|
this.stream = es.through();
|
||||||
this._watchedFiles = {};
|
this._watchedFiles = {};
|
||||||
let onWillReadFile = (moduleId: string, filePath: string) => {
|
const onWillReadFile = (moduleId: string, filePath: string) => {
|
||||||
if (!this._isWatch) {
|
if (!this._isWatch) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -192,7 +205,7 @@ class MonacoGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _run(): monacodts.IMonacoDeclarationResult | null {
|
private _run(): monacodts.IMonacoDeclarationResult | null {
|
||||||
let r = monacodts.run3(this._declarationResolver);
|
const r = monacodts.run3(this._declarationResolver);
|
||||||
if (!r && !this._isWatch) {
|
if (!r && !this._isWatch) {
|
||||||
// The build must always be able to generate the monaco.d.ts
|
// The build must always be able to generate the monaco.d.ts
|
||||||
throw new Error(`monaco.d.ts generation error - Cannot continue`);
|
throw new Error(`monaco.d.ts generation error - Cannot continue`);
|
||||||
@@ -225,6 +238,16 @@ class MonacoGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function generateApiProposalNames() {
|
function generateApiProposalNames() {
|
||||||
|
let eol: string;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const src = fs.readFileSync('src/vs/workbench/services/extensions/common/extensionsApiProposals.ts', 'utf-8');
|
||||||
|
const match = /\r?\n/m.exec(src);
|
||||||
|
eol = match ? match[0] : os.EOL;
|
||||||
|
} catch {
|
||||||
|
eol = os.EOL;
|
||||||
|
}
|
||||||
|
|
||||||
const pattern = /vscode\.proposed\.([a-zA-Z]+)\.d\.ts$/;
|
const pattern = /vscode\.proposed\.([a-zA-Z]+)\.d\.ts$/;
|
||||||
const proposalNames = new Set<string>();
|
const proposalNames = new Set<string>();
|
||||||
|
|
||||||
@@ -253,7 +276,7 @@ function generateApiProposalNames() {
|
|||||||
'});',
|
'});',
|
||||||
'export type ApiProposalName = keyof typeof allApiProposals;',
|
'export type ApiProposalName = keyof typeof allApiProposals;',
|
||||||
'',
|
'',
|
||||||
].join(os.EOL);
|
].join(eol);
|
||||||
|
|
||||||
this.emit('data', new File({
|
this.emit('data', new File({
|
||||||
path: 'vs/workbench/services/extensions/common/extensionsApiProposals.ts',
|
path: 'vs/workbench/services/extensions/common/extensionsApiProposals.ts',
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.getProductionDependencies = void 0;
|
exports.getProductionDependencies = void 0;
|
||||||
const path = require("path");
|
const path = require("path");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as cp from 'child_process';
|
import * as cp from 'child_process';
|
||||||
import * as _ from 'underscore';
|
import * as _ from 'underscore';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.config = void 0;
|
exports.config = void 0;
|
||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
import * as vfs from 'vinyl-fs';
|
import * as vfs from 'vinyl-fs';
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Rule Definition
|
// Rule Definition
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as eslint from 'eslint';
|
import * as eslint from 'eslint';
|
||||||
import { TSESTree } from '@typescript-eslint/experimental-utils';
|
import { TSESTree } from '@typescript-eslint/experimental-utils';
|
||||||
import * as ESTree from 'estree';
|
import * as ESTree from 'estree';
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ module.exports = new (_a = class NoUnexternalizedStrings {
|
|||||||
key = keyNode.value;
|
key = keyNode.value;
|
||||||
}
|
}
|
||||||
else if (keyNode.type === experimental_utils_1.AST_NODE_TYPES.ObjectExpression) {
|
else if (keyNode.type === experimental_utils_1.AST_NODE_TYPES.ObjectExpression) {
|
||||||
for (let property of keyNode.properties) {
|
for (const property of keyNode.properties) {
|
||||||
if (property.type === experimental_utils_1.AST_NODE_TYPES.Property && !property.computed) {
|
if (property.type === experimental_utils_1.AST_NODE_TYPES.Property && !property.computed) {
|
||||||
if (property.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier && property.key.name === 'key') {
|
if (property.key.type === experimental_utils_1.AST_NODE_TYPES.Identifier && property.key.name === 'key') {
|
||||||
if (isStringLiteral(property.value)) {
|
if (isStringLiteral(property.value)) {
|
||||||
@@ -83,7 +83,7 @@ module.exports = new (_a = class NoUnexternalizedStrings {
|
|||||||
// (2)
|
// (2)
|
||||||
// report all invalid NLS keys
|
// report all invalid NLS keys
|
||||||
if (!key.match(NoUnexternalizedStrings._rNlsKeys)) {
|
if (!key.match(NoUnexternalizedStrings._rNlsKeys)) {
|
||||||
for (let value of values) {
|
for (const value of values) {
|
||||||
context.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });
|
context.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export = new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {
|
|||||||
key = keyNode.value;
|
key = keyNode.value;
|
||||||
|
|
||||||
} else if (keyNode.type === AST_NODE_TYPES.ObjectExpression) {
|
} else if (keyNode.type === AST_NODE_TYPES.ObjectExpression) {
|
||||||
for (let property of keyNode.properties) {
|
for (const property of keyNode.properties) {
|
||||||
if (property.type === AST_NODE_TYPES.Property && !property.computed) {
|
if (property.type === AST_NODE_TYPES.Property && !property.computed) {
|
||||||
if (property.key.type === AST_NODE_TYPES.Identifier && property.key.name === 'key') {
|
if (property.key.type === AST_NODE_TYPES.Identifier && property.key.name === 'key') {
|
||||||
if (isStringLiteral(property.value)) {
|
if (isStringLiteral(property.value)) {
|
||||||
@@ -97,7 +97,7 @@ export = new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {
|
|||||||
// (2)
|
// (2)
|
||||||
// report all invalid NLS keys
|
// report all invalid NLS keys
|
||||||
if (!key.match(NoUnexternalizedStrings._rNlsKeys)) {
|
if (!key.match(NoUnexternalizedStrings._rNlsKeys)) {
|
||||||
for (let value of values) {
|
for (const value of values) {
|
||||||
context.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });
|
context.report({ loc: value.call.loc, messageId: 'badKey', data: { key } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,8 @@
|
|||||||
|
"use strict";
|
||||||
/*---------------------------------------------------------------------------------------------
|
/*---------------------------------------------------------------------------------------------
|
||||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||||
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
// FORKED FROM https://github.com/eslint/eslint/blob/b23ad0d789a909baf8d7c41a35bc53df932eaf30/lib/rules/no-unused-expressions.js
|
|
||||||
// and added support for `OptionalCallExpression`, see https://github.com/facebook/create-react-app/issues/8107 and https://github.com/eslint/eslint/issues/12642
|
|
||||||
/**
|
|
||||||
* @fileoverview Flag expressions in statement position that do not side effect
|
|
||||||
* @author Michael Ficarra
|
|
||||||
*/
|
|
||||||
'use strict';
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Rule Definition
|
// Rule Definition
|
||||||
|
|||||||
@@ -11,8 +11,6 @@
|
|||||||
* @author Michael Ficarra
|
* @author Michael Ficarra
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
import * as eslint from 'eslint';
|
import * as eslint from 'eslint';
|
||||||
import { TSESTree } from '@typescript-eslint/experimental-utils';
|
import { TSESTree } from '@typescript-eslint/experimental-utils';
|
||||||
import * as ESTree from 'estree';
|
import * as ESTree from 'estree';
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ module.exports = new class ApiProviderNaming {
|
|||||||
return {
|
return {
|
||||||
['TSInterfaceDeclaration[id.name=/.+Provider/] TSMethodSignature[key.name=/^(provide|resolve).+/]']: (node) => {
|
['TSInterfaceDeclaration[id.name=/.+Provider/] TSMethodSignature[key.name=/^(provide|resolve).+/]']: (node) => {
|
||||||
let found = false;
|
let found = false;
|
||||||
for (let param of node.params) {
|
for (const param of node.params) {
|
||||||
if (param.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
|
if (param.type === experimental_utils_1.AST_NODE_TYPES.Identifier) {
|
||||||
found = found || param.name === 'token';
|
found = found || param.name === 'token';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ export = new class ApiProviderNaming implements eslint.Rule.RuleModule {
|
|||||||
['TSInterfaceDeclaration[id.name=/.+Provider/] TSMethodSignature[key.name=/^(provide|resolve).+/]']: (node: any) => {
|
['TSInterfaceDeclaration[id.name=/.+Provider/] TSMethodSignature[key.name=/^(provide|resolve).+/]']: (node: any) => {
|
||||||
|
|
||||||
let found = false;
|
let found = false;
|
||||||
for (let param of (<TSESTree.TSMethodSignature>node).params) {
|
for (const param of (<TSESTree.TSMethodSignature>node).params) {
|
||||||
if (param.type === AST_NODE_TYPES.Identifier) {
|
if (param.type === AST_NODE_TYPES.Identifier) {
|
||||||
found = found || param.name === 'token';
|
found = found || param.name === 'token';
|
||||||
}
|
}
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user