mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-23 11:01:38 -05:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0f0960d0e7 | ||
|
|
680d12163d | ||
|
|
a90591b881 | ||
|
|
33dce95b15 | ||
|
|
5a79e41ed3 | ||
|
|
a32edffa57 | ||
|
|
902e72fe36 | ||
|
|
ba9abd47c7 | ||
|
|
cf5e0fe1a3 | ||
|
|
b7ec773a66 | ||
|
|
74ec8dcac7 | ||
|
|
20cbc04211 | ||
|
|
6bf526a20c | ||
|
|
53fc90b8a7 | ||
|
|
a4cdc8e168 | ||
|
|
36a25a6bfb | ||
|
|
5edcf2a3a7 | ||
|
|
a3c8a56575 | ||
|
|
6e55a08b01 | ||
|
|
d108bb4474 | ||
|
|
44dd917100 |
@@ -3,7 +3,6 @@
|
|||||||
**/extensions/**/*.d.ts
|
**/extensions/**/*.d.ts
|
||||||
**/extensions/**/build/**
|
**/extensions/**/build/**
|
||||||
**/extensions/**/colorize-fixtures/**
|
**/extensions/**/colorize-fixtures/**
|
||||||
**/extensions/azurecore/extension.webpack.config.js
|
|
||||||
**/extensions/css-language-features/server/test/pathCompletionFixtures/**
|
**/extensions/css-language-features/server/test/pathCompletionFixtures/**
|
||||||
**/extensions/html-language-features/server/lib/jquery.d.ts
|
**/extensions/html-language-features/server/lib/jquery.d.ts
|
||||||
**/extensions/html-language-features/server/src/test/pathCompletionFixtures/**
|
**/extensions/html-language-features/server/src/test/pathCompletionFixtures/**
|
||||||
@@ -25,6 +24,8 @@
|
|||||||
**/node_modules/**
|
**/node_modules/**
|
||||||
**/extensions/**/out/**
|
**/extensions/**/out/**
|
||||||
**/extensions/**/build/**
|
**/extensions/**/build/**
|
||||||
|
/extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts
|
||||||
|
/extensions/big-data-cluster/src/bigDataCluster/controller/clusterApiGenerated2.ts
|
||||||
**/extensions/**/colorize-fixtures/**
|
**/extensions/**/colorize-fixtures/**
|
||||||
**/extensions/html-language-features/server/lib/jquery.d.ts
|
**/extensions/html-language-features/server/lib/jquery.d.ts
|
||||||
/extensions/markdown-language-features/media/**
|
/extensions/markdown-language-features/media/**
|
||||||
|
|||||||
5
.github/CODEOWNERS
vendored
5
.github/CODEOWNERS
vendored
@@ -6,17 +6,14 @@
|
|||||||
/extensions/arc/ @Charles-Gagnon @swells @candiceye
|
/extensions/arc/ @Charles-Gagnon @swells @candiceye
|
||||||
/extensions/azcli/ @Charles-Gagnon @swells @candiceye
|
/extensions/azcli/ @Charles-Gagnon @swells @candiceye
|
||||||
/extensions/azurecore/ @cssuh @cheenamalhotra
|
/extensions/azurecore/ @cssuh @cheenamalhotra
|
||||||
|
/extensions/big-data-cluster/ @Charles-Gagnon
|
||||||
/extensions/dacpac/ @kisantia
|
/extensions/dacpac/ @kisantia
|
||||||
/extensions/datavirtualization @Charles-Gagnon
|
|
||||||
/extensions/import @aasimkhan30
|
|
||||||
/extensions/machine-learning @llali
|
|
||||||
/extensions/notebook @azure-data-studio-notebook-devs
|
/extensions/notebook @azure-data-studio-notebook-devs
|
||||||
/extensions/query-history/ @Charles-Gagnon
|
/extensions/query-history/ @Charles-Gagnon
|
||||||
/extensions/resource-deployment/ @Charles-Gagnon
|
/extensions/resource-deployment/ @Charles-Gagnon
|
||||||
/extensions/schema-compare/ @kisantia
|
/extensions/schema-compare/ @kisantia
|
||||||
/extensions/sql-bindings/ @vasubhog @Charles-Gagnon @lucyzhang929 @chlafreniere @MaddyDev
|
/extensions/sql-bindings/ @vasubhog @Charles-Gagnon @lucyzhang929 @chlafreniere @MaddyDev
|
||||||
/extensions/sql-database-projects/ @Benjin @kisantia
|
/extensions/sql-database-projects/ @Benjin @kisantia
|
||||||
/extensions/sql-migration @AkshayMata @raymondtruong @brian-harris @junierch @siyangMicrosoft
|
|
||||||
/extensions/mssql/config.json @Charles-Gagnon @alanrenmsft @kburtram
|
/extensions/mssql/config.json @Charles-Gagnon @alanrenmsft @kburtram
|
||||||
|
|
||||||
/src/sql/*.d.ts @alanrenmsft @Charles-Gagnon
|
/src/sql/*.d.ts @alanrenmsft @Charles-Gagnon
|
||||||
|
|||||||
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
@@ -5,3 +5,5 @@
|
|||||||
* 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
22
.github/workflows/bad-tag.yml
vendored
@@ -1,22 +0,0 @@
|
|||||||
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
177
.github/workflows/basic.yml
vendored
@@ -1,177 +0,0 @@
|
|||||||
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
|
|
||||||
82
.github/workflows/ci.yml
vendored
82
.github/workflows/ci.yml
vendored
@@ -1,29 +1,27 @@
|
|||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
on: workflow_dispatch
|
on:
|
||||||
|
push:
|
||||||
# on:
|
branches:
|
||||||
# push:
|
- main
|
||||||
# branches:
|
- release/*
|
||||||
# - main
|
pull_request:
|
||||||
# - release/*
|
branches:
|
||||||
# pull_request:
|
- main
|
||||||
# branches:
|
- release/*
|
||||||
# - main
|
|
||||||
# - release/*
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
windows:
|
windows:
|
||||||
name: Windows
|
name: Windows
|
||||||
runs-on: windows-2022
|
runs-on: windows-2019
|
||||||
timeout-minutes: 60
|
timeout-minutes: 30
|
||||||
env:
|
env:
|
||||||
CHILD_CONCURRENCY: "1"
|
CHILD_CONCURRENCY: "1"
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
@@ -232,13 +230,13 @@ jobs:
|
|||||||
hygiene:
|
hygiene:
|
||||||
name: Hygiene and Layering
|
name: Hygiene and Layering
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
timeout-minutes: 40
|
timeout-minutes: 30
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- uses: actions/setup-node@v3
|
- uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 16
|
node-version: 16
|
||||||
|
|
||||||
@@ -250,8 +248,8 @@ jobs:
|
|||||||
uses: actions/cache@v2
|
uses: actions/cache@v2
|
||||||
with:
|
with:
|
||||||
path: "**/node_modules"
|
path: "**/node_modules"
|
||||||
key: ${{ runner.os }}-cacheNodeModules23-${{ steps.nodeModulesCacheKey.outputs.value }}
|
key: ${{ runner.os }}-cacheNodeModules14-${{ steps.nodeModulesCacheKey.outputs.value }}
|
||||||
restore-keys: ${{ runner.os }}-cacheNodeModules23-
|
restore-keys: ${{ runner.os }}-cacheNodeModules14-
|
||||||
- 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' }}
|
||||||
@@ -275,27 +273,59 @@ 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: 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
|
||||||
# run: yarn vscode-dts-compile-check
|
# run: yarn vscode-dts-compile-check
|
||||||
|
|
||||||
- name: Run Trusted Types Checks
|
- name: Run Trusted Types Checks
|
||||||
run: yarn tsec-compile-check
|
run: yarn tsec-compile-check
|
||||||
|
|
||||||
|
# - name: Editor Distro & ESM Bundle {{SQL CARBON EDIT}} Remove Monaco checks
|
||||||
|
# run: yarn gulp editor-esm-bundle
|
||||||
|
|
||||||
|
# - name: Typings validation prep {{SQL CARBON EDIT}} Remove Monaco checks
|
||||||
|
# run: |
|
||||||
|
# mkdir typings-test
|
||||||
|
|
||||||
|
# - name: Typings validation {{SQL CARBON EDIT}} Remove Monaco checks
|
||||||
|
# working-directory: ./typings-test
|
||||||
|
# run: |
|
||||||
|
# yarn init -yp
|
||||||
|
# ../node_modules/.bin/tsc --init
|
||||||
|
# echo "import '../out-monaco-editor-core';" > a.ts
|
||||||
|
# ../node_modules/.bin/tsc --noEmit
|
||||||
|
|
||||||
|
# - name: Webpack Editor {{SQL CARBON EDIT}} Remove Monaco checks
|
||||||
|
# working-directory: ./test/monaco
|
||||||
|
# run: yarn run bundle
|
||||||
|
|
||||||
|
# - name: Compile Editor Tests {{SQL CARBON EDIT}} Remove Monaco checks
|
||||||
|
# working-directory: ./test/monaco
|
||||||
|
# run: yarn run compile
|
||||||
|
|
||||||
|
# - name: Download Playwright {{SQL CARBON EDIT}} Remove Monaco checks
|
||||||
|
# run: yarn playwright-install
|
||||||
|
|
||||||
|
# - name: Run Editor Tests {{SQL CARBON EDIT}} Remove Monaco checks
|
||||||
|
# timeout-minutes: 5
|
||||||
|
# working-directory: ./test/monaco
|
||||||
|
# run: yarn test
|
||||||
|
|||||||
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",
|
||||||
"ms-vscode.vscode-selfhost-test-provider"
|
"redhat.vscode-yaml"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
163
.vscode/launch.json
vendored
163
.vscode/launch.json
vendored
@@ -10,98 +10,7 @@
|
|||||||
"args": [
|
"args": [
|
||||||
"hygiene"
|
"hygiene"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"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": [
|
|
||||||
"${workspaceFolder}/out/**/*.js"
|
|
||||||
],
|
|
||||||
"presentation": {
|
|
||||||
"group": "5_tests"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
@@ -110,18 +19,8 @@
|
|||||||
"windows": {
|
"windows": {
|
||||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.bat",
|
"runtimeExecutable": "${workspaceFolder}/scripts/sql.bat",
|
||||||
},
|
},
|
||||||
"osx": {
|
|
||||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh"
|
|
||||||
},
|
|
||||||
"linux": {
|
|
||||||
"runtimeExecutable": "${workspaceFolder}/scripts/sql.sh"
|
|
||||||
},
|
|
||||||
"runtimeArgs": [
|
"runtimeArgs": [
|
||||||
"--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",
|
|
||||||
],
|
],
|
||||||
"outFiles": [
|
"outFiles": [
|
||||||
"${workspaceFolder}/out/**/*.js"
|
"${workspaceFolder}/out/**/*.js"
|
||||||
@@ -154,9 +53,6 @@
|
|||||||
"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": [
|
||||||
@@ -212,18 +108,6 @@
|
|||||||
"group": "2_attach"
|
"group": "2_attach"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "node",
|
|
||||||
"request": "attach",
|
|
||||||
"name": "Attach to CLI Process",
|
|
||||||
"port": 5874,
|
|
||||||
"outFiles": [
|
|
||||||
"${workspaceFolder}/out/**/*.js"
|
|
||||||
],
|
|
||||||
"presentation": {
|
|
||||||
"group": "2_attach"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "pwa-chrome",
|
"type": "pwa-chrome",
|
||||||
"request": "attach",
|
"request": "attach",
|
||||||
@@ -244,49 +128,6 @@
|
|||||||
"order": 2
|
"order": 2
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "node",
|
|
||||||
"request": "attach",
|
|
||||||
"name": "Attach to Search Process",
|
|
||||||
"port": 5876,
|
|
||||||
"outFiles": [
|
|
||||||
"${workspaceFolder}/out/**/*.js"
|
|
||||||
],
|
|
||||||
"presentation": {
|
|
||||||
"group": "2_attach"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "node",
|
|
||||||
"request": "attach",
|
|
||||||
"name": "Attach to Pty Host Process",
|
|
||||||
"port": 5877,
|
|
||||||
"outFiles": [
|
|
||||||
"${workspaceFolder}/out/**/*.js"
|
|
||||||
],
|
|
||||||
"presentation": {
|
|
||||||
"group": "2_attach"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
/* Added for "VS Code Selfhost Test Provider" extension support */
|
|
||||||
"type": "pwa-chrome",
|
|
||||||
"request": "attach",
|
|
||||||
"name": "Attach to VS Code",
|
|
||||||
"browserAttachLocation": "workspace",
|
|
||||||
"port": 9222,
|
|
||||||
"outFiles": [
|
|
||||||
"${workspaceFolder}/out/**/*.js"
|
|
||||||
],
|
|
||||||
"presentation": {
|
|
||||||
"group": "2_attach",
|
|
||||||
"hidden": true
|
|
||||||
},
|
|
||||||
"resolveSourceMapLocations": [
|
|
||||||
"${workspaceFolder}/out/**/*.js"
|
|
||||||
],
|
|
||||||
"perScriptSourcemaps": "yes"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
|
|||||||
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:\"July 2022\""
|
"value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"May 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:\"July 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:\"April 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:\"info-needed\" sort:created-desc"
|
"value": "$inbox -label:\"needs more info\" 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:\"July 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:\"April 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:triage-needed -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:needs-triage -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:\"July 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:\"May 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:\"May 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:\"March 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:\"May 2022\" is:open"
|
"value": "repo:microsoft/vscode-dev milestone:\"December 2021\" 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:\"May 2022\" is:open"
|
"value": "repo:microsoft/vscode-remote-repositories-github milestone:\"December 2021\" is:open"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"kind": 2,
|
"kind": 2,
|
||||||
"language": "github-issues",
|
"language": "github-issues",
|
||||||
"value": "repo:microsoft/vscode-remotehub milestone:\"May 2022\" is:open"
|
"value": "repo:microsoft/vscode-remotehub milestone:\"December 2021\" is:open"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
7
.vscode/settings.json
vendored
7
.vscode/settings.json
vendored
@@ -67,13 +67,6 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"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"
|
||||||
},
|
},
|
||||||
|
|||||||
117
CHANGELOG.md
117
CHANGELOG.md
@@ -1,120 +1,5 @@
|
|||||||
# Change Log
|
# Change Log
|
||||||
|
|
||||||
## Version 1.43.0
|
|
||||||
* Release number: 1.43.0
|
|
||||||
* Release date: April 12, 2023
|
|
||||||
|
|
||||||
### What's new in 1.43.0
|
|
||||||
|
|
||||||
| New Item | Details |
|
|
||||||
| --- | --- |
|
|
||||||
| Connection | Added notation for required properties (e.g. Attestation protocol and Attestation URL) when Secure Enclaves are enabled |
|
|
||||||
| SQL Database Projects extension | General Availability |
|
|
||||||
| SQL Database Projects extension | Move and rename files within Database Projects view |
|
|
||||||
| SQL Database Projects extension | SQLCMD variables available for editing in Database Projects view |
|
|
||||||
| Object Explorer | Double-clicking on a user or table in Object Explorer will open the designer for the object |
|
|
||||||
| Query Editor | Added a Parse button to the Query Editor toolbar for parsing queries before execution |
|
|
||||||
| Query Results | Added support to select a row in query results via double click |
|
|
||||||
|
|
||||||
### Bug fixes in 1.43.0
|
|
||||||
|
|
||||||
| New Item | Details |
|
|
||||||
| --- | --- |
|
|
||||||
| Connection | Added support for linked accounts with same username but different domains |
|
|
||||||
| Connection | Fixed issue with incorrect cache write path |
|
|
||||||
| Connection | Added ability to include optional name and grouping when creating a new connection using a connection string |
|
|
||||||
| Connection | Updating username in MSSQL connections to use Preferred username for the display name |
|
|
||||||
| Connection | Fixed issue with encoding for OSX keychain on macOS |
|
|
||||||
| Connection | Added support for Azure MFA and ‘Sql Authentication Provider’ on Linux |
|
|
||||||
| Dataverse | Addressed error generated when expanding the database node for a Dataverse database in Object Explorer |
|
|
||||||
| IntelliCode extension | Fixed error that occurred when launching Azure Data Studio with Visual Studio Code IntelliCode extension installed |
|
|
||||||
| PostgreSQL extension | Implemented support for exporting query results on Apple M1 from a notebook |
|
|
||||||
| SQL Database Projects extension | Added Accessibility Fixes related to screen reader, label names, and improved focus when navigating |
|
|
||||||
|
|
||||||
For a full list of bug fixes addressed for the April 2023 release, visit the [April 2023 Release on GitHub](https://github.com/microsoft/azuredatastudio/milestone/99?closed=1).
|
|
||||||
|
|
||||||
## Version 1.42.0
|
|
||||||
* Release number: 1.42.0
|
|
||||||
* Release date: March 22, 2023
|
|
||||||
|
|
||||||
### What's new in 1.42.0
|
|
||||||
|
|
||||||
| New Item | Details |
|
|
||||||
| --- | --- |
|
|
||||||
| ARM64 Support for macOS | Implemented native arm64 SqlToolsService support for arm64 Windows and macOS. |
|
|
||||||
| Connection | Changed the icon under Linked Accounts when adding a new Azure account. |
|
|
||||||
| Connection | Introduced support for the Command Timeout connection property. |
|
|
||||||
| Connection | Added support for all three connection encryption options: Strict, Mandatory, and Optional. |
|
|
||||||
| Connection | Introduced HostNameInCertificate connection property under Security on the Advanced tab, for server with a certificate configured. |
|
|
||||||
| Connection | Added new advanced option in the Connection dialog to support Secure Enclaves. |
|
|
||||||
| Connection | Introduced a new setting, Mssql Enable Sql Authentication Provider to allow connections to be maintained without the concern of losing access token lifetime or getting dropped by server. Access tokens will be refreshed internally by the SqlClient driver whenever they are found to be expired. This option is disabled by default. |
|
|
||||||
| Connection | Added support for connections to Microsoft Dataverse using the TDS endpoint. |
|
|
||||||
| Connection | Introduced additional error reporting for Azure connections. |
|
|
||||||
| Connection | Introduced support for change password. |
|
|
||||||
| Connection | Added support for encryption options for Arc SQL Managed Instance when server certificates are not installed. |
|
|
||||||
| Deployment | Moved the New Deployment option from the Connections breadcrumb to the File Menu. |
|
|
||||||
| Object Explorer | Introduced ability to group objects in Object Explorer by database schema. This applies to all MSSQL connections when enabled or disabled. |
|
|
||||||
| Object Explorer | Introduced a new option to allow a custom timeout to be configured for Object Explorer. Within Settings, enable Mssql > Object Explorer: Expand Timeout. |
|
|
||||||
| Query Results | Added option to disable special handling for JSON strings. |
|
|
||||||
|
|
||||||
### Bug fixes in 1.42.0
|
|
||||||
|
|
||||||
| New Item | Details |
|
|
||||||
| --- | --- |
|
|
||||||
| Accessibility | Updated server group color display to improve visibility and contrast. |
|
|
||||||
| Backup | Addressed inability to select "Backup Set" checkbox. |
|
|
||||||
| Connection | Removed refresh action for connections which are disconnected. |
|
|
||||||
| Connection | Fixed issue with MSAL not properly set for connections. |
|
|
||||||
| Connection | Added ability to delete a server group if no connections exist for it. |
|
|
||||||
| Connection | Added connection display name to the Delete Connection dialog. |
|
|
||||||
| Connection | Azure connections with "Do not save" for the server group are no longer added to the default server group list. |
|
|
||||||
| Connection | Improved error handling in the connection dialog. |
|
|
||||||
| Connection | Fixed issue where saved passwords were not retained for Azure SQL connections. |
|
|
||||||
| Connection | Improved method to retrieve database access when connecting to Azure SQL. |
|
|
||||||
| Connection | Improved connection experience for cloud users. |
|
|
||||||
| Connection | Improved account and tenant selection when connecting to Azure SQL in the connection dialog. |
|
|
||||||
| Deployment | Improved narration for deployment wizard. |
|
|
||||||
| Installation | Updated default install location for the Windows on ARM installer. |
|
|
||||||
| MySQL Extension | Addressed issue where dialog boxes in the MySQL connection pane were not editable. |
|
|
||||||
| Notebooks | Fixed issue with updating the relative path in a Notebook cell. |
|
|
||||||
| Notebooks | Fixed issue that caused internal notebook links to break when editing characters in the page. |
|
|
||||||
| Notebooks | Addressed error thrown when opening a Notebook via a link. |
|
|
||||||
| Object Explorer | Fixed issue with Object Explorer node not expanding. |
|
|
||||||
| Query Editor | Fixed database dropdown list for contained users to display correctly. |
|
|
||||||
| Query Editor | Addressed issue where database dropdown list was not ordered the same as in Object Explorer. |
|
|
||||||
| Query Editor | Added the ability to properly escape special characters when they exist in object names. |
|
|
||||||
| Query Editor | Fixed issue which caused query timer to continue to run even though execution was complete. |
|
|
||||||
| Query Plan Viewer | Addressed an issue where a query plan would not render when opened via a URL. |
|
|
||||||
| Query Results | Improved precision formatting for datetimeoffset data type. |
|
|
||||||
|
|
||||||
For a full list of bug fixes addressed for the March 2023 release, visit the [bugs and issues list on GitHub](https://github.com/microsoft/azuredatastudio/milestone/95?closed=1).
|
|
||||||
|
|
||||||
#### Known issues
|
|
||||||
|
|
||||||
For a list of the current known issues, visit the [issues list on GitHub](https://github.com/microsoft/azuredatastudio/issues?q=is%3Aissue).
|
|
||||||
|
|
||||||
## Version 1.41.2
|
|
||||||
* Release date: February 10, 2023
|
|
||||||
* Release status: General Availability
|
|
||||||
|
|
||||||
### Bug fixes in 1.41.2
|
|
||||||
|
|
||||||
| New Item | Details |
|
|
||||||
| --- | --- |
|
|
||||||
| Connection | Fixed a regression blocking connections to sovereign Azure clouds |
|
|
||||||
| Query Editor | Fixed a regression causing the Output window to display on each query execution |
|
|
||||||
|
|
||||||
## Version 1.41.1
|
|
||||||
* Release date: January 30, 2023
|
|
||||||
* Release status: General Availability
|
|
||||||
|
|
||||||
### Bug fixes in 1.41.1
|
|
||||||
|
|
||||||
| New Item | Details |
|
|
||||||
| --- | --- |
|
|
||||||
| Connection | Fixed a bug causing incorrect Azure account tenant selection when connecting to server through Azure view |
|
|
||||||
| Object Explorer | Fixed a regression causing Object Explorer to not show database objects for Azure SQL DB Basic SLO |
|
|
||||||
|
|
||||||
## Version 1.41.0
|
## Version 1.41.0
|
||||||
* Release date: January 25, 2023
|
* Release date: January 25, 2023
|
||||||
* Release status: General Availability
|
* Release status: General Availability
|
||||||
@@ -129,7 +14,7 @@ For a list of the current known issues, visit the [issues list on GitHub](https:
|
|||||||
| Connection | Added ability to provide a description when creating a firewall rule from Azure Data Studio. |
|
| Connection | Added ability to provide a description when creating a firewall rule from Azure Data Studio. |
|
||||||
| Connection | Include ability to change password for new or expired login. |
|
| Connection | Include ability to change password for new or expired login. |
|
||||||
| Connection | Add support for SQL Server Alias use when connecting to a server. |
|
| Connection | Add support for SQL Server Alias use when connecting to a server. |
|
||||||
| MongoDB Atlas Extension | Provides the ability to connect to and query data on MongoDB Atlas (Preview). |
|
| MongoDB Atlas Extension | Provides the ability to connect to and query data on MongoDB Atlas (Preview). |
|
||||||
| Notebooks | Provide option for users to convert markdown to a table or not when HMTL table tag is present. |
|
| Notebooks | Provide option for users to convert markdown to a table or not when HMTL table tag is present. |
|
||||||
| Object Explorer | Databases are no longer brought online in serverless Azure SQL when Databases node is expanded. |
|
| Object Explorer | Databases are no longer brought online in serverless Azure SQL when Databases node is expanded. |
|
||||||
| Object Explorer | Added support for Ledger views. |
|
| Object Explorer | Added support for Ledger views. |
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
# Data Collection
|
|
||||||
|
|
||||||
The software may collect information about you and your use of the software and send it to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may turn off the telemetry as described in the repository. There are also some features in the software that may enable you and Microsoft to collect data from users of your applications. If you use these features, you must comply with applicable law, including providing appropriate notices to users of your applications together with a copy of Microsoft's privacy statement. Our privacy statement is located at <https://go.microsoft.com/fwlink/?LinkID=824704>. You can learn more about data collection and use in the help documentation and our privacy statement. Your use of the software operates as your consent to these practices.
|
|
||||||
39
README.md
39
README.md
@@ -4,7 +4,7 @@
|
|||||||
[](https://dev.azure.com/ms/azuredatastudio/_build/latest?definitionId=453&branchName=main)
|
[](https://dev.azure.com/ms/azuredatastudio/_build/latest?definitionId=453&branchName=main)
|
||||||
[](https://twitter.com/azuredatastudio)
|
[](https://twitter.com/azuredatastudio)
|
||||||
|
|
||||||
Azure Data Studio is a data management and development tool with connectivity to popular cloud and on-premises databases. Azure Data Studio supports Windows, macOS, and Linux, with immediate capability to connect to Azure SQL and SQL Server. Browse the [extension library](wiki/List-of-Extensions) for additional database support options including MySQL, PostreSQL, and MongoDB.
|
Azure Data Studio is a data management tool that enables you to work with SQL Server, Azure SQL DB and SQL DW from Windows, macOS and Linux.
|
||||||
|
|
||||||
## **Download the latest Azure Data Studio release**
|
## **Download the latest Azure Data Studio release**
|
||||||
|
|
||||||
@@ -18,18 +18,18 @@ Azure Data Studio is a data management and development tool with connectivity to
|
|||||||
| |.rpm |[64 bit][linux-rpm] |
|
| |.rpm |[64 bit][linux-rpm] |
|
||||||
|Mac |.zip |[Universal][osx-universal] [Intel Chip][osx-zip] [Apple Silicon][osx-arm64] |
|
|Mac |.zip |[Universal][osx-universal] [Intel Chip][osx-zip] [Apple Silicon][osx-arm64] |
|
||||||
|
|
||||||
[win-user]: https://azuredatastudio-update.azurewebsites.net/latest/win32-x64-user/stable
|
[win-user]: https://go.microsoft.com/fwlink/?linkid=2222768
|
||||||
[win-system]: https://azuredatastudio-update.azurewebsites.net/latest/win32-x64/stable
|
[win-system]: https://go.microsoft.com/fwlink/?linkid=2222769
|
||||||
[win-zip]: https://azuredatastudio-update.azurewebsites.net/latest/win32-x64-archive/stable
|
[win-zip]: https://go.microsoft.com/fwlink/?linkid=2223104
|
||||||
[win-user-arm64]: https://azuredatastudio-update.azurewebsites.net/latest/win32-arm64-user/stable
|
[win-user-arm64]: https://go.microsoft.com/fwlink/?linkid=2222660
|
||||||
[win-system-arm64]: https://azuredatastudio-update.azurewebsites.net/latest/win32-arm64/stable
|
[win-system-arm64]: https://go.microsoft.com/fwlink/?linkid=2222849
|
||||||
[win-zip-arm64]: https://azuredatastudio-update.azurewebsites.net/latest/win32-arm64-archive/stable
|
[win-zip-arm64]: https://go.microsoft.com/fwlink/?linkid=2222850
|
||||||
[linux-zip]: https://azuredatastudio-update.azurewebsites.net/latest/linux-x64/stable
|
[osx-universal]: https://go.microsoft.com/fwlink/?linkid=2222873
|
||||||
[linux-deb]: https://azuredatastudio-update.azurewebsites.net/latest/linux-deb-x64/stable
|
[osx-zip]: https://go.microsoft.com/fwlink/?linkid=2222874
|
||||||
[linux-rpm]: https://azuredatastudio-update.azurewebsites.net/latest/linux-rpm-x64/stable
|
[osx-arm64]: https://go.microsoft.com/fwlink/?linkid=2222680
|
||||||
[osx-universal]: https://azuredatastudio-update.azurewebsites.net/latest/darwin-universal/stable
|
[linux-zip]: https://go.microsoft.com/fwlink/?linkid=2222918
|
||||||
[osx-zip]: https://azuredatastudio-update.azurewebsites.net/latest/darwin/stable
|
[linux-rpm]: https://go.microsoft.com/fwlink/?linkid=2223105
|
||||||
[osx-arm64]: https://azuredatastudio-update.azurewebsites.net/latest/darwin-arm64/stable
|
[linux-deb]: https://go.microsoft.com/fwlink/?linkid=2222875
|
||||||
|
|
||||||
Go to our [download page](https://aka.ms/getazuredatastudio) for more specific instructions.
|
Go to our [download page](https://aka.ms/getazuredatastudio) for more specific instructions.
|
||||||
|
|
||||||
@@ -58,9 +58,10 @@ Go to our [download page](https://aka.ms/getazuredatastudio) for more specific i
|
|||||||
[in-osx-zip]: https://azuredatastudio-update.azurewebsites.net/latest/darwin/insider
|
[in-osx-zip]: https://azuredatastudio-update.azurewebsites.net/latest/darwin/insider
|
||||||
[in-osx-arm64]: https://azuredatastudio-update.azurewebsites.net/latest/darwin-arm64/insider
|
[in-osx-arm64]: https://azuredatastudio-update.azurewebsites.net/latest/darwin-arm64/insider
|
||||||
|
|
||||||
Please visit our [download page](https://aka.ms/getazuredatastudio) for more specific installation instructions.
|
|
||||||
Check out the [change log](https://github.com/Microsoft/azuredatastudio/blob/main/CHANGELOG.md) or [release notes](https://learn.microsoft.com/sql/azure-data-studio/release-notes-azure-data-studio) for additional details of what's in the each release.
|
See the [change log](https://github.com/Microsoft/azuredatastudio/blob/main/CHANGELOG.md) for additional details of what's in this release.
|
||||||
The [Azure Data Studio documentation](https://learn.microsoft.com/sql/azure-data-studio) includes complete details on getting started, connection quickstarts, and feature tutorials.
|
Go to our [download page](https://aka.ms/getazuredatastudio) for more specific instructions.
|
||||||
|
|
||||||
|
|
||||||
## **Feature Highlights**
|
## **Feature Highlights**
|
||||||
|
|
||||||
@@ -94,12 +95,8 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope
|
|||||||
## Localization
|
## Localization
|
||||||
Azure Data Studio is localized into 10 languages: French, Italian, German, Spanish, Simplified Chinese, Traditional Chinese, Japanese, Korean, Russian, and Portuguese (Brazil). The language packs are available in the Extension Manager marketplace. Simply, search for the specific language using the extension marketplace and install. Once you install the selected language, Azure Data Studio will prompt you to restart with the new language.
|
Azure Data Studio is localized into 10 languages: French, Italian, German, Spanish, Simplified Chinese, Traditional Chinese, Japanese, Korean, Russian, and Portuguese (Brazil). The language packs are available in the Extension Manager marketplace. Simply, search for the specific language using the extension marketplace and install. Once you install the selected language, Azure Data Studio will prompt you to restart with the new language.
|
||||||
|
|
||||||
## Telemetry
|
|
||||||
|
|
||||||
Azure Data Studio collects telemetry data, which is used to help understand how to improve the product. For example, this usage data helps to debug issues, such as slow start-up times, and to prioritize new features. While we appreciate the insights this data provides, we also know that not everyone wants to send usage data and you can disable telemetry as described in the [disable telemetry reporting](https://aka.ms/ads-disable-telemetry) documentation.
|
|
||||||
|
|
||||||
## Privacy Statement
|
## Privacy Statement
|
||||||
The [Microsoft Privacy Statement](https://go.microsoft.com/fwlink/?LinkID=824704) describes the privacy statement of this software.
|
The [Microsoft Enterprise and Developer Privacy Statement](https://privacy.microsoft.com/privacystatement) describes the privacy statement of this software.
|
||||||
|
|
||||||
## Contributions and "Thank You"
|
## Contributions and "Thank You"
|
||||||
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
|
We would like to thank all our users who raised issues, and in particular the following users who helped contribute fixes:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1 +1 @@
|
|||||||
2022-07-19T07:55:26.168Z
|
2022-10-06T02:27:18.022Z
|
||||||
|
|||||||
1
build/.gitignore
vendored
1
build/.gitignore
vendored
@@ -1 +0,0 @@
|
|||||||
.yarnrc
|
|
||||||
@@ -139,14 +139,6 @@ 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
|
||||||
|
|||||||
@@ -4,7 +4,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.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.OctoKitIssue = exports.OctoKit = void 0;
|
|
||||||
const core_1 = require("@actions/core");
|
const core_1 = require("@actions/core");
|
||||||
const github_1 = require("@actions/github");
|
const github_1 = require("@actions/github");
|
||||||
const child_process_1 = require("child_process");
|
const child_process_1 = require("child_process");
|
||||||
@@ -21,6 +20,7 @@ class OctoKit {
|
|||||||
}
|
}
|
||||||
async *query(query) {
|
async *query(query) {
|
||||||
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`;
|
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`;
|
||||||
|
console.log(`Querying for ${q}:`);
|
||||||
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
|
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
|
||||||
...query,
|
...query,
|
||||||
q,
|
q,
|
||||||
@@ -41,17 +41,19 @@ class OctoKit {
|
|||||||
};
|
};
|
||||||
for await (const pageResponse of this.octokit.paginate.iterator(options)) {
|
for await (const pageResponse of this.octokit.paginate.iterator(options)) {
|
||||||
await timeout();
|
await timeout();
|
||||||
await (0, utils_1.logRateLimit)(this.token);
|
await utils_1.logRateLimit(this.token);
|
||||||
const page = pageResponse.data;
|
const page = pageResponse.data;
|
||||||
|
console.log(`Page ${++pageNum}: ${page.map(({ number }) => number).join(' ')}`);
|
||||||
yield page.map((issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue)));
|
yield page.map((issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async createIssue(owner, repo, title, body) {
|
async createIssue(owner, repo, title, body) {
|
||||||
(0, core_1.debug)(`Creating issue \`${title}\` on ${owner}/${repo}`);
|
core_1.debug(`Creating issue \`${title}\` on ${owner}/${repo}`);
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.create({ owner, repo, title, body });
|
await this.octokit.issues.create({ owner, repo, title, body });
|
||||||
}
|
}
|
||||||
octokitIssueToIssue(issue) {
|
octokitIssueToIssue(issue) {
|
||||||
|
var _a, _b, _c, _d, _e, _f;
|
||||||
return {
|
return {
|
||||||
author: { name: issue.user.login, isGitHubApp: issue.user.type === 'Bot' },
|
author: { name: issue.user.login, isGitHubApp: issue.user.type === 'Bot' },
|
||||||
body: issue.body,
|
body: issue.body,
|
||||||
@@ -62,8 +64,8 @@ class OctoKit {
|
|||||||
locked: issue.locked,
|
locked: issue.locked,
|
||||||
numComments: issue.comments,
|
numComments: issue.comments,
|
||||||
reactions: issue.reactions,
|
reactions: issue.reactions,
|
||||||
assignee: issue.assignee?.login ?? issue.assignees?.[0]?.login,
|
assignee: (_b = (_a = issue.assignee) === null || _a === void 0 ? void 0 : _a.login) !== null && _b !== void 0 ? _b : (_d = (_c = issue.assignees) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.login,
|
||||||
milestoneId: issue.milestone?.number ?? null,
|
milestoneId: (_f = (_e = issue.milestone) === null || _e === void 0 ? void 0 : _e.number) !== null && _f !== void 0 ? _f : null,
|
||||||
createdAt: +new Date(issue.created_at),
|
createdAt: +new Date(issue.created_at),
|
||||||
updatedAt: +new Date(issue.updated_at),
|
updatedAt: +new Date(issue.updated_at),
|
||||||
closedAt: issue.closed_at ? +new Date(issue.closed_at) : undefined,
|
closedAt: issue.closed_at ? +new Date(issue.closed_at) : undefined,
|
||||||
@@ -71,10 +73,10 @@ class OctoKit {
|
|||||||
}
|
}
|
||||||
async hasWriteAccess(user) {
|
async hasWriteAccess(user) {
|
||||||
if (user.name in this.writeAccessCache) {
|
if (user.name in this.writeAccessCache) {
|
||||||
(0, core_1.debug)('Got permissions from cache for ' + user);
|
core_1.debug('Got permissions from cache for ' + user);
|
||||||
return this.writeAccessCache[user.name];
|
return this.writeAccessCache[user.name];
|
||||||
}
|
}
|
||||||
(0, core_1.debug)('Fetching permissions for ' + user);
|
core_1.debug('Fetching permissions for ' + user);
|
||||||
const permissions = (await this.octokit.repos.getCollaboratorPermissionLevel({
|
const permissions = (await this.octokit.repos.getCollaboratorPermissionLevel({
|
||||||
...this.params,
|
...this.params,
|
||||||
username: user.name,
|
username: user.name,
|
||||||
@@ -94,14 +96,14 @@ class OctoKit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
async createLabel(name, color, description) {
|
async createLabel(name, color, description) {
|
||||||
(0, core_1.debug)('Creating label ' + name);
|
core_1.debug('Creating label ' + name);
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.createLabel({ ...this.params, color, description, name });
|
await this.octokit.issues.createLabel({ ...this.params, color, description, name });
|
||||||
else
|
else
|
||||||
this.mockLabels.add(name);
|
this.mockLabels.add(name);
|
||||||
}
|
}
|
||||||
async deleteLabel(name) {
|
async deleteLabel(name) {
|
||||||
(0, core_1.debug)('Deleting label ' + name);
|
core_1.debug('Deleting label ' + name);
|
||||||
try {
|
try {
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.deleteLabel({ ...this.params, name });
|
await this.octokit.issues.deleteLabel({ ...this.params, name });
|
||||||
@@ -114,7 +116,7 @@ class OctoKit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
async readConfig(path) {
|
async readConfig(path) {
|
||||||
(0, core_1.debug)('Reading config at ' + path);
|
core_1.debug('Reading config at ' + path);
|
||||||
const repoPath = `.github/${path}.json`;
|
const repoPath = `.github/${path}.json`;
|
||||||
const data = (await this.octokit.repos.getContents({ ...this.params, path: repoPath })).data;
|
const data = (await this.octokit.repos.getContents({ ...this.params, path: repoPath })).data;
|
||||||
if ('type' in data && data.type === 'file') {
|
if ('type' in data && data.type === 'file') {
|
||||||
@@ -126,10 +128,10 @@ class OctoKit {
|
|||||||
throw Error('Found directory at config path when expecting file' + JSON.stringify(data));
|
throw Error('Found directory at config path when expecting file' + JSON.stringify(data));
|
||||||
}
|
}
|
||||||
async releaseContainsCommit(release, commit) {
|
async releaseContainsCommit(release, commit) {
|
||||||
if ((0, utils_1.getInput)('commitReleasedDebuggingOverride')) {
|
if (utils_1.getInput('commitReleasedDebuggingOverride')) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return new Promise((resolve, reject) => (0, child_process_1.exec)(`git -C ./repo merge-base --is-ancestor ${commit} ${release}`, (err) => !err || err.code === 1 ? resolve(!err) : reject(err)));
|
return new Promise((resolve, reject) => child_process_1.exec(`git -C ./repo merge-base --is-ancestor ${commit} ${release}`, (err) => !err || err.code === 1 ? resolve(!err) : reject(err)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
exports.OctoKit = OctoKit;
|
exports.OctoKit = OctoKit;
|
||||||
@@ -140,7 +142,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
this.issueData = issueData;
|
this.issueData = issueData;
|
||||||
}
|
}
|
||||||
async addAssignee(assignee) {
|
async addAssignee(assignee) {
|
||||||
(0, core_1.debug)('Adding assignee ' + assignee + ' to ' + this.issueData.number);
|
core_1.debug('Adding assignee ' + assignee + ' to ' + this.issueData.number);
|
||||||
if (!this.options.readonly) {
|
if (!this.options.readonly) {
|
||||||
await this.octokit.issues.addAssignees({
|
await this.octokit.issues.addAssignees({
|
||||||
...this.params,
|
...this.params,
|
||||||
@@ -150,7 +152,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
async closeIssue() {
|
async closeIssue() {
|
||||||
(0, core_1.debug)('Closing issue ' + this.issueData.number);
|
core_1.debug('Closing issue ' + this.issueData.number);
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.update({
|
await this.octokit.issues.update({
|
||||||
...this.params,
|
...this.params,
|
||||||
@@ -159,15 +161,16 @@ class OctoKitIssue extends OctoKit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
async lockIssue() {
|
async lockIssue() {
|
||||||
(0, core_1.debug)('Locking issue ' + this.issueData.number);
|
core_1.debug('Locking issue ' + this.issueData.number);
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.lock({ ...this.params, issue_number: this.issueData.number });
|
await this.octokit.issues.lock({ ...this.params, issue_number: this.issueData.number });
|
||||||
}
|
}
|
||||||
async getIssue() {
|
async getIssue() {
|
||||||
if (isIssue(this.issueData)) {
|
if (isIssue(this.issueData)) {
|
||||||
(0, core_1.debug)('Got issue data from query result ' + this.issueData.number);
|
core_1.debug('Got issue data from query result ' + this.issueData.number);
|
||||||
return this.issueData;
|
return this.issueData;
|
||||||
}
|
}
|
||||||
|
console.log('Fetching issue ' + this.issueData.number);
|
||||||
const issue = (await this.octokit.issues.get({
|
const issue = (await this.octokit.issues.get({
|
||||||
...this.params,
|
...this.params,
|
||||||
issue_number: this.issueData.number,
|
issue_number: this.issueData.number,
|
||||||
@@ -176,7 +179,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
return (this.issueData = this.octokitIssueToIssue(issue));
|
return (this.issueData = this.octokitIssueToIssue(issue));
|
||||||
}
|
}
|
||||||
async postComment(body) {
|
async postComment(body) {
|
||||||
(0, core_1.debug)(`Posting comment ${body} on ${this.issueData.number}`);
|
core_1.debug(`Posting comment ${body} on ${this.issueData.number}`);
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.createComment({
|
await this.octokit.issues.createComment({
|
||||||
...this.params,
|
...this.params,
|
||||||
@@ -185,7 +188,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
async deleteComment(id) {
|
async deleteComment(id) {
|
||||||
(0, core_1.debug)(`Deleting comment ${id} on ${this.issueData.number}`);
|
core_1.debug(`Deleting comment ${id} on ${this.issueData.number}`);
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.deleteComment({
|
await this.octokit.issues.deleteComment({
|
||||||
owner: this.params.owner,
|
owner: this.params.owner,
|
||||||
@@ -194,7 +197,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
async setMilestone(milestoneId) {
|
async setMilestone(milestoneId) {
|
||||||
(0, core_1.debug)(`Setting milestone for ${this.issueData.number} to ${milestoneId}`);
|
core_1.debug(`Setting milestone for ${this.issueData.number} to ${milestoneId}`);
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.update({
|
await this.octokit.issues.update({
|
||||||
...this.params,
|
...this.params,
|
||||||
@@ -203,7 +206,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
async *getComments(last) {
|
async *getComments(last) {
|
||||||
(0, core_1.debug)('Fetching comments for ' + this.issueData.number);
|
core_1.debug('Fetching comments for ' + this.issueData.number);
|
||||||
const response = this.octokit.paginate.iterator(this.octokit.issues.listComments.endpoint.merge({
|
const response = this.octokit.paginate.iterator(this.octokit.issues.listComments.endpoint.merge({
|
||||||
...this.params,
|
...this.params,
|
||||||
issue_number: this.issueData.number,
|
issue_number: this.issueData.number,
|
||||||
@@ -220,7 +223,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
async addLabel(name) {
|
async addLabel(name) {
|
||||||
(0, core_1.debug)(`Adding label ${name} to ${this.issueData.number}`);
|
core_1.debug(`Adding label ${name} to ${this.issueData.number}`);
|
||||||
if (!(await this.repoHasLabel(name))) {
|
if (!(await this.repoHasLabel(name))) {
|
||||||
throw Error(`Action could not execute becuase label ${name} is not defined.`);
|
throw Error(`Action could not execute becuase label ${name} is not defined.`);
|
||||||
}
|
}
|
||||||
@@ -232,7 +235,7 @@ class OctoKitIssue extends OctoKit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
async removeLabel(name) {
|
async removeLabel(name) {
|
||||||
(0, core_1.debug)(`Removing label ${name} from ${this.issueData.number}`);
|
core_1.debug(`Removing label ${name} from ${this.issueData.number}`);
|
||||||
try {
|
try {
|
||||||
if (!this.options.readonly)
|
if (!this.options.readonly)
|
||||||
await this.octokit.issues.removeLabel({
|
await this.octokit.issues.removeLabel({
|
||||||
@@ -243,12 +246,14 @@ class OctoKitIssue extends OctoKit {
|
|||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
if (err.status === 404) {
|
if (err.status === 404) {
|
||||||
|
console.log(`Label ${name} not found on issue`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
async getClosingInfo() {
|
async getClosingInfo() {
|
||||||
|
var _a;
|
||||||
if ((await this.getIssue()).open) {
|
if ((await this.getIssue()).open) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -262,12 +267,13 @@ class OctoKitIssue extends OctoKit {
|
|||||||
for (const timelineEvent of timelineEvents) {
|
for (const timelineEvent of timelineEvents) {
|
||||||
if (timelineEvent.event === 'closed') {
|
if (timelineEvent.event === 'closed') {
|
||||||
closingCommit = {
|
closingCommit = {
|
||||||
hash: timelineEvent.commit_id ?? undefined,
|
hash: (_a = timelineEvent.commit_id) !== null && _a !== void 0 ? _a : undefined,
|
||||||
timestamp: +new Date(timelineEvent.created_at),
|
timestamp: +new Date(timelineEvent.created_at),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log(`Got ${closingCommit} as closing commit of ${this.issueData.number}`);
|
||||||
return closingCommit;
|
return closingCommit;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ export class OctoKit implements GitHub {
|
|||||||
|
|
||||||
async *query(query: Query): AsyncIterableIterator<GitHubIssue[]> {
|
async *query(query: Query): AsyncIterableIterator<GitHubIssue[]> {
|
||||||
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`
|
const q = query.q + ` repo:${this.params.owner}/${this.params.repo}`
|
||||||
|
console.log(`Querying for ${q}:`)
|
||||||
|
|
||||||
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
|
const options = this.octokit.search.issuesAndPullRequests.endpoint.merge({
|
||||||
...query,
|
...query,
|
||||||
@@ -49,6 +50,7 @@ export class OctoKit implements GitHub {
|
|||||||
await timeout()
|
await timeout()
|
||||||
await logRateLimit(this.token)
|
await logRateLimit(this.token)
|
||||||
const page: Array<Octokit.SearchIssuesAndPullRequestsResponseItemsItem> = pageResponse.data
|
const page: Array<Octokit.SearchIssuesAndPullRequestsResponseItemsItem> = pageResponse.data
|
||||||
|
console.log(`Page ${++pageNum}: ${page.map(({ number }) => number).join(' ')}`)
|
||||||
yield page.map(
|
yield page.map(
|
||||||
(issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue)),
|
(issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue)),
|
||||||
)
|
)
|
||||||
@@ -197,6 +199,7 @@ export class OctoKitIssue extends OctoKit implements GitHubIssue {
|
|||||||
return this.issueData
|
return this.issueData
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('Fetching issue ' + this.issueData.number)
|
||||||
const issue = (
|
const issue = (
|
||||||
await this.octokit.issues.get({
|
await this.octokit.issues.get({
|
||||||
...this.params,
|
...this.params,
|
||||||
@@ -283,6 +286,7 @@ export class OctoKitIssue extends OctoKit implements GitHubIssue {
|
|||||||
})
|
})
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (err.status === 404) {
|
if (err.status === 404) {
|
||||||
|
console.log(`Label ${name} not found on issue`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
throw err
|
throw err
|
||||||
@@ -310,6 +314,7 @@ export class OctoKitIssue extends OctoKit implements GitHubIssue {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log(`Got ${closingCommit} as closing commit of ${this.issueData.number}`)
|
||||||
return closingCommit
|
return closingCommit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,18 +4,17 @@
|
|||||||
* 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.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.TestbedIssue = exports.Testbed = void 0;
|
|
||||||
class Testbed {
|
class Testbed {
|
||||||
constructor(config) {
|
constructor(config) {
|
||||||
|
var _a, _b, _c, _d, _e;
|
||||||
this.config = {
|
this.config = {
|
||||||
globalLabels: config?.globalLabels ?? [],
|
globalLabels: (_a = config === null || config === void 0 ? void 0 : config.globalLabels) !== null && _a !== void 0 ? _a : [],
|
||||||
configs: config?.configs ?? {},
|
configs: (_b = config === null || config === void 0 ? void 0 : config.configs) !== null && _b !== void 0 ? _b : {},
|
||||||
writers: config?.writers ?? [],
|
writers: (_c = config === null || config === void 0 ? void 0 : config.writers) !== null && _c !== void 0 ? _c : [],
|
||||||
releasedCommits: config?.releasedCommits ?? [],
|
releasedCommits: (_d = config === null || config === void 0 ? void 0 : config.releasedCommits) !== null && _d !== void 0 ? _d : [],
|
||||||
queryRunner: config?.queryRunner ??
|
queryRunner: (_e = config === null || config === void 0 ? void 0 : config.queryRunner) !== null && _e !== void 0 ? _e : async function* () {
|
||||||
async function* () {
|
yield [];
|
||||||
yield [];
|
},
|
||||||
},
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
async *query(query) {
|
async *query(query) {
|
||||||
@@ -48,15 +47,16 @@ class Testbed {
|
|||||||
exports.Testbed = Testbed;
|
exports.Testbed = Testbed;
|
||||||
class TestbedIssue extends Testbed {
|
class TestbedIssue extends Testbed {
|
||||||
constructor(globalConfig, issueConfig) {
|
constructor(globalConfig, issueConfig) {
|
||||||
|
var _a, _b, _c;
|
||||||
super(globalConfig);
|
super(globalConfig);
|
||||||
issueConfig = issueConfig ?? {};
|
issueConfig = issueConfig !== null && issueConfig !== void 0 ? issueConfig : {};
|
||||||
issueConfig.comments = issueConfig?.comments ?? [];
|
issueConfig.comments = (_a = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.comments) !== null && _a !== void 0 ? _a : [];
|
||||||
issueConfig.labels = issueConfig?.labels ?? [];
|
issueConfig.labels = (_b = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.labels) !== null && _b !== void 0 ? _b : [];
|
||||||
issueConfig.issue = {
|
issueConfig.issue = {
|
||||||
author: { name: 'JacksonKearl' },
|
author: { name: 'JacksonKearl' },
|
||||||
body: 'issue body',
|
body: 'issue body',
|
||||||
locked: false,
|
locked: false,
|
||||||
numComments: issueConfig?.comments?.length || 0,
|
numComments: ((_c = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.comments) === null || _c === void 0 ? void 0 : _c.length) || 0,
|
||||||
number: 1,
|
number: 1,
|
||||||
open: true,
|
open: true,
|
||||||
title: 'issue title',
|
title: 'issue title',
|
||||||
@@ -90,7 +90,7 @@ class TestbedIssue extends Testbed {
|
|||||||
}
|
}
|
||||||
async postComment(body, author) {
|
async postComment(body, author) {
|
||||||
this.issueConfig.comments.push({
|
this.issueConfig.comments.push({
|
||||||
author: { name: author ?? 'bot' },
|
author: { name: author !== null && author !== void 0 ? author : 'bot' },
|
||||||
body,
|
body,
|
||||||
id: Math.random(),
|
id: Math.random(),
|
||||||
timestamp: +new Date(),
|
timestamp: +new Date(),
|
||||||
|
|||||||
@@ -8,15 +8,15 @@ const core = require("@actions/core");
|
|||||||
const github_1 = require("@actions/github");
|
const github_1 = require("@actions/github");
|
||||||
const octokit_1 = require("../api/octokit");
|
const octokit_1 = require("../api/octokit");
|
||||||
const utils_1 = require("../utils/utils");
|
const utils_1 = require("../utils/utils");
|
||||||
const token = (0, utils_1.getRequiredInput)('token');
|
const token = utils_1.getRequiredInput('token');
|
||||||
const label = (0, utils_1.getRequiredInput)('label');
|
const label = utils_1.getRequiredInput('label');
|
||||||
async function main() {
|
async function main() {
|
||||||
const pr = new octokit_1.OctoKitIssue(token, github_1.context.repo, { number: github_1.context.issue.number });
|
const pr = new octokit_1.OctoKitIssue(token, github_1.context.repo, { number: github_1.context.issue.number });
|
||||||
pr.addLabel(label);
|
pr.addLabel(label);
|
||||||
}
|
}
|
||||||
main()
|
main()
|
||||||
.then(() => (0, utils_1.logRateLimit)(token))
|
.then(() => utils_1.logRateLimit(token))
|
||||||
.catch(async (error) => {
|
.catch(async (error) => {
|
||||||
core.setFailed(error.message);
|
core.setFailed(error.message);
|
||||||
await (0, utils_1.logErrorToIssue)(error.message, true, token);
|
await utils_1.logErrorToIssue(error.message, true, token);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,25 +1,24 @@
|
|||||||
{
|
{
|
||||||
"name": "github-actions",
|
"name": "github-actions",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "GitHub Actions",
|
"description": "GitHub Actions",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "mocha -r ts-node/register **/*.test.ts",
|
"test": "mocha -r ts-node/register **/*.test.ts",
|
||||||
"build": "tsc -p ./tsconfig.json",
|
"build": "tsc -p ./tsconfig.json",
|
||||||
"compile": "tsc -p ./tsconfig.json",
|
"lint": "eslint -c .eslintrc --fix --ext .ts .",
|
||||||
"lint": "eslint -c .eslintrc --fix --ext .ts .",
|
"watch-typecheck": "tsc --watch"
|
||||||
"watch-typecheck": "tsc --watch"
|
},
|
||||||
},
|
"repository": {
|
||||||
"repository": {
|
"type": "git",
|
||||||
"type": "git",
|
"url": "git+https://github.com/microsoft/azuredatastudio.git"
|
||||||
"url": "git+https://github.com/microsoft/azuredatastudio.git"
|
},
|
||||||
},
|
"keywords": [],
|
||||||
"keywords": [],
|
"author": "",
|
||||||
"author": "",
|
"dependencies": {
|
||||||
"dependencies": {
|
"@actions/core": "^1.2.6",
|
||||||
"@actions/core": "^1.2.6",
|
"@actions/github": "^2.1.1",
|
||||||
"@actions/github": "^2.1.1",
|
"axios": "^0.21.4",
|
||||||
"axios": "^0.21.4",
|
|
||||||
"ts-node": "^8.6.2",
|
"ts-node": "^8.6.2",
|
||||||
"typescript": "^3.8.3"
|
"typescript": "^3.8.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,16 +4,13 @@
|
|||||||
* 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.
|
||||||
*--------------------------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------------------------*/
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.logErrorToIssue = exports.logRateLimit = exports.daysAgoToHumanReadbleDate = exports.daysAgoToTimestamp = exports.loadLatestRelease = exports.normalizeIssue = exports.getRequiredInput = exports.getInput = void 0;
|
|
||||||
const core = require("@actions/core");
|
const core = require("@actions/core");
|
||||||
const github_1 = require("@actions/github");
|
const github_1 = require("@actions/github");
|
||||||
const axios_1 = require("axios");
|
const axios_1 = require("axios");
|
||||||
const octokit_1 = require("../api/octokit");
|
const octokit_1 = require("../api/octokit");
|
||||||
const getInput = (name) => core.getInput(name) || undefined;
|
exports.getInput = (name) => core.getInput(name) || undefined;
|
||||||
exports.getInput = getInput;
|
exports.getRequiredInput = (name) => core.getInput(name, { required: true });
|
||||||
const getRequiredInput = (name) => core.getInput(name, { required: true });
|
exports.normalizeIssue = (issue) => {
|
||||||
exports.getRequiredInput = getRequiredInput;
|
|
||||||
const normalizeIssue = (issue) => {
|
|
||||||
const { body, title } = issue;
|
const { body, title } = issue;
|
||||||
const isBug = body.includes('bug_report_template') || /Issue Type:.*Bug.*/.test(body);
|
const isBug = body.includes('bug_report_template') || /Issue Type:.*Bug.*/.test(body);
|
||||||
const isFeatureRequest = body.includes('feature_request_template') || /Issue Type:.*Feature Request.*/.test(body);
|
const isFeatureRequest = body.includes('feature_request_template') || /Issue Type:.*Feature Request.*/.test(body);
|
||||||
@@ -36,25 +33,23 @@ const normalizeIssue = (issue) => {
|
|||||||
issueType: isBug ? 'bug' : isFeatureRequest ? 'feature_request' : 'unknown',
|
issueType: isBug ? 'bug' : isFeatureRequest ? 'feature_request' : 'unknown',
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
exports.normalizeIssue = normalizeIssue;
|
exports.loadLatestRelease = async (quality) => (await axios_1.default.get(`https://vscode-update.azurewebsites.net/api/update/darwin/${quality}/latest`)).data;
|
||||||
const loadLatestRelease = async (quality) => (await axios_1.default.get(`https://vscode-update.azurewebsites.net/api/update/darwin/${quality}/latest`)).data;
|
exports.daysAgoToTimestamp = (days) => +new Date(Date.now() - days * 24 * 60 * 60 * 1000);
|
||||||
exports.loadLatestRelease = loadLatestRelease;
|
exports.daysAgoToHumanReadbleDate = (days) => new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '');
|
||||||
const daysAgoToTimestamp = (days) => +new Date(Date.now() - days * 24 * 60 * 60 * 1000);
|
exports.logRateLimit = async (token) => {
|
||||||
exports.daysAgoToTimestamp = daysAgoToTimestamp;
|
|
||||||
const daysAgoToHumanReadbleDate = (days) => new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '');
|
|
||||||
exports.daysAgoToHumanReadbleDate = daysAgoToHumanReadbleDate;
|
|
||||||
const logRateLimit = async (token) => {
|
|
||||||
const usageData = (await new github_1.GitHub(token).rateLimit.get()).data.resources;
|
const usageData = (await new github_1.GitHub(token).rateLimit.get()).data.resources;
|
||||||
['core', 'graphql', 'search'].forEach(async (category) => {
|
['core', 'graphql', 'search'].forEach(async (category) => {
|
||||||
const usage = 1 - usageData[category].remaining / usageData[category].limit;
|
const usage = 1 - usageData[category].remaining / usageData[category].limit;
|
||||||
const message = `Usage at ${usage} for ${category}`;
|
const message = `Usage at ${usage} for ${category}`;
|
||||||
|
if (usage > 0) {
|
||||||
|
console.log(message);
|
||||||
|
}
|
||||||
if (usage > 0.5) {
|
if (usage > 0.5) {
|
||||||
await (0, exports.logErrorToIssue)(message, false, token);
|
await exports.logErrorToIssue(message, false, token);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
exports.logRateLimit = logRateLimit;
|
exports.logErrorToIssue = async (message, ping, token) => {
|
||||||
const logErrorToIssue = async (message, ping, token) => {
|
|
||||||
// Attempt to wait out abuse detection timeout if present
|
// Attempt to wait out abuse detection timeout if present
|
||||||
await new Promise((resolve) => setTimeout(resolve, 10000));
|
await new Promise((resolve) => setTimeout(resolve, 10000));
|
||||||
const dest = github_1.context.repo.repo === 'vscode-internalbacklog'
|
const dest = github_1.context.repo.repo === 'vscode-internalbacklog'
|
||||||
@@ -75,4 +70,3 @@ ${JSON.stringify(github_1.context, null, 2).replace(/<!--/gu, '<@--').replace(/-
|
|||||||
-->
|
-->
|
||||||
`);
|
`);
|
||||||
};
|
};
|
||||||
exports.logErrorToIssue = logErrorToIssue;
|
|
||||||
|
|||||||
@@ -58,10 +58,13 @@ export const daysAgoToHumanReadbleDate = (days: number) =>
|
|||||||
new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '')
|
new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '')
|
||||||
|
|
||||||
export const logRateLimit = async (token: string) => {
|
export const logRateLimit = async (token: string) => {
|
||||||
const usageData = (await new GitHub(token).rateLimit.get()).data.resources;
|
const usageData = (await new GitHub(token).rateLimit.get()).data.resources
|
||||||
(['core', 'graphql', 'search'] as const).forEach(async (category) => {
|
;(['core', 'graphql', 'search'] as const).forEach(async (category) => {
|
||||||
const usage = 1 - usageData[category].remaining / usageData[category].limit
|
const usage = 1 - usageData[category].remaining / usageData[category].limit
|
||||||
const message = `Usage at ${usage} for ${category}`
|
const message = `Usage at ${usage} for ${category}`
|
||||||
|
if (usage > 0) {
|
||||||
|
console.log(message)
|
||||||
|
}
|
||||||
if (usage > 0.5) {
|
if (usage > 0.5) {
|
||||||
await logErrorToIssue(message, false, token)
|
await logErrorToIssue(message, false, token)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -285,8 +285,6 @@ node-fetch@^2.3.0:
|
|||||||
version "2.6.7"
|
version "2.6.7"
|
||||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||||
dependencies:
|
|
||||||
whatwg-url "^5.0.0"
|
|
||||||
|
|
||||||
npm-run-path@^2.0.0:
|
npm-run-path@^2.0.0:
|
||||||
version "2.0.2"
|
version "2.0.2"
|
||||||
@@ -373,11 +371,6 @@ strip-eof@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||||
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
|
integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
|
||||||
|
|
||||||
tr46@~0.0.3:
|
|
||||||
version "0.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
|
|
||||||
integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
|
|
||||||
|
|
||||||
ts-node@^8.6.2:
|
ts-node@^8.6.2:
|
||||||
version "8.9.0"
|
version "8.9.0"
|
||||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.0.tgz#d7bf7272dcbecd3a2aa18bd0b96c7d2f270c15d4"
|
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.9.0.tgz#d7bf7272dcbecd3a2aa18bd0b96c7d2f270c15d4"
|
||||||
@@ -395,9 +388,9 @@ tunnel@0.0.6, tunnel@^0.0.6:
|
|||||||
integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
|
integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
|
||||||
|
|
||||||
typescript@^3.8.3:
|
typescript@^3.8.3:
|
||||||
version "3.9.10"
|
version "3.8.3"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
|
||||||
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
|
integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
|
||||||
|
|
||||||
universal-user-agent@^4.0.0:
|
universal-user-agent@^4.0.0:
|
||||||
version "4.0.1"
|
version "4.0.1"
|
||||||
@@ -418,19 +411,6 @@ uuid@^8.3.2:
|
|||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||||
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
|
||||||
|
|
||||||
webidl-conversions@^3.0.0:
|
|
||||||
version "3.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
|
|
||||||
integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
|
|
||||||
|
|
||||||
whatwg-url@^5.0.0:
|
|
||||||
version "5.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
|
|
||||||
integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
|
|
||||||
dependencies:
|
|
||||||
tr46 "~0.0.3"
|
|
||||||
webidl-conversions "^3.0.0"
|
|
||||||
|
|
||||||
which@^1.2.9:
|
which@^1.2.9:
|
||||||
version "1.3.1"
|
version "1.3.1"
|
||||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||||
|
|||||||
@@ -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 (const dir of dirs) {
|
for (let 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,6 +3,8 @@
|
|||||||
* 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';
|
||||||
@@ -17,7 +19,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 (const dir of dirs) {
|
for (let 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");
|
||||||
@@ -130,6 +130,7 @@ function getEnv(name) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
async function main() {
|
async function main() {
|
||||||
|
var _a;
|
||||||
const [, , product, os, arch, unprocessedType, fileName, filePath] = process.argv;
|
const [, , product, os, arch, unprocessedType, fileName, filePath] = process.argv;
|
||||||
// getPlatform needs the unprocessedType
|
// getPlatform needs the unprocessedType
|
||||||
const platform = getPlatform(product, os, arch, unprocessedType);
|
const platform = getPlatform(product, os, arch, unprocessedType);
|
||||||
@@ -168,7 +169,7 @@ async function main() {
|
|||||||
console.log('Blob successfully uploaded to Azure storage.');
|
console.log('Blob successfully uploaded to Azure storage.');
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
const shouldUploadToMooncake = /true/i.test(process.env['VSCODE_PUBLISH_TO_MOONCAKE'] ?? 'true');
|
const shouldUploadToMooncake = /true/i.test((_a = process.env['VSCODE_PUBLISH_TO_MOONCAKE']) !== null && _a !== void 0 ? _a : 'true');
|
||||||
if (shouldUploadToMooncake) {
|
if (shouldUploadToMooncake) {
|
||||||
const mooncakeCredential = new identity_1.ClientSecretCredential(process.env['AZURE_MOONCAKE_TENANT_ID'], process.env['AZURE_MOONCAKE_CLIENT_ID'], process.env['AZURE_MOONCAKE_CLIENT_SECRET']);
|
const mooncakeCredential = new identity_1.ClientSecretCredential(process.env['AZURE_MOONCAKE_TENANT_ID'], process.env['AZURE_MOONCAKE_CLIENT_ID'], process.env['AZURE_MOONCAKE_CLIENT_SECRET']);
|
||||||
const mooncakeBlobServiceClient = new storage_blob_1.BlobServiceClient(`https://vscode.blob.core.chinacloudapi.cn`, mooncakeCredential, storagePipelineOptions);
|
const mooncakeBlobServiceClient = new storage_blob_1.BlobServiceClient(`https://vscode.blob.core.chinacloudapi.cn`, mooncakeCredential, storagePipelineOptions);
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
* 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");
|
||||||
@@ -19,11 +19,12 @@ function getEnv(name) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
async function main() {
|
async function main() {
|
||||||
|
var _a, _b, _c;
|
||||||
const [, , _version] = process.argv;
|
const [, , _version] = process.argv;
|
||||||
const quality = getEnv('VSCODE_QUALITY');
|
const quality = getEnv('VSCODE_QUALITY');
|
||||||
const commit = process.env['VSCODE_DISTRO_COMMIT']?.trim() || getEnv('BUILD_SOURCEVERSION');
|
const commit = ((_a = process.env['VSCODE_DISTRO_COMMIT']) === null || _a === void 0 ? void 0 : _a.trim()) || getEnv('BUILD_SOURCEVERSION');
|
||||||
const queuedBy = getEnv('BUILD_QUEUEDBY');
|
const queuedBy = getEnv('BUILD_QUEUEDBY');
|
||||||
const sourceBranch = process.env['VSCODE_DISTRO_REF']?.trim() || getEnv('BUILD_SOURCEBRANCH');
|
const sourceBranch = ((_b = process.env['VSCODE_DISTRO_REF']) === null || _b === void 0 ? void 0 : _b.trim()) || getEnv('BUILD_SOURCEBRANCH');
|
||||||
const version = _version + (quality === 'stable' ? '' : `-${quality}`);
|
const version = _version + (quality === 'stable' ? '' : `-${quality}`);
|
||||||
console.log('Creating build...');
|
console.log('Creating build...');
|
||||||
console.log('Quality:', quality);
|
console.log('Quality:', quality);
|
||||||
@@ -34,7 +35,7 @@ async function main() {
|
|||||||
timestamp: (new Date()).getTime(),
|
timestamp: (new Date()).getTime(),
|
||||||
version,
|
version,
|
||||||
isReleased: false,
|
isReleased: false,
|
||||||
private: Boolean(process.env['VSCODE_DISTRO_REF']?.trim()),
|
private: Boolean((_c = process.env['VSCODE_DISTRO_REF']) === null || _c === void 0 ? void 0 : _c.trim()),
|
||||||
sourceBranch,
|
sourceBranch,
|
||||||
queuedBy,
|
queuedBy,
|
||||||
assets: [],
|
assets: [],
|
||||||
@@ -43,7 +44,7 @@ async function main() {
|
|||||||
const aadCredentials = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
|
const aadCredentials = new identity_1.ClientSecretCredential(process.env['AZURE_TENANT_ID'], process.env['AZURE_CLIENT_ID'], process.env['AZURE_CLIENT_SECRET']);
|
||||||
const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], aadCredentials });
|
const client = new cosmos_1.CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT'], aadCredentials });
|
||||||
const scripts = client.database('builds').container(quality).scripts;
|
const scripts = client.database('builds').container(quality).scripts;
|
||||||
await (0, retry_1.retry)(() => scripts.storedProcedure('createBuild').execute('', [{ ...build, _partitionKey: '' }]));
|
await (0, retry_1.retry)(() => scripts.storedProcedure('createBuild').execute('', [Object.assign(Object.assign({}, build), { _partitionKey: '' })]));
|
||||||
}
|
}
|
||||||
main().then(() => {
|
main().then(() => {
|
||||||
console.log('Build successfully created');
|
console.log('Build successfully created');
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
* 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,6 +3,8 @@
|
|||||||
* 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';
|
||||||
|
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
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");
|
||||||
|
const azure = require("azure-storage");
|
||||||
const mime = require("mime");
|
const mime = require("mime");
|
||||||
const minimist = require("minimist");
|
const minimist = require("minimist");
|
||||||
const documentdb_1 = require("documentdb");
|
const documentdb_1 = require("documentdb");
|
||||||
const storage_blob_1 = require("@azure/storage-blob");
|
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
if (process.argv.length < 9) {
|
if (process.argv.length < 9) {
|
||||||
console.error('Usage: node publish.js <product_quality> <platform> <file_type> <file_name> <version> <is_update> <file> [commit_id]');
|
console.error('Usage: node publish.js <product_quality> <platform> <file_type> <file_name> <version> <is_update> <file> [commit_id]');
|
||||||
@@ -104,23 +104,21 @@ function createOrUpdate(commit, quality, platform, type, release, asset, isUpdat
|
|||||||
});
|
});
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
async function assertContainer(containerClient) {
|
async function assertContainer(blobService, quality) {
|
||||||
let containerResponse = await containerClient.createIfNotExists({ access: 'blob' });
|
await new Promise((c, e) => blobService.createContainerIfNotExists(quality, { publicAccessLevel: 'blob' }, err => err ? e(err) : c()));
|
||||||
return containerResponse && !!containerResponse.errorCode;
|
|
||||||
}
|
}
|
||||||
async function uploadBlob(blobClient, file) {
|
async function doesAssetExist(blobService, quality, blobName) {
|
||||||
const result = await blobClient.uploadFile(file, {
|
const existsResult = await new Promise((c, e) => blobService.doesBlobExist(quality, blobName, (err, r) => err ? e(err) : c(r)));
|
||||||
blobHTTPHeaders: {
|
return existsResult.exists;
|
||||||
blobContentType: mime.lookup(file),
|
}
|
||||||
blobCacheControl: 'max-age=31536000, public'
|
async function uploadBlob(blobService, quality, blobName, file) {
|
||||||
|
const blobOptions = {
|
||||||
|
contentSettings: {
|
||||||
|
contentType: mime.lookup(file),
|
||||||
|
cacheControl: 'max-age=31536000, public'
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
if (result && !result.errorCode) {
|
await new Promise((c, e) => blobService.createBlockBlobFromLocalFile(quality, blobName, file, blobOptions, err => err ? e(err) : c()));
|
||||||
console.log(`Blobs uploaded successfully, response status: ${result?._response?.status}`);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
console.error(`Blobs failed to upload, response status: ${result?._response?.status}, errorcode: ${result?.errorCode}`);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
async function publish(commit, quality, platform, type, name, version, _isUpdate, file, opts) {
|
async function publish(commit, quality, platform, type, name, version, _isUpdate, file, opts) {
|
||||||
const isUpdate = _isUpdate === 'true';
|
const isUpdate = _isUpdate === 'true';
|
||||||
@@ -144,62 +142,54 @@ async function publish(commit, quality, platform, type, name, version, _isUpdate
|
|||||||
console.log('SHA256:', sha256hash);
|
console.log('SHA256:', sha256hash);
|
||||||
const blobName = commit + '/' + name;
|
const blobName = commit + '/' + name;
|
||||||
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2'];
|
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2'];
|
||||||
const storageKey = process.env['AZURE_STORAGE_ACCESS_KEY_2'];
|
const blobService = azure.createBlobService(storageAccount, process.env['AZURE_STORAGE_ACCESS_KEY_2'])
|
||||||
const connectionString = `DefaultEndpointsProtocol=https;AccountName=${storageAccount};AccountKey=${storageKey};EndpointSuffix=core.windows.net`;
|
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
|
||||||
let blobServiceClient = storage_blob_1.BlobServiceClient.fromConnectionString(connectionString, {
|
await assertContainer(blobService, quality);
|
||||||
retryOptions: {
|
const blobExists = await doesAssetExist(blobService, quality, blobName);
|
||||||
maxTries: 20,
|
if (blobExists) {
|
||||||
retryPolicyType: storage_blob_1.StorageRetryPolicyType.EXPONENTIAL
|
console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
|
||||||
}
|
return;
|
||||||
});
|
|
||||||
let containerClient = blobServiceClient.getContainerClient(quality);
|
|
||||||
if (await assertContainer(containerClient)) {
|
|
||||||
const blobClient = containerClient.getBlockBlobClient(blobName);
|
|
||||||
const blobExists = await blobClient.exists();
|
|
||||||
if (blobExists) {
|
|
||||||
console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
console.log('Uploading blobs to Azure storage...');
|
|
||||||
await uploadBlob(blobClient, file);
|
|
||||||
const config = await getConfig(quality);
|
|
||||||
console.log('Quality config:', config);
|
|
||||||
const asset = {
|
|
||||||
platform: platform,
|
|
||||||
type: type,
|
|
||||||
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`,
|
|
||||||
hash: sha1hash,
|
|
||||||
sha256hash,
|
|
||||||
size
|
|
||||||
};
|
|
||||||
// Remove this if we ever need to rollback fast updates for windows
|
|
||||||
if (/win32/.test(platform)) {
|
|
||||||
asset.supportsFastUpdate = true;
|
|
||||||
}
|
|
||||||
console.log('Asset:', JSON.stringify(asset, null, ' '));
|
|
||||||
// {{SQL CARBON EDIT}}
|
|
||||||
// Insiders: nightly build from main
|
|
||||||
const isReleased = (((quality === 'insider' && /^main$|^refs\/heads\/main$/.test(sourceBranch)) ||
|
|
||||||
(quality === 'rc1' && /^release\/|^refs\/heads\/release\//.test(sourceBranch))) &&
|
|
||||||
/Project Collection Service Accounts|Microsoft.VisualStudio.Services.TFS/.test(queuedBy));
|
|
||||||
const release = {
|
|
||||||
id: commit,
|
|
||||||
timestamp: (new Date()).getTime(),
|
|
||||||
version,
|
|
||||||
isReleased: isReleased,
|
|
||||||
sourceBranch,
|
|
||||||
queuedBy,
|
|
||||||
assets: [],
|
|
||||||
updates: {}
|
|
||||||
};
|
|
||||||
if (!opts['upload-only']) {
|
|
||||||
release.assets.push(asset);
|
|
||||||
if (isUpdate) {
|
|
||||||
release.updates[platform] = type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await createOrUpdate(commit, quality, platform, type, release, asset, isUpdate);
|
|
||||||
}
|
}
|
||||||
|
console.log('Uploading blobs to Azure storage...');
|
||||||
|
await uploadBlob(blobService, quality, blobName, file);
|
||||||
|
console.log('Blobs successfully uploaded.');
|
||||||
|
const config = await getConfig(quality);
|
||||||
|
console.log('Quality config:', config);
|
||||||
|
const asset = {
|
||||||
|
platform: platform,
|
||||||
|
type: type,
|
||||||
|
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`,
|
||||||
|
hash: sha1hash,
|
||||||
|
sha256hash,
|
||||||
|
size
|
||||||
|
};
|
||||||
|
// Remove this if we ever need to rollback fast updates for windows
|
||||||
|
if (/win32/.test(platform)) {
|
||||||
|
asset.supportsFastUpdate = true;
|
||||||
|
}
|
||||||
|
console.log('Asset:', JSON.stringify(asset, null, ' '));
|
||||||
|
// {{SQL CARBON EDIT}}
|
||||||
|
// Insiders: nightly build from main
|
||||||
|
const isReleased = (((quality === 'insider' && /^main$|^refs\/heads\/main$/.test(sourceBranch)) ||
|
||||||
|
(quality === 'rc1' && /^release\/|^refs\/heads\/release\//.test(sourceBranch))) &&
|
||||||
|
/Project Collection Service Accounts|Microsoft.VisualStudio.Services.TFS/.test(queuedBy));
|
||||||
|
const release = {
|
||||||
|
id: commit,
|
||||||
|
timestamp: (new Date()).getTime(),
|
||||||
|
version,
|
||||||
|
isReleased: isReleased,
|
||||||
|
sourceBranch,
|
||||||
|
queuedBy,
|
||||||
|
assets: [],
|
||||||
|
updates: {}
|
||||||
|
};
|
||||||
|
if (!opts['upload-only']) {
|
||||||
|
release.assets.push(asset);
|
||||||
|
if (isUpdate) {
|
||||||
|
release.updates[platform] = type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
await createOrUpdate(commit, quality, platform, type, release, asset, isUpdate);
|
||||||
}
|
}
|
||||||
const RETRY_TIMES = 10;
|
const RETRY_TIMES = 10;
|
||||||
async function retry(fn) {
|
async function retry(fn) {
|
||||||
|
|||||||
@@ -8,10 +8,10 @@
|
|||||||
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';
|
||||||
|
import * as azure from 'azure-storage';
|
||||||
import * as mime from 'mime';
|
import * as mime from 'mime';
|
||||||
import * as minimist from 'minimist';
|
import * as minimist from 'minimist';
|
||||||
import { DocumentClient, NewDocument } from 'documentdb';
|
import { DocumentClient, NewDocument } from 'documentdb';
|
||||||
import { BlobServiceClient, BlockBlobClient, ContainerClient, StorageRetryPolicyType } from '@azure/storage-blob';
|
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
if (process.argv.length < 9) {
|
if (process.argv.length < 9) {
|
||||||
@@ -127,23 +127,24 @@ function createOrUpdate(commit: string, quality: string, platform: string, type:
|
|||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
async function assertContainer(containerClient: ContainerClient): Promise<boolean> {
|
async function assertContainer(blobService: azure.BlobService, quality: string): Promise<void> {
|
||||||
let containerResponse = await containerClient.createIfNotExists({ access: 'blob' });
|
await new Promise<void>((c, e) => blobService.createContainerIfNotExists(quality, { publicAccessLevel: 'blob' }, err => err ? e(err) : c()));
|
||||||
return containerResponse && !!containerResponse.errorCode;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function uploadBlob(blobClient: BlockBlobClient, file: string): Promise<void> {
|
async function doesAssetExist(blobService: azure.BlobService, quality: string, blobName: string): Promise<boolean | undefined> {
|
||||||
const result = await blobClient.uploadFile(file, {
|
const existsResult = await new Promise<azure.BlobService.BlobResult>((c, e) => blobService.doesBlobExist(quality, blobName, (err, r) => err ? e(err) : c(r)));
|
||||||
blobHTTPHeaders: {
|
return existsResult.exists;
|
||||||
blobContentType: mime.lookup(file),
|
}
|
||||||
blobCacheControl: 'max-age=31536000, public'
|
|
||||||
|
async function uploadBlob(blobService: azure.BlobService, quality: string, blobName: string, file: string): Promise<void> {
|
||||||
|
const blobOptions: azure.BlobService.CreateBlockBlobRequestOptions = {
|
||||||
|
contentSettings: {
|
||||||
|
contentType: mime.lookup(file),
|
||||||
|
cacheControl: 'max-age=31536000, public'
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
if (result && !result.errorCode) {
|
|
||||||
console.log(`Blobs uploaded successfully, response status: ${result?._response?.status}`);
|
await new Promise<void>((c, e) => blobService.createBlockBlobFromLocalFile(quality, blobName, file, blobOptions, err => err ? e(err) : c()));
|
||||||
} else {
|
|
||||||
console.error(`Blobs failed to upload, response status: ${result?._response?.status}, errorcode: ${result?.errorCode}`)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
interface PublishOptions {
|
interface PublishOptions {
|
||||||
@@ -179,78 +180,74 @@ async function publish(commit: string, quality: string, platform: string, type:
|
|||||||
|
|
||||||
const blobName = commit + '/' + name;
|
const blobName = commit + '/' + name;
|
||||||
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2']!;
|
const storageAccount = process.env['AZURE_STORAGE_ACCOUNT_2']!;
|
||||||
const storageKey = process.env['AZURE_STORAGE_ACCESS_KEY_2']!;
|
|
||||||
const connectionString = `DefaultEndpointsProtocol=https;AccountName=${storageAccount};AccountKey=${storageKey};EndpointSuffix=core.windows.net`;
|
|
||||||
|
|
||||||
let blobServiceClient = BlobServiceClient.fromConnectionString(connectionString, {
|
const blobService = azure.createBlobService(storageAccount, process.env['AZURE_STORAGE_ACCESS_KEY_2']!)
|
||||||
retryOptions: {
|
.withFilter(new azure.ExponentialRetryPolicyFilter(20));
|
||||||
maxTries: 20,
|
|
||||||
retryPolicyType: StorageRetryPolicyType.EXPONENTIAL
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let containerClient = blobServiceClient.getContainerClient(quality);
|
await assertContainer(blobService, quality);
|
||||||
if (await assertContainer(containerClient)) {
|
|
||||||
const blobClient = containerClient.getBlockBlobClient(blobName);
|
|
||||||
const blobExists = await blobClient.exists();
|
|
||||||
|
|
||||||
if (blobExists) {
|
const blobExists = await doesAssetExist(blobService, quality, blobName);
|
||||||
console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('Uploading blobs to Azure storage...');
|
if (blobExists) {
|
||||||
await uploadBlob(blobClient, file);
|
console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
|
||||||
const config = await getConfig(quality);
|
return;
|
||||||
|
|
||||||
console.log('Quality config:', config);
|
|
||||||
const asset: Asset = {
|
|
||||||
platform: platform,
|
|
||||||
type: type,
|
|
||||||
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`,
|
|
||||||
hash: sha1hash,
|
|
||||||
sha256hash,
|
|
||||||
size
|
|
||||||
};
|
|
||||||
|
|
||||||
// Remove this if we ever need to rollback fast updates for windows
|
|
||||||
if (/win32/.test(platform)) {
|
|
||||||
asset.supportsFastUpdate = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('Asset:', JSON.stringify(asset, null, ' '));
|
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
|
||||||
// Insiders: nightly build from main
|
|
||||||
const isReleased = (
|
|
||||||
(
|
|
||||||
(quality === 'insider' && /^main$|^refs\/heads\/main$/.test(sourceBranch)) ||
|
|
||||||
(quality === 'rc1' && /^release\/|^refs\/heads\/release\//.test(sourceBranch))
|
|
||||||
) &&
|
|
||||||
/Project Collection Service Accounts|Microsoft.VisualStudio.Services.TFS/.test(queuedBy)
|
|
||||||
);
|
|
||||||
|
|
||||||
const release = {
|
|
||||||
id: commit,
|
|
||||||
timestamp: (new Date()).getTime(),
|
|
||||||
version,
|
|
||||||
isReleased: isReleased,
|
|
||||||
sourceBranch,
|
|
||||||
queuedBy,
|
|
||||||
assets: [] as Array<Asset>,
|
|
||||||
updates: {} as any
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!opts['upload-only']) {
|
|
||||||
release.assets.push(asset);
|
|
||||||
|
|
||||||
if (isUpdate) {
|
|
||||||
release.updates[platform] = type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await createOrUpdate(commit, quality, platform, type, release, asset, isUpdate);
|
|
||||||
}
|
}
|
||||||
|
console.log('Uploading blobs to Azure storage...');
|
||||||
|
|
||||||
|
await uploadBlob(blobService, quality, blobName, file);
|
||||||
|
|
||||||
|
console.log('Blobs successfully uploaded.');
|
||||||
|
|
||||||
|
const config = await getConfig(quality);
|
||||||
|
|
||||||
|
console.log('Quality config:', config);
|
||||||
|
|
||||||
|
const asset: Asset = {
|
||||||
|
platform: platform,
|
||||||
|
type: type,
|
||||||
|
url: `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`,
|
||||||
|
hash: sha1hash,
|
||||||
|
sha256hash,
|
||||||
|
size
|
||||||
|
};
|
||||||
|
|
||||||
|
// Remove this if we ever need to rollback fast updates for windows
|
||||||
|
if (/win32/.test(platform)) {
|
||||||
|
asset.supportsFastUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Asset:', JSON.stringify(asset, null, ' '));
|
||||||
|
|
||||||
|
// {{SQL CARBON EDIT}}
|
||||||
|
// Insiders: nightly build from main
|
||||||
|
const isReleased = (
|
||||||
|
(
|
||||||
|
(quality === 'insider' && /^main$|^refs\/heads\/main$/.test(sourceBranch)) ||
|
||||||
|
(quality === 'rc1' && /^release\/|^refs\/heads\/release\//.test(sourceBranch))
|
||||||
|
) &&
|
||||||
|
/Project Collection Service Accounts|Microsoft.VisualStudio.Services.TFS/.test(queuedBy)
|
||||||
|
);
|
||||||
|
|
||||||
|
const release = {
|
||||||
|
id: commit,
|
||||||
|
timestamp: (new Date()).getTime(),
|
||||||
|
version,
|
||||||
|
isReleased: isReleased,
|
||||||
|
sourceBranch,
|
||||||
|
queuedBy,
|
||||||
|
assets: [] as Array<Asset>,
|
||||||
|
updates: {} as any
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!opts['upload-only']) {
|
||||||
|
release.assets.push(asset);
|
||||||
|
|
||||||
|
if (isUpdate) {
|
||||||
|
release.updates[platform] = type;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await createOrUpdate(commit, quality, platform, type, release, asset, isUpdate);
|
||||||
}
|
}
|
||||||
|
|
||||||
const RETRY_TIMES = 10;
|
const RETRY_TIMES = 10;
|
||||||
|
|||||||
@@ -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,6 +3,8 @@
|
|||||||
* 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,6 +3,8 @@
|
|||||||
* 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,66 +35,25 @@ 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(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['ENABLE_TERRAPIN'], 'true'))
|
condition: and(succeeded(), 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 --frozen-lockfile --check-files && break
|
yarn --cwd build --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
|
||||||
env:
|
displayName: Install build dependencies
|
||||||
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,213 +1,270 @@
|
|||||||
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'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
|
# Setting hardened entitlements is a requirement for:
|
||||||
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
# * Running tests on Big Sur (because Big Sur has additional security precautions)
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
./scripts/test.sh --tfs "Unit Tests"
|
security create-keychain -p pwd $(agent.tempdirectory)/buildagent.keychain
|
||||||
displayName: Run unit tests (Electron)
|
security default-keychain -s $(agent.tempdirectory)/buildagent.keychain
|
||||||
timeoutInMinutes: 15
|
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: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
yarn test-node
|
./scripts/test.sh --build --tfs "Unit Tests"
|
||||||
displayName: Run unit tests (node.js)
|
displayName: Run unit tests (Electron)
|
||||||
timeoutInMinutes: 15
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
DEBUG=*browser* yarn test-browser-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests"
|
yarn test-node --build
|
||||||
displayName: Run unit tests (Browser, Chromium & Webkit)
|
displayName: Run unit tests (node.js)
|
||||||
timeoutInMinutes: 30
|
timeoutInMinutes: 15
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
DEBUG=*browser* yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
|
||||||
./scripts/test.sh --build --tfs "Unit Tests"
|
displayName: Run unit tests (Browser, Chromium & Webkit)
|
||||||
displayName: Run unit tests (Electron)
|
timeoutInMinutes: 30
|
||||||
timeoutInMinutes: 15
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
# Figure out the full absolute path of the product we just built
|
||||||
yarn test-node --build
|
# including the remote server and configure the integration tests
|
||||||
displayName: Run unit tests (node.js)
|
# to run with these builds instead of running out of sources.
|
||||||
timeoutInMinutes: 15
|
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
|
||||||
DEBUG=*browser* yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
|
||||||
displayName: Run unit tests (Browser, Chromium & Webkit)
|
./scripts/test-web-integration.sh --browser webkit
|
||||||
timeoutInMinutes: 30
|
displayName: Run integration tests (Browser, Webkit)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
yarn gulp \
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
compile-extension:configuration-editing \
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
||||||
compile-extension:css-language-features-server \
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
||||||
compile-extension:emmet \
|
./scripts/test-remote-integration.sh
|
||||||
compile-extension:git \
|
displayName: Run integration tests (Remote)
|
||||||
compile-extension:github-authentication \
|
timeoutInMinutes: 20
|
||||||
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') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
./scripts/test-integration.sh --tfs "Integration Tests"
|
ps -ef
|
||||||
displayName: Run integration tests (Electron)
|
displayName: Diagnostics before smoke test run
|
||||||
timeoutInMinutes: 20
|
continueOnError: true
|
||||||
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
# Figure out the full absolute path of the product we just built
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
|
||||||
# including the remote server and configure the integration tests
|
yarn smoketest-no-compile --web --tracing --headless
|
||||||
# to run with these builds instead of running out of sources.
|
timeoutInMinutes: 10
|
||||||
set -e
|
displayName: Run smoke tests (Browser, Chromium)
|
||||||
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)" \
|
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
./scripts/test-web-integration.sh --browser webkit
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
displayName: Run integration tests (Browser, Webkit)
|
yarn smoketest-no-compile --tracing --build "$APP_ROOT/$APP_NAME"
|
||||||
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`"
|
||||||
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
||||||
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)" \
|
yarn smoketest-no-compile --tracing --remote --build "$APP_ROOT/$APP_NAME"
|
||||||
./scripts/test-remote-integration.sh
|
timeoutInMinutes: 20
|
||||||
displayName: Run integration tests (Remote)
|
displayName: Run smoke tests (Remote)
|
||||||
timeoutInMinutes: 20
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
ps -ef
|
||||||
ps -ef
|
displayName: Diagnostics after smoke test run
|
||||||
displayName: Diagnostics before smoke test run
|
continueOnError: true
|
||||||
continueOnError: true
|
condition: succeededOrFailed()
|
||||||
condition: succeededOrFailed()
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: PublishPipelineArtifact@0
|
||||||
- script: |
|
inputs:
|
||||||
set -e
|
artifactName: crash-dump-macos-$(VSCODE_ARCH)
|
||||||
yarn --cwd test/smoke compile
|
targetPath: .build/crashes
|
||||||
displayName: Compile smoke tests
|
displayName: "Publish Crash Reports"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
- script: |
|
# In order to properly symbolify above crash reports
|
||||||
set -e
|
# (if any), we need the compiled native modules too
|
||||||
yarn smoketest-no-compile --tracing
|
- task: PublishPipelineArtifact@0
|
||||||
timeoutInMinutes: 20
|
inputs:
|
||||||
displayName: Run smoke tests (Electron)
|
artifactName: node-modules-macos-$(VSCODE_ARCH)
|
||||||
|
targetPath: node_modules
|
||||||
|
displayName: "Publish Node Modules"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: PublishPipelineArtifact@0
|
||||||
- script: |
|
inputs:
|
||||||
set -e
|
artifactName: logs-macos-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
APP_ROOT=$(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
targetPath: .build/logs
|
||||||
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
displayName: "Publish Log Files"
|
||||||
yarn smoketest-no-compile --tracing --build "$APP_ROOT/$APP_NAME"
|
continueOnError: true
|
||||||
timeoutInMinutes: 20
|
condition: failed()
|
||||||
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,50 +51,6 @@ 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,73 +1,50 @@
|
|||||||
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"
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: AzureKeyVault@1
|
||||||
- task: AzureKeyVault@1
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
inputs:
|
||||||
inputs:
|
azureSubscription: "vscode-builds-subscription"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
KeyVaultName: vscode
|
||||||
KeyVaultName: vscode
|
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
|
||||||
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: DownloadPipelineArtifact@2
|
||||||
- task: DownloadPipelineArtifact@2
|
inputs:
|
||||||
inputs:
|
artifact: Compilation
|
||||||
artifact: Compilation
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
displayName: Download compilation output
|
||||||
displayName: Download compilation output
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
||||||
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
displayName: Extract compilation output
|
||||||
displayName: Extract compilation output
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
cat << EOF > ~/.netrc
|
||||||
cat << EOF > ~/.netrc
|
machine github.com
|
||||||
machine github.com
|
login vscode
|
||||||
login vscode
|
password $(github-distro-mixin-password)
|
||||||
password $(github-distro-mixin-password)
|
EOF
|
||||||
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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
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)"
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git checkout FETCH_HEAD
|
||||||
git checkout FETCH_HEAD
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
displayName: Checkout override commit
|
||||||
displayName: Checkout override commit
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
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: |
|
- script: |
|
||||||
mkdir -p .build
|
mkdir -p .build
|
||||||
@@ -87,6 +64,13 @@ 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
|
||||||
@@ -123,142 +107,115 @@ 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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
# This script brings in the right resources (images, icons, etc) based on the quality (insiders, stable, exploration)
|
||||||
# This script brings in the right resources (images, icons, etc) based on the quality (insiders, stable, exploration)
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
node build/azure-pipelines/mixin
|
||||||
node build/azure-pipelines/mixin
|
displayName: Mix in quality
|
||||||
displayName: Mix in quality
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
|
||||||
yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
|
displayName: Build client
|
||||||
displayName: Build client
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
node build/azure-pipelines/mixin --server
|
||||||
node build/azure-pipelines/mixin --server
|
displayName: Mix in server quality
|
||||||
displayName: Mix in server quality
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
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-darwin-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
|
||||||
yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
|
displayName: Build Server
|
||||||
displayName: Build Server
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
# Setting hardened entitlements is a requirement for:
|
||||||
- script: |
|
# * Apple notarization
|
||||||
set -e
|
# * Running tests on Big Sur (because Big Sur has additional security precautions)
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
- script: |
|
||||||
yarn gulp "transpile-client" "transpile-extensions"
|
set -e
|
||||||
displayName: Transpile
|
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
|
||||||
|
|
||||||
- ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
- script: |
|
||||||
- template: product-build-darwin-test.yml
|
set -e
|
||||||
parameters:
|
pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd
|
||||||
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
|
displayName: Archive build
|
||||||
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 }}
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
# Setting hardened entitlements is a requirement for:
|
set -e
|
||||||
# * 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
|
|
||||||
|
|
||||||
- ${{ 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)) }}:
|
# package Remote Extension Host
|
||||||
- script: |
|
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
|
||||||
set -e
|
|
||||||
pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd
|
|
||||||
displayName: Archive build
|
|
||||||
|
|
||||||
- ${{ 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)) }}:
|
# package Remote Extension Host (Web)
|
||||||
- script: |
|
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
|
||||||
set -e
|
displayName: Prepare to publish servers
|
||||||
|
|
||||||
# package Remote Extension Host
|
- publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
|
||||||
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
|
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
|
||||||
|
displayName: Publish client archive
|
||||||
|
|
||||||
# package Remote Extension Host (Web)
|
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH).zip
|
||||||
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
|
artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned
|
||||||
displayName: Prepare to publish servers
|
displayName: Publish 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)) }}:
|
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web.zip
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned
|
||||||
displayName: Generate SBOM (client)
|
displayName: Publish web server archive
|
||||||
inputs:
|
|
||||||
BuildDropPath: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
|
||||||
PackageName: Visual Studio Code
|
|
||||||
|
|
||||||
- ${{ 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
|
||||||
- publish: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)/_manifest
|
inputs:
|
||||||
displayName: Publish SBOM (client)
|
azureSubscription: "vscode-builds-subscription"
|
||||||
artifact: vscode_client_darwin_$(VSCODE_ARCH)_sbom
|
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: |
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
set -e
|
||||||
displayName: Generate SBOM (server)
|
AZURE_STORAGE_ACCOUNT="ticino" \
|
||||||
inputs:
|
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
|
||||||
BuildDropPath: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
|
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
|
||||||
PackageName: Visual Studio Code Server
|
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'), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
continueOnError: true
|
||||||
|
|
||||||
- ${{ 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: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
- publish: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)/_manifest
|
displayName: Generate SBOM (client)
|
||||||
displayName: Publish SBOM (server)
|
inputs:
|
||||||
artifact: vscode_server_darwin_$(VSCODE_ARCH)_sbom
|
BuildDropPath: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
|
||||||
|
PackageName: Visual Studio Code
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
- ${{ 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)) }}:
|
- publish: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)/_manifest
|
||||||
- publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
|
displayName: Publish SBOM (client)
|
||||||
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
|
artifact: vscode_client_darwin_$(VSCODE_ARCH)_sbom
|
||||||
displayName: Publish client archive
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
- ${{ 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: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH).zip
|
displayName: Generate SBOM (server)
|
||||||
artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned
|
inputs:
|
||||||
displayName: Publish server archive
|
BuildDropPath: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
|
||||||
|
PackageName: Visual Studio Code Server
|
||||||
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
- ${{ 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)) }}:
|
- publish: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)/_manifest
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-darwin-$(VSCODE_ARCH)-web.zip
|
displayName: Publish SBOM (server)
|
||||||
artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned
|
artifact: vscode_server_darwin_$(VSCODE_ARCH)_sbom
|
||||||
displayName: Publish web server archive
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
- ${{ 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,19 +112,18 @@ 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'))
|
||||||
|
|
||||||
# {{SQL CARBON TODO}} Reenable "Run Core Integration Tests"
|
- 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 integration tests
|
||||||
# # including the remote server and configure the integration 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-darwin-x64
|
||||||
# APP_ROOT=$(agent.builddirectory)/azuredatastudio-darwin-x64
|
APP_NAME="`ls $APP_ROOT | head -n 1`"
|
||||||
# APP_NAME="`ls $APP_ROOT | head -n 1`"
|
INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
||||||
# INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME/Contents/MacOS/Electron" \
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-darwin" \
|
||||||
# VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-darwin" \
|
./scripts/test-integration.sh --build --tfs "Integration Tests"
|
||||||
# ./scripts/test-integration.sh --build --tfs "Integration Tests"
|
displayName: Run core integration tests
|
||||||
# displayName: Run core integration tests
|
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
||||||
# condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ pool:
|
|||||||
trigger:
|
trigger:
|
||||||
branches:
|
branches:
|
||||||
include: ["main", "release/*"]
|
include: ["main", "release/*"]
|
||||||
pr: none
|
pr:
|
||||||
|
branches:
|
||||||
|
include: ["main", "release/*"]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
|
|||||||
@@ -118,9 +118,7 @@ steps:
|
|||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
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
|
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
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
|
||||||
displayName: Prebuild
|
displayName: Prebuild
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
|
|||||||
@@ -1,272 +0,0 @@
|
|||||||
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,113 +1,79 @@
|
|||||||
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"
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: AzureKeyVault@1
|
||||||
- task: AzureKeyVault@1
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
inputs:
|
||||||
inputs:
|
azureSubscription: "vscode-builds-subscription"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
KeyVaultName: vscode
|
||||||
KeyVaultName: vscode
|
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
||||||
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: DownloadPipelineArtifact@2
|
||||||
- task: DownloadPipelineArtifact@2
|
inputs:
|
||||||
inputs:
|
artifact: Compilation
|
||||||
artifact: Compilation
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
displayName: Download compilation output
|
||||||
displayName: Download compilation output
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: DownloadPipelineArtifact@2
|
||||||
- task: DownloadPipelineArtifact@2
|
inputs:
|
||||||
inputs:
|
artifact: reh_node_modules-$(VSCODE_ARCH)
|
||||||
artifact: reh_node_modules-$(VSCODE_ARCH)
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
displayName: Download server build dependencies
|
||||||
displayName: Download server build dependencies
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
# Start X server
|
||||||
# Start X server
|
/etc/init.d/xvfb start
|
||||||
/etc/init.d/xvfb start
|
# Start dbus session
|
||||||
# Start dbus session
|
DBUS_LAUNCH_RESULT=$(sudo dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address)
|
||||||
DBUS_LAUNCH_RESULT=$(sudo dbus-daemon --config-file=/usr/share/dbus-1/system.conf --print-address)
|
echo "##vso[task.setvariable variable=DBUS_SESSION_BUS_ADDRESS]$DBUS_LAUNCH_RESULT"
|
||||||
echo "##vso[task.setvariable variable=DBUS_SESSION_BUS_ADDRESS]$DBUS_LAUNCH_RESULT"
|
displayName: Setup system services
|
||||||
displayName: Setup system services
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
||||||
tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
displayName: Extract compilation output
|
||||||
displayName: Extract compilation output
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
cat << EOF > ~/.netrc
|
||||||
cat << EOF > ~/.netrc
|
machine github.com
|
||||||
machine github.com
|
login vscode
|
||||||
login vscode
|
password $(github-distro-mixin-password)
|
||||||
password $(github-distro-mixin-password)
|
EOF
|
||||||
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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
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)"
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git checkout FETCH_HEAD
|
||||||
git checkout FETCH_HEAD
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
displayName: Checkout override commit
|
||||||
displayName: Checkout override commit
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
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: |
|
- 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
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: Cache@2
|
||||||
- task: Cache@2
|
inputs:
|
||||||
inputs:
|
key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
|
||||||
key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash"
|
path: .build/node_modules_cache
|
||||||
path: .build/node_modules_cache
|
cacheHitVar: NODE_MODULES_RESTORED
|
||||||
cacheHitVar: NODE_MODULES_RESTORED
|
displayName: Restore node_modules cache
|
||||||
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
|
||||||
@@ -125,7 +91,6 @@ 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
|
||||||
@@ -138,16 +103,7 @@ steps:
|
|||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
if [ "$NPM_ARCH" = "armv7l" ]; then
|
export npm_config_arch=$(NPM_ARCH)
|
||||||
# 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
|
||||||
@@ -187,13 +143,12 @@ 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'))
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
rm -rf remote/node_modules
|
||||||
rm -rf remote/node_modules
|
tar -xzf $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz --directory $(Build.SourcesDirectory)/remote
|
||||||
tar -xzf $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz --directory $(Build.SourcesDirectory)/remote
|
displayName: Extract server node_modules output
|
||||||
displayName: Extract server node_modules output
|
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
@@ -203,136 +158,267 @@ 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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
node build/azure-pipelines/mixin
|
||||||
node build/azure-pipelines/mixin
|
displayName: Mix in quality
|
||||||
displayName: Mix in quality
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
|
||||||
yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
|
displayName: Build
|
||||||
displayName: Build
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
node build/azure-pipelines/mixin --server
|
||||||
node build/azure-pipelines/mixin --server
|
displayName: Mix in server quality
|
||||||
displayName: Mix in server quality
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
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-linux-$(VSCODE_ARCH)-min-ci
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
|
||||||
yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
|
displayName: Build Server
|
||||||
displayName: Build Server
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
- 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 gulp "transpile-client" "transpile-extensions"
|
displayName: Download Electron and Playwright
|
||||||
displayName: Transpile
|
|
||||||
|
|
||||||
- ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
- script: |
|
||||||
- template: product-build-linux-client-test.yml
|
set -e
|
||||||
parameters:
|
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
|
ELECTRON_ROOT=.build/electron
|
||||||
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
|
sudo chown root $APP_ROOT/chrome-sandbox
|
||||||
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
|
sudo chown root $ELECTRON_ROOT/chrome-sandbox
|
||||||
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
|
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_PUBLISH, true) }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
./scripts/test.sh --build --tfs "Unit Tests"
|
||||||
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
|
displayName: Run unit tests (Electron)
|
||||||
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
|
timeoutInMinutes: 15
|
||||||
displayName: Build deb, rpm packages
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
yarn test-node --build
|
||||||
yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
|
displayName: Run unit tests (node.js)
|
||||||
displayName: Prepare snap package
|
timeoutInMinutes: 15
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- task: UseDotNet@2
|
set -e
|
||||||
inputs:
|
DEBUG=*browser* yarn test-browser-no-install --build --browser chromium --tfs "Browser Unit Tests"
|
||||||
version: 2.x
|
displayName: Run unit tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- task: EsrpClientTool@1
|
# Figure out the full absolute path of the product we just built
|
||||||
displayName: Download ESRPClient
|
# 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
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \
|
||||||
node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" rpm $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm'
|
./scripts/test-web-integration.sh --browser chromium
|
||||||
displayName: Codesign rpm
|
displayName: Run integration tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
VSCODE_ARCH="$(VSCODE_ARCH)" \
|
APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
|
||||||
./build/azure-pipelines/linux/prepare-publish.sh
|
INTEGRATION_TEST_APP_NAME="$APP_NAME" \
|
||||||
displayName: Prepare for Publish
|
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
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
set -e
|
||||||
displayName: Generate SBOM (client)
|
ps -ef
|
||||||
inputs:
|
cat /proc/sys/fs/inotify/max_user_watches
|
||||||
BuildDropPath: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
lsof | wc -l
|
||||||
PackageName: Visual Studio Code
|
displayName: Diagnostics before 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'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- publish: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/_manifest
|
set -e
|
||||||
displayName: Publish SBOM (client)
|
VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)" \
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_sbom
|
yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
displayName: Run smoke tests (Browser, Chromium)
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
set -e
|
||||||
displayName: Generate SBOM (server)
|
APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
inputs:
|
yarn smoketest-no-compile --tracing --build "$APP_PATH"
|
||||||
BuildDropPath: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)
|
timeoutInMinutes: 20
|
||||||
PackageName: Visual Studio Code Server
|
displayName: Run smoke tests (Electron)
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- publish: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)/_manifest
|
set -e
|
||||||
displayName: Publish SBOM (server)
|
APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)
|
||||||
artifact: vscode_server_linux_$(VSCODE_ARCH)_sbom
|
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)
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- publish: $(DEB_PATH)
|
set -e
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_deb-package
|
ps -ef
|
||||||
displayName: Publish deb package
|
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: and(succeededOrFailed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: PublishPipelineArtifact@0
|
||||||
- publish: $(RPM_PATH)
|
inputs:
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_rpm-package
|
artifactName: crash-dump-linux-$(VSCODE_ARCH)
|
||||||
displayName: Publish rpm package
|
targetPath: .build/crashes
|
||||||
|
displayName: "Publish Crash Reports"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
# In order to properly symbolify above crash reports
|
||||||
- publish: $(TARBALL_PATH)
|
# (if any), we need the compiled native modules too
|
||||||
artifact: vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned
|
- task: PublishPipelineArtifact@0
|
||||||
displayName: Publish client archive
|
inputs:
|
||||||
|
artifactName: node-modules-linux-$(VSCODE_ARCH)
|
||||||
|
targetPath: node_modules
|
||||||
|
displayName: "Publish Node Modules"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: PublishPipelineArtifact@0
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz
|
inputs:
|
||||||
artifact: vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned
|
artifactName: logs-linux-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
displayName: Publish server archive
|
targetPath: .build/logs
|
||||||
|
displayName: "Publish Log Files"
|
||||||
|
continueOnError: true
|
||||||
|
condition: and(failed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: PublishTestResults@2
|
||||||
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz
|
displayName: Publish Tests Results
|
||||||
artifact: vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned
|
inputs:
|
||||||
displayName: Publish web server archive
|
testResultsFiles: "*-results.xml"
|
||||||
|
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
|
||||||
|
condition: and(succeededOrFailed(), eq(variables['VSCODE_ARCH'], 'x64'), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- script: |
|
||||||
- task: PublishPipelineArtifact@0
|
set -e
|
||||||
displayName: "Publish Pipeline Artifact"
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
|
||||||
inputs:
|
yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
|
||||||
artifactName: "snap-$(VSCODE_ARCH)"
|
displayName: Build deb, rpm packages
|
||||||
targetPath: .build/linux/snap-tarball
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
|
- 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,58 +1,49 @@
|
|||||||
parameters:
|
|
||||||
- name: VSCODE_QUALITY
|
|
||||||
type: string
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "16.x"
|
versionSpec: "16.x"
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: AzureKeyVault@1
|
||||||
- task: AzureKeyVault@1
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
inputs:
|
||||||
inputs:
|
azureSubscription: "vscode-builds-subscription"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
KeyVaultName: vscode
|
||||||
KeyVaultName: vscode
|
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
||||||
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: Docker@1
|
||||||
- task: Docker@1
|
displayName: "Pull Docker image"
|
||||||
displayName: "Pull Docker image"
|
inputs:
|
||||||
inputs:
|
azureSubscriptionEndpoint: "vscode-builds-subscription"
|
||||||
azureSubscriptionEndpoint: "vscode-builds-subscription"
|
azureContainerRegistry: vscodehub.azurecr.io
|
||||||
azureContainerRegistry: vscodehub.azurecr.io
|
command: "Run an image"
|
||||||
command: "Run an image"
|
imageName: "vscode-linux-build-agent:centos7-devtoolset8-arm64"
|
||||||
imageName: "vscode-linux-build-agent:centos7-devtoolset8-arm64"
|
containerCommand: uname
|
||||||
containerCommand: uname
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
cat << EOF > ~/.netrc
|
||||||
cat << EOF > ~/.netrc
|
machine github.com
|
||||||
machine github.com
|
login vscode
|
||||||
login vscode
|
password $(github-distro-mixin-password)
|
||||||
password $(github-distro-mixin-password)
|
EOF
|
||||||
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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
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)"
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git checkout FETCH_HEAD
|
||||||
git checkout FETCH_HEAD
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
displayName: Checkout override commit
|
||||||
displayName: Checkout override commit
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
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: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
@@ -70,19 +61,17 @@ 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'))
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||||
- script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
displayName: Register Docker QEMU
|
||||||
displayName: Register Docker QEMU
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
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
|
||||||
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
|
displayName: Install dependencies via qemu
|
||||||
displayName: Install dependencies via qemu
|
env:
|
||||||
env:
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
|
|||||||
@@ -136,49 +136,48 @@ 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'))
|
||||||
|
|
||||||
# {{SQL CARBON TODO}} Reenable "Run Extension Unit Tests (Continue on Error)" and "Run Extension Unit Tests (Fail on Error)" and "Archive Logs"
|
- 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 (Continue on Error)
|
||||||
# displayName: Run Extension Unit Tests (Continue on Error)
|
continueOnError: true
|
||||||
# continueOnError: true
|
condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), eq(variables['EXTENSION_UNIT_TESTS_FAIL_ON_ERROR'], 'false')))
|
||||||
# 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: |
|
- 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');
|
||||||
@@ -43,7 +43,7 @@ async function mixinClient(quality) {
|
|||||||
else {
|
else {
|
||||||
fancyLog(ansiColors.blue('[mixin]'), 'Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));
|
fancyLog(ansiColors.blue('[mixin]'), 'Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));
|
||||||
}
|
}
|
||||||
return { webBuiltInExtensions: originalProduct.webBuiltInExtensions, ...o, builtInExtensions };
|
return Object.assign(Object.assign({ webBuiltInExtensions: originalProduct.webBuiltInExtensions }, o), { builtInExtensions });
|
||||||
}))
|
}))
|
||||||
.pipe(productJsonFilter.restore)
|
.pipe(productJsonFilter.restore)
|
||||||
.pipe(es.mapSync((f) => {
|
.pipe(es.mapSync((f) => {
|
||||||
@@ -64,7 +64,7 @@ function mixinServer(quality) {
|
|||||||
fancyLog(ansiColors.blue('[mixin]'), `Mixing in server:`);
|
fancyLog(ansiColors.blue('[mixin]'), `Mixing in server:`);
|
||||||
const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8'));
|
const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8'));
|
||||||
const serverProductJson = JSON.parse(fs.readFileSync(serverProductJsonPath, 'utf8'));
|
const serverProductJson = JSON.parse(fs.readFileSync(serverProductJsonPath, 'utf8'));
|
||||||
fs.writeFileSync('product.json', JSON.stringify({ ...originalProduct, ...serverProductJson }, undefined, '\t'));
|
fs.writeFileSync('product.json', JSON.stringify(Object.assign(Object.assign({}, originalProduct), serverProductJson), undefined, '\t'));
|
||||||
fancyLog(ansiColors.blue('[mixin]'), 'product.json', ansiColors.green('✔︎'));
|
fancyLog(ansiColors.blue('[mixin]'), 'product.json', ansiColors.green('✔︎'));
|
||||||
}
|
}
|
||||||
function main() {
|
function main() {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
* 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';
|
||||||
|
|||||||
@@ -1,59 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,189 +0,0 @@
|
|||||||
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,10 +8,6 @@ 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)
|
||||||
@@ -108,11 +104,9 @@ 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)) }}
|
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)) }}
|
||||||
- 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
|
||||||
@@ -168,8 +162,6 @@ 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
|
||||||
@@ -177,60 +169,13 @@ stages:
|
|||||||
- Compile
|
- Compile
|
||||||
pool: vscode-1es-windows
|
pool: vscode-1es-windows
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
|
- ${{ if eq(parameters.VSCODE_BUILD_WIN32, 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
|
||||||
@@ -239,12 +184,6 @@ 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
|
||||||
@@ -253,12 +192,6 @@ 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
|
||||||
@@ -273,17 +206,13 @@ 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 and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
|
- ${{ if eq(parameters.VSCODE_BUILD_LINUX, 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
|
||||||
@@ -292,54 +221,7 @@ stages:
|
|||||||
- LinuxServerDependencies
|
- LinuxServerDependencies
|
||||||
pool: vscode-1es-linux
|
pool: vscode-1es-linux
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
|
- ${{ if eq(parameters.VSCODE_BUILD_LINUX, 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:
|
||||||
@@ -348,12 +230,6 @@ 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
|
||||||
@@ -373,12 +249,6 @@ 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)) }}:
|
||||||
@@ -399,12 +269,6 @@ 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)) }}:
|
||||||
@@ -432,6 +296,13 @@ 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:
|
||||||
@@ -441,76 +312,20 @@ stages:
|
|||||||
variables:
|
variables:
|
||||||
BUILDSECMON_OPT_IN: true
|
BUILDSECMON_OPT_IN: true
|
||||||
jobs:
|
jobs:
|
||||||
- ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
|
- ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
|
||||||
- job: macOSUnitTest
|
- job: macOSTest
|
||||||
displayName: Unit Tests
|
|
||||||
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-test.yml
|
||||||
parameters:
|
- ${{ if eq(variables['VSCODE_CIBUILD'], false) }}:
|
||||||
VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
|
- job: macOS
|
||||||
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
|
||||||
@@ -527,14 +342,7 @@ stages:
|
|||||||
VSCODE_ARCH: arm64
|
VSCODE_ARCH: arm64
|
||||||
steps:
|
steps:
|
||||||
- template: darwin/product-build-darwin.yml
|
- template: darwin/product-build-darwin.yml
|
||||||
parameters:
|
- ${{ if eq(variables['VSCODE_CIBUILD'], false) }}:
|
||||||
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
|
||||||
@@ -554,8 +362,7 @@ 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
|
||||||
@@ -565,19 +372,6 @@ 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,47 +1,39 @@
|
|||||||
parameters:
|
|
||||||
- name: VSCODE_QUALITY
|
|
||||||
type: string
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- task: NodeTool@0
|
- task: NodeTool@0
|
||||||
inputs:
|
inputs:
|
||||||
versionSpec: "16.x"
|
versionSpec: "16.x"
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: AzureKeyVault@1
|
||||||
- task: AzureKeyVault@1
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
inputs:
|
||||||
inputs:
|
azureSubscription: "vscode-builds-subscription"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
KeyVaultName: vscode
|
||||||
KeyVaultName: vscode
|
SecretsFilter: "github-distro-mixin-password"
|
||||||
SecretsFilter: "github-distro-mixin-password"
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
cat << EOF > ~/.netrc
|
||||||
cat << EOF > ~/.netrc
|
machine github.com
|
||||||
machine github.com
|
login vscode
|
||||||
login vscode
|
password $(github-distro-mixin-password)
|
||||||
password $(github-distro-mixin-password)
|
EOF
|
||||||
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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $VSCODE_DISTRO_REF
|
||||||
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)"
|
||||||
echo "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
git checkout FETCH_HEAD
|
||||||
git checkout FETCH_HEAD
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
displayName: Checkout override commit
|
||||||
displayName: Checkout override commit
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
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: |
|
- script: |
|
||||||
mkdir -p .build
|
mkdir -p .build
|
||||||
@@ -102,12 +94,11 @@ 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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
# Mixin must run before optimize, because the CSS loader will inline small SVGs
|
||||||
# Mixin must run before optimize, because the CSS loader will inline small SVGs
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
node build/azure-pipelines/mixin
|
||||||
node build/azure-pipelines/mixin
|
displayName: Mix in quality
|
||||||
displayName: Mix in quality
|
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
set -e
|
set -e
|
||||||
@@ -116,65 +107,59 @@ steps:
|
|||||||
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
GITHUB_TOKEN: "$(github-distro-mixin-password)"
|
||||||
displayName: Compile & Hygiene
|
displayName: Compile & Hygiene
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
yarn --cwd test/smoke compile
|
||||||
yarn --cwd test/smoke compile
|
yarn --cwd test/integration/browser compile
|
||||||
yarn --cwd test/integration/browser compile
|
displayName: Compile test suites
|
||||||
displayName: Compile test suites
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: AzureCLI@2
|
||||||
- task: AzureCLI@2
|
inputs:
|
||||||
inputs:
|
azureSubscription: "vscode-builds-subscription"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
scriptType: pscore
|
||||||
scriptType: pscore
|
scriptLocation: inlineScript
|
||||||
scriptLocation: inlineScript
|
addSpnToEnvironment: true
|
||||||
addSpnToEnvironment: true
|
inlineScript: |
|
||||||
inlineScript: |
|
Write-Host "##vso[task.setvariable variable=AZURE_TENANT_ID]$env:tenantId"
|
||||||
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_ID]$env:servicePrincipalId"
|
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
|
||||||
Write-Host "##vso[task.setvariable variable=AZURE_CLIENT_SECRET;issecret=true]$env:servicePrincipalKey"
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
AZURE_STORAGE_ACCOUNT="ticino" \
|
||||||
AZURE_STORAGE_ACCOUNT="ticino" \
|
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
|
||||||
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
|
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
|
||||||
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
|
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
|
||||||
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
|
node build/azure-pipelines/upload-sourcemaps
|
||||||
node build/azure-pipelines/upload-sourcemaps
|
displayName: Upload sourcemaps
|
||||||
displayName: Upload sourcemaps
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -
|
||||||
set -
|
./build/azure-pipelines/common/extract-telemetry.sh
|
||||||
./build/azure-pipelines/common/extract-telemetry.sh
|
displayName: Extract Telemetry
|
||||||
displayName: Extract Telemetry
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
tar -cz --ignore-failed-read -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out
|
||||||
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
|
||||||
displayName: Compress compilation artifact
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: PublishPipelineArtifact@1
|
||||||
- task: PublishPipelineArtifact@1
|
inputs:
|
||||||
inputs:
|
targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
||||||
targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz
|
artifactName: Compilation
|
||||||
artifactName: Compilation
|
displayName: Publish compilation artifact
|
||||||
displayName: Publish compilation artifact
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- script: |
|
||||||
- script: |
|
set -e
|
||||||
set -e
|
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
||||||
VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
|
yarn download-builtin-extensions-cg
|
||||||
yarn download-builtin-extensions-cg
|
displayName: Built-in extensions component details
|
||||||
displayName: Built-in extensions component details
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
|
||||||
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
|
displayName: "Component Detection"
|
||||||
displayName: "Component Detection"
|
inputs:
|
||||||
inputs:
|
sourceScanPath: $(Build.SourcesDirectory)
|
||||||
sourceScanPath: $(Build.SourcesDirectory)
|
continueOnError: true
|
||||||
continueOnError: true
|
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ $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,7 +109,6 @@ 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,6 +3,8 @@
|
|||||||
* 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,6 +3,8 @@
|
|||||||
* 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';
|
||||||
|
|||||||
@@ -48,7 +48,6 @@ stages:
|
|||||||
variables:
|
variables:
|
||||||
NPM_CONFIG_ARCH: arm64
|
NPM_CONFIG_ARCH: arm64
|
||||||
VSCODE_ARCH: arm64
|
VSCODE_ARCH: arm64
|
||||||
AZDATA_RUNTIME: OSX_ARM64
|
|
||||||
# Do not run tests for arm64 build
|
# Do not run tests for arm64 build
|
||||||
RUN_TESTS: false
|
RUN_TESTS: false
|
||||||
RUN_SMOKE_TESTS: false
|
RUN_SMOKE_TESTS: false
|
||||||
@@ -103,7 +102,7 @@ stages:
|
|||||||
steps:
|
steps:
|
||||||
- template: linux/sql-product-build-linux.yml
|
- template: linux/sql-product-build-linux.yml
|
||||||
parameters:
|
parameters:
|
||||||
extensionsToUnitTest: ["admin-tool-ext-win", "agent", "azcli", "azurecore", "cms", "dacpac", "datavirtualization", "data-workspace", "import", "machine-learning", "notebook", "resource-deployment", "schema-compare", "sql-bindings", "sql-database-projects"]
|
extensionsToUnitTest: ["admin-tool-ext-win", "agent", "azcli", "azurecore", "cms", "dacpac", "data-workspace", "import", "machine-learning", "notebook", "resource-deployment", "schema-compare", "sql-bindings", "sql-database-projects"]
|
||||||
timeoutInMinutes: 90
|
timeoutInMinutes: 90
|
||||||
|
|
||||||
- stage: Windows
|
- stage: Windows
|
||||||
@@ -124,7 +123,6 @@ stages:
|
|||||||
- job: Windows_ARM64
|
- job: Windows_ARM64
|
||||||
variables:
|
variables:
|
||||||
VSCODE_ARCH: arm64
|
VSCODE_ARCH: arm64
|
||||||
AZDATA_RUNTIME: Windows_ARM64
|
|
||||||
condition: and(succeeded(), eq(variables['VSCODE_BUILD_WIN32_ARM64'], 'true'))
|
condition: and(succeeded(), eq(variables['VSCODE_BUILD_WIN32_ARM64'], 'true'))
|
||||||
steps:
|
steps:
|
||||||
- template: win32/sql-product-build-win32.yml
|
- template: win32/sql-product-build-win32.yml
|
||||||
|
|||||||
@@ -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,6 +3,8 @@
|
|||||||
* 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'));
|
||||||
}, 60 * 1000);
|
}, 12 * 1000);
|
||||||
codeProc.on('error', err => {
|
codeProc.on('error', err => {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
reject(err);
|
reject(err);
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
* 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';
|
||||||
@@ -61,7 +63,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'));
|
||||||
}, 60 * 1000);
|
}, 12 * 1000);
|
||||||
|
|
||||||
codeProc.on('error', err => {
|
codeProc.on('error', err => {
|
||||||
clearTimeout(timer);
|
clearTimeout(timer);
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
"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']);
|
||||||
@@ -20,8 +18,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 };
|
||||||
}
|
}
|
||||||
@@ -65,11 +63,7 @@ function main() {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Get extension id and use that as the key
|
key = 'vscode.' + file.relative.split('/')[0];
|
||||||
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,12 +82,7 @@ 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 };
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
@@ -118,3 +113,4 @@ 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,6 +3,8 @@
|
|||||||
* 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,7 +163,6 @@ 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
|
||||||
|
|||||||
@@ -1,247 +0,0 @@
|
|||||||
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,21 +1,4 @@
|
|||||||
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"
|
||||||
@@ -25,58 +8,51 @@ steps:
|
|||||||
versionSpec: "3.x"
|
versionSpec: "3.x"
|
||||||
addToPath: true
|
addToPath: true
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: AzureKeyVault@1
|
||||||
- task: AzureKeyVault@1
|
displayName: "Azure Key Vault: Get Secrets"
|
||||||
displayName: "Azure Key Vault: Get Secrets"
|
inputs:
|
||||||
inputs:
|
azureSubscription: "vscode-builds-subscription"
|
||||||
azureSubscription: "vscode-builds-subscription"
|
KeyVaultName: vscode
|
||||||
KeyVaultName: vscode
|
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
||||||
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: DownloadPipelineArtifact@2
|
||||||
- task: DownloadPipelineArtifact@2
|
inputs:
|
||||||
inputs:
|
artifact: Compilation
|
||||||
artifact: Compilation
|
path: $(Build.ArtifactStagingDirectory)
|
||||||
path: $(Build.ArtifactStagingDirectory)
|
displayName: Download compilation output
|
||||||
displayName: Download compilation output
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- task: ExtractFiles@1
|
||||||
- task: ExtractFiles@1
|
displayName: Extract compilation output
|
||||||
displayName: Extract compilation output
|
inputs:
|
||||||
inputs:
|
archiveFilePatterns: "$(Build.ArtifactStagingDirectory)/compilation.tar.gz"
|
||||||
archiveFilePatterns: "$(Build.ArtifactStagingDirectory)/compilation.tar.gz"
|
cleanDestinationFolder: false
|
||||||
cleanDestinationFolder: false
|
|
||||||
|
- powershell: |
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
- powershell: |
|
$ErrorActionPreference = "Stop"
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
"machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
|
||||||
$ErrorActionPreference = "Stop"
|
|
||||||
"machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
|
exec { git config user.email "vscode@microsoft.com" }
|
||||||
|
exec { git config user.name "VSCode" }
|
||||||
exec { git config user.email "vscode@microsoft.com" }
|
displayName: Prepare tooling
|
||||||
exec { git config user.name "VSCode" }
|
|
||||||
displayName: Prepare tooling
|
- powershell: |
|
||||||
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
$ErrorActionPreference = "Stop"
|
||||||
- powershell: |
|
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) }
|
||||||
$ErrorActionPreference = "Stop"
|
Write-Host "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
||||||
|
exec { git checkout FETCH_HEAD }
|
||||||
exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) }
|
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
||||||
Write-Host "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
|
displayName: Checkout override commit
|
||||||
exec { git checkout FETCH_HEAD }
|
|
||||||
condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
|
- powershell: |
|
||||||
displayName: Checkout override commit
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") }
|
||||||
- powershell: |
|
displayName: Merge distro
|
||||||
. 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
|
||||||
@@ -128,176 +104,291 @@ 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
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
exec { node build/azure-pipelines/mixin }
|
||||||
exec { node build/azure-pipelines/mixin }
|
displayName: Mix in quality
|
||||||
displayName: Mix in quality
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
exec { node build\lib\policies }
|
exec { yarn npm-run-all -lp "electron $(VSCODE_ARCH)" }
|
||||||
displayName: Generate Group Policy definitions
|
displayName: Download Electron
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" }
|
||||||
exec { yarn gulp "transpile-client" "transpile-extensions" }
|
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)"
|
||||||
displayName: Transpile
|
displayName: Build
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" }
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" }
|
displayName: Prepare Package
|
||||||
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)"
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
displayName: Build
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
exec { node build/azure-pipelines/mixin --server }
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
displayName: Mix in quality
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" }
|
|
||||||
displayName: Prepare Package
|
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
exec { node build/azure-pipelines/mixin --server }
|
exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" }
|
||||||
displayName: Mix in quality
|
exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" }
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
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'))
|
||||||
|
|
||||||
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
||||||
$env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
|
exec { yarn npm-run-all -lp "playwright-install" }
|
||||||
exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" }
|
displayName: Download Playwright
|
||||||
exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" }
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
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'))
|
|
||||||
|
|
||||||
- ${{ if or(eq(parameters.VSCODE_RUN_UNIT_TESTS, true), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true), eq(parameters.VSCODE_RUN_SMOKE_TESTS, true)) }}:
|
- powershell: |
|
||||||
- template: product-build-win32-test.yml
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
parameters:
|
$ErrorActionPreference = "Stop"
|
||||||
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
|
exec { yarn electron $(VSCODE_ARCH) }
|
||||||
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
|
exec { .\scripts\test.bat --build --tfs "Unit Tests" }
|
||||||
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
|
displayName: Run unit tests (Electron)
|
||||||
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
|
timeoutInMinutes: 15
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- task: UseDotNet@2
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
inputs:
|
$ErrorActionPreference = "Stop"
|
||||||
version: 3.x
|
exec { yarn test-node --build }
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
displayName: Run unit tests (node.js)
|
||||||
|
timeoutInMinutes: 15
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- task: EsrpClientTool@1
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
displayName: Download ESRPClient
|
$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
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- powershell: |
|
# Figure out the full absolute path of the product we just built
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
# including the remote server and configure the integration tests
|
||||||
$ErrorActionPreference = "Stop"
|
# to run with these builds instead of running out of sources.
|
||||||
$EsrpClientTool = (gci -directory -filter EsrpClientTool_* $(Agent.RootDirectory)\_tasks | Select-Object -last 1).FullName
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
$EsrpCliZip = (gci -recurse -filter esrpcli.*.zip $EsrpClientTool | Select-Object -last 1).FullName
|
$ErrorActionPreference = "Stop"
|
||||||
mkdir -p $(Agent.TempDirectory)\esrpcli
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
Expand-Archive -Path $EsrpCliZip -DestinationPath $(Agent.TempDirectory)\esrpcli
|
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
|
||||||
$EsrpCliDllPath = (gci -recurse -filter esrpcli.dll $(Agent.TempDirectory)\esrpcli | Select-Object -last 1).FullName
|
$AppNameShort = $AppProductJson.nameShort
|
||||||
echo "##vso[task.setvariable variable=EsrpCliDllPath]$EsrpCliDllPath"
|
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: Find ESRP CLI
|
displayName: Run integration tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
exec { $env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)"; .\scripts\test-web-integration.bat --browser firefox }
|
||||||
exec { node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.dll,*.exe,*.node' }
|
displayName: Run integration tests (Browser, Firefox)
|
||||||
displayName: Codesign
|
timeoutInMinutes: 20
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-archive" }
|
$AppProductJson = Get-Content -Raw -Path "$AppRoot\resources\app\product.json" | ConvertFrom-Json
|
||||||
displayName: Package archive
|
$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
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
exec {.\build\azure-pipelines\win32\listprocesses.bat }
|
||||||
$ErrorActionPreference = "Stop"
|
displayName: Diagnostics before smoke test run
|
||||||
$env:ESRPPKI = "$(ESRP-PKI)"
|
continueOnError: true
|
||||||
$env:ESRPAADUsername = "$(esrp-aad-username)"
|
condition: and(succeededOrFailed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
$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
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- powershell: |
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
$ErrorActionPreference = "Stop"
|
||||||
$ErrorActionPreference = "Stop"
|
$env:VSCODE_REMOTE_SERVER_PATH = "$(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)"
|
||||||
.\build\azure-pipelines\win32\prepare-publish.ps1
|
exec { yarn smoketest-no-compile --web --tracing --headless }
|
||||||
displayName: Publish
|
displayName: Run smoke tests (Browser, Chromium)
|
||||||
|
timeoutInMinutes: 10
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
displayName: Generate SBOM (client)
|
$ErrorActionPreference = "Stop"
|
||||||
inputs:
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
BuildDropPath: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)
|
exec { yarn smoketest-no-compile --tracing --build "$AppRoot" }
|
||||||
PackageName: Visual Studio Code
|
displayName: Run smoke tests (Electron)
|
||||||
|
timeoutInMinutes: 20
|
||||||
|
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- publish: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/_manifest
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
displayName: Publish SBOM (client)
|
$ErrorActionPreference = "Stop"
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_sbom
|
$AppRoot = "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
|
||||||
|
$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'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- powershell: |
|
||||||
- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
displayName: Generate SBOM (server)
|
exec {.\build\azure-pipelines\win32\listprocesses.bat }
|
||||||
inputs:
|
displayName: Diagnostics after smoke test run
|
||||||
BuildDropPath: $(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)
|
continueOnError: true
|
||||||
PackageName: Visual Studio Code Server
|
condition: and(succeededOrFailed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: PublishPipelineArtifact@0
|
||||||
- publish: $(agent.builddirectory)/vscode-server-win32-$(VSCODE_ARCH)/_manifest
|
inputs:
|
||||||
displayName: Publish SBOM (server)
|
artifactName: crash-dump-windows-$(VSCODE_ARCH)
|
||||||
artifact: vscode_server_win32_$(VSCODE_ARCH)_sbom
|
targetPath: .build\crashes
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
displayName: "Publish Crash Reports"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
# In order to properly symbolify above crash reports
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\$(ARCHIVE_NAME)
|
# (if any), we need the compiled native modules too
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_archive
|
- task: PublishPipelineArtifact@0
|
||||||
displayName: Publish archive
|
inputs:
|
||||||
|
artifactName: node-modules-windows-$(VSCODE_ARCH)
|
||||||
|
targetPath: node_modules
|
||||||
|
displayName: "Publish Node Modules"
|
||||||
|
continueOnError: true
|
||||||
|
condition: failed()
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: PublishPipelineArtifact@0
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\$(SYSTEM_SETUP_NAME)
|
inputs:
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_setup
|
artifactName: logs-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
|
||||||
displayName: Publish system setup
|
targetPath: .build\logs
|
||||||
|
displayName: "Publish Log Files"
|
||||||
|
continueOnError: true
|
||||||
|
condition: and(failed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: PublishTestResults@2
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\user-setup\$(USER_SETUP_NAME)
|
displayName: Publish Tests Results
|
||||||
artifact: vscode_client_win32_$(VSCODE_ARCH)_user-setup
|
inputs:
|
||||||
displayName: Publish user setup
|
testResultsFiles: "*-results.xml"
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
searchFolder: "$(Build.ArtifactStagingDirectory)/test-results"
|
||||||
|
condition: and(succeededOrFailed(), eq(variables['VSCODE_STEP_ON_IT'], 'false'), ne(variables['VSCODE_ARCH'], 'arm64'))
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: UseDotNet@2
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH).zip
|
inputs:
|
||||||
artifact: vscode_server_win32_$(VSCODE_ARCH)_archive
|
version: 3.x
|
||||||
displayName: Publish server archive
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
|
||||||
|
|
||||||
- ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
|
- task: EsrpClientTool@1
|
||||||
- publish: $(System.DefaultWorkingDirectory)\.build\vscode-server-win32-$(VSCODE_ARCH)-web.zip
|
displayName: Download ESRPClient
|
||||||
artifact: vscode_web_win32_$(VSCODE_ARCH)_archive
|
condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
|
||||||
displayName: Publish web server archive
|
|
||||||
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
|
- powershell: |
|
||||||
|
. 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'))
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ steps:
|
|||||||
inputs:
|
inputs:
|
||||||
azureSubscription: 'ClientToolsInfra_670062 (88d5392f-a34f-4769-b405-f597fc533613)'
|
azureSubscription: 'ClientToolsInfra_670062 (88d5392f-a34f-4769-b405-f597fc533613)'
|
||||||
KeyVaultName: SqlToolsSecretStore
|
KeyVaultName: SqlToolsSecretStore
|
||||||
SecretsFilter: 'ads-integration-test-azure-server,ads-integration-test-azure-server-password,ads-integration-test-azure-server-username,ads-integration-test-standalone-server,ads-integration-test-standalone-server-password,ads-integration-test-standalone-server-username,ads-integration-test-standalone-server-2019,ads-integration-test-standalone-server-password-2019,ads-integration-test-standalone-server-username-2019'
|
SecretsFilter: 'ads-integration-test-azure-server,ads-integration-test-azure-server-password,ads-integration-test-azure-server-username,ads-integration-test-bdc-server,ads-integration-test-bdc-server-password,ads-integration-test-bdc-server-username,ads-integration-test-standalone-server,ads-integration-test-standalone-server-password,ads-integration-test-standalone-server-username,ads-integration-test-standalone-server-2019,ads-integration-test-standalone-server-password-2019,ads-integration-test-standalone-server-username-2019'
|
||||||
|
|
||||||
- powershell: |
|
- powershell: |
|
||||||
. build/azure-pipelines/win32/exec.ps1
|
. build/azure-pipelines/win32/exec.ps1
|
||||||
@@ -54,6 +54,9 @@ steps:
|
|||||||
condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), ne(variables['RUN_INTEGRATION_TESTS'], 'false')))
|
condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), ne(variables['RUN_INTEGRATION_TESTS'], 'false')))
|
||||||
displayName: Run stable tests
|
displayName: Run stable tests
|
||||||
env:
|
env:
|
||||||
|
BDC_BACKEND_USERNAME: $(ads-integration-test-bdc-server-username)
|
||||||
|
BDC_BACKEND_PWD: $(ads-integration-test-bdc-server-password)
|
||||||
|
BDC_BACKEND_HOSTNAME: $(ads-integration-test-bdc-server)
|
||||||
STANDALONE_SQL_USERNAME: $(ads-integration-test-standalone-server-username)
|
STANDALONE_SQL_USERNAME: $(ads-integration-test-standalone-server-username)
|
||||||
STANDALONE_SQL_PWD: $(ads-integration-test-standalone-server-password)
|
STANDALONE_SQL_PWD: $(ads-integration-test-standalone-server-password)
|
||||||
STANDALONE_SQL: $(ads-integration-test-standalone-server)
|
STANDALONE_SQL: $(ads-integration-test-standalone-server)
|
||||||
|
|||||||
@@ -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");
|
||||||
@@ -28,16 +28,17 @@ async function main() {
|
|||||||
const outAppPath = path.join(buildDir, `azuredatastudio-darwin-${arch}`, appName); // {{SQL CARBON EDIT}} - CHANGE VSCode to azuredatastudio
|
const outAppPath = path.join(buildDir, `azuredatastudio-darwin-${arch}`, appName); // {{SQL CARBON EDIT}} - CHANGE VSCode to azuredatastudio
|
||||||
const productJsonPath = path.resolve(outAppPath, 'Contents', 'Resources', 'app', 'product.json');
|
const productJsonPath = path.resolve(outAppPath, 'Contents', 'Resources', 'app', 'product.json');
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
// STS binaries for x64 and arm64 have different file count and cannot be combined
|
// Current STS arm64 builds doesn't work on osx-arm64, we need to use the x64 version of STS on osx-arm64 until the issue is fixed.
|
||||||
// Remove them from the package before the makeUniversalApp step and copy them to the universal package after it.
|
// Tracked by: https://github.com/microsoft/azuredatastudio/issues/20775
|
||||||
|
// makeUniversalApp function will complain if the x64 ADS and arm64 ADS have the same STS binaries, to workaround the issue, we need
|
||||||
|
// to delete STS from both of them and then copy it to the universal app.
|
||||||
const stsPath = '/Contents/Resources/app/extensions/mssql/sqltoolsservice';
|
const stsPath = '/Contents/Resources/app/extensions/mssql/sqltoolsservice';
|
||||||
const tempSTSDir = path.join(buildDir, 'sqltoolsservice');
|
const tempSTSDir = path.join(buildDir, 'sqltoolsservice');
|
||||||
const x64STSDir = path.join(x64AppPath, stsPath);
|
const x64STSDir = path.join(x64AppPath, stsPath);
|
||||||
const arm64STSDir = path.join(arm64AppPath, stsPath);
|
const arm64STSDir = path.join(arm64AppPath, stsPath);
|
||||||
const targetSTSDirs = [x64STSDir, arm64STSDir];
|
const targetSTSDirs = [x64STSDir, arm64STSDir];
|
||||||
// backup the STS folders to a temporary directory, later they will be copied to the universal app directory.
|
// backup the x64 STS to a temporary directory, later it will be copied to the universal app directory.
|
||||||
await fs.copy(x64STSDir, tempSTSDir);
|
await fs.copy(x64STSDir, tempSTSDir);
|
||||||
await fs.copy(arm64STSDir, tempSTSDir);
|
|
||||||
// delete STS directories from both x64 ADS and arm64 ADS.
|
// delete STS directories from both x64 ADS and arm64 ADS.
|
||||||
console.debug(`Removing SqlToolsService folders.`);
|
console.debug(`Removing SqlToolsService folders.`);
|
||||||
targetSTSDirs.forEach(async (dir) => {
|
targetSTSDirs.forEach(async (dir) => {
|
||||||
@@ -71,7 +72,7 @@ async function main() {
|
|||||||
outAppPath,
|
outAppPath,
|
||||||
force: true
|
force: true
|
||||||
});
|
});
|
||||||
const productJson = await fs.readJson(productJsonPath);
|
let productJson = await fs.readJson(productJsonPath);
|
||||||
Object.assign(productJson, {
|
Object.assign(productJson, {
|
||||||
darwinUniversalAssetId: 'darwin-universal'
|
darwinUniversalAssetId: 'darwin-universal'
|
||||||
});
|
});
|
||||||
@@ -88,8 +89,7 @@ async function main() {
|
|||||||
}
|
}
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
console.debug(`Copying SqlToolsService to the universal app folder.`);
|
console.debug(`Copying SqlToolsService to the universal app folder.`);
|
||||||
await fs.copy(path.join(tempSTSDir, 'OSX'), path.join(outAppPath, stsPath, 'OSX'), { overwrite: true });
|
await fs.copy(tempSTSDir, path.join(outAppPath, stsPath), { overwrite: true });
|
||||||
await fs.copy(path.join(tempSTSDir, 'OSX_ARM64'), path.join(outAppPath, stsPath, 'OSX_ARM64'), { overwrite: true });
|
|
||||||
}
|
}
|
||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
main().catch(err => {
|
main().catch(err => {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
* 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';
|
||||||
@@ -32,16 +34,17 @@ async function main() {
|
|||||||
const productJsonPath = path.resolve(outAppPath, 'Contents', 'Resources', 'app', 'product.json');
|
const productJsonPath = path.resolve(outAppPath, 'Contents', 'Resources', 'app', 'product.json');
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
// STS binaries for x64 and arm64 have different file count and cannot be combined
|
// Current STS arm64 builds doesn't work on osx-arm64, we need to use the x64 version of STS on osx-arm64 until the issue is fixed.
|
||||||
// Remove them from the package before the makeUniversalApp step and copy them to the universal package after it.
|
// Tracked by: https://github.com/microsoft/azuredatastudio/issues/20775
|
||||||
|
// makeUniversalApp function will complain if the x64 ADS and arm64 ADS have the same STS binaries, to workaround the issue, we need
|
||||||
|
// to delete STS from both of them and then copy it to the universal app.
|
||||||
const stsPath = '/Contents/Resources/app/extensions/mssql/sqltoolsservice';
|
const stsPath = '/Contents/Resources/app/extensions/mssql/sqltoolsservice';
|
||||||
const tempSTSDir = path.join(buildDir, 'sqltoolsservice');
|
const tempSTSDir = path.join(buildDir, 'sqltoolsservice');
|
||||||
const x64STSDir = path.join(x64AppPath, stsPath);
|
const x64STSDir = path.join(x64AppPath, stsPath);
|
||||||
const arm64STSDir = path.join(arm64AppPath, stsPath);
|
const arm64STSDir = path.join(arm64AppPath, stsPath);
|
||||||
const targetSTSDirs = [x64STSDir, arm64STSDir];
|
const targetSTSDirs = [x64STSDir, arm64STSDir];
|
||||||
// backup the STS folders to a temporary directory, later they will be copied to the universal app directory.
|
// backup the x64 STS to a temporary directory, later it will be copied to the universal app directory.
|
||||||
await fs.copy(x64STSDir, tempSTSDir);
|
await fs.copy(x64STSDir, tempSTSDir);
|
||||||
await fs.copy(arm64STSDir, tempSTSDir);
|
|
||||||
// delete STS directories from both x64 ADS and arm64 ADS.
|
// delete STS directories from both x64 ADS and arm64 ADS.
|
||||||
console.debug(`Removing SqlToolsService folders.`);
|
console.debug(`Removing SqlToolsService folders.`);
|
||||||
targetSTSDirs.forEach(async dir => {
|
targetSTSDirs.forEach(async dir => {
|
||||||
@@ -78,7 +81,7 @@ async function main() {
|
|||||||
force: true
|
force: true
|
||||||
});
|
});
|
||||||
|
|
||||||
const productJson = await fs.readJson(productJsonPath);
|
let productJson = await fs.readJson(productJsonPath);
|
||||||
Object.assign(productJson, {
|
Object.assign(productJson, {
|
||||||
darwinUniversalAssetId: 'darwin-universal'
|
darwinUniversalAssetId: 'darwin-universal'
|
||||||
});
|
});
|
||||||
@@ -97,8 +100,7 @@ async function main() {
|
|||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
console.debug(`Copying SqlToolsService to the universal app folder.`);
|
console.debug(`Copying SqlToolsService to the universal app folder.`);
|
||||||
await fs.copy(path.join(tempSTSDir, 'OSX'), path.join(outAppPath, stsPath, 'OSX'), { overwrite: true });
|
await fs.copy(tempSTSDir, path.join(outAppPath, stsPath), { overwrite: true });
|
||||||
await fs.copy(path.join(tempSTSDir, 'OSX_ARM64'), path.join(outAppPath, stsPath, 'OSX_ARM64'), { overwrite: true });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
|
|||||||
@@ -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");
|
||||||
@@ -40,26 +40,14 @@ async function main() {
|
|||||||
identity: '99FM488X57',
|
identity: '99FM488X57',
|
||||||
'gatekeeper-assess': false
|
'gatekeeper-assess': false
|
||||||
};
|
};
|
||||||
const appOpts = {
|
const appOpts = Object.assign(Object.assign({}, defaultOpts), {
|
||||||
...defaultOpts,
|
|
||||||
// TODO(deepak1556): Incorrectly declared type in electron-osx-sign
|
// TODO(deepak1556): Incorrectly declared type in electron-osx-sign
|
||||||
ignore: (filePath) => {
|
ignore: (filePath) => {
|
||||||
return filePath.includes(gpuHelperAppName) ||
|
return filePath.includes(gpuHelperAppName) ||
|
||||||
filePath.includes(rendererHelperAppName);
|
filePath.includes(rendererHelperAppName);
|
||||||
}
|
} });
|
||||||
};
|
const gpuHelperOpts = Object.assign(Object.assign({}, defaultOpts), { app: path.join(appFrameworkPath, gpuHelperAppName), entitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist'), 'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist') });
|
||||||
const gpuHelperOpts = {
|
const rendererHelperOpts = Object.assign(Object.assign({}, defaultOpts), { app: path.join(appFrameworkPath, rendererHelperAppName), entitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist'), 'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist') });
|
||||||
...defaultOpts,
|
|
||||||
app: path.join(appFrameworkPath, gpuHelperAppName),
|
|
||||||
entitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist'),
|
|
||||||
'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-gpu-entitlements.plist'),
|
|
||||||
};
|
|
||||||
const rendererHelperOpts = {
|
|
||||||
...defaultOpts,
|
|
||||||
app: path.join(appFrameworkPath, rendererHelperAppName),
|
|
||||||
entitlements: path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist'),
|
|
||||||
'entitlements-inherit': path.join(baseDir, 'azure-pipelines', 'darwin', 'helper-renderer-entitlements.plist'),
|
|
||||||
};
|
|
||||||
// Only overwrite plist entries for x64 and arm64 builds,
|
// Only overwrite plist entries for x64 and arm64 builds,
|
||||||
// universal will get its copy from the x64 build.
|
// universal will get its copy from the x64 build.
|
||||||
if (arch !== 'universal') {
|
if (arch !== 'universal') {
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
* 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';
|
||||||
|
|||||||
@@ -47,11 +47,11 @@ module.exports.unicodeFilter = [
|
|||||||
'!build/win32/**',
|
'!build/win32/**',
|
||||||
'!extensions/markdown-language-features/notebook-out/*.js',
|
'!extensions/markdown-language-features/notebook-out/*.js',
|
||||||
'!extensions/markdown-math/notebook-out/**',
|
'!extensions/markdown-math/notebook-out/**',
|
||||||
'!extensions/notebook-renderers/renderer-out/**',
|
|
||||||
'!extensions/php-language-features/src/features/phpGlobalFunctions.ts',
|
'!extensions/php-language-features/src/features/phpGlobalFunctions.ts',
|
||||||
'!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/**',
|
||||||
@@ -92,6 +92,7 @@ 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/**',
|
||||||
|
|
||||||
@@ -129,7 +130,6 @@ module.exports.indentationFilter = [
|
|||||||
'!extensions/markdown-language-features/media/*.js',
|
'!extensions/markdown-language-features/media/*.js',
|
||||||
'!extensions/markdown-language-features/notebook-out/*.js',
|
'!extensions/markdown-language-features/notebook-out/*.js',
|
||||||
'!extensions/markdown-math/notebook-out/*.js',
|
'!extensions/markdown-math/notebook-out/*.js',
|
||||||
'!extensions/notebook-renderers/renderer-out/*.js',
|
|
||||||
'!extensions/simple-browser/media/*.js',
|
'!extensions/simple-browser/media/*.js',
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}} Except for our stuff
|
// {{SQL CARBON EDIT}} Except for our stuff
|
||||||
@@ -144,6 +144,7 @@ module.exports.indentationFilter = [
|
|||||||
'!extensions/admin-tool-ext-win/license/**',
|
'!extensions/admin-tool-ext-win/license/**',
|
||||||
'!extensions/resource-deployment/notebooks/**',
|
'!extensions/resource-deployment/notebooks/**',
|
||||||
'!extensions/mssql/notebooks/**',
|
'!extensions/mssql/notebooks/**',
|
||||||
|
'!extensions/azurehybridtoolkit/notebooks/**',
|
||||||
'!extensions/integration-tests/testData/**',
|
'!extensions/integration-tests/testData/**',
|
||||||
'!extensions/arc/src/controller/generated/**',
|
'!extensions/arc/src/controller/generated/**',
|
||||||
'!extensions/sql-database-projects/resources/templates/*.xml',
|
'!extensions/sql-database-projects/resources/templates/*.xml',
|
||||||
@@ -151,7 +152,9 @@ module.exports.indentationFilter = [
|
|||||||
'!extensions/sql-database-projects/src/test/baselines/*.json',
|
'!extensions/sql-database-projects/src/test/baselines/*.json',
|
||||||
'!extensions/sql-database-projects/src/test/baselines/*.sqlproj',
|
'!extensions/sql-database-projects/src/test/baselines/*.sqlproj',
|
||||||
'!extensions/sql-database-projects/BuildDirectory/SystemDacpacs/**',
|
'!extensions/sql-database-projects/BuildDirectory/SystemDacpacs/**',
|
||||||
'!extensions/datavirtualization/scaleoutdataservice/**',
|
'!extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts',
|
||||||
|
'!extensions/big-data-cluster/src/bigDataCluster/controller/clusterApiGenerated2.ts',
|
||||||
|
'!extensions/datavirtualization/scaleoutdataservice/**',
|
||||||
'!resources/linux/snap/electron-launch',
|
'!resources/linux/snap/electron-launch',
|
||||||
'!extensions/markdown-language-features/media/*.js',
|
'!extensions/markdown-language-features/media/*.js',
|
||||||
'!extensions/simple-browser/media/*.js',
|
'!extensions/simple-browser/media/*.js',
|
||||||
@@ -195,10 +198,12 @@ module.exports.copyrightFilter = [
|
|||||||
'!src/vs/editor/test/node/classification/typescript-test.ts',
|
'!src/vs/editor/test/node/classification/typescript-test.ts',
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}} Except for stuff in our code that doesn't use our copyright
|
// {{SQL CARBON EDIT}} Except for stuff in our code that doesn't use our copyright
|
||||||
|
'!extensions/azurehybridtoolkit/notebooks/**',
|
||||||
'!extensions/azuremonitor/src/prompts/**',
|
'!extensions/azuremonitor/src/prompts/**',
|
||||||
'!extensions/import/flatfileimportservice/**',
|
'!extensions/import/flatfileimportservice/**',
|
||||||
'!extensions/kusto/src/prompts/**',
|
'!extensions/kusto/src/prompts/**',
|
||||||
'!extensions/mssql/sqltoolsservice/**',
|
'!extensions/mssql/sqltoolsservice/**',
|
||||||
|
'!extensions/mssql/src/hdfs/webhdfs.ts',
|
||||||
'!extensions/mssql/src/prompts/**',
|
'!extensions/mssql/src/prompts/**',
|
||||||
'!extensions/notebook/resources/jupyter_config/**',
|
'!extensions/notebook/resources/jupyter_config/**',
|
||||||
'!extensions/notebook/src/intellisense/text.ts',
|
'!extensions/notebook/src/intellisense/text.ts',
|
||||||
@@ -253,6 +258,8 @@ module.exports.tsFormattingFilter = [
|
|||||||
'!extensions/html-language-features/server/lib/jquery.d.ts',
|
'!extensions/html-language-features/server/lib/jquery.d.ts',
|
||||||
|
|
||||||
// {{SQL CARBON EDIT}}
|
// {{SQL CARBON EDIT}}
|
||||||
|
'!extensions/big-data-cluster/src/bigDataCluster/controller/apiGenerated.ts',
|
||||||
|
'!extensions/big-data-cluster/src/bigDataCluster/controller/tokenApiGenerated.ts',
|
||||||
'!src/vs/workbench/services/themes/common/textMateScopeMatcher.ts', // skip this because we have no plans on touching this and its not ours
|
'!src/vs/workbench/services/themes/common/textMateScopeMatcher.ts', // skip this because we have no plans on touching this and its not ours
|
||||||
'!src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.ts', // skip this because known issue
|
'!src/vs/workbench/contrib/extensions/browser/extensionRecommendationsService.ts', // skip this because known issue
|
||||||
'!build/**/*'
|
'!build/**/*'
|
||||||
|
|||||||
@@ -17,41 +17,34 @@ 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');
|
||||||
|
|
||||||
const root = path.dirname(__dirname);
|
let root = path.dirname(__dirname);
|
||||||
const sha1 = util.getVersion(root);
|
let sha1 = util.getVersion(root);
|
||||||
const semver = require('./monaco/package.json').version;
|
let semver = require('./monaco/package.json').version;
|
||||||
const headerVersion = semver + '(' + sha1 + ')';
|
let headerVersion = semver + '(' + sha1 + ')';
|
||||||
|
|
||||||
// Build
|
// Build
|
||||||
|
|
||||||
const editorEntryPoints = [
|
let editorEntryPoints = [
|
||||||
{
|
{
|
||||||
name: 'vs/editor/editor.main',
|
name: 'vs/editor/editor.main',
|
||||||
include: [],
|
include: [],
|
||||||
exclude: ['vs/css', 'vs/nls'],
|
exclude: ['vs/css', 'vs/nls'],
|
||||||
prepend: [
|
prepend: ['out-editor-build/vs/css.js', 'out-editor-build/vs/nls.js'],
|
||||||
{ 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'],
|
||||||
exclude: ['vs/nls'],
|
prepend: ['vs/loader.js'],
|
||||||
prepend: [
|
append: ['vs/base/worker/workerMain'],
|
||||||
{ 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'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const editorResources = [
|
let editorResources = [
|
||||||
'out-editor-build/vs/base/browser/ui/codicons/**/*.ttf'
|
'out-editor-build/vs/base/browser/ui/codicons/**/*.ttf'
|
||||||
];
|
];
|
||||||
|
|
||||||
const BUNDLED_FILE_HEADER = [
|
let BUNDLED_FILE_HEADER = [
|
||||||
'/*!-----------------------------------------------------------',
|
'/*!-----------------------------------------------------------',
|
||||||
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
' * Copyright (c) Microsoft Corporation. All rights reserved.',
|
||||||
' * Version: ' + headerVersion,
|
' * Version: ' + headerVersion,
|
||||||
@@ -116,6 +109,12 @@ 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: {
|
||||||
@@ -225,7 +224,7 @@ const appendJSToESMImportsTask = task.define('append-js-to-esm-imports', () => {
|
|||||||
result.push(line);
|
result.push(line);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
const modifiedLine = (
|
let 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'`)
|
||||||
@@ -240,10 +239,10 @@ const appendJSToESMImportsTask = task.define('append-js-to-esm-imports', () => {
|
|||||||
* @param {string} contents
|
* @param {string} contents
|
||||||
*/
|
*/
|
||||||
function toExternalDTS(contents) {
|
function toExternalDTS(contents) {
|
||||||
const lines = contents.split(/\r\n|\r|\n/);
|
let 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++) {
|
||||||
const line = lines[i];
|
let line = lines[i];
|
||||||
|
|
||||||
if (killNextCloseCurlyBrace) {
|
if (killNextCloseCurlyBrace) {
|
||||||
if ('}' === line) {
|
if ('}' === line) {
|
||||||
@@ -317,7 +316,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) {
|
||||||
const json = JSON.parse(data.contents.toString());
|
let 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);
|
||||||
@@ -361,10 +360,10 @@ const finalEditorResourcesTask = task.define('final-editor-resources', () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const relativePathToMap = path.relative(path.join(data.relative), path.join('min-maps', data.relative + '.map'));
|
let relativePathToMap = path.relative(path.join(data.relative), path.join('min-maps', data.relative + '.map'));
|
||||||
|
|
||||||
let strContents = data.contents.toString();
|
let strContents = data.contents.toString();
|
||||||
const newStr = '//# sourceMappingURL=' + relativePathToMap.replace(/\\/g, '/');
|
let 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);
|
||||||
@@ -484,13 +483,13 @@ function createTscCompileTask(watch) {
|
|||||||
cwd: path.join(__dirname, '..'),
|
cwd: path.join(__dirname, '..'),
|
||||||
// stdio: [null, 'pipe', 'inherit']
|
// stdio: [null, 'pipe', 'inherit']
|
||||||
});
|
});
|
||||||
const errors = [];
|
let errors = [];
|
||||||
const reporter = createReporter('monaco');
|
let 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
|
||||||
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
|
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
|
||||||
|
|
||||||
child.stdout.on('data', data => {
|
child.stdout.on('data', data => {
|
||||||
let str = String(data);
|
let str = String(data);
|
||||||
@@ -503,12 +502,12 @@ function createTscCompileTask(watch) {
|
|||||||
report.end();
|
report.end();
|
||||||
|
|
||||||
} else if (str) {
|
} else if (str) {
|
||||||
const match = /(.*\(\d+,\d+\): )(.*: )(.*)/.exec(str);
|
let 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'.
|
||||||
const fullpath = path.join(root, match[1]);
|
let fullpath = path.join(root, match[1]);
|
||||||
const message = match[3];
|
let message = match[3];
|
||||||
reporter(fullpath + message);
|
reporter(fullpath + message);
|
||||||
} else {
|
} else {
|
||||||
reporter(str);
|
reporter(str);
|
||||||
|
|||||||
@@ -56,7 +56,6 @@ 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',
|
||||||
@@ -64,12 +63,12 @@ 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-notebook-tests/tsconfig.json',
|
||||||
'vscode-test-resolver/tsconfig.json'
|
'vscode-test-resolver/tsconfig.json'
|
||||||
];
|
];
|
||||||
@@ -95,7 +94,7 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
const baseUrl = getBaseUrl(out);
|
const baseUrl = getBaseUrl(out);
|
||||||
|
|
||||||
let headerId, headerOut;
|
let headerId, headerOut;
|
||||||
const index = relativeDirname.indexOf('/');
|
let 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';
|
||||||
@@ -104,9 +103,9 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
headerOut = relativeDirname.substr(index + 1) + '/out';
|
headerOut = relativeDirname.substr(index + 1) + '/out';
|
||||||
}
|
}
|
||||||
|
|
||||||
function createPipeline(build, emitError, transpileOnly) {
|
function createPipeline(build, emitError) {
|
||||||
const nlsDev = require('vscode-nls-dev');
|
const nlsDev = require('vscode-nls-dev');
|
||||||
const tsb = require('./lib/tsb');
|
const tsb = require('gulp-tsb');
|
||||||
const sourcemaps = require('gulp-sourcemaps');
|
const sourcemaps = require('gulp-sourcemaps');
|
||||||
|
|
||||||
const reporter = createReporter('extensions');
|
const reporter = createReporter('extensions');
|
||||||
@@ -114,7 +113,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, { verbose: false, transpileOnly, transpileOnlyIncludesDts: transpileOnly }, err => reporter(err.toString()));
|
const compilation = tsb.create(absolutePath, overrideOptions, false, err => reporter(err.toString()));
|
||||||
|
|
||||||
const pipeline = function () {
|
const pipeline = function () {
|
||||||
const input = es.through();
|
const input = es.through();
|
||||||
@@ -156,16 +155,6 @@ 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']));
|
||||||
@@ -198,16 +187,12 @@ const tasks = compilations.map(function (tsconfigFile) {
|
|||||||
}));
|
}));
|
||||||
|
|
||||||
// Tasks
|
// Tasks
|
||||||
gulp.task(transpileTask);
|
|
||||||
gulp.task(compileTask);
|
gulp.task(compileTask);
|
||||||
gulp.task(watchTask);
|
gulp.task(watchTask);
|
||||||
|
|
||||||
return { transpileTask, compileTask, watchTask, compileBuildTask };
|
return { 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;
|
||||||
|
|||||||
@@ -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 (const depName in set1) {
|
for (let 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 { transpileTask, compileTask, watchTask, compileApiProposalNamesTask, watchApiProposalNamesTask } = require('./lib/compilation');
|
const { 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,10 +19,6 @@ 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'));
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,7 +448,7 @@ function packagePkgTask(platform, arch, pkgTarget) {
|
|||||||
// rebuild extensions that contain native npm modules or have conditional webpack rules
|
// rebuild extensions that contain native npm modules or have conditional webpack rules
|
||||||
// when building with the web .yarnrc settings (e.g. runtime=node, etc.)
|
// when building with the web .yarnrc settings (e.g. runtime=node, etc.)
|
||||||
// this is needed to have correct module set published with desired ABI
|
// this is needed to have correct module set published with desired ABI
|
||||||
const rebuildExtensions = ['mssql', 'notebook'];
|
const rebuildExtensions = ['big-data-cluster', 'mssql', 'notebook'];
|
||||||
const EXTENSIONS = path.join(REPO_ROOT, 'extensions');
|
const EXTENSIONS = path.join(REPO_ROOT, 'extensions');
|
||||||
function exec(cmdLine, cwd) {
|
function exec(cmdLine, cwd) {
|
||||||
console.log(cmdLine);
|
console.log(cmdLine);
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ const ext = require('./lib/extensions');
|
|||||||
const loc = require('./lib/locFunc');
|
const loc = require('./lib/locFunc');
|
||||||
const task = require('./lib/task');
|
const task = require('./lib/task');
|
||||||
const glob = require('glob');
|
const glob = require('glob');
|
||||||
const vsce = require('@vscode/vsce');
|
const vsce = require('vsce');
|
||||||
const mkdirp = require('mkdirp');
|
const mkdirp = require('mkdirp');
|
||||||
const rename = require('gulp-rename');
|
const rename = require('gulp-rename');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
@@ -103,22 +103,17 @@ gulp.task('package-external-extensions', task.series(
|
|||||||
return { name: extensionName, path: extensionPath };
|
return { name: extensionName, path: extensionPath };
|
||||||
})
|
})
|
||||||
.filter(element => ext.vscodeExternalExtensions.indexOf(element.name) === -1) // VS Code external extensions are bundled into ADS so no need to create a normal VSIX for them
|
.filter(element => ext.vscodeExternalExtensions.indexOf(element.name) === -1) // VS Code external extensions are bundled into ADS so no need to create a normal VSIX for them
|
||||||
.map(async element => {
|
.map(element => {
|
||||||
try {
|
const pkgJson = require(path.join(element.path, 'package.json'));
|
||||||
const pkgJson = require(path.join(element.path, 'package.json'));
|
const vsixDirectory = path.join(root, '.build', 'extensions');
|
||||||
const vsixDirectory = path.join(root, '.build', 'extensions');
|
mkdirp.sync(vsixDirectory);
|
||||||
mkdirp.sync(vsixDirectory);
|
const packagePath = path.join(vsixDirectory, `${pkgJson.name}-${pkgJson.version}.vsix`);
|
||||||
const packagePath = path.join(vsixDirectory, `${pkgJson.name}-${pkgJson.version}.vsix`);
|
console.info('Creating vsix for ' + element.path + ' result:' + packagePath);
|
||||||
console.info(`Creating vsix for ${element.path}, result: ${packagePath}`);
|
return vsce.createVSIX({
|
||||||
return await vsce.createVSIX({
|
cwd: element.path,
|
||||||
cwd: element.path,
|
packagePath: packagePath,
|
||||||
packagePath: packagePath,
|
useYarn: true
|
||||||
useYarn: false
|
});
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`Failed to create vsix for ${element.path}, error occurred: ${e}`);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
// Wait for all the initial VSIXes to be completed before making the VS Code ones since we'll be overwriting
|
// Wait for all the initial VSIXes to be completed before making the VS Code ones since we'll be overwriting
|
||||||
// values in the package.json for those.
|
// values in the package.json for those.
|
||||||
@@ -129,54 +124,50 @@ gulp.task('package-external-extensions', task.series(
|
|||||||
// the package.json. It doesn't handle more complex tasks such as replacing localized strings.
|
// the package.json. It doesn't handle more complex tasks such as replacing localized strings.
|
||||||
const vscodeVsixes = glob.sync('.build/external/extensions/*/package.vscode.json')
|
const vscodeVsixes = glob.sync('.build/external/extensions/*/package.vscode.json')
|
||||||
.map(async vscodeManifestRelativePath => {
|
.map(async vscodeManifestRelativePath => {
|
||||||
try {
|
const vscodeManifestFullPath = path.join(root, vscodeManifestRelativePath);
|
||||||
const vscodeManifestFullPath = path.join(root, vscodeManifestRelativePath);
|
const packageDir = path.dirname(vscodeManifestFullPath);
|
||||||
const packageDir = path.dirname(vscodeManifestFullPath);
|
const packageManifestPath = path.join(packageDir, 'package.json');
|
||||||
const packageManifestPath = path.join(packageDir, 'package.json');
|
const json = require('gulp-json-editor');
|
||||||
const json = require('gulp-json-editor');
|
const packageJsonStream = gulp.src(packageManifestPath) // Create stream for the original package.json
|
||||||
const packageJsonStream = gulp.src(packageManifestPath) // Create stream for the original package.json
|
.pipe(json(data => {
|
||||||
.pipe(json(data => {
|
// And now use gulp-json-editor to modify the contents
|
||||||
// And now use gulp-json-editor to modify the contents
|
const updateData = JSON.parse(fs.readFileSync(vscodeManifestFullPath)); // Read in the set of values to replace from package.vscode.json
|
||||||
const updateData = JSON.parse(fs.readFileSync(vscodeManifestFullPath)); // Read in the set of values to replace from package.vscode.json
|
Object.keys(updateData).forEach(key => {
|
||||||
Object.keys(updateData).forEach(key => {
|
if (key !== 'contributes') {
|
||||||
if (key !== 'contributes') {
|
data[key] = updateData[key];
|
||||||
data[key] = updateData[key];
|
}
|
||||||
}
|
});
|
||||||
|
if (data.contributes?.menus) {
|
||||||
|
// Remove ADS-only menus. This is a subset of the menus listed in https://github.com/microsoft/azuredatastudio/blob/main/src/vs/workbench/api/common/menusExtensionPoint.ts
|
||||||
|
// More can be added to the list as needed.
|
||||||
|
['objectExplorer/item/context', 'dataExplorer/context', 'dashboard/toolbar'].forEach(menu => {
|
||||||
|
delete data.contributes.menus[menu];
|
||||||
});
|
});
|
||||||
if (data.contributes?.menus) {
|
}
|
||||||
// Remove ADS-only menus. This is a subset of the menus listed in https://github.com/microsoft/azuredatastudio/blob/main/src/vs/workbench/api/common/menusExtensionPoint.ts
|
|
||||||
// More can be added to the list as needed.
|
|
||||||
['objectExplorer/item/context', 'dataExplorer/context', 'dashboard/toolbar'].forEach(menu => {
|
|
||||||
delete data.contributes.menus[menu];
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add any configuration properties from the package.vscode.json
|
// Add any configuration properties from the package.vscode.json
|
||||||
// Currently only supports bringing over properties in the first config object found and doesn't support modifying the title
|
// Currently only supports bringing over properties in the first config object found and doesn't support modifying the title
|
||||||
if (updateData.contributes?.configuration[0]?.properties) {
|
if (updateData.contributes?.configuration[0]?.properties) {
|
||||||
Object.keys(updateData.contributes.configuration[0].properties).forEach(key => {
|
Object.keys(updateData.contributes.configuration[0].properties).forEach(key => {
|
||||||
data.contributes.configuration[0].properties[key] = updateData.contributes.configuration[0].properties[key];
|
data.contributes.configuration[0].properties[key] = updateData.contributes.configuration[0].properties[key];
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}, { beautify: false }))
|
}, { beautify: false }))
|
||||||
.pipe(gulp.dest(packageDir));
|
.pipe(gulp.dest(packageDir));
|
||||||
await new Promise(resolve => packageJsonStream.on('finish', resolve)); // Wait for the files to finish being updated before packaging
|
await new Promise(resolve => packageJsonStream.on('finish', resolve)); // Wait for the files to finish being updated before packaging
|
||||||
const pkgJson = JSON.parse(fs.readFileSync(packageManifestPath));
|
const pkgJson = JSON.parse(fs.readFileSync(packageManifestPath));
|
||||||
const vsixDirectory = path.join(root, '.build', 'extensions');
|
const vsixDirectory = path.join(root, '.build', 'extensions');
|
||||||
const packagePath = path.join(vsixDirectory, `${pkgJson.name}-${pkgJson.version}.vsix`);
|
const packagePath = path.join(vsixDirectory, `${pkgJson.name}-${pkgJson.version}.vsix`);
|
||||||
console.info(`Creating vsix for ${packageDir} result: ${packagePath}`);
|
console.info('Creating vsix for ' + packageDir + ' result:' + packagePath);
|
||||||
return await vsce.createVSIX({
|
return vsce.createVSIX({
|
||||||
cwd: packageDir,
|
cwd: packageDir,
|
||||||
packagePath: packagePath,
|
packagePath: packagePath,
|
||||||
useYarn: false
|
useYarn: true
|
||||||
});
|
});
|
||||||
} catch (e) {
|
|
||||||
console.error(`Failed to create vsix for ${packageDir}, error occurred: ${e}`);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(vscodeVsixes);
|
return Promise.all(vscodeVsixes);
|
||||||
})
|
})
|
||||||
));
|
));
|
||||||
@@ -188,22 +179,17 @@ gulp.task('package-langpacks', task.series(
|
|||||||
const extensionPath = path.dirname(path.join(root, manifestPath));
|
const extensionPath = path.dirname(path.join(root, manifestPath));
|
||||||
const extensionName = path.basename(extensionPath);
|
const extensionName = path.basename(extensionPath);
|
||||||
return { name: extensionName, path: extensionPath };
|
return { name: extensionName, path: extensionPath };
|
||||||
}).map(async element => {
|
}).map(element => {
|
||||||
try {
|
const pkgJson = require(path.join(element.path, 'package.json'));
|
||||||
const pkgJson = require(path.join(element.path, 'package.json'));
|
const vsixDirectory = path.join(root, '.build', 'langpacks');
|
||||||
const vsixDirectory = path.join(root, '.build', 'langpacks');
|
mkdirp.sync(vsixDirectory);
|
||||||
mkdirp.sync(vsixDirectory);
|
const packagePath = path.join(vsixDirectory, `${pkgJson.name}-${pkgJson.version}.vsix`);
|
||||||
const packagePath = path.join(vsixDirectory, `${pkgJson.name}-${pkgJson.version}.vsix`);
|
console.info('Creating vsix for ' + element.path + ' result:' + packagePath);
|
||||||
console.info('Creating vsix for ' + element.path + ' result:' + packagePath);
|
return vsce.createVSIX({
|
||||||
return await vsce.createVSIX({
|
cwd: element.path,
|
||||||
cwd: element.path,
|
packagePath: packagePath,
|
||||||
packagePath: packagePath,
|
useYarn: true
|
||||||
useYarn: false
|
});
|
||||||
});
|
|
||||||
} catch (e) {
|
|
||||||
console.error(`Failed to create vsix for ${element.path}, error occurred: ${e}`);
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(vsixes);
|
return Promise.all(vsixes);
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ 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',
|
||||||
@@ -75,7 +76,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-sandbox/workbench/**',
|
'out-build/vs/code/electron-browser/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}',
|
||||||
@@ -123,15 +124,16 @@ const extensionsFilter = filter([
|
|||||||
'**/asde-deployment.xlf',
|
'**/asde-deployment.xlf',
|
||||||
'**/azcli.xlf',
|
'**/azcli.xlf',
|
||||||
'**/azurecore.xlf',
|
'**/azurecore.xlf',
|
||||||
'**/azuremonitor.xlf',
|
'**/azurehybridtoolkit.xlf',
|
||||||
|
'**/big-data-cluster.xlf',
|
||||||
'**/cms.xlf',
|
'**/cms.xlf',
|
||||||
'**/dacpac.xlf',
|
'**/dacpac.xlf',
|
||||||
'**/datavirtualization.xlf',
|
|
||||||
'**/git.xlf',
|
'**/git.xlf',
|
||||||
'**/data-workspace.xlf',
|
'**/data-workspace.xlf',
|
||||||
'**/import.xlf',
|
'**/import.xlf',
|
||||||
'**/kusto.xlf',
|
'**/kusto.xlf',
|
||||||
'**/machine-learning.xlf',
|
'**/machine-learning.xlf',
|
||||||
|
'**/Microsoft.sqlservernotebook.xlf',
|
||||||
'**/mssql.xlf',
|
'**/mssql.xlf',
|
||||||
'**/notebook.xlf',
|
'**/notebook.xlf',
|
||||||
'**/profiler.xlf',
|
'**/profiler.xlf',
|
||||||
@@ -184,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) {
|
||||||
const result = {};
|
let result = {};
|
||||||
filenames.forEach(function (filename) {
|
filenames.forEach(function (filename) {
|
||||||
const fullPath = path.join(process.cwd(), out, filename);
|
let fullPath = path.join(process.cwd(), out, filename);
|
||||||
result[filename] = computeChecksum(fullPath);
|
result[filename] = computeChecksum(fullPath);
|
||||||
});
|
});
|
||||||
return result;
|
return result;
|
||||||
@@ -199,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) {
|
||||||
const contents = fs.readFileSync(filename);
|
let contents = fs.readFileSync(filename);
|
||||||
|
|
||||||
const hash = crypto
|
let hash = crypto
|
||||||
.createHash('md5')
|
.createHash('md5')
|
||||||
.update(contents)
|
.update(contents)
|
||||||
.digest('base64')
|
.digest('base64')
|
||||||
@@ -227,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-sandbox/workbench/workbench.html',
|
'vs/code/electron-browser/workbench/workbench.html',
|
||||||
'vs/code/electron-sandbox/workbench/workbench.js'
|
'vs/code/electron-browser/workbench/workbench.js'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const src = gulp.src(out + '/**', { base: '.' })
|
const src = gulp.src(out + '/**', { base: '.' })
|
||||||
@@ -319,7 +321,6 @@ 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);
|
||||||
@@ -364,14 +365,10 @@ 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('@@APPNAME@@', product.applicationName))
|
.pipe(replace('@@NAME@@', product.applicationName))
|
||||||
.pipe(rename('bin/' + product.applicationName)));
|
.pipe(rename('bin/' + product.applicationName)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -525,7 +522,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 => {
|
||||||
const includeDefault = !!innoSetupConfig[language.id].defaultInfo;
|
let 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,9 +16,6 @@ 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);
|
||||||
@@ -78,16 +75,12 @@ 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; },
|
||||||
async function () {
|
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'); }));
|
||||||
@@ -219,7 +212,7 @@ function buildRpmPackage(arch) {
|
|||||||
|
|
||||||
return shell.task([
|
return shell.task([
|
||||||
'mkdir -p ' + destination,
|
'mkdir -p ' + destination,
|
||||||
'HOME="$(pwd)/' + destination + '" rpmbuild -bb ' + rpmBuildPath + '/SPECS/' + product.applicationName + '.spec --target=' + rpmArch,
|
'HOME="$(pwd)/' + destination + '" fakeroot 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' })
|
||||||
);
|
);
|
||||||
|
|
||||||
const all = es.merge(
|
let all = es.merge(
|
||||||
packageJsonStream,
|
packageJsonStream,
|
||||||
license,
|
license,
|
||||||
sources,
|
sources,
|
||||||
@@ -218,7 +218,7 @@ function packageTask(sourceFolderName, destinationFolderName) {
|
|||||||
pwaicons
|
pwaicons
|
||||||
);
|
);
|
||||||
|
|
||||||
const result = all
|
let result = all
|
||||||
.pipe(util.skipDirectories())
|
.pipe(util.skipDirectories())
|
||||||
.pipe(util.fixWin32DirectoryPermissions());
|
.pipe(util.fixWin32DirectoryPermissions());
|
||||||
|
|
||||||
|
|||||||
@@ -105,7 +105,7 @@ function buildWin32Setup(arch, target) {
|
|||||||
IncompatibleArchAppId: { 'ia32': x64AppId, 'x64': ia32AppId, 'arm64': ia32AppId }[arch],
|
IncompatibleArchAppId: { 'ia32': x64AppId, 'x64': ia32AppId, 'arm64': ia32AppId }[arch],
|
||||||
AppUserId: product.win32AppUserModelId,
|
AppUserId: product.win32AppUserModelId,
|
||||||
ArchitecturesAllowed: { 'ia32': '', 'x64': 'x64', 'arm64': 'arm64 x64' }[arch], //{{SQL CARBON EDIT}} - we still have x64 binaries in SqlToolsService, need to allow x64 binaries for arm64 arch.
|
ArchitecturesAllowed: { 'ia32': '', 'x64': 'x64', 'arm64': 'arm64 x64' }[arch], //{{SQL CARBON EDIT}} - we still have x64 binaries in SqlToolsService, need to allow x64 binaries for arm64 arch.
|
||||||
ArchitecturesInstallIn64BitMode: { 'ia32': '', 'x64': 'x64', 'arm64': 'arm64 x64' }[arch], //{{SQL CARBON EDIT}} - same as line above.
|
ArchitecturesInstallIn64BitMode: { 'ia32': '', 'x64': 'x64', 'arm64': 'arm64' }[arch],
|
||||||
SourceDir: sourcePath,
|
SourceDir: sourcePath,
|
||||||
RepoDir: repoPath,
|
RepoDir: repoPath,
|
||||||
OutputDir: outputPath,
|
OutputDir: outputPath,
|
||||||
|
|||||||
@@ -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]}" (charCode: ${m[0].charCodeAt(0)}). To suppress, use // allow-any-unicode-next-line`
|
file.relative + `(${i + 1},${m.index + 1}): Unexpected unicode character: "${m[0]}". To suppress, use // allow-any-unicode-next-line`
|
||||||
);
|
);
|
||||||
errorCount++;
|
errorCount++;
|
||||||
}
|
}
|
||||||
@@ -115,8 +115,8 @@ function hygiene(some, linting = true) {
|
|||||||
})
|
})
|
||||||
.then(
|
.then(
|
||||||
(result) => {
|
(result) => {
|
||||||
const original = result.src.replace(/\r\n/gm, '\n');
|
let original = result.src.replace(/\r\n/gm, '\n');
|
||||||
const formatted = result.dest.replace(/\r\n/gm, '\n');
|
let formatted = result.dest.replace(/\r\n/gm, '\n');
|
||||||
|
|
||||||
if (original !== formatted) {
|
if (original !== formatted) {
|
||||||
console.error(
|
console.error(
|
||||||
|
|||||||
15
build/jsconfig.json
Normal file
15
build/jsconfig.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"module": "commonjs",
|
||||||
|
"target": "es2017",
|
||||||
|
"jsx": "preserve",
|
||||||
|
"checkJs": true
|
||||||
|
},
|
||||||
|
"include": [
|
||||||
|
"**/*.js"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules",
|
||||||
|
"**/node_modules/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -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 () {
|
||||||
const finish = () => {
|
let finish = () => {
|
||||||
{
|
{
|
||||||
const headerPickle = pickle.createEmpty();
|
const headerPickle = pickle.createEmpty();
|
||||||
headerPickle.writeString(JSON.stringify(filesystem.header));
|
headerPickle.writeString(JSON.stringify(filesystem.header));
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user