diff --git a/.configurations/configuration.dsc.yaml b/.configurations/configuration.dsc.yaml
new file mode 100644
index 0000000000..41839b86f2
--- /dev/null
+++ b/.configurations/configuration.dsc.yaml
@@ -0,0 +1,67 @@
+# yaml-language-server: $schema=https://aka.ms/configuration-dsc-schema/0.2
+# Reference: https://github.com/microsoft/vscode/wiki/How-to-Contribute
+properties:
+ resources:
+ - resource: Microsoft.WinGet.DSC/WinGetPackage
+ directives:
+ description: Install Git
+ allowPrerelease: true
+ settings:
+ id: Git.Git
+ source: winget
+ - resource: Microsoft.WinGet.DSC/WinGetPackage
+ id: npm
+ directives:
+ description: Install NodeJS version >=16.17.x and <17
+ allowPrerelease: true
+ settings:
+ id: OpenJS.NodeJS.LTS
+ version: "16.20.0"
+ source: winget
+ - resource: NpmDsc/NpmPackage
+ id: yarn
+ dependsOn:
+ - npm
+ directives:
+ description: Install Yarn
+ allowPrerelease: true
+ settings:
+ Name: 'yarn'
+ Global: true
+ PackageDirectory: '${WinGetConfigRoot}\..\'
+ - resource: Microsoft.WinGet.DSC/WinGetPackage
+ directives:
+ description: Install Python 3.10
+ allowPrerelease: true
+ settings:
+ id: Python.Python.3.10
+ source: winget
+ - resource: Microsoft.WinGet.DSC/WinGetPackage
+ id: vsPackage
+ directives:
+ description: Install Visual Studio 2022 (any edition is OK)
+ allowPrerelease: true
+ settings:
+ id: Microsoft.VisualStudio.2022.BuildTools
+ source: winget
+ - resource: Microsoft.VisualStudio.DSC/VSComponents
+ dependsOn:
+ - vsPackage
+ directives:
+ description: Install required VS workloads
+ allowPrerelease: true
+ settings:
+ productId: Microsoft.VisualStudio.Product.BuildTools
+ channelId: VisualStudio.17.Release
+ includeRecommended: true
+ components:
+ - Microsoft.VisualStudio.Workload.VCTools
+ - resource: YarnDsc/YarnInstall
+ dependsOn:
+ - npm
+ directives:
+ description: Install dependencies
+ allowPrerelease: true
+ settings:
+ PackageDirectory: '${WinGetConfigRoot}\..\'
+ configurationVersion: 0.2.0
diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
new file mode 100644
index 0000000000..ad241c22eb
--- /dev/null
+++ b/.devcontainer/Dockerfile
@@ -0,0 +1,12 @@
+FROM mcr.microsoft.com/devcontainers/typescript-node:16-bullseye
+
+ADD install-vscode.sh /root/
+RUN /root/install-vscode.sh
+
+RUN git config --system codespaces-theme.hide-status 1
+
+USER node
+RUN YARN_CACHE="$(yarn cache dir)" && rm -rf "$YARN_CACHE" && ln -s /vscode-dev/yarn-cache "$YARN_CACHE"
+
+USER root
+CMD chown node:node /vscode-dev && sudo -u node mkdir -p /vscode-dev/yarn-cache && sleep inf
diff --git a/.devcontainer/README.md b/.devcontainer/README.md
index 9050664fce..6522e98aac 100644
--- a/.devcontainer/README.md
+++ b/.devcontainer/README.md
@@ -1,84 +1,32 @@
# Code - OSS Development Container
-[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode)
+This dev container includes configuration for a development container for working with Code - OSS in a local container. For using [GitHub Codespaces](https://github.com/features/codespaces) follow the [prebuilt setup](prebuilt/README.md) which installs VNC for displaying the application window.
-This repository includes configuration for a development container for working with Code - OSS in a local container or using [GitHub Codespaces](https://github.com/features/codespaces).
+> **Note:** You will need X11's `DISPLAY` or Wayland's `WAYLAND_DISPLAY` environment variable set locally to allow for the Code - OSS window to display. See [Running GUI app on WSL](https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps) for Windows and [Quartz](https://www.xquartz.org) for Mac.
-> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` and a web client is available on port `6080`.
-
-## Quick start - local
-
-If you already have VS Code and Docker installed, you can click the badge above or [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode) to get started. Clicking these links will cause VS Code to automatically install the Remote - Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use.
+## Quick start
1. Install Docker Desktop or Docker for Linux on your local machine. (See [docs](https://aka.ms/vscode-remote/containers/getting-started) for additional details.)
-2. **Important**: Docker needs at least **4 Cores and 8 GB of RAM** to run a full build. If you are on macOS, or are using the old Hyper-V engine for Windows, update these values for Docker Desktop by right-clicking on the Docker status bar item and going to **Preferences/Settings > Resources > Advanced**.
+2. **Important**: Docker needs at least **4 Cores and 8 GB of RAM** to run a full build with **9 GB of RAM** being recommended. If you are on macOS, or are using the old Hyper-V engine for Windows, update these values for Docker Desktop by right-clicking on the Docker status bar item and going to **Preferences/Settings > Resources > Advanced**.
> **Note:** The [Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor) extension is included in the container so you can keep an eye on CPU/Memory in the status bar.
-3. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Remote - Containers](https://aka.ms/vscode-remote/download/containers) extension.
+3. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Dev Containers](https://aka.ms/vscode-remote/download/containers) extension.
- 
+ 
- > **Note:** The Remote - Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details.
+ > **Note:** The Dev Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details.
-4. Press Ctrl/Cmd + Shift + P or F1 and select **Remote-Containers: Clone Repository in Container Volume...**.
-
- > **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or when using the Hyper-V engine on Windows. We recommend the "clone repository in container" approach instead since it uses "named volume" rather than the local filesystem.
-
-5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press Enter.
-
-6. After the container is running, open a web browser and go to [http://localhost:6080](http://localhost:6080), or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
-
-Anything you start in VS Code, or the integrated terminal, will appear here.
-
-Next: **[Try it out!](#try-it)**
-
-## Quick start - GitHub Codespaces
-
-1. From the [microsoft/vscode GitHub repository](https://github.com/microsoft/vscode), click on the **Code** dropdown, select **Open with Codespaces**, and then click on **New codespace**. If prompted, select the **Standard** machine size (which is also the default).
-
- > **Note:** You will not see these options within GitHub if you are not in the Codespaces beta.
-
-2. After the codespace is up and running in your browser, press Ctrl/Cmd + Shift + P or F1 and select **Ports: Focus on Ports View**.
-
-3. You should see **VNC web client (6080)** under in the list of ports. Select the line and click on the globe icon to open it in a browser tab.
-
- > **Tip:** If you do not see the port, Ctrl/Cmd + Shift + P or F1, select **Forward a Port** and enter port `6080`.
-
-4. In the new tab, you should see noVNC. Click **Connect** and enter `vscode` as the password.
-
-Anything you start in VS Code, or the integrated terminal, will appear here.
-
-Next: **[Try it out!](#try-it)**
-
-### Using VS Code with GitHub Codespaces
-
-You may see improved VNC responsiveness when accessing a codespace from VS Code client since you can use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Here's how to do it.
-
-1. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the the [GitHub Codespaces extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces).
-
- > **Note:** The GitHub Codespaces extension requires the Visual Studio Code distribution of Code - OSS.
-
-2. After the VS Code is up and running, press Ctrl/Cmd + Shift + P or F1, choose **Codespaces: Create New Codespace**, and use the following settings:
- - `microsoft/vscode` for the repository.
- - Select any branch (e.g. **main**) - you can select a different one later.
- - Choose **Standard** (4-core, 8GB) as the size.
-
-4. After you have connected to the codespace, you can use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
-
- > **Tip:** You may also need change your VNC client's **Picture Quality** setting to **High** to get a full color desktop.
-
-5. Anything you start in VS Code, or the integrated terminal, will appear here.
+4. Due to the size of the repository we strongly recommend cloning it on a Linux filesystem for better bind mount performance. On macOS we recommend using a Docker volume (press F1 and select **Dev Containers: Clone Repository in Container Volume...**) and on Windows we recommend using a WSL folder:
+- Make sure you are running a recent WSL version to get X11 and Wayland support.
+- Use the WSL extension for VS Code to open the cloned folder in WSL.
+- Press F1 and select **Dev Containers: Reopen in Container**.
Next: **[Try it out!](#try-it)**
## Try it!
-This container uses the [Fluxbox](http://fluxbox.org/) window manager to keep things lean. **Right-click on the desktop** to see menu options. It works with GNOME and GTK applications, so other tools can be installed if needed.
-
-> **Note:** You can also set the resolution from the command line by typing `set-resolution`.
-
To start working with Code - OSS, follow these steps:
1. In your local VS Code client, open a terminal (Ctrl/Cmd + Shift + \`) and type the following commands:
@@ -88,18 +36,20 @@ To start working with Code - OSS, follow these steps:
bash scripts/code.sh
```
-2. After the build is complete, open a web browser or a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to the desktop environment as described in the quick start and enter `vscode` as the password.
-
-3. You should now see Code - OSS!
+2. You should now see Code - OSS!
Next, let's try debugging.
-1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window through your browser or VNC viewer.
+1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window.
2. Go to your local VS Code client, and use the **Run / Debug** view to launch the **VS Code** configuration. (Typically the default, so you can likely just press F5).
- > **Note:** If launching times out, you can increase the value of `timeout` in the "VS Code", "Attach Main Process", "Attach Extension Host", and "Attach to Shared Process" configurations in [launch.json](../.vscode/launch.json). However, running `scripts/code.sh` first will set up Electron which will usually solve timeout issues.
+ > **Note:** If launching times out, you can increase the value of `timeout` in the "VS Code", "Attach Main Process", "Attach Extension Host", and "Attach to Shared Process" configurations in [launch.json](../../.vscode/launch.json). However, running `scripts/code.sh` first will set up Electron which will usually solve timeout issues.
3. After a bit, Code - OSS will appear with the debugger attached!
Enjoy!
+
+# Notes
+
+The container comes with VS Code Insiders installed. To run it from an Integrated Terminal use `VSCODE_IPC_HOOK_CLI= /usr/bin/code-insiders .`.
diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json
index 3e40ce61f9..58c0cebd20 100644
--- a/.devcontainer/devcontainer.json
+++ b/.devcontainer/devcontainer.json
@@ -1,40 +1,22 @@
{
- "name": "Code - OSS",
-
- // Image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile
- "image": "mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:branch-main",
+ "name": "Code - OSS with X11/Wayland",
+ "build": {
+ "dockerfile": "Dockerfile"
+ },
"overrideCommand": false,
- "runArgs": [ "--init", "--security-opt", "seccomp=unconfined", "--shm-size=1g"],
-
- "settings": {
- "resmon.show.battery": false,
- "resmon.show.cpufreq": false
- },
-
- // noVNC, VNC
- "forwardPorts": [6080, 5901],
- "portsAttributes": {
- "6080": {
- "label": "VNC web client (noVNC)",
- "onAutoForward": "silent"
- },
- "5901": {
- "label": "VNC TCP port",
- "onAutoForward": "silent"
+ "privileged": true,
+ "mounts": [
+ {
+ "source": "vscode-dev",
+ "target": "/vscode-dev",
+ "type": "volume"
}
- },
-
- "extensions": [
- "dbaeumer.vscode-eslint",
- "mutantdino.resourcemonitor"
],
-
- // Optionally loads a cached yarn install for the repo
- "postCreateCommand": ".devcontainer/cache/restore-diff.sh",
-
- "remoteUser": "node",
-
- "hostRequirements": {
- "memory": "8gb"
+ "customizations": {
+ "vscode": {
+ "extensions": [
+ "mutantdino.resourcemonitor"
+ ]
+ }
}
}
diff --git a/.devcontainer/install-vscode.sh b/.devcontainer/install-vscode.sh
new file mode 100755
index 0000000000..9d4b52755d
--- /dev/null
+++ b/.devcontainer/install-vscode.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+apt update
+apt install -y wget gpg
+
+wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
+install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
+sh -c 'echo "deb [arch=amd64,arm64,armhf signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
+rm -f packages.microsoft.gpg
+
+apt update
+apt install -y code-insiders libsecret-1-dev libxkbfile-dev
diff --git a/.devcontainer/prebuilt/README.md b/.devcontainer/prebuilt/README.md
new file mode 100644
index 0000000000..82e731230c
--- /dev/null
+++ b/.devcontainer/prebuilt/README.md
@@ -0,0 +1,105 @@
+# Code - OSS Development Container
+
+[](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode)
+
+This repository includes configuration for a development container for working with Code - OSS in a local container or using [GitHub Codespaces](https://github.com/features/codespaces).
+
+> **Tip:** The default VNC password is `vscode`. The VNC server runs on port `5901` and a web client is available on port `6080`.
+
+## Quick start - local
+
+If you already have VS Code and Docker installed, you can click the badge above or [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/microsoft/vscode) to get started. Clicking these links will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use.
+
+1. Install Docker Desktop or Docker for Linux on your local machine. (See [docs](https://aka.ms/vscode-remote/containers/getting-started) for additional details.)
+
+2. **Important**: Docker needs at least **4 Cores and 8 GB of RAM** to run a full build with **9 GB of RAM** being recommended. If you are on macOS, or are using the old Hyper-V engine for Windows, update these values for Docker Desktop by right-clicking on the Docker status bar item and going to **Preferences/Settings > Resources > Advanced**.
+
+ > **Note:** The [Resource Monitor](https://marketplace.visualstudio.com/items?itemName=mutantdino.resourcemonitor) extension is included in the container so you can keep an eye on CPU/Memory in the status bar.
+
+3. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the [Dev Containers](https://aka.ms/vscode-remote/download/containers) extension.
+
+ 
+
+ > **Note:** The Dev Containers extension requires the Visual Studio Code distribution of Code - OSS. See the [FAQ](https://aka.ms/vscode-remote/faq/license) for details.
+
+4. Press Ctrl/Cmd + Shift + P or F1 and select **Dev Containers: Clone Repository in Container Volume...**.
+
+ > **Tip:** While you can use your local source tree instead, operations like `yarn install` can be slow on macOS or when using the Hyper-V engine on Windows. We recommend the "clone repository in container" approach instead since it uses "named volume" rather than the local filesystem.
+
+5. Type `https://github.com/microsoft/vscode` (or a branch or PR URL) in the input box and press Enter.
+
+6. After the container is running, open a web browser and go to [http://localhost:6080](http://localhost:6080), or use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
+
+Anything you start in VS Code, or the integrated terminal, will appear here.
+
+Next: **[Try it out!](#try-it)**
+
+## Quick start - GitHub Codespaces
+
+1. From the [microsoft/vscode GitHub repository](https://github.com/microsoft/vscode), click on the **Code** dropdown, select **Open with Codespaces**, and then click on **New codespace**. If prompted, select the **Standard** machine size (which is also the default).
+
+ > **Note:** You will not see these options within GitHub if you are not in the Codespaces beta.
+
+2. After the codespace is up and running in your browser, press Ctrl/Cmd + Shift + P or F1 and select **Ports: Focus on Ports View**.
+
+3. You should see **VNC web client (6080)** under in the list of ports. Select the line and click on the globe icon to open it in a browser tab.
+
+ > **Tip:** If you do not see the port, Ctrl/Cmd + Shift + P or F1, select **Forward a Port** and enter port `6080`.
+
+4. In the new tab, you should see noVNC. Click **Connect** and enter `vscode` as the password.
+
+Anything you start in VS Code, or the integrated terminal, will appear here.
+
+Next: **[Try it out!](#try-it)**
+
+### Using VS Code with GitHub Codespaces
+
+You may see improved VNC responsiveness when accessing a codespace from VS Code client since you can use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/). Here's how to do it.
+
+1. Install [Visual Studio Code Stable](https://code.visualstudio.com/) or [Insiders](https://code.visualstudio.com/insiders/) and the the [GitHub Codespaces extension](https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces).
+
+ > **Note:** The GitHub Codespaces extension requires the Visual Studio Code distribution of Code - OSS.
+
+2. After the VS Code is up and running, press Ctrl/Cmd + Shift + P or F1, choose **Codespaces: Create New Codespace**, and use the following settings:
+ - `microsoft/vscode` for the repository.
+ - Select any branch (e.g. **main**) - you can select a different one later.
+ - Choose **Standard** (4-core, 8GB) as the size.
+
+4. After you have connected to the codespace, you can use a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to `localhost:5901` and enter `vscode` as the password.
+
+ > **Tip:** You may also need change your VNC client's **Picture Quality** setting to **High** to get a full color desktop.
+
+5. Anything you start in VS Code, or the integrated terminal, will appear here.
+
+Next: **[Try it out!](#try-it)**
+
+## Try it!
+
+This container uses the [Fluxbox](http://fluxbox.org/) window manager to keep things lean. **Right-click on the desktop** to see menu options. It works with GNOME and GTK applications, so other tools can be installed if needed.
+
+> **Note:** You can also set the resolution from the command line by typing `set-resolution`.
+
+To start working with Code - OSS, follow these steps:
+
+1. In your local VS Code client, open a terminal (Ctrl/Cmd + Shift + \`) and type the following commands:
+
+ ```bash
+ yarn install
+ bash scripts/code.sh
+ ```
+
+2. After the build is complete, open a web browser or a [VNC Viewer](https://www.realvnc.com/en/connect/download/viewer/) to connect to the desktop environment as described in the quick start and enter `vscode` as the password.
+
+3. You should now see Code - OSS!
+
+Next, let's try debugging.
+
+1. Shut down Code - OSS by clicking the box in the upper right corner of the Code - OSS window through your browser or VNC viewer.
+
+2. Go to your local VS Code client, and use the **Run / Debug** view to launch the **VS Code** configuration. (Typically the default, so you can likely just press F5).
+
+ > **Note:** If launching times out, you can increase the value of `timeout` in the "VS Code", "Attach Main Process", "Attach Extension Host", and "Attach to Shared Process" configurations in [launch.json](../../.vscode/launch.json). However, running `scripts/code.sh` first will set up Electron which will usually solve timeout issues.
+
+3. After a bit, Code - OSS will appear with the debugger attached!
+
+Enjoy!
diff --git a/.devcontainer/cache/before-cache.sh b/.devcontainer/prebuilt/cache/before-cache.sh
similarity index 100%
rename from .devcontainer/cache/before-cache.sh
rename to .devcontainer/prebuilt/cache/before-cache.sh
diff --git a/.devcontainer/cache/build-cache-image.sh b/.devcontainer/prebuilt/cache/build-cache-image.sh
similarity index 96%
rename from .devcontainer/cache/build-cache-image.sh
rename to .devcontainer/prebuilt/cache/build-cache-image.sh
index 451d1ab45a..96767f079a 100755
--- a/.devcontainer/cache/build-cache-image.sh
+++ b/.devcontainer/prebuilt/cache/build-cache-image.sh
@@ -17,7 +17,7 @@ fi
TAG="branch-${BRANCH//\//-}"
echo "[$(date)] ${BRANCH} => ${TAG}"
-cd "${SCRIPT_PATH}/../.."
+cd "${SCRIPT_PATH}/../../.."
echo "[$(date)] Starting image build and push..."
export DOCKER_BUILDKIT=1
diff --git a/.devcontainer/cache/cache-diff.sh b/.devcontainer/prebuilt/cache/cache-diff.sh
similarity index 100%
rename from .devcontainer/cache/cache-diff.sh
rename to .devcontainer/prebuilt/cache/cache-diff.sh
diff --git a/.devcontainer/cache/cache.Dockerfile b/.devcontainer/prebuilt/cache/cache.Dockerfile
similarity index 86%
rename from .devcontainer/cache/cache.Dockerfile
rename to .devcontainer/prebuilt/cache/cache.Dockerfile
index 217122a4e9..26dbc46f43 100644
--- a/.devcontainer/cache/cache.Dockerfile
+++ b/.devcontainer/prebuilt/cache/cache.Dockerfile
@@ -9,9 +9,9 @@ COPY --chown=${USERNAME}:${USERNAME} . /repo-source-tmp/
RUN mkdir -p ${CACHE_FOLDER} && chown ${USERNAME} ${CACHE_FOLDER} /repo-source-tmp \
&& su ${USERNAME} -c "\
cd /repo-source-tmp \
- && .devcontainer/cache/before-cache.sh . ${CACHE_FOLDER} \
- && .devcontainer/prepare.sh . ${CACHE_FOLDER} \
- && .devcontainer/cache/cache-diff.sh . ${CACHE_FOLDER}"
+ && .devcontainer/prebuilt/cache/before-cache.sh . ${CACHE_FOLDER} \
+ && .devcontainer/prebuilt/prepare.sh . ${CACHE_FOLDER} \
+ && .devcontainer/prebuilt/cache/cache-diff.sh . ${CACHE_FOLDER}"
# This second stage starts fresh and just copies in cache.tar from the previous stage. The related
# devcontainer.json file is then setup to have postCreateCommand fire restore-diff.sh to expand it.
diff --git a/.devcontainer/cache/restore-diff.sh b/.devcontainer/prebuilt/cache/restore-diff.sh
similarity index 100%
rename from .devcontainer/cache/restore-diff.sh
rename to .devcontainer/prebuilt/cache/restore-diff.sh
diff --git a/.devcontainer/prebuilt/devcontainer.json b/.devcontainer/prebuilt/devcontainer.json
new file mode 100644
index 0000000000..079b8de6cd
--- /dev/null
+++ b/.devcontainer/prebuilt/devcontainer.json
@@ -0,0 +1,44 @@
+{
+ "name": "Code - OSS with VNC",
+
+ // Image contents: https://github.com/microsoft/vscode-dev-containers/blob/master/repository-containers/images/github.com/microsoft/vscode/.devcontainer/base.Dockerfile
+ "image": "mcr.microsoft.com/vscode/devcontainers/repos/microsoft/vscode:branch-main",
+ "overrideCommand": false,
+ "runArgs": [ "--init", "--security-opt", "seccomp=unconfined", "--shm-size=1g"],
+
+ // VS Code extensions and settings
+ "customizations": {
+ "vscode": {
+ "settings": {
+ "resmon.show.battery": false,
+ "resmon.show.cpufreq": false
+ },
+ "extensions": [
+ "dbaeumer.vscode-eslint",
+ "mutantdino.resourcemonitor"
+ ]
+ }
+ },
+
+ // noVNC, VNC
+ "forwardPorts": [6080, 5901],
+ "portsAttributes": {
+ "6080": {
+ "label": "VNC web client (noVNC)",
+ "onAutoForward": "silent"
+ },
+ "5901": {
+ "label": "VNC TCP port",
+ "onAutoForward": "silent"
+ }
+ },
+
+ // Optionally loads a cached yarn install for the repo
+ "postCreateCommand": ".devcontainer/prebuilt/cache/restore-diff.sh",
+
+ "remoteUser": "node",
+
+ "hostRequirements": {
+ "memory": "9gb"
+ }
+}
diff --git a/.devcontainer/prepare.sh b/.devcontainer/prebuilt/prepare.sh
similarity index 92%
rename from .devcontainer/prepare.sh
rename to .devcontainer/prebuilt/prepare.sh
index 9b5c81ff40..3f82462cfd 100755
--- a/.devcontainer/prepare.sh
+++ b/.devcontainer/prebuilt/prepare.sh
@@ -5,5 +5,5 @@
# running commands like "yarn install" from the ground up. Developers (and should) still run these commands
# after the actual dev container is created, but only differences will be processed.
-yarn install
+yarn install --network-timeout 180000
yarn electron
diff --git a/.eslintplugin/code-declare-service-brand.ts b/.eslintplugin/code-declare-service-brand.ts
new file mode 100644
index 0000000000..d6ce2b5209
--- /dev/null
+++ b/.eslintplugin/code-declare-service-brand.ts
@@ -0,0 +1,27 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as eslint from 'eslint';
+
+export = new class DeclareServiceBrand implements eslint.Rule.RuleModule {
+
+ readonly meta: eslint.Rule.RuleMetaData = {
+ fixable: 'code'
+ };
+
+ create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
+ return {
+ ['PropertyDefinition[key.name="_serviceBrand"][value]']: (node: any) => {
+ return context.report({
+ node,
+ message: `The '_serviceBrand'-property should not have a value`,
+ fix: (fixer) => {
+ return fixer.replaceText(node, 'declare _serviceBrand: undefined;')
+ }
+ });
+ }
+ };
+ }
+};
diff --git a/build/lib/eslint/code-import-patterns.ts b/.eslintplugin/code-import-patterns.ts
similarity index 95%
rename from build/lib/eslint/code-import-patterns.ts
rename to .eslintplugin/code-import-patterns.ts
index 96a024c8d5..8b67aafcb3 100644
--- a/build/lib/eslint/code-import-patterns.ts
+++ b/.eslintplugin/code-import-patterns.ts
@@ -6,10 +6,10 @@
import * as eslint from 'eslint';
import { TSESTree } from '@typescript-eslint/experimental-utils';
import * as path from 'path';
-import * as minimatch from 'minimatch';
+import minimatch from 'minimatch';
import { createImportRuleListener } from './utils';
-const REPO_ROOT = path.normalize(path.join(__dirname, '../../../'));
+const REPO_ROOT = path.normalize(path.join(__dirname, '../'));
interface ConditionalPattern {
when?: 'hasBrowser' | 'hasNode' | 'test';
@@ -18,7 +18,7 @@ interface ConditionalPattern {
interface RawImportPatternsConfig {
target: string;
- layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-browser' | 'electron-main';
+ layer?: 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main';
test?: boolean;
restrictions: string | (string | ConditionalPattern)[];
}
@@ -77,7 +77,7 @@ export = new class implements eslint.Rule.RuleModule {
return this._optionsCache.get(options)!;
}
- type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-browser' | 'electron-main';
+ type Layer = 'common' | 'worker' | 'browser' | 'electron-sandbox' | 'node' | 'electron-main';
interface ILayerRule {
layer: Layer;
@@ -96,7 +96,6 @@ export = new class implements eslint.Rule.RuleModule {
{ layer: 'browser', deps: orSegment(['common', 'browser']), isBrowser: true },
{ layer: 'electron-sandbox', deps: orSegment(['common', 'browser', 'electron-sandbox']), isBrowser: true },
{ layer: 'node', deps: orSegment(['common', 'node']), isNode: true },
- { layer: 'electron-browser', deps: orSegment(['common', 'browser', 'node', 'electron-sandbox', 'electron-browser']), isBrowser: true, isNode: true },
{ layer: 'electron-main', deps: orSegment(['common', 'node', 'electron-main']), isNode: true },
];
diff --git a/build/lib/eslint/code-layering.ts b/.eslintplugin/code-layering.ts
similarity index 100%
rename from build/lib/eslint/code-layering.ts
rename to .eslintplugin/code-layering.ts
diff --git a/build/lib/eslint/code-no-look-behind-regex.ts b/.eslintplugin/code-no-look-behind-regex.ts
similarity index 100%
rename from build/lib/eslint/code-no-look-behind-regex.ts
rename to .eslintplugin/code-no-look-behind-regex.ts
diff --git a/build/lib/eslint/code-no-nls-in-standalone-editor.ts b/.eslintplugin/code-no-nls-in-standalone-editor.ts
similarity index 100%
rename from build/lib/eslint/code-no-nls-in-standalone-editor.ts
rename to .eslintplugin/code-no-nls-in-standalone-editor.ts
diff --git a/build/lib/eslint/code-no-standalone-editor.ts b/.eslintplugin/code-no-standalone-editor.ts
similarity index 100%
rename from build/lib/eslint/code-no-standalone-editor.ts
rename to .eslintplugin/code-no-standalone-editor.ts
diff --git a/build/lib/eslint/code-no-test-only.ts b/.eslintplugin/code-no-test-only.ts
similarity index 79%
rename from build/lib/eslint/code-no-test-only.ts
rename to .eslintplugin/code-no-test-only.ts
index 6a1102fb38..d01255a214 100644
--- a/build/lib/eslint/code-no-test-only.ts
+++ b/.eslintplugin/code-no-test-only.ts
@@ -9,10 +9,10 @@ export = new class NoTestOnly implements eslint.Rule.RuleModule {
create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
return {
- ['MemberExpression[object.name="test"][property.name="only"]']: (node: any) => {
+ ['MemberExpression[object.name=/^(test|suite)$/][property.name="only"]']: (node: any) => {
return context.report({
node,
- message: 'test.only is a dev-time tool and CANNOT be pushed'
+ message: 'only is a dev-time tool and CANNOT be pushed'
});
}
};
diff --git a/build/lib/eslint/code-no-unexternalized-strings.ts b/.eslintplugin/code-no-unexternalized-strings.ts
similarity index 81%
rename from build/lib/eslint/code-no-unexternalized-strings.ts
rename to .eslintplugin/code-no-unexternalized-strings.ts
index a0cacc63fc..328e4b9fbf 100644
--- a/build/lib/eslint/code-no-unexternalized-strings.ts
+++ b/.eslintplugin/code-no-unexternalized-strings.ts
@@ -85,6 +85,27 @@ export = new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {
}
}
+ function visitL10NCall(node: TSESTree.CallExpression) {
+
+ // localize(key, message)
+ const [messageNode] = (node).arguments;
+
+ // remove message-argument from doubleQuoted list and make
+ // sure it is a string-literal
+ if (isStringLiteral(messageNode)) {
+ doubleQuotedStringLiterals.delete(messageNode);
+ } else if (messageNode.type === AST_NODE_TYPES.ObjectExpression) {
+ for (const prop of messageNode.properties) {
+ if (prop.type === AST_NODE_TYPES.Property) {
+ if (prop.key.type === AST_NODE_TYPES.Identifier && prop.key.name === 'message') {
+ doubleQuotedStringLiterals.delete(prop.value);
+ break;
+ }
+ }
+ }
+ }
+ }
+
function reportBadStringsAndBadKeys() {
// (1)
// report all strings that are in double quotes
@@ -117,7 +138,16 @@ export = new class NoUnexternalizedStrings implements eslint.Rule.RuleModule {
return {
['Literal']: (node: any) => collectDoubleQuotedStrings(node),
['ExpressionStatement[directive] Literal:exit']: (node: any) => doubleQuotedStringLiterals.delete(node),
+
+ // localize(...)
['CallExpression[callee.type="MemberExpression"][callee.object.name="nls"][callee.property.name="localize"]:exit']: (node: any) => visitLocalizeCall(node),
+
+ // vscode.l10n.t(...)
+ ['CallExpression[callee.type="MemberExpression"][callee.object.property.name="l10n"][callee.property.name="t"]:exit']: (node: any) => visitL10NCall(node),
+
+ // l10n.t(...)
+ ['CallExpression[callee.object.name="l10n"][callee.property.name="t"]:exit']: (node: any) => visitL10NCall(node),
+
['CallExpression[callee.name="localize"][arguments.length>=2]:exit']: (node: any) => visitLocalizeCall(node),
['Program:exit']: reportBadStringsAndBadKeys,
};
diff --git a/build/lib/eslint/code-no-unused-expressions.ts b/.eslintplugin/code-no-unused-expressions.ts
similarity index 100%
rename from build/lib/eslint/code-no-unused-expressions.ts
rename to .eslintplugin/code-no-unused-expressions.ts
diff --git a/build/lib/eslint/code-translation-remind.ts b/.eslintplugin/code-translation-remind.ts
similarity index 100%
rename from build/lib/eslint/code-translation-remind.ts
rename to .eslintplugin/code-translation-remind.ts
diff --git a/.eslintplugin/index.js b/.eslintplugin/index.js
new file mode 100644
index 0000000000..9f45316837
--- /dev/null
+++ b/.eslintplugin/index.js
@@ -0,0 +1,12 @@
+const glob = require('glob');
+const path = require('path');
+
+require('ts-node').register({ experimentalResolver: true, transpileOnly: true });
+
+// Re-export all .ts files as rules
+const rules = {};
+glob.sync(`${__dirname}/*.ts`).forEach((file) => {
+ rules[path.basename(file, '.ts')] = require(file);
+});
+
+exports.rules = rules;
diff --git a/.eslintplugin/tsconfig.json b/.eslintplugin/tsconfig.json
new file mode 100644
index 0000000000..0da715fd03
--- /dev/null
+++ b/.eslintplugin/tsconfig.json
@@ -0,0 +1,26 @@
+{
+ "compilerOptions": {
+ "target": "es2020",
+ "lib": [
+ "ES2020"
+ ],
+ "module": "commonjs",
+ "esModuleInterop": true,
+ "alwaysStrict": true,
+ "allowJs": true,
+ "strict": true,
+ "exactOptionalPropertyTypes": false,
+ "useUnknownInCatchVariables": false,
+ "noUnusedLocals": true,
+ "noUnusedParameters": true,
+ "newLine": "lf",
+ "noEmit": true
+ },
+ "include": [
+ "**/*.ts",
+ "**/*.js"
+ ],
+ "exclude": [
+ "node_modules/**"
+ ]
+}
diff --git a/build/lib/eslint/utils.ts b/.eslintplugin/utils.ts
similarity index 100%
rename from build/lib/eslint/utils.ts
rename to .eslintplugin/utils.ts
diff --git a/build/lib/eslint/vscode-dts-cancellation.ts b/.eslintplugin/vscode-dts-cancellation.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-cancellation.ts
rename to .eslintplugin/vscode-dts-cancellation.ts
diff --git a/build/lib/eslint/vscode-dts-create-func.ts b/.eslintplugin/vscode-dts-create-func.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-create-func.ts
rename to .eslintplugin/vscode-dts-create-func.ts
diff --git a/build/lib/eslint/vscode-dts-event-naming.ts b/.eslintplugin/vscode-dts-event-naming.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-event-naming.ts
rename to .eslintplugin/vscode-dts-event-naming.ts
diff --git a/build/lib/eslint/vscode-dts-interface-naming.ts b/.eslintplugin/vscode-dts-interface-naming.ts
similarity index 96%
rename from build/lib/eslint/vscode-dts-interface-naming.ts
rename to .eslintplugin/vscode-dts-interface-naming.ts
index 01f18b621c..f01045a98c 100644
--- a/build/lib/eslint/vscode-dts-interface-naming.ts
+++ b/.eslintplugin/vscode-dts-interface-naming.ts
@@ -8,7 +8,7 @@ import { TSESTree } from '@typescript-eslint/experimental-utils';
export = new class ApiInterfaceNaming implements eslint.Rule.RuleModule {
- private static _nameRegExp = /I[A-Z]/;
+ private static _nameRegExp = /^I[A-Z]/;
readonly meta: eslint.Rule.RuleMetaData = {
messages: {
diff --git a/build/lib/eslint/vscode-dts-literal-or-types.ts b/.eslintplugin/vscode-dts-literal-or-types.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-literal-or-types.ts
rename to .eslintplugin/vscode-dts-literal-or-types.ts
diff --git a/build/lib/eslint/vscode-dts-provider-naming.ts b/.eslintplugin/vscode-dts-provider-naming.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-provider-naming.ts
rename to .eslintplugin/vscode-dts-provider-naming.ts
diff --git a/build/lib/eslint/vscode-dts-region-comments.ts b/.eslintplugin/vscode-dts-region-comments.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-region-comments.ts
rename to .eslintplugin/vscode-dts-region-comments.ts
diff --git a/.eslintplugin/vscode-dts-string-type-literals.ts b/.eslintplugin/vscode-dts-string-type-literals.ts
new file mode 100644
index 0000000000..3d8ca06f54
--- /dev/null
+++ b/.eslintplugin/vscode-dts-string-type-literals.ts
@@ -0,0 +1,34 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as eslint from 'eslint';
+import { TSESTree } from '@typescript-eslint/experimental-utils';
+
+export = new class ApiTypeDiscrimination implements eslint.Rule.RuleModule {
+
+ readonly meta: eslint.Rule.RuleMetaData = {
+ docs: { url: 'https://github.com/microsoft/vscode/wiki/Extension-API-guidelines' },
+ messages: {
+ noTypeDiscrimination: 'Do not use type descrimination properties'
+ }
+ };
+
+ create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener {
+ return {
+ ['TSPropertySignature[optional=undefined] TSTypeAnnotation TSLiteralType Literal']: (node: any) => {
+
+ const raw = String((node).raw)
+
+ if (/^('|").*\1$/.test(raw)) {
+
+ context.report({
+ node: node,
+ messageId: 'noTypeDiscrimination'
+ });
+ }
+ }
+ }
+ }
+};
diff --git a/build/lib/eslint/vscode-dts-use-thenable.ts b/.eslintplugin/vscode-dts-use-thenable.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-use-thenable.ts
rename to .eslintplugin/vscode-dts-use-thenable.ts
diff --git a/build/lib/eslint/vscode-dts-vscode-in-comments.ts b/.eslintplugin/vscode-dts-vscode-in-comments.ts
similarity index 100%
rename from build/lib/eslint/vscode-dts-vscode-in-comments.ts
rename to .eslintplugin/vscode-dts-vscode-in-comments.ts
diff --git a/.eslintrc.json b/.eslintrc.json
index 481e18997c..045929033b 100755
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -8,7 +8,8 @@
"plugins": [
"@typescript-eslint",
"jsdoc",
- "header"
+ "header",
+ "local"
],
"rules": {
"no-undef": "off",
@@ -55,17 +56,18 @@
]
}
],
- "code-no-unused-expressions": [
+ "local/code-no-unused-expressions": [
"off",
{
"allowTernary": true
}
],
"code-translation-remind": "off",
- "code-no-nls-in-standalone-editor": "warn",
- "code-no-standalone-editor": "warn",
+ "local/code-no-nls-in-standalone-editor": "warn",
+ "local/code-no-standalone-editor": "warn",
"code-no-unexternalized-strings": "off",
- "code-layering": [
+ "local/code-declare-service-brand": "warn",
+ "local/code-layering": [
"warn",
{
"common": [],
@@ -79,12 +81,6 @@
"common",
"browser"
],
- "electron-browser": [
- "common",
- "browser",
- "node",
- "electron-sandbox"
- ],
"electron-main": [
"common",
"node"
@@ -1066,9 +1062,9 @@
"**/sql/**"
],
"rules": {
- "no-sync": "warn",
+ "code-no-test-only": "off",
"strict": ["warn", "never"],
- "no-console": "warn"
+ "code-no-unexternalized-strings": "off"
}
},
{
@@ -1077,14 +1073,15 @@
"**/vscode.proposed.d.ts"
],
"rules": {
- "vscode-dts-create-func": "warn",
- "vscode-dts-literal-or-types": "warn",
- "vscode-dts-interface-naming": "warn",
- "vscode-dts-cancellation": "warn",
- "vscode-dts-use-thenable": "warn",
- "vscode-dts-region-comments": "warn",
- "vscode-dts-vscode-in-comments": "warn",
- "vscode-dts-provider-naming": [
+ "local/vscode-dts-create-func": "warn",
+ "local/vscode-dts-literal-or-types": "warn",
+ "local/vscode-dts-string-type-literals": "warn",
+ "local/vscode-dts-interface-naming": "warn",
+ "local/vscode-dts-cancellation": "warn",
+ "local/vscode-dts-use-thenable": "warn",
+ "local/vscode-dts-region-comments": "warn",
+ "local/vscode-dts-vscode-in-comments": "warn",
+ "local/vscode-dts-provider-naming": [
"warn",
{
"allowed": [
@@ -1099,7 +1096,7 @@
]
}
],
- "vscode-dts-event-naming": [
+ "local/vscode-dts-event-naming": [
"warn",
{
"allowed": [
@@ -1123,6 +1120,7 @@
"invalidate",
"open",
"override",
+ "perform",
"receive",
"register",
"remove",
@@ -1139,6 +1137,425 @@
]
}
},
+ {
+ "files": [
+ "src/**/*.ts"
+ ],
+ "rules": {
+ "local/code-no-look-behind-regex": "warn",
+ "local/code-import-patterns": [
+ "off",
+ {
+ // imports that are allowed in all files of layers:
+ // - browser
+ // - electron-sandbox
+ "when": "hasBrowser",
+ "allow": [
+ "vs/css!./**/*"
+ ]
+ },
+ {
+ // imports that are allowed in all files of layers:
+ // - node
+ // - electron-main
+ "when": "hasNode",
+ "allow": [
+ "@parcel/watcher",
+ "@vscode/sqlite3",
+ "@vscode/vscode-languagedetection",
+ "@vscode/ripgrep",
+ "@vscode/iconv-lite-umd",
+ "@vscode/policy-watcher",
+ "@vscode/proxy-agent",
+ "@vscode/spdlog",
+ "@vscode/windows-process-tree",
+ "assert",
+ "child_process",
+ "console",
+ "cookie",
+ "crypto",
+ "electron",
+ "events",
+ "fs",
+ "graceful-fs",
+ "http",
+ "https",
+ "minimist",
+ "native-keymap",
+ "native-watchdog",
+ "net",
+ "node-pty",
+ "os",
+ "path",
+ "perf_hooks",
+ "stream",
+ "string_decoder",
+ "tas-client-umd",
+ "tls",
+ "url",
+ "util",
+ "v8-inspect-profiler",
+ "vscode-regexpp",
+ "vscode-textmate",
+ "worker_threads",
+ "xterm",
+ "xterm-addon-canvas",
+ "xterm-addon-image",
+ "xterm-addon-search",
+ "xterm-addon-serialize",
+ "xterm-addon-unicode11",
+ "xterm-addon-webgl",
+ "xterm-headless",
+ "yauzl",
+ "yazl",
+ "zlib"
+ ]
+ },
+ {
+ // imports that are allowed in all /test/ files
+ "when": "test",
+ "allow": [
+ "vs/css.build",
+ "assert",
+ "sinon",
+ "sinon-test"
+ ]
+ },
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // !!! Do not relax these rules !!!
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ //
+ // A path ending in /~ has a special meaning. It indicates a template position
+ // which will be substituted with one or more layers.
+ //
+ // When /~ is used in the target, the rule will be expanded to 14 distinct rules.
+ // e.g. "src/vs/base/~" will be expanded to:
+ // - src/vs/base/common
+ // - src/vs/base/worker
+ // - src/vs/base/browser
+ // - src/vs/base/electron-sandbox
+ // - src/vs/base/node
+ // - src/vs/base/electron-main
+ // - src/vs/base/test/common
+ // - src/vs/base/test/worker
+ // - src/vs/base/test/browser
+ // - src/vs/base/test/electron-sandbox
+ // - src/vs/base/test/node
+ // - src/vs/base/test/electron-main
+ //
+ // When /~ is used in the restrictions, it will be replaced with the correct
+ // layers that can be used e.g. "src/vs/base/electron-sandbox" will be able
+ // to import "{common,browser,electron-sanbox}", etc.
+ //
+ // It is possible to use /~ in the restrictions property even without using it in
+ // the target property by adding a layer property.
+ {
+ "target": "src/vs/base/~",
+ "restrictions": [
+ "vs/base/~"
+ ]
+ },
+ {
+ "target": "src/vs/base/parts/*/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~"
+ ]
+ },
+ {
+ "target": "src/vs/platform/*/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "tas-client-umd", // node module allowed even in /common/
+ "@microsoft/1ds-core-js", // node module allowed even in /common/
+ "@microsoft/1ds-post-js" // node module allowed even in /common/
+ ]
+ },
+ {
+ "target": "src/vs/editor/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~"
+ ]
+ },
+ {
+ "target": "src/vs/editor/contrib/*/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~"
+ ]
+ },
+ {
+ "target": "src/vs/editor/standalone/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/editor/standalone/~"
+ ]
+ },
+ {
+ "target": "src/vs/editor/editor.all.ts",
+ "layer": "browser",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~"
+ ]
+ },
+ {
+ "target": "src/vs/editor/editor.worker.ts",
+ "layer": "worker",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~"
+ ]
+ },
+ {
+ "target": "src/vs/editor/{editor.api.ts,editor.main.ts}",
+ "layer": "browser",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/editor/standalone/~",
+ "vs/editor/*"
+ ]
+ },
+ {
+ "target": "src/vs/workbench/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/workbench/~",
+ "vs/workbench/services/*/~",
+ "assert",
+ {
+ "when": "test",
+ "pattern": "vs/workbench/contrib/*/~"
+ } // TODO@layers
+ ]
+ },
+ {
+ "target": "src/vs/workbench/api/~",
+ "restrictions": [
+ "vscode",
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/workbench/api/~",
+ "vs/workbench/~",
+ "vs/workbench/services/*/~",
+ "vs/workbench/contrib/*/~",
+ "vs/workbench/contrib/terminalContrib/*/~"
+ ]
+ },
+ {
+ "target": "src/vs/workbench/services/*/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/workbench/~",
+ "vs/workbench/services/*/~",
+ {
+ "when": "test",
+ "pattern": "vs/workbench/contrib/*/~"
+ }, // TODO@layers
+ "tas-client-umd", // node module allowed even in /common/
+ "vscode-textmate", // node module allowed even in /common/
+ "@vscode/vscode-languagedetection" // node module allowed even in /common/
+ ]
+ },
+ {
+ "target": "src/vs/workbench/contrib/*/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/workbench/~",
+ "vs/workbench/services/*/~",
+ "vs/workbench/contrib/*/~",
+ "vscode-notebook-renderer", // Type only import
+ {
+ "when": "hasBrowser",
+ "pattern": "xterm"
+ }, // node module allowed even in /browser/
+ {
+ "when": "hasBrowser",
+ "pattern": "xterm-addon-*"
+ }, // node module allowed even in /browser/
+ {
+ "when": "hasBrowser",
+ "pattern": "vscode-textmate"
+ } // node module allowed even in /browser/
+ ]
+ },
+ {
+ "target": "src/vs/workbench/contrib/terminalContrib/*/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/workbench/~",
+ "vs/workbench/services/*/~",
+ "vs/workbench/contrib/*/~",
+ // Only allow terminalContrib to import from itself, this works because
+ // terminalContrib is one extra folder deep
+ "vs/workbench/contrib/terminalContrib/*/~",
+ "vscode-notebook-renderer", // Type only import
+ {
+ "when": "hasBrowser",
+ "pattern": "xterm"
+ }, // node module allowed even in /browser/
+ {
+ "when": "hasBrowser",
+ "pattern": "xterm-addon-*"
+ }, // node module allowed even in /browser/
+ {
+ "when": "hasBrowser",
+ "pattern": "vscode-textmate"
+ } // node module allowed even in /browser/
+ ]
+ },
+ {
+ "target": "src/vs/code/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/code/~",
+ {
+ "when": "hasBrowser",
+ "pattern": "vs/workbench/workbench.web.main"
+ },
+ {
+ "when": "hasBrowser",
+ "pattern": "vs/workbench/~"
+ },
+ {
+ "when": "hasBrowser",
+ "pattern": "vs/workbench/services/*/~"
+ }
+ ]
+ },
+ {
+ "target": "src/vs/server/~",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/workbench/~",
+ "vs/workbench/api/~",
+ "vs/workbench/services/*/~",
+ "vs/workbench/contrib/*/~",
+ "vs/server/~"
+ ]
+ },
+ {
+ "target": "src/vs/workbench/contrib/terminal/terminal.all.ts",
+ "layer": "browser",
+ "restrictions": [
+ "vs/workbench/contrib/**"
+ ]
+ },
+ {
+ "target": "src/vs/workbench/workbench.common.main.ts",
+ "layer": "browser",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/editor/editor.all",
+ "vs/workbench/~",
+ "vs/workbench/api/~",
+ "vs/workbench/services/*/~",
+ "vs/workbench/contrib/*/~",
+ "vs/workbench/contrib/terminal/terminal.all"
+ ]
+ },
+ {
+ "target": "src/vs/workbench/workbench.web.main.ts",
+ "layer": "browser",
+ "restrictions": [
+ "vs/base/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/editor/editor.all",
+ "vs/workbench/~",
+ "vs/workbench/api/~",
+ "vs/workbench/services/*/~",
+ "vs/workbench/contrib/*/~",
+ "vs/workbench/workbench.common.main"
+ ]
+ },
+ {
+ "target": "src/vs/workbench/workbench.desktop.main.ts",
+ "layer": "electron-sandbox",
+ "restrictions": [
+ "vs/base/*/~",
+ "vs/base/parts/*/~",
+ "vs/platform/*/~",
+ "vs/editor/~",
+ "vs/editor/contrib/*/~",
+ "vs/editor/editor.all",
+ "vs/workbench/~",
+ "vs/workbench/api/~",
+ "vs/workbench/services/*/~",
+ "vs/workbench/contrib/*/~",
+ "vs/workbench/workbench.common.main"
+ ]
+ },
+ {
+ "target": "src/vs/workbench/{workbench.desktop.main.nls.js,workbench.web.main.nls.js}",
+ "restrictions": []
+ },
+ {
+ "target": "src/vs/{loader.d.ts,css.ts,css.build.ts,monaco.d.ts,nls.ts,nls.build.ts,nls.mock.ts}",
+ "restrictions": []
+ },
+ {
+ "target": "src/vscode-dts/**",
+ "restrictions": []
+ },
+ {
+ "target": "src/{bootstrap-amd.js,bootstrap-fork.js,bootstrap-node.js,bootstrap-window.js,bootstrap.js,cli.js,main.js,server-cli.js,server-main.js}",
+ "restrictions": []
+ }
+ ]
+ }
+ },
{
"files": [
"src/{vs,sql}/server/*",
@@ -1182,3 +1599,4 @@
}
]
}
+
diff --git a/.git-blame-ignore b/.git-blame-ignore
index 24b19f36c3..457d2604f3 100644
--- a/.git-blame-ignore
+++ b/.git-blame-ignore
@@ -15,6 +15,9 @@ ae1452eea678f5266ef513f22dacebb90955d6c9
# joaomoreno: add ghooks dev dependency
0dfc06e0f9de5925de792cdf9f0e6597bb25908f
+# joaomoreno: line endings
+12ab70d329a13dd5b18d892cd40edd7138259bc3
+
# mjbvz: organize imports
494cbbd02d67e87727ec885f98d19551aa33aad1
a3cb14be7f2cceadb17adf843675b1a59537dbbd
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 0000000000..5ace4600a1
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,6 @@
+version: 2
+updates:
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
diff --git a/.github/workflows/bad-tag.yml b/.github/workflows/bad-tag.yml
index e996639dfb..ba4e0524cc 100644
--- a/.github/workflows/bad-tag.yml
+++ b/.github/workflows/bad-tag.yml
@@ -8,7 +8,7 @@ jobs:
if: github.event.ref == '1.999.0'
steps:
- name: Checkout Actions
- uses: actions/checkout@v2
+ uses: actions/checkout@v3
with:
repository: "microsoft/vscode-github-triage-actions"
ref: stable
diff --git a/.github/workflows/telemetry.yml b/.github/workflows/telemetry.yml
new file mode 100644
index 0000000000..3bfaf8117c
--- /dev/null
+++ b/.github/workflows/telemetry.yml
@@ -0,0 +1,19 @@
+name: 'Telemetry'
+on:
+ pull_request:
+jobs:
+ check-metdata:
+ name: 'Check metadata'
+ runs-on: 'ubuntu-latest'
+
+ steps:
+ - uses: 'actions/checkout@v3'
+
+ - uses: 'actions/setup-node@v3'
+ with:
+ node-version: 'lts/*'
+
+ - name: 'Run vscode-telemetry-extractor'
+ run: 'npx --package=@vscode/telemetry-extractor --yes vscode-telemetry-extractor -s .'
+ env:
+ GITHUB_TOKEN: ${{secrets.VSCODE_ISSUE_TRIAGE_BOT_PAT}}
diff --git a/.gitignore b/.gitignore
index 74504885b3..6ae20a83e4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@ vscode.lsif
vscode.db
/.profile-oss
*.orig
+/cli/target
+product.overrides.json
diff --git a/.nvmrc b/.nvmrc
index 0cf077e6b4..5cb297e3e4 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-16.14
+16.17
diff --git a/.vscode/cglicenses.schema.json b/.vscode/cglicenses.schema.json
index 8c0ee74010..8131a35217 100644
--- a/.vscode/cglicenses.schema.json
+++ b/.vscode/cglicenses.schema.json
@@ -55,6 +55,31 @@
}
}
}
+ },
+ {
+ "type": "object",
+ "required": [
+ "name",
+ "fullLicenseTextUri"
+ ],
+ "properties": {
+ "name": {
+ "type": "string",
+ "description": "The name of the dependency"
+ },
+ "fullLicenseTextUri": {
+ "type": "string",
+ "description": "The URI to the license text of this repository",
+ "format": "uri"
+ },
+ "prependLicenseText": {
+ "type": "array",
+ "description": "A piece of text to prepend to the auto-detected license text of the dependency",
+ "items": {
+ "type": "string"
+ }
+ }
+ }
}
]
}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 20d53a66c6..0d3101d30a 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -4,6 +4,8 @@
"recommendations": [
"dbaeumer.vscode-eslint",
"EditorConfig.EditorConfig",
+ "GitHub.vscode-pull-request-github",
+ "ms-vscode.vscode-github-issue-notebooks",
"ms-vscode.vscode-selfhost-test-provider"
]
}
diff --git a/.vscode/launch.json b/.vscode/launch.json
index 479d4863bb..d3fce1224d 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -8,7 +8,7 @@
"program": "${workspaceFolder}/node_modules/gulp/bin/gulp.js",
"stopOnEntry": true,
"args": [
- "hygiene"
+ "vscode-win32-x64"
]
},
{
diff --git a/.vscode/notebooks/api.github-issues b/.vscode/notebooks/api.github-issues
index 6ba33aa8ae..b32c51eaae 100644
--- a/.vscode/notebooks/api.github-issues
+++ b/.vscode/notebooks/api.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"July 2022\""
+ "value": "$repo=repo:microsoft/vscode\n$milestone=milestone:\"May 2023\""
},
{
"kind": 1,
diff --git a/.vscode/notebooks/endgame.github-issues b/.vscode/notebooks/endgame.github-issues
index d637ade8f2..64658b950f 100644
--- a/.vscode/notebooks/endgame.github-issues
+++ b/.vscode/notebooks/endgame.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"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-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 repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n\n$MILESTONE=milestone:\"May 2023\""
},
{
"kind": 1,
@@ -32,7 +32,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS -$MILESTONE is:issue is:closed label:bug label:insiders-released -label:verified -label:*duplicate -label:*as-designed -label:z-author-verified -label:on-testplan"
+ "value": "$REPOS -$MILESTONE is:issue is:closed reason:completed label:bug label:insiders-released -label:verified -label:*duplicate -label:*as-designed -label:z-author-verified -label:on-testplan"
},
{
"kind": 1,
@@ -42,7 +42,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS -$MILESTONE is:issue is:closed label:feature-request label:insiders-released -label:on-testplan -label:verified -label:*duplicate"
+ "value": "$REPOS -$MILESTONE is:issue is:closed reason:completed label:feature-request label:insiders-released -label:on-testplan -label:verified -label:*duplicate"
},
{
"kind": 1,
@@ -62,7 +62,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE is:issue is:closed label:feature-request -label:verification-needed -label:on-testplan -label:verified -label:*duplicate"
+ "value": "$REPOS $MILESTONE is:issue is:closed reason:completed label:feature-request -label:verification-needed -label:on-testplan -label:verified -label:*duplicate"
},
{
"kind": 1,
@@ -97,7 +97,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE is:issue is:closed label:verification-needed -label:verified"
+ "value": "$REPOS $MILESTONE is:issue is:closed reason:completed label:verification-needed -label:verified"
},
{
"kind": 1,
@@ -112,7 +112,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE is:issue is:closed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -label:z-author-verified -label:unreleased"
+ "value": "$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:z-author-verified -label:unreleased"
},
{
"kind": 1,
@@ -122,7 +122,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE is:issue is:closed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:verification-found -label:z-author-verified label:unreleased"
+ "value": "$REPOS $MILESTONE is:issue is:closed reason:completed sort:updated-asc label:bug -label:verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:z-author-verified label:unreleased"
},
{
"kind": 1,
diff --git a/.vscode/notebooks/my-endgame.github-issues b/.vscode/notebooks/my-endgame.github-issues
index 25b9625ef3..ffb68cb37a 100644
--- a/.vscode/notebooks/my-endgame.github-issues
+++ b/.vscode/notebooks/my-endgame.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"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-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 repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n\n$MILESTONE=milestone:\"May 2023\"\n\n$MINE=assignee:@me"
},
{
"kind": 1,
@@ -42,7 +42,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE $MINE is:issue is:closed label:feature-request -label:verification-needed -label:on-testplan -label:verified -label:*duplicate"
+ "value": "$REPOS $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request -label:verification-needed -label:on-testplan -label:verified -label:*duplicate"
},
{
"kind": 1,
@@ -62,7 +62,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE $MINE is:issue is:closed label:feature-request label:verification-needed -label:verified"
+ "value": "$REPOS $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request label:verification-needed -label:verified"
},
{
"kind": 1,
@@ -87,7 +87,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE -$MINE is:issue is:closed -assignee:@me -label:verified -label:z-author-verified label:feature-request label:verification-needed"
+ "value": "$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed -assignee:@me -label:verified -label:z-author-verified label:feature-request label:verification-needed -label:verification-steps-needed -label:unreleased"
},
{
"kind": 1,
@@ -147,7 +147,7 @@
{
"kind": 2,
"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 reason:completed author:@me sort:updated-asc label:bug -label:unreleased -label:verified -label:z-author-verified -label:on-testplan -label:*duplicate -label:duplicate -label:invalid -label:*as-designed -label:error-telemetry -label:verification-steps-needed -label:triage-needed -label:verification-found"
},
{
"kind": 1,
@@ -157,7 +157,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$REPOS $MILESTONE -$MINE is:issue is:closed 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:verification-found -author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:bamurtaugh -author:bpasero -author:chrisdias -author:chrmarti -author:Chuxel -author:claudiaregio -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:DonJayamanne -author:dynamicwebpaige -author:eamodio -author:egamma -author:fiveisprime -author:greazer -author:gregvanl -author:hediet -author:IanMatthewHuff -author:isidorn -author:ItalyPaleAle -author:JacksonKearl -author:joaomoreno -author:joyceerhl -author:jrieken -author:karrtikr-author:kieferrm -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:ornellaalt -author:orta -author:rchiodo -author:rebornix -author:roblourens -author:rzhao271 -author:sana-ajani -author:sandy081 -author:sbatten -author:stevencl -author:tanhakabir -author:TylerLeonhardt -author:Tyriar -author:weinand -author:kimadeline -author:amunger"
+ "value": "$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed 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:verification-found -author:aeschli -author:alexdima -author:alexr00 -author:AmandaSilver -author:andreamah -author:bamurtaugh -author:bpasero -author:chrisdias -author:chrmarti -author:Chuxel -author:claudiaregio -author:connor4312 -author:dbaeumer -author:deepak1556 -author:devinvalenciano -author:digitarald -author:DonJayamanne -author:egamma -author:fiveisprime -author:gregvanl -author:hediet -author:isidorn -author:joaomoreno -author:joyceerhl -author:jrieken -author:karrtikr -author:kieferrm -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:roblourens -author:rzhao271 -author:sandy081 -author:sbatten -author:stevencl -author:tanhakabir -author:TylerLeonhardt -author:Tyriar -author:weinand -author:amunger -author:karthiknadig -author:eleanorjboyd -author:Yoyokrazy -author:paulacamargo25 -author:ulugbekna -author:aiday-mar"
},
{
"kind": 1,
@@ -167,7 +167,7 @@
{
"kind": 2,
"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:verification-found"
+ "value": "$REPOS $MILESTONE -$MINE is:issue is:closed reason:completed -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:verification-found"
},
{
"kind": 1,
@@ -177,6 +177,6 @@
{
"kind": 2,
"language": "github-issues",
- "value": "repo:microsoft/vscode $MILESTONE $MINE is:issue is:closed label:feature-request -label:on-release-notes"
+ "value": "repo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:feature-request -label:on-release-notes\nrepo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:engineering -label:on-release-notes\nrepo:microsoft/vscode $MILESTONE $MINE is:issue is:closed reason:completed label:plan-item -label:on-release-notes"
}
]
\ No newline at end of file
diff --git a/.vscode/notebooks/my-work.github-issues b/.vscode/notebooks/my-work.github-issues
index 84f67029d3..8e4a9942c4 100644
--- a/.vscode/notebooks/my-work.github-issues
+++ b/.vscode/notebooks/my-work.github-issues
@@ -7,7 +7,7 @@
{
"kind": 2,
"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 repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels repo:microsoft/vscode-markdown-tm-grammar repo:microsoft/vscode-markdown-languageservice\n\n// current milestone name\n$milestone=milestone:\"May 2023\""
},
{
"kind": 1,
@@ -94,7 +94,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"needs more info\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry"
+ "value": "$repos assignee:@me is:open type:issue -label:bug -label:\"info-needed\" -label:feature-request -label:under-discussion -label:debt -label:plan-item -label:upstream -label:polish -label:testplan-item -label:error-telemetry"
},
{
"kind": 1,
@@ -104,7 +104,17 @@
{
"kind": 2,
"language": "github-issues",
- "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"needs more info\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:code-lens -label:color-palette -label:comments -label:config -label:context-keys -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:engineering -label:error-list -label:extension-host -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:gpu -label:grammar -label:grid-view -label:html -label:i18n -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-window -label:ipc -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list -label:live-server -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:network -label:notebook -label:notebook-api -label:notebook-celltoolbar -label:notebook-diff -label:notebook-dnd -label:notebook-folding -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-keybinding -label:notebook-layout -label:notebook-markdown -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-statusbar -label:open-editors -label:opener -label:outline -label:output -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remotehub -label:rename -label:sandbox -label:sash -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview -label:suggest -label:sync-error-handling -label:table -label:tasks -label:telemetry -label:terminal -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-links -label:terminal-local-echo -label:terminal-profiles -label:terminal-reconnection -label:terminal-rendering -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typehierarchy -label:typescript -label:undo-redo -label:uri -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-build -label:vscode-website -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-feedback -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom"
+ "value": "repo:microsoft/vscode assignee:@me is:open type:issue -label:\"info-needed\" -label:api -label:api-finalization -label:api-proposal -label:authentication -label:bisect-ext -label:bracket-pair-colorization -label:bracket-pair-guides -label:breadcrumbs -label:callhierarchy -label:chrome-devtools -label:code-lens -label:color-palette -label:comments -label:config -label:context-keys -label:css-less-scss -label:custom-editors -label:debug -label:debug-disassembly -label:dialogs -label:diff-editor -label:dropdown -label:editor -label:editor-autoclosing -label:editor-autoindent -label:editor-bracket-matching -label:editor-clipboard -label:editor-code-actions -label:editor-color-picker -label:editor-columnselect -label:editor-commands -label:editor-comments -label:editor-contrib -label:editor-core -label:editor-drag-and-drop -label:editor-error-widget -label:editor-find -label:editor-folding -label:editor-highlight -label:editor-hover -label:editor-indent-detection -label:editor-indent-guides -label:editor-input -label:editor-input-IME -label:editor-insets -label:editor-minimap -label:editor-multicursor -label:editor-parameter-hints -label:editor-render-whitespace -label:editor-rendering -label:editor-RTL -label:editor-scrollbar -label:editor-symbols -label:editor-synced-region -label:editor-textbuffer -label:editor-theming -label:editor-wordnav -label:editor-wrapping -label:emmet -label:engineering -label:error-list -label:extension-host -label:extension-recommendations -label:extensions -label:extensions-development -label:file-decorations -label:file-encoding -label:file-explorer -label:file-glob -label:file-io -label:file-watcher -label:font-rendering -label:formatting -label:getting-started -label:ghost-text -label:git -label:github -label:gpu -label:grammar -label:grid-view -label:html -label:i18n -label:icon-brand -label:icons-product -label:image-preview -label:inlay-hints -label:inline-completions -label:install-update -label:intellisense-config -label:interactive-window -label:ipc -label:issue-bot -label:issue-reporter -label:javascript -label:json -label:keybindings -label:keybindings-editor -label:keyboard-layout -label:L10N -label:label-provider -label:languages-basic -label:languages-diagnostics -label:languages-guessing -label:layout -label:lcd-text-rendering -label:list -label:live-server -label:log -label:markdown -label:marketplace -label:menus -label:merge-conflict -label:network -label:notebook -label:notebook-api -label:notebook-celltoolbar -label:notebook-diff -label:notebook-dnd -label:notebook-folding -label:notebook-globaltoolbar -label:notebook-ipynb -label:notebook-kernel -label:notebook-keybinding -label:notebook-layout -label:notebook-markdown -label:notebook-minimap -label:notebook-multiselect -label:notebook-output -label:notebook-perf -label:notebook-statusbar -label:open-editors -label:opener -label:outline -label:output -label:perf -label:perf-bloat -label:perf-startup -label:php -label:portable-mode -label:proxy -label:quick-open -label:quick-pick -label:references-viewlet -label:release-notes -label:remote -label:remote-connection -label:remote-explorer -label:remotehub -label:rename -label:sandbox -label:sash -label:scm -label:screencast-mode -label:search -label:search-api -label:search-editor -label:search-replace -label:semantic-tokens -label:settings-editor -label:settings-sync -label:settings-sync-server -label:shared-process -label:simple-file-dialog -label:smart-select -label:snap -label:snippets -label:splitview -label:suggest -label:sync-error-handling -label:table -label:tasks -label:telemetry -label:terminal -label:terminal-conpty -label:terminal-editors -label:terminal-external -label:terminal-links -label:terminal-local-echo -label:terminal-profiles -label:terminal-reconnection -label:terminal-rendering -label:terminal-tabs -label:terminal-winpty -label:testing -label:themes -label:timeline -label:timeline-git -label:titlebar -label:tokenization -label:touch/pointer -label:trackpad/scroll -label:tree-views -label:tree-widget -label:typehierarchy -label:typescript -label:undo-redo -label:uri -label:ux -label:variable-resolving -label:VIM -label:virtual-workspaces -label:vscode-build -label:vscode-website -label:web -label:webview -label:webview-views -label:workbench-actions -label:workbench-cli -label:workbench-diagnostics -label:workbench-dnd -label:workbench-editor-grid -label:workbench-editor-groups -label:workbench-editor-resolver -label:workbench-editors -label:workbench-electron -label:workbench-feedback -label:workbench-history -label:workbench-hot-exit -label:workbench-hover -label:workbench-launch -label:workbench-link -label:workbench-multiroot -label:workbench-notifications -label:workbench-os-integration -label:workbench-rapid-render -label:workbench-run-as-admin -label:workbench-state -label:workbench-status -label:workbench-tabs -label:workbench-touchbar -label:workbench-untitled-editors -label:workbench-views -label:workbench-welcome -label:workbench-window -label:workbench-zen -label:workspace-edit -label:workspace-symbols -label:workspace-trust -label:zoom"
+ },
+ {
+ "kind": 1,
+ "language": "markdown",
+ "value": "### Missing Milestone"
+ },
+ {
+ "kind": 2,
+ "language": "github-issues",
+ "value": "$repos assignee:@me is:open type:issue no:milestone -label:info-needed -label:triage-needed"
},
{
"kind": 1,
@@ -140,5 +150,15 @@
"kind": 2,
"language": "github-issues",
"value": "$repos author:@me is:open is:pr review:required"
+ },
+ {
+ "kind": 1,
+ "language": "markdown",
+ "value": "âš ï¸ Changes Requested"
+ },
+ {
+ "kind": 2,
+ "language": "github-issues",
+ "value": "$repos author:@me is:open is:pr review:changes_requested"
}
]
\ No newline at end of file
diff --git a/.vscode/notebooks/verification.github-issues b/.vscode/notebooks/verification.github-issues
index 7015a401be..15cf60b17d 100644
--- a/.vscode/notebooks/verification.github-issues
+++ b/.vscode/notebooks/verification.github-issues
@@ -2,7 +2,7 @@
{
"kind": 1,
"language": "markdown",
- "value": "### Bug Verification Queries\n\nBefore shipping we want to verify _all_ bugs. That means when a bug is fixed we check that the fix actually works. It's always best to start with bugs that you have filed and the proceed with bugs that have been filed from users outside the development team. "
+ "value": "### Bug Verification Queries\r\n\r\nBefore shipping we want to verify _all_ bugs. That means when a bug is fixed we check that the fix actually works. It's always best to start with bugs that you have filed and the proceed with bugs that have been filed from users outside the development team. "
},
{
"kind": 1,
@@ -12,7 +12,7 @@
{
"kind": 2,
"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-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 repo:microsoft/vscode-dev-chrome-launcher repo:microsoft/vscode-emmet-helper repo:microsoft/vscode-livepreview repo:microsoft/vscode-livepreview repo:microsoft/vscode-python repo:microsoft/vscode-jupyter repo:microsoft/vscode-jupyter-internal repo:microsoft/vscode-github-issue-notebooks repo:microsoft/vscode-l10n repo:microsoft/vscode-remote-tunnels\n$milestone=milestone:\"February 2023\""
},
{
"kind": 1,
@@ -22,7 +22,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$repos $milestone is:closed -assignee:@me label:bug -label:verified -label:*duplicate author:@me"
+ "value": "$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate author:@me"
},
{
"kind": 1,
@@ -32,7 +32,7 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$repos $milestone is:closed -assignee:@me label:bug -label:verified -label:*duplicate -author:@me -assignee:@me label:bug -label:verified -author:@me -author:aeschli -author:alexdima -author:alexr00 -author:bpasero -author:chrisdias -author:chrmarti -author:connor4312 -author:dbaeumer -author:deepak1556 -author:eamodio -author:egamma -author:gregvanl -author:isidorn -author:JacksonKearl -author:joaomoreno -author:jrieken -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:RMacfarlane -author:roblourens -author:sana-ajani -author:sandy081 -author:sbatten -author:Tyriar -author:weinand -author:rzhao271 -author:kieferrm -author:TylerLeonhardt -author:bamurtaugh -author:hediet -author:joyceerhl -author:rchiodo -author:IanMatthewHuff"
+ "value": "$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate -author:@me -assignee:@me label:bug -label:verified -author:@me -author:aeschli -author:alexdima -author:alexr00 -author:bpasero -author:chrisdias -author:chrmarti -author:connor4312 -author:dbaeumer -author:deepak1556 -author:eamodio -author:egamma -author:gregvanl -author:isidorn -author:JacksonKearl -author:joaomoreno -author:jrieken -author:lramos15 -author:lszomoru -author:meganrogge -author:misolori -author:mjbvz -author:rebornix -author:RMacfarlane -author:roblourens -author:sana-ajani -author:sandy081 -author:sbatten -author:Tyriar -author:weinand -author:rzhao271 -author:kieferrm -author:TylerLeonhardt -author:bamurtaugh -author:hediet -author:joyceerhl -author:rchiodo"
},
{
"kind": 1,
@@ -42,6 +42,6 @@
{
"kind": 2,
"language": "github-issues",
- "value": "$repos $milestone is:closed -assignee:@me label:bug -label:verified -label:*duplicate"
+ "value": "$repos $milestone is:closed reason:completed -assignee:@me label:bug -label:verified -label:*duplicate"
}
]
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 718cfd2205..f5ed543e0a 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -6,27 +6,44 @@
".build": true,
".profile-oss": true,
"**/.DS_Store": true,
+ "cli/target": true,
"build/**/*.js": {
"when": "$(basename).ts"
}
},
"files.associations": {
- "cglicenses.json": "jsonc"
+ "cglicenses.json": "jsonc",
+ "*.tst": "typescript"
},
"search.exclude": {
"**/node_modules": true,
- "**/bower_components": true,
+ "cli/target/**": true,
".build/**": true,
"out/**": true,
"out-build/**": true,
"out-vscode/**": true,
"i18n/**": true,
+ "extensions/**/dist/**": true,
"extensions/**/out/**": true,
"test/smoke/out/**": true,
"test/automation/out/**": true,
"test/integration/browser/out/**": true,
+ "src/vs/base/test/common/filters.perf.data.js": true,
"src/vs/base/test/node/uri.test.data.txt": true,
- "src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts": true
+ "src/vs/workbench/api/test/browser/extHostDocumentData.test.perf-data.ts": true,
+ "src/vs/editor/test/node/diffing/fixtures/**": true,
+ },
+ "files.readonlyInclude": {
+ "**/node_modules/**": true,
+ "out/**": true,
+ "out-build/**": true,
+ "out-vscode/**": true,
+ "out-vscode-reh/**": true,
+ "extensions/**/dist/**": true,
+ "extensions/**/out/**": true,
+ "test/smoke/out/**": true,
+ "test/automation/out/**": true,
+ "test/integration/browser/out/**": true,
},
"lcov.path": [
"./.build/coverage/lcov.info",
@@ -41,11 +58,6 @@
}
}
],
- "eslint.options": {
- "rulePaths": [
- "./build/lib/eslint"
- ]
- },
"typescript.tsdk": "node_modules/typescript/lib",
"npm.exclude": "**/extensions/**",
"npm.packageManager": "yarn",
@@ -57,7 +69,7 @@
"fileMatch": [
"cgmanifest.json"
],
- "url": "https://json.schemastore.org/component-detection-manifest.json"
+ "url": "./.vscode/cgmanifest.schema.json"
},
{
"fileMatch": [
@@ -69,10 +81,12 @@
"git.ignoreLimitWarning": true,
"git.branchProtection": [
"main",
+ "distro",
"release/*"
],
"git.branchProtectionPrompt": "alwaysCommitToNewBranch",
"git.branchRandomName.enable": true,
+ "git.pullBeforeCheckout": true,
"git.mergeEditor": true,
"remote.extensionKind": {
"msjsdiag.debugger-for-chrome": "workspace"
@@ -90,6 +104,13 @@
"editor.defaultFormatter": "vscode.typescript-language-features",
"editor.formatOnSave": true
},
+ "[rust]": {
+ "editor.defaultFormatter": "rust-lang.rust-analyzer",
+ "editor.formatOnSave": true,
+ },
+ "rust-analyzer.linkedProjects": [
+ "cli/Cargo.toml"
+ ],
"typescript.tsc.autoDetect": "off",
"testing.autoRun.mode": "rerun",
"conventionalCommits.scopes": [
@@ -102,12 +123,18 @@
"git",
"sash"
],
- "editor.quickSuggestions": {
- "other": "inline",
- "comments": "inline",
- "strings": "inline"
- },
- "yaml.schemas": {
- "https://raw.githubusercontent.com/microsoft/azure-pipelines-vscode/master/service-schema.json": "build/azure-pipelines/**/*.yml"
+ "debug.javascript.terminalOptions": {
+ "outFiles": [
+ "${workspaceFolder}/out/**/*.js",
+ "${workspaceFolder}/build/**/*.js"
+ ]
},
+ "githubPullRequests.assignCreated": "${user}",
+ "githubPullRequests.defaultMergeMethod": "squash",
+ "githubPullRequests.ignoredPullRequestBranches": [
+ "main"
+ ],
+ "application.experimental.rendererProfiling": true,
+ "editor.experimental.asyncTokenization": true,
+ "editor.experimental.asyncTokenizationVerification": true
}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
index ef8e3bf538..cb81d1572f 100644
--- a/.vscode/tasks.json
+++ b/.vscode/tasks.json
@@ -203,6 +203,28 @@
"reveal": "never"
}
},
+ {
+ "type": "shell",
+ "command": "./scripts/code-web.sh",
+ "windows": {
+ "command": ".\\scripts\\code-web.bat"
+ },
+ "args": ["--port", "8080", "--browser", "none"],
+ "label": "Run code web",
+ "isBackground": true,
+ "problemMatcher": {
+ "pattern": {
+ "regexp": ""
+ },
+ "background": {
+ "beginsPattern": ".*node .*",
+ "endsPattern": "Listening on .*"
+ }
+ },
+ "presentation": {
+ "reveal": "never"
+ }
+ },
{
"type": "npm",
"script": "eslint",
diff --git a/.yarnrc b/.yarnrc
index 6d4029fb88..2e1d808197 100644
--- a/.yarnrc
+++ b/.yarnrc
@@ -1,4 +1,4 @@
disturl "https://electronjs.org/headers"
-target "19.1.8"
+target "22.3.10"
runtime "electron"
build_from_source "true"
diff --git a/build/.cachesalt b/build/.cachesalt
index c0d4fa40fc..e41ee49d6d 100644
--- a/build/.cachesalt
+++ b/build/.cachesalt
@@ -1 +1 @@
-2022-07-19T07:55:26.168Z
+2023-03-31T12:39:03.753Z
diff --git a/build/.moduleignore b/build/.moduleignore
index e018f82e09..c8230083f4 100644
--- a/build/.moduleignore
+++ b/build/.moduleignore
@@ -12,6 +12,14 @@ fsevents/src/**
fsevents/test/**
!fsevents/**/*.node
+@vscode/spdlog/binding.gyp
+@vscode/spdlog/build/**
+@vscode/spdlog/deps/**
+@vscode/spdlog/src/**
+@vscode/spdlog/test/**
+@vscode/spdlog/*.yml
+!@vscode/spdlog/build/Release/*.node
+
@vscode/sqlite3/binding.gyp
@vscode/sqlite3/benchmark/**
@vscode/sqlite3/cloudformation/**
@@ -21,10 +29,20 @@ fsevents/test/**
@vscode/sqlite3/src/**
!@vscode/sqlite3/build/Release/*.node
-windows-mutex/binding.gyp
-windows-mutex/build/**
-windows-mutex/src/**
-!windows-mutex/**/*.node
+@vscode/windows-mutex/binding.gyp
+@vscode/windows-mutex/build/**
+@vscode/windows-mutex/src/**
+!@vscode/windows-mutex/**/*.node
+
+@vscode/windows-process-tree/binding.gyp
+@vscode/windows-process-tree/build/**
+@vscode/windows-process-tree/src/**
+!@vscode/windows-process-tree/**/*.node
+
+@vscode/windows-registry/binding.gyp
+@vscode/windows-registry/src/**
+@vscode/windows-registry/build/**
+!@vscode/windows-registry/build/Release/*.node
native-keymap/binding.gyp
native-keymap/build/**
@@ -43,26 +61,16 @@ native-watchdog/build/**
native-watchdog/src/**
!native-watchdog/build/Release/*.node
-spdlog/binding.gyp
-spdlog/build/**
-spdlog/deps/**
-spdlog/src/**
-spdlog/test/**
-spdlog/*.yml
-!spdlog/build/Release/*.node
-
-jschardet/dist/**
+node-vsce-sign/**
+!node-vsce-sign/src/main.js
+!node-vsce-sign/package.json
+!node-vsce-sign/bin/**
windows-foreground-love/binding.gyp
windows-foreground-love/build/**
windows-foreground-love/src/**
!windows-foreground-love/**/*.node
-windows-process-tree/binding.gyp
-windows-process-tree/build/**
-windows-process-tree/src/**
-!windows-process-tree/**/*.node
-
keytar/binding.gyp
keytar/build/**
keytar/src/**
@@ -73,9 +81,11 @@ keytar/node_modules/**
node-pty/binding.gyp
node-pty/build/**
node-pty/src/**
+node-pty/lib/*.test.js
node-pty/tools/**
node-pty/deps/**
node-pty/scripts/**
+!node-pty/build/Release/spawn-helper
!node-pty/build/Release/*.exe
!node-pty/build/Release/*.dll
!node-pty/build/Release/*.node
@@ -104,18 +114,6 @@ kerberos/build/**
# END SQL Modules
-nsfw/binding.gyp
-nsfw/build/**
-nsfw/src/**
-nsfw/includes/**
-!nsfw/build/Release/*.node
-
-vscode-nsfw/binding.gyp
-vscode-nsfw/build/**
-vscode-nsfw/src/**
-vscode-nsfw/includes/**
-!vscode-nsfw/build/Release/*.node
-
@parcel/watcher/binding.gyp
@parcel/watcher/build/**
@parcel/watcher/prebuilds/**
@@ -128,6 +126,7 @@ vsda/src/**
vsda/.gitignore
vsda/binding.gyp
vsda/README.md
+vsda/SECURITY.md
vsda/targets
!vsda/build/Release/vsda.node
@@ -139,19 +138,20 @@ vscode-encrypt/binding.gyp
vscode-encrypt/README.md
!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/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/package.json
-!vscode-windows-ca-certs/**/*.node
+@vscode/windows-ca-certs/**/*
+!@vscode/windows-ca-certs/package.json
+!@vscode/windows-ca-certs/**/*.node
node-addon-api/**/*
+prebuild-install/**/*
# other node modules
@@ -166,11 +166,22 @@ node-addon-api/**/*
**/README.md
**/readme.md
**/readme.markdown
+**/CODE_OF_CONDUCT.md
+**/SUPPORT.md
+**/CONTRIBUTING.md
**/*.ts
-!typescript/**/*.d.ts
-jschardet/dist/**
+# Exclude TS files that aren't needed by TS extension
+typescript/lib/tsc.js
+typescript/lib/typescriptServices.js
+typescript/lib/tsserverlibrary.js
+# We still need to include stdlib d.ts
+!typescript/lib/lib*.d.ts
+
+jschardet/index.js
+jschardet/src/**
+jschardet/dist/jschardet.js
es6-promise/lib/**
@@ -189,5 +200,3 @@ xterm-addon-*/src/**
xterm-addon-*/fixtures/**
xterm-addon-*/out/**
xterm-addon-*/out-test/**
-
-
diff --git a/build/.webignore b/build/.webignore
index fc1d206764..8d7e36713a 100644
--- a/build/.webignore
+++ b/build/.webignore
@@ -20,6 +20,12 @@ vscode-textmate/webpack.config.js
xterm/src/**
+xterm-addon-canvas/src/**
+xterm-addon-canvas/out/**
+
+xterm-addon-image/src/**
+xterm-addon-image/out/**
+
xterm-addon-search/src/**
xterm-addon-search/out/**
xterm-addon-search/fixtures/**
@@ -32,3 +38,15 @@ xterm-addon-webgl/out/**
# This makes sure the model is included in the package
!@vscode/vscode-languagedetection/model/**
+# Ensure only the required telemetry pieces are loaded in web to reduce bundle size
+@microsoft/1ds-core-js/**
+@microsoft/1ds-post-js/**
+@microsoft/applicationinsights-core-js/**
+@microsoft/applicationinsights-shims/**
+!@microsoft/1ds-core-js/dist/ms.core.min.js
+!@microsoft/1ds-post-js/dist/ms.post.min.js
+!@microsoft/applicationinsights-core-js/browser/applicationinsights-core-js.min.js
+!@microsoft/applicationinsights-shims/dist/umd/applicationinsights-shims.min.js
+
+vsda/**
+!vsda/rust/web/**
diff --git a/build/actions/api/api.js b/build/actions/api/api.js
index bda3e6b964..ce6fe87ffb 100644
--- a/build/actions/api/api.js
+++ b/build/actions/api/api.js
@@ -4,3 +4,4 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
Object.defineProperty(exports, "__esModule", { value: true });
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRyJ9
\ No newline at end of file
diff --git a/build/actions/api/octokit.js b/build/actions/api/octokit.js
index 865fe5f710..da802ab1d1 100644
--- a/build/actions/api/octokit.js
+++ b/build/actions/api/octokit.js
@@ -10,13 +10,16 @@ const github_1 = require("@actions/github");
const child_process_1 = require("child_process");
const utils_1 = require("../utils/utils");
class OctoKit {
+ token;
+ params;
+ options;
+ octokit;
+ // when in readonly mode, record labels just-created so at to not throw unneccesary errors
+ mockLabels = new Set();
constructor(token, params, options = { readonly: false }) {
this.token = token;
this.params = params;
this.options = options;
- // when in readonly mode, record labels just-created so at to not throw unneccesary errors
- this.mockLabels = new Set();
- this.writeAccessCache = {};
this.octokit = new github_1.GitHub(token);
}
async *query(query) {
@@ -41,18 +44,17 @@ class OctoKit {
};
for await (const pageResponse of this.octokit.paginate.iterator(options)) {
await timeout();
- await utils_1.logRateLimit(this.token);
+ await (0, utils_1.logRateLimit)(this.token);
const page = pageResponse.data;
yield page.map((issue) => new OctoKitIssue(this.token, this.params, this.octokitIssueToIssue(issue)));
}
}
async createIssue(owner, repo, title, body) {
- core_1.debug(`Creating issue \`${title}\` on ${owner}/${repo}`);
+ (0, core_1.debug)(`Creating issue \`${title}\` on ${owner}/${repo}`);
if (!this.options.readonly)
await this.octokit.issues.create({ owner, repo, title, body });
}
octokitIssueToIssue(issue) {
- var _a, _b, _c, _d, _e, _f;
return {
author: { name: issue.user.login, isGitHubApp: issue.user.type === 'Bot' },
body: issue.body,
@@ -63,19 +65,20 @@ class OctoKit {
locked: issue.locked,
numComments: issue.comments,
reactions: issue.reactions,
- 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: (_f = (_e = issue.milestone) === null || _e === void 0 ? void 0 : _e.number) !== null && _f !== void 0 ? _f : null,
+ assignee: issue.assignee?.login ?? issue.assignees?.[0]?.login,
+ milestoneId: issue.milestone?.number ?? null,
createdAt: +new Date(issue.created_at),
updatedAt: +new Date(issue.updated_at),
closedAt: issue.closed_at ? +new Date(issue.closed_at) : undefined,
};
}
+ writeAccessCache = {};
async hasWriteAccess(user) {
if (user.name in this.writeAccessCache) {
- core_1.debug('Got permissions from cache for ' + user);
+ (0, core_1.debug)('Got permissions from cache for ' + user);
return this.writeAccessCache[user.name];
}
- core_1.debug('Fetching permissions for ' + user);
+ (0, core_1.debug)('Fetching permissions for ' + user);
const permissions = (await this.octokit.repos.getCollaboratorPermissionLevel({
...this.params,
username: user.name,
@@ -95,14 +98,14 @@ class OctoKit {
}
}
async createLabel(name, color, description) {
- core_1.debug('Creating label ' + name);
+ (0, core_1.debug)('Creating label ' + name);
if (!this.options.readonly)
await this.octokit.issues.createLabel({ ...this.params, color, description, name });
else
this.mockLabels.add(name);
}
async deleteLabel(name) {
- core_1.debug('Deleting label ' + name);
+ (0, core_1.debug)('Deleting label ' + name);
try {
if (!this.options.readonly)
await this.octokit.issues.deleteLabel({ ...this.params, name });
@@ -115,7 +118,7 @@ class OctoKit {
}
}
async readConfig(path) {
- core_1.debug('Reading config at ' + path);
+ (0, core_1.debug)('Reading config at ' + path);
const repoPath = `.github/${path}.json`;
const data = (await this.octokit.repos.getContents({ ...this.params, path: repoPath })).data;
if ('type' in data && data.type === 'file') {
@@ -127,21 +130,23 @@ class OctoKit {
throw Error('Found directory at config path when expecting file' + JSON.stringify(data));
}
async releaseContainsCommit(release, commit) {
- if (utils_1.getInput('commitReleasedDebuggingOverride')) {
+ if ((0, utils_1.getInput)('commitReleasedDebuggingOverride')) {
return true;
}
- 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)));
+ 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)));
}
}
exports.OctoKit = OctoKit;
class OctoKitIssue extends OctoKit {
+ params;
+ issueData;
constructor(token, params, issueData, options = { readonly: false }) {
super(token, params, options);
this.params = params;
this.issueData = issueData;
}
async addAssignee(assignee) {
- core_1.debug('Adding assignee ' + assignee + ' to ' + this.issueData.number);
+ (0, core_1.debug)('Adding assignee ' + assignee + ' to ' + this.issueData.number);
if (!this.options.readonly) {
await this.octokit.issues.addAssignees({
...this.params,
@@ -151,7 +156,7 @@ class OctoKitIssue extends OctoKit {
}
}
async closeIssue() {
- core_1.debug('Closing issue ' + this.issueData.number);
+ (0, core_1.debug)('Closing issue ' + this.issueData.number);
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
@@ -160,13 +165,13 @@ class OctoKitIssue extends OctoKit {
});
}
async lockIssue() {
- core_1.debug('Locking issue ' + this.issueData.number);
+ (0, core_1.debug)('Locking issue ' + this.issueData.number);
if (!this.options.readonly)
await this.octokit.issues.lock({ ...this.params, issue_number: this.issueData.number });
}
async getIssue() {
if (isIssue(this.issueData)) {
- core_1.debug('Got issue data from query result ' + this.issueData.number);
+ (0, core_1.debug)('Got issue data from query result ' + this.issueData.number);
return this.issueData;
}
const issue = (await this.octokit.issues.get({
@@ -177,7 +182,7 @@ class OctoKitIssue extends OctoKit {
return (this.issueData = this.octokitIssueToIssue(issue));
}
async postComment(body) {
- core_1.debug(`Posting comment ${body} on ${this.issueData.number}`);
+ (0, core_1.debug)(`Posting comment ${body} on ${this.issueData.number}`);
if (!this.options.readonly)
await this.octokit.issues.createComment({
...this.params,
@@ -186,7 +191,7 @@ class OctoKitIssue extends OctoKit {
});
}
async deleteComment(id) {
- core_1.debug(`Deleting comment ${id} on ${this.issueData.number}`);
+ (0, core_1.debug)(`Deleting comment ${id} on ${this.issueData.number}`);
if (!this.options.readonly)
await this.octokit.issues.deleteComment({
owner: this.params.owner,
@@ -195,7 +200,7 @@ class OctoKitIssue extends OctoKit {
});
}
async setMilestone(milestoneId) {
- core_1.debug(`Setting milestone for ${this.issueData.number} to ${milestoneId}`);
+ (0, core_1.debug)(`Setting milestone for ${this.issueData.number} to ${milestoneId}`);
if (!this.options.readonly)
await this.octokit.issues.update({
...this.params,
@@ -204,7 +209,7 @@ class OctoKitIssue extends OctoKit {
});
}
async *getComments(last) {
- core_1.debug('Fetching comments for ' + this.issueData.number);
+ (0, core_1.debug)('Fetching comments for ' + this.issueData.number);
const response = this.octokit.paginate.iterator(this.octokit.issues.listComments.endpoint.merge({
...this.params,
issue_number: this.issueData.number,
@@ -221,7 +226,7 @@ class OctoKitIssue extends OctoKit {
}
}
async addLabel(name) {
- core_1.debug(`Adding label ${name} to ${this.issueData.number}`);
+ (0, core_1.debug)(`Adding label ${name} to ${this.issueData.number}`);
if (!(await this.repoHasLabel(name))) {
throw Error(`Action could not execute becuase label ${name} is not defined.`);
}
@@ -233,7 +238,7 @@ class OctoKitIssue extends OctoKit {
});
}
async removeLabel(name) {
- core_1.debug(`Removing label ${name} from ${this.issueData.number}`);
+ (0, core_1.debug)(`Removing label ${name} from ${this.issueData.number}`);
try {
if (!this.options.readonly)
await this.octokit.issues.removeLabel({
@@ -250,7 +255,6 @@ class OctoKitIssue extends OctoKit {
}
}
async getClosingInfo() {
- var _a;
if ((await this.getIssue()).open) {
return;
}
@@ -264,7 +268,7 @@ class OctoKitIssue extends OctoKit {
for (const timelineEvent of timelineEvents) {
if (timelineEvent.event === 'closed') {
closingCommit = {
- hash: (_a = timelineEvent.commit_id) !== null && _a !== void 0 ? _a : undefined,
+ hash: timelineEvent.commit_id ?? undefined,
timestamp: +new Date(timelineEvent.created_at),
};
}
@@ -287,3 +291,4 @@ function isIssue(object) {
'milestoneId' in object;
return isIssue;
}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2N0b2tpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9jdG9raXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsd0NBQXFDO0FBQ3JDLDRDQUFxRDtBQUVyRCxpREFBb0M7QUFDcEMsMENBQXVEO0FBR3ZELE1BQWEsT0FBTztJQU1WO0lBQ0U7SUFDQTtJQVBELE9BQU8sQ0FBVztJQUM1QiwwRkFBMEY7SUFDaEYsVUFBVSxHQUFnQixJQUFJLEdBQUcsRUFBRSxDQUFBO0lBRTdDLFlBQ1MsS0FBYSxFQUNYLE1BQXVDLEVBQ3ZDLFVBQWlDLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtRQUZ0RCxVQUFLLEdBQUwsS0FBSyxDQUFRO1FBQ1gsV0FBTSxHQUFOLE1BQU0sQ0FBaUM7UUFDdkMsWUFBTyxHQUFQLE9BQU8sQ0FBNkM7UUFFOUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLGVBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQVk7UUFDeEIsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFcEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUN4RSxHQUFHLEtBQUs7WUFDUixDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUc7WUFDYixPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsbURBQW1ELEVBQUU7U0FDeEUsQ0FBQyxDQUFBO1FBRUYsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBO1FBRWYsTUFBTSxPQUFPLEdBQUcsS0FBSyxJQUFJLEVBQUU7WUFDMUIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFF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
\ No newline at end of file
diff --git a/build/actions/api/testbed.js b/build/actions/api/testbed.js
index 75c03ff6ab..1b157d3c77 100644
--- a/build/actions/api/testbed.js
+++ b/build/actions/api/testbed.js
@@ -6,16 +6,17 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.TestbedIssue = exports.Testbed = void 0;
class Testbed {
+ config;
constructor(config) {
- var _a, _b, _c, _d, _e;
this.config = {
- globalLabels: (_a = config === null || config === void 0 ? void 0 : config.globalLabels) !== null && _a !== void 0 ? _a : [],
- configs: (_b = config === null || config === void 0 ? void 0 : config.configs) !== null && _b !== void 0 ? _b : {},
- writers: (_c = config === null || config === void 0 ? void 0 : config.writers) !== null && _c !== void 0 ? _c : [],
- releasedCommits: (_d = config === null || config === void 0 ? void 0 : config.releasedCommits) !== null && _d !== void 0 ? _d : [],
- queryRunner: (_e = config === null || config === void 0 ? void 0 : config.queryRunner) !== null && _e !== void 0 ? _e : async function* () {
- yield [];
- },
+ globalLabels: config?.globalLabels ?? [],
+ configs: config?.configs ?? {},
+ writers: config?.writers ?? [],
+ releasedCommits: config?.releasedCommits ?? [],
+ queryRunner: config?.queryRunner ??
+ async function* () {
+ yield [];
+ },
};
}
async *query(query) {
@@ -47,17 +48,17 @@ class Testbed {
}
exports.Testbed = Testbed;
class TestbedIssue extends Testbed {
+ issueConfig;
constructor(globalConfig, issueConfig) {
- var _a, _b, _c;
super(globalConfig);
- issueConfig = issueConfig !== null && issueConfig !== void 0 ? issueConfig : {};
- issueConfig.comments = (_a = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.comments) !== null && _a !== void 0 ? _a : [];
- issueConfig.labels = (_b = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.labels) !== null && _b !== void 0 ? _b : [];
+ issueConfig = issueConfig ?? {};
+ issueConfig.comments = issueConfig?.comments ?? [];
+ issueConfig.labels = issueConfig?.labels ?? [];
issueConfig.issue = {
author: { name: 'JacksonKearl' },
body: 'issue body',
locked: false,
- numComments: ((_c = issueConfig === null || issueConfig === void 0 ? void 0 : issueConfig.comments) === null || _c === void 0 ? void 0 : _c.length) || 0,
+ numComments: issueConfig?.comments?.length || 0,
number: 1,
open: true,
title: 'issue title',
@@ -91,7 +92,7 @@ class TestbedIssue extends Testbed {
}
async postComment(body, author) {
this.issueConfig.comments.push({
- author: { name: author !== null && author !== void 0 ? author : 'bot' },
+ author: { name: author ?? 'bot' },
body,
id: Math.random(),
timestamp: +new Date(),
@@ -122,3 +123,4 @@ class TestbedIssue extends Testbed {
}
}
exports.TestbedIssue = TestbedIssue;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3RiZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFjaEcsTUFBYSxPQUFPO0lBQ1osTUFBTSxDQUFlO0lBRTVCLFlBQVksTUFBK0I7UUFDMUMsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNiLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWSxJQUFJLEVBQUU7WUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLElBQUksRUFBRTtZQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sSUFBSSxFQUFFO1lBQzlCLGVBQWUsRUFBRSxNQUFNLEVBQUUsZUFBZSxJQUFJLEVBQUU7WUFDOUMsV0FBVyxFQUNWLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixLQUFLLFNBQVMsQ0FBQztvQkFDZCxNQUFNLEVBQUUsQ0FBQTtnQkFDVCxDQUFDO1NBQ0YsQ0FBQTtJQUNGLENBQUM7SUFFRCxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBWTtRQUN4QixJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4RCxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUN4QixLQUFLLFlBQVksWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQzVFLENBQUE7U0FDRDtJQUNGLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWMsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLEtBQWE7UUFDN0UsVUFBVTtJQUNYLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDNUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVU7UUFDOUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQy9DLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWE7UUFDL0IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxZQUFvQjtRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBcUI7UUFDdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLENBQUE7SUFDL0YsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxRQUFnQixFQUFFLE1BQWM7UUFDM0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDcEQsQ0FBQztDQUNEO0FBcERELDBCQW9EQztBQWFELE1BQWEsWUFBYSxTQUFRLE9BQU87SUFDakMsV0FBVyxDQUFvQjtJQUV0QyxZQUFZLFlBQXFDLEVBQUUsV0FBeUM7UUFDM0YsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFBO1FBQ25CLFdBQVcsR0FBRyxXQUFXLElBQUksRUFBRSxDQUFBO1FBQy9CLFdBQVcsQ0FBQyxRQUFRLEdBQUcsV0FBVyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUE7UUFDbEQsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUM5QyxXQUFXLENBQUMsS0FBSyxHQUFHO1lBQ25CLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDaEMsSUFBSSxFQUFFLFlBQVk7WUFDbEIsTUFBTSxFQUFFLEtBQUs7WUFDYixXQUFXLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksQ0FBQztZQUMvQyxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksRUFBRSxJQUFJO1lBQ1YsS0FBSyxFQUFFLGFBQWE7WUFDcEIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsU0FBUyxFQUFFO2dCQUNWLElBQUksRUFBRSxDQUFDO2dCQUNQLElBQUksRUFBRSxDQUFDO2dCQUNQLFFBQVEsRUFBRSxDQUFDO2dCQUNYLElBQUksRUFBRSxDQUFDO2dCQUNQLEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxDQUFDO2dCQUNULEtBQUssRUFBRSxDQUFDO2dCQUNSLE1BQU0sRUFBRSxDQUFDO2FBQ1Q7WUFDRCxRQUFRLEVBQUUsU0FBUztZQUNuQixTQUFTLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN0QixTQUFTLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN0QixHQUFHLFdBQVcsQ0FBQyxLQUFLO1NBQ3BCLENBQUE7UUFFRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQWlDLENBQUE7SUFDckQsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBZ0I7UUFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFtQjtRQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO0lBQ2pELENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNiLE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQzNDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFBO0lBQzdDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQVksRUFBRSxNQUFlO1FBQzlDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztZQUM5QixNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxJQUFJLEtBQUssRUFBRTtZQUNqQyxJQUFJO1lBQ0osRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDakIsU0FBUyxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUU7U0FDdEIsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsRUFBVTtRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDN0YsQ0FBQztJQUVELEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFjO1FBQ2hDLE1BQU0sSUFBSTtZQUNULENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUE7SUFDN0IsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsYUFBcUI7UUFDdEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssYUFBYSxDQUFDLENBQUE7SUFDN0YsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQTtJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDZCxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFBO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFBO0lBQ3RDLENBQUM7Q0FDRDtBQXZGRCxvQ0F1RkMifQ==
\ No newline at end of file
diff --git a/build/actions/auto-labeler/index.js b/build/actions/auto-labeler/index.js
index 8147413f82..788eba5966 100644
--- a/build/actions/auto-labeler/index.js
+++ b/build/actions/auto-labeler/index.js
@@ -8,15 +8,16 @@ const core = require("@actions/core");
const github_1 = require("@actions/github");
const octokit_1 = require("../api/octokit");
const utils_1 = require("../utils/utils");
-const token = utils_1.getRequiredInput('token');
-const label = utils_1.getRequiredInput('label');
+const token = (0, utils_1.getRequiredInput)('token');
+const label = (0, utils_1.getRequiredInput)('label');
async function main() {
const pr = new octokit_1.OctoKitIssue(token, github_1.context.repo, { number: github_1.context.issue.number });
pr.addLabel(label);
}
main()
- .then(() => utils_1.logRateLimit(token))
+ .then(() => (0, utils_1.logRateLimit)(token))
.catch(async (error) => {
core.setFailed(error.message);
- await utils_1.logErrorToIssue(error.message, true, token);
+ await (0, utils_1.logErrorToIssue)(error.message, true, token);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHNDQUFxQztBQUNyQyw0Q0FBeUM7QUFDekMsNENBQTZDO0FBQzdDLDBDQUFnRjtBQUVoRixNQUFNLEtBQUssR0FBRyxJQUFBLHdCQUFnQixFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sS0FBSyxHQUFHLElBQUEsd0JBQWdCLEVBQUMsT0FBTyxDQUFDLENBQUM7QUFFeEMsS0FBSyxVQUFVLElBQUk7SUFFbEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxzQkFBWSxDQUFDLEtBQUssRUFBRSxnQkFBTyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxnQkFBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBRW5GLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEIsQ0FBQztBQUVELElBQUksRUFBRTtLQUNKLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLG9CQUFZLEVBQUMsS0FBSyxDQUFDLENBQUM7S0FDL0IsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtJQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUM3QixNQUFNLElBQUEsdUJBQWUsRUFBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtBQUNsRCxDQUFDLENBQUMsQ0FBQSJ9
\ No newline at end of file
diff --git a/build/actions/utils/utils.js b/build/actions/utils/utils.js
index 56b52770a1..1b35c65adb 100644
--- a/build/actions/utils/utils.js
+++ b/build/actions/utils/utils.js
@@ -9,9 +9,11 @@ const core = require("@actions/core");
const github_1 = require("@actions/github");
const axios_1 = require("axios");
const octokit_1 = require("../api/octokit");
-exports.getInput = (name) => core.getInput(name) || undefined;
-exports.getRequiredInput = (name) => core.getInput(name, { required: true });
-exports.normalizeIssue = (issue) => {
+const getInput = (name) => core.getInput(name) || undefined;
+exports.getInput = getInput;
+const getRequiredInput = (name) => core.getInput(name, { required: true });
+exports.getRequiredInput = getRequiredInput;
+const normalizeIssue = (issue) => {
const { body, title } = issue;
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);
@@ -34,20 +36,25 @@ exports.normalizeIssue = (issue) => {
issueType: isBug ? 'bug' : isFeatureRequest ? 'feature_request' : 'unknown',
};
};
-exports.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.daysAgoToHumanReadbleDate = (days) => new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}\w$/, '');
-exports.logRateLimit = async (token) => {
+exports.normalizeIssue = normalizeIssue;
+const loadLatestRelease = async (quality) => (await axios_1.default.get(`https://vscode-update.azurewebsites.net/api/update/darwin/${quality}/latest`)).data;
+exports.loadLatestRelease = loadLatestRelease;
+const daysAgoToTimestamp = (days) => +new Date(Date.now() - days * 24 * 60 * 60 * 1000);
+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;
['core', 'graphql', 'search'].forEach(async (category) => {
const usage = 1 - usageData[category].remaining / usageData[category].limit;
const message = `Usage at ${usage} for ${category}`;
if (usage > 0.5) {
- await exports.logErrorToIssue(message, false, token);
+ await (0, exports.logErrorToIssue)(message, false, token);
}
});
};
-exports.logErrorToIssue = async (message, ping, token) => {
+exports.logRateLimit = logRateLimit;
+const logErrorToIssue = async (message, ping, token) => {
// Attempt to wait out abuse detection timeout if present
await new Promise((resolve) => setTimeout(resolve, 10000));
const dest = github_1.context.repo.repo === 'vscode-internalbacklog'
@@ -68,3 +75,5 @@ ${JSON.stringify(github_1.context, null, 2).replace(/
`);
};
+exports.logErrorToIssue = logErrorToIssue;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyxzQ0FBcUM7QUFDckMsNENBQWlEO0FBQ2pELGlDQUF5QjtBQUN6Qiw0Q0FBNkM7QUFHdEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFBO0FBQTdELFFBQUEsUUFBUSxZQUFxRDtBQUNuRSxNQUFNLGdCQUFnQixHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQTVFLFFBQUEsZ0JBQWdCLG9CQUE0RDtBQUVsRixNQUFNLGNBQWMsR0FBRyxDQUM3QixLQUFZLEVBQ3dFLEVBQUU7SUFDdEYsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUE7SUFFN0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNyRixNQUFNLGdCQUFnQixHQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLDBCQUEwQixDQUFDLElBQUksZ0NBQWdDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRXpGLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FDL0IsR0FBRztTQUNELFdBQVcsRUFBRTtTQUNiLE9BQU8sQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1NBQzNCLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7U0FDL0IsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsQ0FBQztTQUMvQixPQUFPLENBQUMsZ0NBQWdDLEVBQUUsRUFBRSxDQUFDO1NBQzdDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1NBQ3pCLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLENBQUM7U0FDL0MsT0FBTyxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQztTQUNwQyxPQUFPLENBQUMsNERBQTRELEVBQUUsRUFBRSxDQUFDO1NBQ3pFLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7U0FDL0IsT0FBTyxDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztTQUNqQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBRXhCLE9BQU87UUFDTixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQztRQUNuQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNyQixTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUztLQUMzRSxDQUFBO0FBQ0YsQ0FBQyxDQUFBO0FBN0JZLFFBQUEsY0FBYyxrQkE2QjFCO0FBUU0sTUFBTSxpQkFBaUIsR0FBRyxLQUFLLEVBQUUsT0FBNkIsRUFBZ0MsRUFBRSxDQUN0RyxDQUFDLE1BQU0sZUFBSyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUR6RixRQUFBLGlCQUFpQixxQkFDd0U7QUFFL0YsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQVksRUFBVSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFBO0FBQWpHLFFBQUEsa0JBQWtCLHNCQUErRTtBQUV2RyxNQUFNLHlCQUF5QixHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FDekQsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0FBRDdFLFFBQUEseUJBQXlCLDZCQUNvRDtBQUVuRixNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDbkQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLElBQUksZUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUUsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7UUFDbkUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUMzRSxNQUFNLE9BQU8sR0FBRyxZQUFZLEtBQUssUUFBUSxRQUFRLEVBQUUsQ0FBQTtRQUNuRCxJQUFJLEtBQUssR0FBRyxHQUFHLEVBQUU7WUFDaEIsTUFBTSxJQUFBLHVCQUFlLEVBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQTtTQUM1QztJQUNGLENBQUMsQ0FBQyxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBVFksUUFBQSxZQUFZLGdCQVN4QjtBQUVNLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxPQUFlLEVBQUUsSUFBYSxFQUFFLEtBQWEsRUFBaUIsRUFBRTtJQUNyRyx5REFBeUQ7SUFDekQsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQzFELE1BQU0sSUFBSSxHQUNULGdCQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyx3QkFBd0I7UUFDN0MsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDaEQsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUE7SUFDcEMsT0FBTyxJQUFJLHNCQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUM3RixXQUFXLENBQUM7WUFDSCxnQkFBTyxDQUFDLFFBQVE7O1NBRW5CLE9BQU87O1NBRVAsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxnQkFBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLGdCQUFPLENBQUMsS0FBSyxDQUFDLE1BQU07O1FBRWpGLGdCQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxnQkFBTyxDQUFDLElBQUksQ0FBQyxJQUFJOzs7RUFHN0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDOztDQUVwRixDQUFDLENBQUE7QUFDRixDQUFDLENBQUE7QUFyQlksUUFBQSxlQUFlLG1CQXFCM0IifQ==
\ No newline at end of file
diff --git a/build/azure-pipelines/.gdntsa b/build/azure-pipelines/.gdntsa
deleted file mode 100644
index a9d98fe01f..0000000000
--- a/build/azure-pipelines/.gdntsa
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "codebaseName": "vscode-client",
- "ppe": false,
- "notificationAliases": [
- "sbatten@microsoft.com"
- ],
- "codebaseAdmins": [
- "REDMOND\\stbatt",
- "REDMOND\\monacotools",
- ],
- "instanceUrl": "https://msazure.visualstudio.com/defaultcollection",
- "projectName": "One",
- "areaPath": "One\\VSCode\\Visual Studio Code Client",
- "iterationPath": "One",
- "notifyAlways": true,
- "tools": [
- "BinSkim",
- "CredScan",
- "CodeQL"
- ]
-}
diff --git a/build/azure-pipelines/common/computeBuiltInDepsCacheKey.js b/build/azure-pipelines/common/computeBuiltInDepsCacheKey.js
new file mode 100644
index 0000000000..a7bb6a1c2f
--- /dev/null
+++ b/build/azure-pipelines/common/computeBuiltInDepsCacheKey.js
@@ -0,0 +1,16 @@
+"use strict";
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+const path = require("path");
+const crypto = require("crypto");
+const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../product.json'), 'utf8'));
+const shasum = crypto.createHash('sha1');
+for (const ext of productjson.builtInExtensions) {
+ shasum.update(`${ext.name}@${ext.version}`);
+}
+process.stdout.write(shasum.digest('hex'));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZUJ1aWx0SW5EZXBzQ2FjaGVLZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21wdXRlQnVpbHRJbkRlcHNDYWNoZUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBRWpDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkcsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUV6QyxLQUFLLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRTtJQUNoRCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztDQUM1QztBQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyJ9
\ No newline at end of file
diff --git a/build/azure-pipelines/common/computeBuiltInDepsCacheKey.ts b/build/azure-pipelines/common/computeBuiltInDepsCacheKey.ts
new file mode 100644
index 0000000000..f4d8ed4c7c
--- /dev/null
+++ b/build/azure-pipelines/common/computeBuiltInDepsCacheKey.ts
@@ -0,0 +1,17 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as fs from 'fs';
+import * as path from 'path';
+import * as crypto from 'crypto';
+
+const productjson = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../product.json'), 'utf8'));
+const shasum = crypto.createHash('sha1');
+
+for (const ext of productjson.builtInExtensions) {
+ shasum.update(`${ext.name}@${ext.version}`);
+}
+
+process.stdout.write(shasum.digest('hex'));
diff --git a/build/azure-pipelines/common/computeNodeModulesCacheKey.js b/build/azure-pipelines/common/computeNodeModulesCacheKey.js
index 61bbe9e27f..0ef8107c1a 100644
--- a/build/azure-pipelines/common/computeNodeModulesCacheKey.js
+++ b/build/azure-pipelines/common/computeNodeModulesCacheKey.js
@@ -21,7 +21,8 @@ for (const dir of dirs) {
dependencies: packageJson.dependencies,
devDependencies: packageJson.devDependencies,
optionalDependencies: packageJson.optionalDependencies,
- resolutions: packageJson.resolutions
+ resolutions: packageJson.resolutions,
+ distro: packageJson.distro
};
shasum.update(JSON.stringify(relevantPackageJsonSections));
const yarnLockPath = path.join(ROOT, dir, 'yarn.lock');
@@ -32,3 +33,4 @@ for (let i = 2; i < process.argv.length; i++) {
shasum.update(process.argv[i]);
}
process.stdout.write(shasum.digest('hex'));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcHV0ZU5vZGVNb2R1bGVzQ2FjaGVLZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21wdXRlTm9kZU1vZHVsZXNDYWNoZUtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQWlDO0FBQ2pDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUUzQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUUvQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVsRSwyQ0FBMkM7QUFDM0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7SUFDdkIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sMkJBQTJCLEdBQUc7UUFDbkMsWUFBWSxFQUFFLFdBQVcsQ0FBQyxZQUFZO1FBQ3RDLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZTtRQUM1QyxvQkFBb0IsRUFBRSxXQUFXLENBQUMsb0JBQW9CO1FBQ3RELFdBQVcsRUFBRSxXQUFXLENBQUMsV0FBVztRQUNwQyxNQUFNLEVBQUUsV0FBVyxDQUFDLE1BQU07S0FDMUIsQ0FBQztJQUNGLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUM7SUFFM0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0NBQzdDO0FBRUQsdUNBQXVDO0FBQ3ZDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtJQUM3QyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUMvQjtBQUVELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyJ9
\ No newline at end of file
diff --git a/build/azure-pipelines/common/computeNodeModulesCacheKey.ts b/build/azure-pipelines/common/computeNodeModulesCacheKey.ts
index 8b8869f378..18b4e3596f 100644
--- a/build/azure-pipelines/common/computeNodeModulesCacheKey.ts
+++ b/build/azure-pipelines/common/computeNodeModulesCacheKey.ts
@@ -24,7 +24,8 @@ for (const dir of dirs) {
dependencies: packageJson.dependencies,
devDependencies: packageJson.devDependencies,
optionalDependencies: packageJson.optionalDependencies,
- resolutions: packageJson.resolutions
+ resolutions: packageJson.resolutions,
+ distro: packageJson.distro
};
shasum.update(JSON.stringify(relevantPackageJsonSections));
diff --git a/build/azure-pipelines/common/copyArtifacts.js b/build/azure-pipelines/common/copyArtifacts.js
index c5cbae128c..3f74b8cf96 100644
--- a/build/azure-pipelines/common/copyArtifacts.js
+++ b/build/azure-pipelines/common/copyArtifacts.js
@@ -40,3 +40,4 @@ main().catch(err => {
console.error(err);
process.exit(1);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weUFydGlmYWN0cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvcHlBcnRpZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztnR0FHZ0c7QUFFaEcsWUFBWSxDQUFDOztBQUViLGdDQUFnQztBQUNoQyw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLHlCQUF5QjtBQUV6QixNQUFNLEtBQUssR0FBRztJQUNiLDRCQUE0QjtJQUM1Qiw2QkFBNkI7SUFDN0IsaUNBQWlDO0lBQ2pDLG1DQUFtQztJQUNuQywrQkFBK0I7SUFDL0Isa0NBQWtDO0lBQ2xDLCtCQUErQjtJQUMvQix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIscUJBQXFCLENBQUMsc0JBQXNCO0NBQzVDLENBQUM7QUFFRixLQUFLLFVBQVUsSUFBSTtJQUNsQixPQUFPLElBQUksT0FBTyxDQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzVDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7YUFDakUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUErQjtZQUNyRSx1REFBdUQ7WUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMxRCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVMLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/common/createAsset.js b/build/azure-pipelines/common/createAsset.js
index df47fbab0e..634d940a18 100644
--- a/build/azure-pipelines/common/createAsset.js
+++ b/build/azure-pipelines/common/createAsset.js
@@ -43,6 +43,8 @@ function getPlatform(product, os, arch, type) {
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
return arch === 'ia32' ? 'server-win32-web' : `server-win32-${arch}-web`;
+ case 'cli':
+ return `cli-win32-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -52,6 +54,8 @@ function getPlatform(product, os, arch, type) {
return `server-alpine-${arch}`;
case 'web':
return `server-alpine-${arch}-web`;
+ case 'cli':
+ return `cli-alpine-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -74,6 +78,8 @@ function getPlatform(product, os, arch, type) {
return `linux-deb-${arch}`;
case 'rpm-package':
return `linux-rpm-${arch}`;
+ case 'cli':
+ return `cli-linux-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -94,6 +100,8 @@ function getPlatform(product, os, arch, type) {
return 'server-darwin-web';
}
return `server-darwin-${arch}-web`;
+ case 'cli':
+ return `cli-darwin-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -135,7 +143,7 @@ async function main() {
const platform = getPlatform(product, os, arch, unprocessedType);
const type = getRealType(unprocessedType);
const quality = getEnv('VSCODE_QUALITY');
- const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION');
+ const commit = getEnv('BUILD_SOURCEVERSION');
console.log('Creating asset...');
const stat = await new Promise((c, e) => fs.stat(filePath, (err, stat) => err ? e(err) : c(stat)));
const size = stat.size;
@@ -150,11 +158,6 @@ async function main() {
const blobServiceClient = new storage_blob_1.BlobServiceClient(`https://vscode.blob.core.windows.net`, credential, storagePipelineOptions);
const containerClient = blobServiceClient.getContainerClient(quality);
const blobClient = containerClient.getBlockBlobClient(blobName);
- const blobExists = await blobClient.exists();
- if (blobExists) {
- console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
- return;
- }
const blobOptions = {
blobHTTPHeaders: {
blobContentType: mime.lookup(filePath),
@@ -162,29 +165,42 @@ async function main() {
blobCacheControl: 'max-age=31536000, public'
}
};
- const uploadPromises = [
- (0, retry_1.retry)(async () => {
+ const uploadPromises = [];
+ if (await blobClient.exists()) {
+ console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
+ }
+ else {
+ uploadPromises.push((0, retry_1.retry)(async () => {
await blobClient.uploadFile(filePath, blobOptions);
console.log('Blob successfully uploaded to Azure storage.');
- })
- ];
+ }));
+ }
const shouldUploadToMooncake = /true/i.test(process.env['VSCODE_PUBLISH_TO_MOONCAKE'] ?? 'true');
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 mooncakeBlobServiceClient = new storage_blob_1.BlobServiceClient(`https://vscode.blob.core.chinacloudapi.cn`, mooncakeCredential, storagePipelineOptions);
const mooncakeContainerClient = mooncakeBlobServiceClient.getContainerClient(quality);
const mooncakeBlobClient = mooncakeContainerClient.getBlockBlobClient(blobName);
- uploadPromises.push((0, retry_1.retry)(async () => {
- await mooncakeBlobClient.uploadFile(filePath, blobOptions);
- console.log('Blob successfully uploaded to Mooncake Azure storage.');
- }));
- console.log('Uploading blobs to Azure storage and Mooncake Azure storage...');
+ if (await mooncakeBlobClient.exists()) {
+ console.log(`Mooncake Blob ${quality}, ${blobName} already exists, not publishing again.`);
+ }
+ else {
+ uploadPromises.push((0, retry_1.retry)(async () => {
+ await mooncakeBlobClient.uploadFile(filePath, blobOptions);
+ console.log('Blob successfully uploaded to Mooncake Azure storage.');
+ }));
+ }
+ if (uploadPromises.length) {
+ console.log('Uploading blobs to Azure storage and Mooncake Azure storage...');
+ }
}
else {
- console.log('Uploading blobs to Azure storage...');
+ if (uploadPromises.length) {
+ console.log('Uploading blobs to Azure storage...');
+ }
}
await Promise.all(uploadPromises);
- console.log('All blobs successfully uploaded.');
+ console.log(uploadPromises.length ? 'All blobs successfully uploaded.' : 'No blobs to upload.');
const assetUrl = `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`;
const blobPath = new URL(assetUrl).pathname;
const mooncakeUrl = `${process.env['MOONCAKE_CDN_URL']}${blobPath}`;
@@ -214,3 +230,4 @@ main().then(() => {
console.error(err);
process.exit(1);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQXNzZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVBc3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUV6QixpQ0FBaUM7QUFDakMsc0RBQXdJO0FBQ3hJLDZCQUE2QjtBQUM3QiwwQ0FBNkM7QUFDN0MsOENBQXlEO0FBQ3pELG1DQUFnQztBQWFoQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7SUFDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pCO0FBRUQsd0ZBQXdGO0FBQ3hGLFNBQVMsV0FBVyxDQUFDLE9BQWUsRUFBRSxFQUFVLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFDM0UsUUFBUSxFQUFFLEVBQUU7UUFDWCxLQUFLLE9BQU87WUFDWCxRQUFRLE9BQU8sRUFBRTtnQkFDaEIsS0FBSyxRQUFRLENBQUMsQ0FBQztvQkFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7b0JBQzFELFFBQVEsSUFBSSxFQUFFO3dCQUNiLEtBQUssU0FBUzs0QkFDYixPQUFPLEdBQUcsS0FBSyxVQUFVLENBQUM7d0JBQzNCLEtBQUssT0FBTzs0QkFDWCxPQUFPLEtBQUssQ0FBQzt3QkFDZCxLQUFLLFlBQVk7NEJBQ2hCLE9BQU8sR0FBRyxLQUFLLE9BQU8sQ0FBQzt3QkFDeEI7NEJBQ0MsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsT0FBTyxJQUFJLEVBQUUsSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDbkU7aUJBQ0Q7Z0JBQ0QsS0FBSyxRQUFRO29CQUNaLElBQUksSUFBSSxLQUFLLE9BQU8s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
\ No newline at end of file
diff --git a/build/azure-pipelines/common/createAsset.ts b/build/azure-pipelines/common/createAsset.ts
index fff05be615..bf2b2eff1d 100644
--- a/build/azure-pipelines/common/createAsset.ts
+++ b/build/azure-pipelines/common/createAsset.ts
@@ -56,6 +56,8 @@ function getPlatform(product: string, os: string, arch: string, type: string): s
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
return arch === 'ia32' ? 'server-win32-web' : `server-win32-${arch}-web`;
+ case 'cli':
+ return `cli-win32-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -65,6 +67,8 @@ function getPlatform(product: string, os: string, arch: string, type: string): s
return `server-alpine-${arch}`;
case 'web':
return `server-alpine-${arch}-web`;
+ case 'cli':
+ return `cli-alpine-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -87,6 +91,8 @@ function getPlatform(product: string, os: string, arch: string, type: string): s
return `linux-deb-${arch}`;
case 'rpm-package':
return `linux-rpm-${arch}`;
+ case 'cli':
+ return `cli-linux-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -107,6 +113,8 @@ function getPlatform(product: string, os: string, arch: string, type: string): s
return 'server-darwin-web';
}
return `server-darwin-${arch}-web`;
+ case 'cli':
+ return `cli-darwin-${arch}`;
default:
throw new Error(`Unrecognized: ${product} ${os} ${arch} ${type}`);
}
@@ -155,7 +163,7 @@ async function main(): Promise {
const platform = getPlatform(product, os, arch, unprocessedType);
const type = getRealType(unprocessedType);
const quality = getEnv('VSCODE_QUALITY');
- const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION');
+ const commit = getEnv('BUILD_SOURCEVERSION');
console.log('Creating asset...');
@@ -178,12 +186,6 @@ async function main(): Promise {
const blobServiceClient = new BlobServiceClient(`https://vscode.blob.core.windows.net`, credential, storagePipelineOptions);
const containerClient = blobServiceClient.getContainerClient(quality);
const blobClient = containerClient.getBlockBlobClient(blobName);
- const blobExists = await blobClient.exists();
-
- if (blobExists) {
- console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
- return;
- }
const blobOptions: BlockBlobParallelUploadOptions = {
blobHTTPHeaders: {
@@ -193,12 +195,15 @@ async function main(): Promise {
}
};
- const uploadPromises: Promise[] = [
- retry(async () => {
+ const uploadPromises: Promise[] = [];
+ if (await blobClient.exists()) {
+ console.log(`Blob ${quality}, ${blobName} already exists, not publishing again.`);
+ } else {
+ uploadPromises.push(retry(async () => {
await blobClient.uploadFile(filePath, blobOptions);
console.log('Blob successfully uploaded to Azure storage.');
- })
- ];
+ }));
+ }
const shouldUploadToMooncake = /true/i.test(process.env['VSCODE_PUBLISH_TO_MOONCAKE'] ?? 'true');
@@ -208,18 +213,27 @@ async function main(): Promise {
const mooncakeContainerClient = mooncakeBlobServiceClient.getContainerClient(quality);
const mooncakeBlobClient = mooncakeContainerClient.getBlockBlobClient(blobName);
- uploadPromises.push(retry(async () => {
- await mooncakeBlobClient.uploadFile(filePath, blobOptions);
- console.log('Blob successfully uploaded to Mooncake Azure storage.');
- }));
+ if (await mooncakeBlobClient.exists()) {
+ console.log(`Mooncake Blob ${quality}, ${blobName} already exists, not publishing again.`);
+ } else {
+ uploadPromises.push(retry(async () => {
+ await mooncakeBlobClient.uploadFile(filePath, blobOptions);
+ console.log('Blob successfully uploaded to Mooncake Azure storage.');
+ }));
+ }
- console.log('Uploading blobs to Azure storage and Mooncake Azure storage...');
+ if (uploadPromises.length) {
+ console.log('Uploading blobs to Azure storage and Mooncake Azure storage...');
+ }
} else {
- console.log('Uploading blobs to Azure storage...');
+ if (uploadPromises.length) {
+ console.log('Uploading blobs to Azure storage...');
+ }
}
await Promise.all(uploadPromises);
- console.log('All blobs successfully uploaded.');
+
+ console.log(uploadPromises.length ? 'All blobs successfully uploaded.' : 'No blobs to upload.');
const assetUrl = `${process.env['AZURE_CDN_URL']}/${quality}/${blobName}`;
const blobPath = new URL(assetUrl).pathname;
diff --git a/build/azure-pipelines/common/createBuild.js b/build/azure-pipelines/common/createBuild.js
index 7bfdfbc5d3..256ea3f109 100644
--- a/build/azure-pipelines/common/createBuild.js
+++ b/build/azure-pipelines/common/createBuild.js
@@ -21,9 +21,9 @@ function getEnv(name) {
async function main() {
const [, , _version] = process.argv;
const quality = getEnv('VSCODE_QUALITY');
- const commit = process.env['VSCODE_DISTRO_COMMIT']?.trim() || getEnv('BUILD_SOURCEVERSION');
+ const commit = getEnv('BUILD_SOURCEVERSION');
const queuedBy = getEnv('BUILD_QUEUEDBY');
- const sourceBranch = process.env['VSCODE_DISTRO_REF']?.trim() || getEnv('BUILD_SOURCEBRANCH');
+ const sourceBranch = getEnv('BUILD_SOURCEBRANCH');
const version = _version + (quality === 'stable' ? '' : `-${quality}`);
console.log('Creating build...');
console.log('Quality:', quality);
@@ -34,7 +34,7 @@ async function main() {
timestamp: (new Date()).getTime(),
version,
isReleased: false,
- private: Boolean(process.env['VSCODE_DISTRO_REF']?.trim()),
+ private: process.env['VSCODE_PRIVATE_BUILD']?.toLowerCase() === 'true',
sourceBranch,
queuedBy,
assets: [],
@@ -52,3 +52,4 @@ main().then(() => {
console.error(err);
process.exit(1);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGVCdWlsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDhDQUF5RDtBQUN6RCwwQ0FBNkM7QUFDN0MsbUNBQWdDO0FBRWhDLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO0lBQzlCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUNwRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDakI7QUFFRCxTQUFTLE1BQU0sQ0FBQyxJQUFZO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFakMsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLEVBQUU7UUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDeEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNmLENBQUM7QUFFRCxLQUFLLFVBQVUsSUFBSTtJQUNsQixNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN6QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUMxQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNsRCxNQUFNLE9BQU8sR0FBRyxRQUFRLEdBQUcsQ0FBQyxPQUFPLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUV2RSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFL0IsTUFBTSxLQUFLLEdBQUc7UUFDYixFQUFFLEVBQUUsTUFBTTtRQUNWLFNBQVMsRUFBRSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7UUFDakMsT0FBTztRQUNQLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssTUFBTTtRQUN0RSxZQUFZO1FBQ1osUUFBUTtRQUNSLE1BQU0sRUFBRSxFQUFFO1FBQ1YsT0FBTyxFQUFFLEVBQUU7S0FDWCxDQUFDO0lBRUYsTUFBTSxjQUFjLEdBQUcsSUFBSSxpQ0FBc0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUUsQ0FBQyxDQUFDO0lBQ3pKLE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN6RyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDckUsTUFBTSxJQUFBLGFBQUssRUFBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRyxDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtJQUNoQixPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDMUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7SUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDLENBQUMifQ==
\ No newline at end of file
diff --git a/build/azure-pipelines/common/createBuild.ts b/build/azure-pipelines/common/createBuild.ts
index 9663d6b3ee..480bb6d48e 100644
--- a/build/azure-pipelines/common/createBuild.ts
+++ b/build/azure-pipelines/common/createBuild.ts
@@ -25,9 +25,9 @@ function getEnv(name: string): string {
async function main(): Promise {
const [, , _version] = process.argv;
const quality = getEnv('VSCODE_QUALITY');
- const commit = process.env['VSCODE_DISTRO_COMMIT']?.trim() || getEnv('BUILD_SOURCEVERSION');
+ const commit = getEnv('BUILD_SOURCEVERSION');
const queuedBy = getEnv('BUILD_QUEUEDBY');
- const sourceBranch = process.env['VSCODE_DISTRO_REF']?.trim() || getEnv('BUILD_SOURCEBRANCH');
+ const sourceBranch = getEnv('BUILD_SOURCEBRANCH');
const version = _version + (quality === 'stable' ? '' : `-${quality}`);
console.log('Creating build...');
@@ -40,7 +40,7 @@ async function main(): Promise {
timestamp: (new Date()).getTime(),
version,
isReleased: false,
- private: Boolean(process.env['VSCODE_DISTRO_REF']?.trim()),
+ private: process.env['VSCODE_PRIVATE_BUILD']?.toLowerCase() === 'true',
sourceBranch,
queuedBy,
assets: [],
diff --git a/build/azure-pipelines/common/install-builtin-extensions.yml b/build/azure-pipelines/common/install-builtin-extensions.yml
new file mode 100644
index 0000000000..c1ee18d05b
--- /dev/null
+++ b/build/azure-pipelines/common/install-builtin-extensions.yml
@@ -0,0 +1,24 @@
+steps:
+ - pwsh: mkdir .build -ea 0
+ condition: and(succeeded(), contains(variables['Agent.OS'], 'windows'))
+ displayName: Create .build folder
+
+ - script: mkdir -p .build
+ condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows')))
+ displayName: Create .build folder
+
+ - script: node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash
+ displayName: Prepare built-in extensions cache key
+
+ - task: Cache@2
+ inputs:
+ key: '"builtin-extensions" | .build/builtindepshash'
+ path: .build/builtInExtensions
+ cacheHitVar: BUILTIN_EXTENSIONS_RESTORED
+ displayName: Restore built-in extensions cache
+
+ - script: node build/lib/builtInExtensions.js
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ condition: and(succeeded(), ne(variables.BUILTIN_EXTENSIONS_RESTORED, 'true'))
+ displayName: Download built-in extensions
diff --git a/build/azure-pipelines/common/installPlaywright.js b/build/azure-pipelines/common/installPlaywright.js
index 8beaf687aa..a5dc74f300 100644
--- a/build/azure-pipelines/common/installPlaywright.js
+++ b/build/azure-pipelines/common/installPlaywright.js
@@ -3,10 +3,10 @@
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-const retry_1 = require("./retry");
+process.env.DEBUG = 'pw:install'; // enable logging for this (https://github.com/microsoft/playwright/issues/17394)
const { installDefaultBrowsersForNpmInstall } = require('playwright-core/lib/server');
async function install() {
- await (0, retry_1.retry)(() => installDefaultBrowsersForNpmInstall());
+ await installDefaultBrowsersForNpmInstall();
}
install();
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbFBsYXl3cmlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbnN0YWxsUGxheXdyaWdodC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7QUFFaEcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUMsWUFBWSxDQUFDLENBQUMsaUZBQWlGO0FBRWpILE1BQU0sRUFBRSxtQ0FBbUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0FBRXRGLEtBQUssVUFBVSxPQUFPO0lBQ3JCLE1BQU0sbUNBQW1DLEVBQUUsQ0FBQztBQUM3QyxDQUFDO0FBRUQsT0FBTyxFQUFFLENBQUMifQ==
\ No newline at end of file
diff --git a/build/azure-pipelines/common/installPlaywright.ts b/build/azure-pipelines/common/installPlaywright.ts
index d90b3e657e..c424287c37 100644
--- a/build/azure-pipelines/common/installPlaywright.ts
+++ b/build/azure-pipelines/common/installPlaywright.ts
@@ -3,11 +3,12 @@
* Licensed under the Source EULA. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
-import { retry } from './retry';
+process.env.DEBUG='pw:install'; // enable logging for this (https://github.com/microsoft/playwright/issues/17394)
+
const { installDefaultBrowsersForNpmInstall } = require('playwright-core/lib/server');
async function install() {
- await retry(() => installDefaultBrowsersForNpmInstall());
+ await installDefaultBrowsersForNpmInstall();
}
install();
diff --git a/build/azure-pipelines/common/listNodeModules.js b/build/azure-pipelines/common/listNodeModules.js
index 308f1882a9..bc94266459 100644
--- a/build/azure-pipelines/common/listNodeModules.js
+++ b/build/azure-pipelines/common/listNodeModules.js
@@ -38,3 +38,4 @@ function findNodeModulesFiles(location, inNodeModules, result) {
const result = [];
findNodeModulesFiles('', false, result);
fs.writeFileSync(process.argv[2], result.join('\n') + '\n');
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdE5vZGVNb2R1bGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibGlzdE5vZGVNb2R1bGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUU3QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtJQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDNUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pCO0FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFFL0MsU0FBUyxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLGFBQXNCLEVBQUUsTUFBZ0I7SUFDdkYsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzFELEtBQUssTUFBTSxLQUFLLElBQUksT0FBTyxFQUFFO1FBQzVCLE1BQU0sU0FBUyxHQUFHLEdBQUcsUUFBUSxJQUFJLEtBQUssRUFBRSxDQUFDO1FBRXpDLElBQUksNENBQTRDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2pFLFNBQVM7U0FDVDtRQUVELElBQUksSUFBYyxDQUFDO1FBQ25CLElBQUk7WUFDSCxJQUFJLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1NBQy9DO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDYixTQUFTO1NBQ1Q7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN2QixvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsYUFBYSxJQUFJLENBQUMsS0FBSyxLQUFLLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3JGO2FBQU07WUFDTixJQUFJLGFBQWEsRUFBRTtnQkFDbEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakM7U0FDRDtLQUNEO0FBQ0YsQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztBQUM1QixvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/common/publish.js b/build/azure-pipelines/common/publish.js
index 8007f8eb5b..de790302f0 100644
--- a/build/azure-pipelines/common/publish.js
+++ b/build/azure-pipelines/common/publish.js
@@ -232,3 +232,4 @@ function main() {
});
}
main();
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInB1Ymxpc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztnR0FHZ0c7QUFFaEcsWUFBWSxDQUFDOztBQUViLHlCQUF5QjtBQUV6QixpQ0FBaUM7QUFDakMsNkJBQTZCO0FBQzdCLHFDQUFxQztBQUNyQywyQ0FBeUQ7QUFDekQsc0RBQWtIO0FBRWxILHNCQUFzQjtBQUN0QixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLHNIQUFzSCxDQUFDLENBQUM7SUFDdEksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2pCO0FBRUQsU0FBUyxVQUFVLENBQUMsUUFBZ0IsRUFBRSxNQUFnQjtJQUNyRCxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFM0MsTUFBTTthQUNKLEVBQUUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDdEMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDZCxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFPRCxTQUFTLG1CQUFtQixDQUFDLE9BQWU7SUFDM0MsT0FBTztRQUNOLEVBQUUsRUFBRSxPQUFPO1FBQ1gsTUFBTSxFQUFFLEtBQUs7S0FDYixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE9BQWU7SUFDakMsT0FBTyxDQUFDLEdBQUcs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
\ No newline at end of file
diff --git a/build/azure-pipelines/common/release.js b/build/azure-pipelines/common/release.js
index 0127cd4262..8744eb6574 100644
--- a/build/azure-pipelines/common/release.js
+++ b/build/azure-pipelines/common/release.js
@@ -89,3 +89,4 @@ main().catch(err => {
console.error(err);
process.exit(1);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInJlbGVhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztnR0FHZ0c7QUFFaEcsWUFBWSxDQUFDOztBQUViLDJDQUE0QztBQU81QyxTQUFTLG1CQUFtQixDQUFDLE9BQWU7SUFDM0MsT0FBTztRQUNOLEVBQUUsRUFBRSxPQUFPO1FBQ1gsTUFBTSxFQUFFLEtBQUs7S0FDYixDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLE9BQWU7SUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSwyQkFBYyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZJLE1BQU0sVUFBVSxHQUFHLHlCQUF5QixDQUFDO0lBQzdDLE1BQU0sS0FBSyxHQUFHO1FBQ2IsS0FBSyxFQUFFLDZDQUE2QztRQUNwRCxVQUFVLEVBQUU7WUFDWCxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtTQUNwQztLQUNELENBQUM7SUFFRixPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25DLE1BQU0sQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNqRSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRTtnQkFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUFFO1lBRS9DLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxD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
\ No newline at end of file
diff --git a/build/azure-pipelines/common/releaseBuild.js b/build/azure-pipelines/common/releaseBuild.js
index 3d7046de9d..1e15718e09 100644
--- a/build/azure-pipelines/common/releaseBuild.js
+++ b/build/azure-pipelines/common/releaseBuild.js
@@ -28,25 +28,29 @@ async function getConfig(client, quality) {
}
return res.resources[0];
}
-async function main() {
- const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION');
+async function main(force) {
+ const commit = getEnv('BUILD_SOURCEVERSION');
const quality = getEnv('VSCODE_QUALITY');
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 config = await getConfig(client, quality);
- console.log('Quality config:', config);
- if (config.frozen) {
- console.log(`Skipping release because quality ${quality} is frozen.`);
- return;
+ if (!force) {
+ const config = await getConfig(client, quality);
+ console.log('Quality config:', config);
+ if (config.frozen) {
+ console.log(`Skipping release because quality ${quality} is frozen.`);
+ return;
+ }
}
console.log(`Releasing build ${commit}...`);
const scripts = client.database('builds').container(quality).scripts;
await (0, retry_1.retry)(() => scripts.storedProcedure('releaseBuild').execute('', [commit]));
}
-main().then(() => {
+const [, , force] = process.argv;
+main(force === 'true').then(() => {
console.log('Build successfully released');
process.exit(0);
}, err => {
console.error(err);
process.exit(1);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZUJ1aWxkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicmVsZWFzZUJ1aWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcsOENBQXlEO0FBQ3pELDBDQUE2QztBQUM3QyxtQ0FBZ0M7QUFFaEMsU0FBUyxNQUFNLENBQUMsSUFBWTtJQUMzQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpDLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFO1FBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDO0FBT0QsU0FBUyxtQkFBbUIsQ0FBQyxPQUFlO0lBQzNDLE9BQU87UUFDTixFQUFFLEVBQUUsT0FBTztRQUNYLE1BQU0sRUFBRSxLQUFLO0tBQ2IsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsU0FBUyxDQUFDLE1BQW9CLEVBQUUsT0FBZTtJQUM3RCxNQUFNLEtBQUssR0FBRyx1Q0FBdUMsT0FBTyxHQUFHLENBQUM7SUFFaEUsTUFBTSxHQUFHLEdBQUcsTUFBTSxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBRTlGLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQy9CLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDcEM7SUFFRCxPQUFPLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFXLENBQUM7QUFDbkMsQ0FBQztBQUVELEtBQUssVUFBVSxJQUFJLENBQUMsS0FBYztJQUNqQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUM3QyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUV6QyxNQUFNLGNBQWMsR0FBRyxJQUFJLGlDQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBRSxDQUFDLENBQUM7SUFDekosTUFBTSxNQUFNLEdBQUcsSUFBSSxxQkFBWSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsMkJBQTJCLENBQUUsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBRXpHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDWCxNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV2QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsT0FBTyxhQUFhLENBQUMsQ0FBQztZQUN0RSxPQUFPO1NBQ1A7S0FDRDtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFFNUMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ3JFLE1BQU0sSUFBQSxhQUFLLEVBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFFRCxNQUFNLENBQUMsRUFBRSxBQUFELEVBQUcsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUVqQyxJQUFJLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/common/releaseBuild.ts b/build/azure-pipelines/common/releaseBuild.ts
index 1ea27a6964..1858567928 100644
--- a/build/azure-pipelines/common/releaseBuild.ts
+++ b/build/azure-pipelines/common/releaseBuild.ts
@@ -41,19 +41,22 @@ async function getConfig(client: CosmosClient, quality: string): Promise
return res.resources[0] as Config;
}
-async function main(): Promise {
- const commit = process.env['VSCODE_DISTRO_COMMIT'] || getEnv('BUILD_SOURCEVERSION');
+async function main(force: boolean): Promise {
+ const commit = getEnv('BUILD_SOURCEVERSION');
const quality = getEnv('VSCODE_QUALITY');
const aadCredentials = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!);
const client = new CosmosClient({ endpoint: process.env['AZURE_DOCUMENTDB_ENDPOINT']!, aadCredentials });
- const config = await getConfig(client, quality);
- console.log('Quality config:', config);
+ if (!force) {
+ const config = await getConfig(client, quality);
- if (config.frozen) {
- console.log(`Skipping release because quality ${quality} is frozen.`);
- return;
+ console.log('Quality config:', config);
+
+ if (config.frozen) {
+ console.log(`Skipping release because quality ${quality} is frozen.`);
+ return;
+ }
}
console.log(`Releasing build ${commit}...`);
@@ -62,7 +65,9 @@ async function main(): Promise {
await retry(() => scripts.storedProcedure('releaseBuild').execute('', [commit]));
}
-main().then(() => {
+const [, , force] = process.argv;
+
+main(force === 'true').then(() => {
console.log('Build successfully released');
process.exit(0);
}, err => {
diff --git a/build/azure-pipelines/common/retry.js b/build/azure-pipelines/common/retry.js
index d2cdab9c8c..6779cc2ddd 100644
--- a/build/azure-pipelines/common/retry.js
+++ b/build/azure-pipelines/common/retry.js
@@ -26,3 +26,4 @@ async function retry(fn) {
throw lastError;
}
exports.retry = retry;
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUV6RixLQUFLLFVBQVUsS0FBSyxDQUFJLEVBQW9CO0lBQ2xELElBQUksU0FBNEIsQ0FBQztJQUVqQyxLQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ25DLElBQUk7WUFDSCxPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7U0FDbEI7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxtRUFBbUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMzRixNQUFNLEdBQUcsQ0FBQzthQUNWO1lBRUQsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUNoQixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pFLE9BQU8sQ0FBQyxHQUFHLENBQUMsK0JBQStCLE1BQU0sT0FBTyxDQUFDLENBQUM7WUFFMUQsMENBQTBDO1lBQzFDLE1BQU0sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDOUM7S0FDRDtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUMzQyxNQUFNLFNBQVMsQ0FBQztBQUNqQixDQUFDO0FBdEJELHNCQXNCQyJ9
\ No newline at end of file
diff --git a/build/azure-pipelines/common/sign-win32.js b/build/azure-pipelines/common/sign-win32.js
index df190a2a04..e122c3eebe 100644
--- a/build/azure-pipelines/common/sign-win32.js
+++ b/build/azure-pipelines/common/sign-win32.js
@@ -15,3 +15,4 @@ const path = require("path");
path.dirname(process.argv[2]),
path.basename(process.argv[2])
]);
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi13aW4zMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ24td2luMzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxpQ0FBOEI7QUFDOUIsNkJBQTZCO0FBRTdCLElBQUEsV0FBSSxFQUFDO0lBQ0osT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBRTtJQUM5QixTQUFTO0lBQ1QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUU7SUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRTtJQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFO0lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FDOUIsQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/common/sign.js b/build/azure-pipelines/common/sign.js
index b9fd21d41d..3464ae2dfd 100644
--- a/build/azure-pipelines/common/sign.js
+++ b/build/azure-pipelines/common/sign.js
@@ -7,12 +7,33 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.main = void 0;
const cp = require("child_process");
const fs = require("fs");
-const tmp = require("tmp");
+const path = require("path");
+const os = require("os");
const crypto = require("crypto");
+class Temp {
+ _files = [];
+ tmpNameSync() {
+ const file = path.join(os.tmpdir(), crypto.randomBytes(20).toString('hex'));
+ this._files.push(file);
+ return file;
+ }
+ dispose() {
+ for (const file of this._files) {
+ try {
+ fs.unlinkSync(file);
+ }
+ catch (err) {
+ // noop
+ }
+ }
+ }
+}
function getParams(type) {
switch (type) {
case 'windows':
return '[{"keyCode":"CP-230012","operationSetCode":"SigntoolSign","parameters":[{"parameterName":"OpusName","parameterValue":"VS Code"},{"parameterName":"OpusInfo","parameterValue":"https://code.visualstudio.com/"},{"parameterName":"Append","parameterValue":"/as"},{"parameterName":"FileDigest","parameterValue":"/fd \\"SHA256\\""},{"parameterName":"PageHash","parameterValue":"/NPH"},{"parameterName":"TimeStamp","parameterValue":"/tr \\"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\\" /td sha256"}],"toolName":"sign","toolVersion":"1.0"},{"keyCode":"CP-230012","operationSetCode":"SigntoolVerify","parameters":[{"parameterName":"VerifyAll","parameterValue":"/all"}],"toolName":"sign","toolVersion":"1.0"}]';
+ case 'windows-appx':
+ return '[{"keyCode":"CP-229979","operationSetCode":"SigntoolSign","parameters":[{"parameterName":"OpusName","parameterValue":"VS Code"},{"parameterName":"OpusInfo","parameterValue":"https://code.visualstudio.com/"},{"parameterName":"FileDigest","parameterValue":"/fd \\"SHA256\\""},{"parameterName":"PageHash","parameterValue":"/NPH"},{"parameterName":"TimeStamp","parameterValue":"/tr \\"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\\" /td sha256"}],"toolName":"sign","toolVersion":"1.0"},{"keyCode":"CP-229979","operationSetCode":"SigntoolVerify","parameters":[],"toolName":"sign","toolVersion":"1.0"}]';
case 'rpm':
return '[{ "keyCode": "CP-450779-Pgp", "operationSetCode": "LinuxSign", "parameters": [], "toolName": "sign", "toolVersion": "1.0" }]';
case 'darwin-sign':
@@ -24,7 +45,8 @@ function getParams(type) {
}
}
function main([esrpCliPath, type, cert, username, password, folderPath, pattern]) {
- tmp.setGracefulCleanup();
+ const tmp = new Temp();
+ process.on('exit', () => tmp.dispose());
const patternPath = tmp.tmpNameSync();
fs.writeFileSync(patternPath, pattern);
const paramsPath = tmp.tmpNameSync();
@@ -83,3 +105,4 @@ if (require.main === module) {
main(process.argv.slice(2));
process.exit(0);
}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNpZ24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOzs7QUFFaEcsb0NBQW9DO0FBQ3BDLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLGlDQUFpQztBQUVqQyxNQUFNLElBQUk7SUFDRCxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTlCLFdBQVc7UUFDVixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVELE9BQU87UUFDTixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDL0IsSUFBSTtnQkFDSCxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3BCO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ2IsT0FBTzthQUNQO1NBQ0Q7SUFDRixDQUFDO0NBQ0Q7QUFFRCxTQUFTLFNBQVMsQ0FBQyxJQUFZO0lBQzlCLFFBQVEsSUFBSSxFQUFFO1FBQ2IsS0FBSyxTQUFTO1lBQ2IsT0FBTyx3c0JBQXdzQixDQUFDO1FBQ2p0QixLQUFLLGNBQWM7WUFDbEIsT0FBTyxpbUJBQWltQixDQUFDO1FBQzFtQixLQUFLLEtBQUs7WUFDVCxPQUFPLCtIQUErSCxDQUFDO1FBQ3hJLEtBQUssYUFBYTtZQUNqQixPQUFPLGtNQUFrTSxDQUFDO1FBQzNNLEtBQUssaUJBQWlCO1lBQ3JCLE9BQU8sMkhBQTJILENBQUM7UUFDcEk7WUFDQyxNQUFNLElBQUksS0FBSyxDQUFDLGFBQWEsSUFBSSxZQUFZLENB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
\ No newline at end of file
diff --git a/build/azure-pipelines/common/sign.ts b/build/azure-pipelines/common/sign.ts
index e7e64b83ca..dd3ba869b9 100644
--- a/build/azure-pipelines/common/sign.ts
+++ b/build/azure-pipelines/common/sign.ts
@@ -5,13 +5,36 @@
import * as cp from 'child_process';
import * as fs from 'fs';
-import * as tmp from 'tmp';
+import * as path from 'path';
+import * as os from 'os';
import * as crypto from 'crypto';
+class Temp {
+ private _files: string[] = [];
+
+ tmpNameSync(): string {
+ const file = path.join(os.tmpdir(), crypto.randomBytes(20).toString('hex'));
+ this._files.push(file);
+ return file;
+ }
+
+ dispose(): void {
+ for (const file of this._files) {
+ try {
+ fs.unlinkSync(file);
+ } catch (err) {
+ // noop
+ }
+ }
+ }
+}
+
function getParams(type: string): string {
switch (type) {
case 'windows':
return '[{"keyCode":"CP-230012","operationSetCode":"SigntoolSign","parameters":[{"parameterName":"OpusName","parameterValue":"VS Code"},{"parameterName":"OpusInfo","parameterValue":"https://code.visualstudio.com/"},{"parameterName":"Append","parameterValue":"/as"},{"parameterName":"FileDigest","parameterValue":"/fd \\"SHA256\\""},{"parameterName":"PageHash","parameterValue":"/NPH"},{"parameterName":"TimeStamp","parameterValue":"/tr \\"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\\" /td sha256"}],"toolName":"sign","toolVersion":"1.0"},{"keyCode":"CP-230012","operationSetCode":"SigntoolVerify","parameters":[{"parameterName":"VerifyAll","parameterValue":"/all"}],"toolName":"sign","toolVersion":"1.0"}]';
+ case 'windows-appx':
+ return '[{"keyCode":"CP-229979","operationSetCode":"SigntoolSign","parameters":[{"parameterName":"OpusName","parameterValue":"VS Code"},{"parameterName":"OpusInfo","parameterValue":"https://code.visualstudio.com/"},{"parameterName":"FileDigest","parameterValue":"/fd \\"SHA256\\""},{"parameterName":"PageHash","parameterValue":"/NPH"},{"parameterName":"TimeStamp","parameterValue":"/tr \\"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\\" /td sha256"}],"toolName":"sign","toolVersion":"1.0"},{"keyCode":"CP-229979","operationSetCode":"SigntoolVerify","parameters":[],"toolName":"sign","toolVersion":"1.0"}]';
case 'rpm':
return '[{ "keyCode": "CP-450779-Pgp", "operationSetCode": "LinuxSign", "parameters": [], "toolName": "sign", "toolVersion": "1.0" }]';
case 'darwin-sign':
@@ -24,7 +47,8 @@ function getParams(type: string): string {
}
export function main([esrpCliPath, type, cert, username, password, folderPath, pattern]: string[]) {
- tmp.setGracefulCleanup();
+ const tmp = new Temp();
+ process.on('exit', () => tmp.dispose());
const patternPath = tmp.tmpNameSync();
fs.writeFileSync(patternPath, pattern);
diff --git a/build/azure-pipelines/common/sql-computeNodeModulesCacheKey.js b/build/azure-pipelines/common/sql-computeNodeModulesCacheKey.js
index b8b1f6d5af..c0b11b3501 100644
--- a/build/azure-pipelines/common/sql-computeNodeModulesCacheKey.js
+++ b/build/azure-pipelines/common/sql-computeNodeModulesCacheKey.js
@@ -45,3 +45,4 @@ for (let i = 2; i < process.argv.length; i++) {
shasum.update(process.argv[i]);
}
process.stdout.write(shasum.digest('hex'));
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsLWNvbXB1dGVOb2RlTW9kdWxlc0NhY2hlS2V5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3FsLWNvbXB1dGVOb2RlTW9kdWxlc0NhY2hlS2V5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Z0dBR2dHO0FBRWhHLFlBQVksQ0FBQzs7QUFFYix5QkFBeUI7QUFDekIsNkJBQTZCO0FBQzdCLGlDQUFpQztBQUVqQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQztBQUUvQyxTQUFTLFNBQVMsQ0FBQyxRQUFnQixFQUFFLE9BQWUsRUFBRSxNQUFnQjtJQUNyRSxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFFMUQsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUU7UUFDNUIsTUFBTSxTQUFTLEdBQUcsR0FBRyxRQUFRLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekMsSUFBSSxJQUFjLENBQUM7UUFDbkIsSUFBSTtZQUNILElBQUksR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDL0M7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNiLFNBQVM7U0FDVDtRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3ZCLFNBQVMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3RDO2FBQU07WUFDTixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUM3QyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDeEM7U0FDRDtLQUNEO0FBQ0YsQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7QUFFekM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFbEUsMkNBQTJDO0FBQzNDLE1BQU0sTUFBTSxHQUFhLEVBQUUsQ0FBQztBQUM1QixTQUFTLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV2RCx1Q0FBdUM7QUFDdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0lBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQy9CO0FBRUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/common/telemetry-config.json b/build/azure-pipelines/common/telemetry-config.json
index fcba1e042b..d51d7d4dd2 100644
--- a/build/azure-pipelines/common/telemetry-config.json
+++ b/build/azure-pipelines/common/telemetry-config.json
@@ -1,12 +1,4 @@
[
- {
- "eventPrefix": "typescript-language-features/",
- "sourceDirs": [
- "../../s/extensions/typescript-language-features"
- ],
- "excludedDirs": [],
- "applyEndpoints": true
- },
{
"eventPrefix": "git/",
"sourceDirs": [
@@ -49,16 +41,6 @@
"excludedDirs": [],
"applyEndpoints": true
},
- {
- "eventPrefix": "ms-vscode.node2/",
- "sourceDirs": [
- "vscode-chrome-debug-core",
- "vscode-node-debug2"
- ],
- "excludedDirs": [],
- "applyEndpoints": true,
- "patchDebugEvents": true
- },
{
"eventPrefix": "ms-vscode.node/",
"sourceDirs": [
@@ -69,4 +51,4 @@
"applyEndpoints": true,
"patchDebugEvents": true
}
-]
\ No newline at end of file
+]
diff --git a/build/azure-pipelines/config/tsaoptions.json b/build/azure-pipelines/config/tsaoptions.json
index 560d0c2513..fa8e182d8f 100644
--- a/build/azure-pipelines/config/tsaoptions.json
+++ b/build/azure-pipelines/config/tsaoptions.json
@@ -1,12 +1,21 @@
{
- "instanceUrl": "https://msazure.visualstudio.com/defaultcollection",
- "projectName": "One",
- "areaPath": "One\\VSCode\\Client",
- "iterationPath": "One",
+ "codebaseName": "devdiv_vscode-client",
+ "ppe": false,
"notificationAliases": [
- "sbatten@microsoft.com"
+ "sbatten@microsoft.com"
],
- "ppe": "false",
- "template": "TFSMSAzure",
- "codebaseName": "vscode-client"
+ "codebaseAdmins": [
+ "REDMOND\\stbatt",
+ "REDMOND\\monacotools"
+ ],
+ "instanceUrl": "https://devdiv.visualstudio.com/defaultcollection",
+ "projectName": "DevDiv",
+ "areaPath": "DevDiv\\VS Code (compliance tracking only)\\Visual Studio Code Client",
+ "notifyAlways": true,
+ "template": "TFSDEVDIV",
+ "tools": [
+ "BinSkim",
+ "CredScan",
+ "CodeQL"
+ ]
}
diff --git a/build/azure-pipelines/darwin/app-entitlements.plist b/build/azure-pipelines/darwin/app-entitlements.plist
index 432c66c1df..4073eafcf5 100644
--- a/build/azure-pipelines/darwin/app-entitlements.plist
+++ b/build/azure-pipelines/darwin/app-entitlements.plist
@@ -4,12 +4,6 @@
com.apple.security.cs.allow-jit
- com.apple.security.cs.allow-unsigned-executable-memory
-
- com.apple.security.cs.allow-dyld-environment-variables
-
- com.apple.security.cs.disable-library-validation
-
com.apple.security.device.audio-input
com.apple.security.device.camera
diff --git a/build/azure-pipelines/darwin/cli-build-darwin.yml b/build/azure-pipelines/darwin/cli-build-darwin.yml
new file mode 100644
index 0000000000..c0e3850c2e
--- /dev/null
+++ b/build/azure-pipelines/darwin/cli-build-darwin.yml
@@ -0,0 +1,67 @@
+parameters:
+ - name: VSCODE_QUALITY
+ type: string
+ - name: VSCODE_BUILD_MACOS
+ type: boolean
+ default: false
+ - name: VSCODE_BUILD_MACOS_ARM64
+ type: boolean
+ default: false
+
+steps:
+ - task: NodeTool@0
+ inputs:
+ versionSpec: "16.x"
+
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - template: ../distro/download-distro.yml
+ - script: node build/azure-pipelines/distro/apply-cli-patches
+ displayName: Apply distro patches
+
+ - task: Npm@1
+ displayName: Download openssl prebuilt
+ inputs:
+ command: custom
+ customCommand: pack @vscode-internal/openssl-prebuilt@0.0.8
+ customRegistry: useFeed
+ customFeed: "Monaco/openssl-prebuilt"
+ workingDir: $(Build.ArtifactStagingDirectory)
+
+ - script: |
+ set -e
+ mkdir $(Build.ArtifactStagingDirectory)/openssl
+ tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.8.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl
+ displayName: Extract openssl prebuilt
+
+ - script: node build/azure-pipelines/cli/prepare.js
+ displayName: Prepare CLI build
+ env:
+ VSCODE_CLI_PREPARE_ROOT: $(Build.SourcesDirectory)/.build/distro
+ VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+
+ - template: ../cli/install-rust-posix.yml
+ parameters:
+ targets:
+ - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
+ - x86_64-apple-darwin
+ - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:
+ - aarch64-apple-darwin
+
+ - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: x86_64-apple-darwin
+ VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_x64_cli
+ VSCODE_CLI_ENV:
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-osx/include
+
+ - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: aarch64-apple-darwin
+ VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_darwin_arm64_cli
+ VSCODE_CLI_ENV:
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-osx/include
diff --git a/build/azure-pipelines/darwin/helper-plugin-entitlements.plist b/build/azure-pipelines/darwin/helper-plugin-entitlements.plist
new file mode 100644
index 0000000000..1cc1a152c7
--- /dev/null
+++ b/build/azure-pipelines/darwin/helper-plugin-entitlements.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.cs.allow-unsigned-executable-memory
+
+ com.apple.security.cs.allow-dyld-environment-variables
+
+ com.apple.security.cs.disable-library-validation
+
+
+
diff --git a/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml
new file mode 100644
index 0000000000..ec9ac07e60
--- /dev/null
+++ b/build/azure-pipelines/darwin/product-build-darwin-cli-sign.yml
@@ -0,0 +1,50 @@
+parameters:
+ - name: VSCODE_BUILD_MACOS
+ type: boolean
+ - name: VSCODE_BUILD_MACOS_ARM64
+ type: boolean
+
+steps:
+ - task: NodeTool@0
+ inputs:
+ versionSpec: "16.x"
+
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY build
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
+
+ - script: |
+ set -e
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ workingDirectory: build
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: build/.npmrc
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ - script: |
+ set -e
+ for i in {1..5}; do # try 5 times
+ 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
+ workingDirectory: build
+ displayName: Install build dependencies
+
+ - template: ../cli/cli-darwin-sign.yml
+ parameters:
+ VSCODE_CLI_ARTIFACTS:
+ - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
+ - unsigned_vscode_cli_darwin_x64_cli
+ - ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:
+ - unsigned_vscode_cli_darwin_arm64_cli
diff --git a/build/azure-pipelines/darwin/product-build-darwin-sign.yml b/build/azure-pipelines/darwin/product-build-darwin-sign.yml
index 059e848c0b..076788581c 100644
--- a/build/azure-pipelines/darwin/product-build-darwin-sign.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin-sign.yml
@@ -3,132 +3,43 @@ steps:
inputs:
versionSpec: "16.x"
+ - task: UseDotNet@2
+ inputs:
+ version: 6.x
+
+ - task: EsrpClientTool@1
+ continueOnError: true
+ displayName: Download ESRPClient
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
-
- - 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 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: |
- 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
+ KeyVaultName: vscode-build-secrets
+ SecretsFilter: "ESRP-PKI,esrp-aad-username,esrp-aad-password"
- download: current
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
displayName: Download $(VSCODE_ARCH) artifact
- - script: |
- set -e
- unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)
- mv $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
- displayName: Unzip & move
-
- - task: UseDotNet@2
- inputs:
- version: 2.x
-
- - task: EsrpClientTool@1
- displayName: Download ESRPClient
-
- - script: |
- set -e
- node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(agent.builddirectory) VSCode-darwin-$(VSCODE_ARCH).zip
+ - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll darwin-sign $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip
displayName: Codesign
- - script: |
- set -e
- node build/azure-pipelines/common/sign "$(esrpclient.toolpath)/$(esrpclient.toolname)" darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(agent.builddirectory) VSCode-darwin-$(VSCODE_ARCH).zip
+ - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll darwin-notarize $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive VSCode-darwin-$(VSCODE_ARCH).zip
displayName: Notarize
+ - script: unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-$(VSCODE_ARCH).zip -d $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)
+ displayName: Extract signed app
+ condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
+
- script: |
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_ROOT/$APP_NAME/Contents/Resources/app/bin/code" --export-default-configuration=.build
- displayName: Verify start after signing (export configuration)
+ APP_PATH="$APP_ROOT/$APP_NAME"
+ codesign -dv --deep --verbose=4 "$APP_PATH"
+ "$APP_PATH/Contents/Resources/app/bin/code" --export-default-configuration=.build
+ displayName: Verify signature
condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
- script: |
@@ -141,9 +52,9 @@ steps:
echo "##vso[task.setvariable variable=ASSET_ID]$ASSET_ID"
displayName: Set asset id variable
- - script: mv $(agent.builddirectory)/VSCode-darwin-x64.zip $(agent.builddirectory)/VSCode-darwin.zip
- displayName: Rename x64 build to it's legacy name
+ - script: mv $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin-x64.zip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-darwin.zip
+ displayName: Rename x64 build to its legacy name
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
- - publish: $(Agent.BuildDirectory)/VSCode-$(ASSET_ID).zip
+ - publish: $(Pipeline.Workspace)/unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive/VSCode-$(ASSET_ID).zip
artifact: vscode_client_darwin_$(VSCODE_ARCH)_archive
diff --git a/build/azure-pipelines/darwin/product-build-darwin-test.yml b/build/azure-pipelines/darwin/product-build-darwin-test.yml
index 1094b41ca2..32a9884a14 100644
--- a/build/azure-pipelines/darwin/product-build-darwin-test.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin-test.yml
@@ -9,48 +9,39 @@ parameters:
type: boolean
steps:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ - script: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download Electron and Playwright
- ${{ if eq(parameters.VSCODE_RUN_UNIT_TESTS, true) }}:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- ./scripts/test.sh --tfs "Unit Tests"
+ - script: ./scripts/test.sh --tfs "Unit Tests"
displayName: Run unit tests (Electron)
timeoutInMinutes: 15
- - script: |
- set -e
- yarn test-node
+ - script: yarn test-node
displayName: Run unit tests (node.js)
timeoutInMinutes: 15
- - script: |
- set -e
- DEBUG=*browser* yarn test-browser-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests"
+ - script: yarn test-browser-no-install --sequential --browser chromium --browser webkit --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
displayName: Run unit tests (Browser, Chromium & Webkit)
timeoutInMinutes: 30
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- ./scripts/test.sh --build --tfs "Unit Tests"
+ - script: ./scripts/test.sh --build --tfs "Unit Tests"
displayName: Run unit tests (Electron)
timeoutInMinutes: 15
- - script: |
- set -e
- yarn test-node --build
+ - script: yarn test-node --build
displayName: Run unit tests (node.js)
timeoutInMinutes: 15
- - script: |
- set -e
- DEBUG=*browser* yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
+ - script: yarn test-browser-no-install --sequential --build --browser chromium --browser webkit --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
displayName: Run unit tests (Browser, Chromium & Webkit)
timeoutInMinutes: 30
@@ -70,16 +61,13 @@ steps:
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: |
- ./scripts/test-integration.sh --tfs "Integration Tests"
+ - script: ./scripts/test-integration.sh --tfs "Integration Tests"
displayName: Run integration tests (Electron)
timeoutInMinutes: 20
@@ -89,18 +77,18 @@ steps:
# 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-darwin-$(VSCODE_ARCH)
+ 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"
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)
displayName: Run integration tests (Electron)
timeoutInMinutes: 20
- - script: |
- set -e
- VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
- ./scripts/test-web-integration.sh --browser webkit
+ - script: ./scripts/test-web-integration.sh --browser webkit
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)
displayName: Run integration tests (Browser, Webkit)
timeoutInMinutes: 20
@@ -109,28 +97,26 @@ steps:
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-remote-integration.sh
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)
displayName: Run integration tests (Remote)
timeoutInMinutes: 20
- ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:
- - script: |
- set -e
- ps -ef
+ - script: ps -ef
displayName: Diagnostics before smoke test run
continueOnError: true
condition: succeededOrFailed()
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- yarn --cwd test/smoke compile
+ - script: yarn --cwd test/smoke compile
displayName: Compile smoke tests
- - script: |
- set -e
- yarn smoketest-no-compile --tracing
+ - script: yarn gulp compile-extension-media
+ displayName: Compile extensions for smoke tests
+
+ - script: yarn smoketest-no-compile --tracing
timeoutInMinutes: 20
displayName: Run smoke tests (Electron)
@@ -143,10 +129,9 @@ steps:
timeoutInMinutes: 20
displayName: Run smoke tests (Electron)
- - script: |
- set -e
- VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)" \
- yarn smoketest-no-compile --web --tracing --headless
+ - script: yarn smoketest-no-compile --web --tracing --headless
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-darwin-$(VSCODE_ARCH)
timeoutInMinutes: 20
displayName: Run smoke tests (Browser, Chromium)
@@ -155,14 +140,13 @@ steps:
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"
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-darwin-$(VSCODE_ARCH)
timeoutInMinutes: 20
displayName: Run smoke tests (Remote)
- - script: |
- set -e
- ps -ef
+ - script: ps -ef
displayName: Diagnostics after smoke test run
continueOnError: true
condition: succeededOrFailed()
diff --git a/build/azure-pipelines/darwin/product-build-darwin-universal.yml b/build/azure-pipelines/darwin/product-build-darwin-universal.yml
index 929aaf4203..c52e8129a5 100644
--- a/build/azure-pipelines/darwin/product-build-darwin-universal.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin-universal.yml
@@ -3,77 +3,37 @@ steps:
inputs:
versionSpec: "16.x"
+ - template: ../distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
- - 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: node build/setup-npm-registry.js $NPM_REGISTRY build
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
- 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
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ workingDirectory: build
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
- - 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 x64 $ENABLE_TERRAPIN > .build/yarnlockhash
- displayName: Prepare yarn cache flags
-
- - task: Cache@2
+ - task: npmAuthenticate@0
inputs:
- key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
- path: .build/node_modules_cache
- cacheHitVar: NODE_MODULES_RESTORED
- displayName: Restore node_modules cache
+ workingFile: build/.npmrc
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
- 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: |
- 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
+ for i in {1..5}; do # try 5 times
yarn --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -81,25 +41,8 @@ steps:
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: |
- set -e
- node build/azure-pipelines/mixin
- displayName: Mix in quality
+ workingDirectory: build
+ displayName: Install build dependencies
- download: current
artifact: unsigned_vscode_client_darwin_x64_archive
@@ -109,13 +52,14 @@ steps:
artifact: unsigned_vscode_client_darwin_arm64_archive
displayName: Download arm64 artifact
+ - script: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
+
- script: |
set -e
- cp $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip $(agent.builddirectory)/VSCode-darwin-x64.zip
- cp $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip $(agent.builddirectory)/VSCode-darwin-arm64.zip
- unzip $(agent.builddirectory)/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64
- unzip $(agent.builddirectory)/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64
- DEBUG=* node build/darwin/create-universal-app.js
+ unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_x64_archive/VSCode-darwin-x64.zip -d $(agent.builddirectory)/VSCode-darwin-x64
+ unzip $(Pipeline.Workspace)/unsigned_vscode_client_darwin_arm64_archive/VSCode-darwin-arm64.zip -d $(agent.builddirectory)/VSCode-darwin-arm64
+ DEBUG=* node build/darwin/create-universal-app.js $(agent.builddirectory)
displayName: Create Universal App
- script: |
@@ -125,13 +69,12 @@ steps:
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
+ export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1)
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
+ DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory)
displayName: Set Hardened Entitlements
- - script: |
- set -e
- pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd
+ - script: pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd
displayName: Archive build
- publish: $(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH).zip
diff --git a/build/azure-pipelines/darwin/product-build-darwin.yml b/build/azure-pipelines/darwin/product-build-darwin.yml
index eda79c53cf..c315dbb3d3 100644
--- a/build/azure-pipelines/darwin/product-build-darwin.yml
+++ b/build/azure-pipelines/darwin/product-build-darwin.yml
@@ -1,8 +1,8 @@
parameters:
- - name: VSCODE_PUBLISH
- type: boolean
- name: VSCODE_QUALITY
type: string
+ - name: VSCODE_CIBUILD
+ type: boolean
- name: VSCODE_RUN_UNIT_TESTS
type: boolean
- name: VSCODE_RUN_INTEGRATION_TESTS
@@ -21,86 +21,62 @@ steps:
versionSpec: "16.x"
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - template: ../distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password,macos-developer-certificate,macos-developer-certificate-key"
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- task: DownloadPipelineArtifact@2
inputs:
artifact: Compilation
path: $(Build.ArtifactStagingDirectory)
displayName: Download compilation output
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
+ - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
displayName: Extract compilation output
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- cat << EOF > ~/.netrc
- machine github.com
- login vscode
- password $(github-distro-mixin-password)
- EOF
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
- git config user.email "vscode@microsoft.com"
- git config user.name "VSCode"
- displayName: Prepare tooling
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js darwin $VSCODE_ARCH > .build/yarnlockhash
+ displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
+ key: '"node_modules" | .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
+ - script: 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
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
- 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
+ for i in {1..5}; do # try 5 times
yarn --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -115,6 +91,11 @@ steps:
displayName: Install dependencies
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - script: node build/azure-pipelines/distro/mixin-npm
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ displayName: Mixin distro node modules
+
- script: |
set -e
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
@@ -124,40 +105,32 @@ steps:
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)
- - script: |
- set -e
- node build/azure-pipelines/mixin
- displayName: Mix in quality
+ - script: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
+
+ - template: ../common/install-builtin-extensions.yml
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
+ - script: yarn gulp vscode-darwin-$(VSCODE_ARCH)-min-ci
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Build client
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- node build/azure-pipelines/mixin --server
- displayName: Mix in server quality
+ - script: yarn gulp vscode-reh-darwin-$(VSCODE_ARCH)-min-ci
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Build server
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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: yarn gulp vscode-reh-web-darwin-$(VSCODE_ARCH)-min-ci
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Build server (web)
- - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn gulp "transpile-client" "transpile-extensions"
- displayName: Transpile
+ - ${{ else }}:
+ - script: yarn gulp transpile-client-swc transpile-extensions
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ 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)) }}:
- template: product-build-darwin-test.yml
@@ -167,7 +140,27 @@ steps:
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
+ - ${{ elseif and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:
+ - task: DownloadPipelineArtifact@2
+ inputs:
+ artifact: unsigned_vscode_cli_darwin_$(VSCODE_ARCH)_cli
+ patterns: "**"
+ path: $(Build.ArtifactStagingDirectory)/cli
+ displayName: Download VS Code CLI
+
+ - script: |
+ set -e
+ APP_ROOT="$(Agent.BuildDirectory)/VSCode-darwin-$(VSCODE_ARCH)"
+ APP_NAME="`ls $APP_ROOT | head -n 1`"
+ APP_PATH="$APP_ROOT/$APP_NAME"
+ ARCHIVE_NAME=$(ls "$(Build.ArtifactStagingDirectory)/cli" | head -n 1)
+ unzip "$(Build.ArtifactStagingDirectory)/cli/$ARCHIVE_NAME" -d "$(Build.ArtifactStagingDirectory)/cli"
+ CLI_APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").tunnelApplicationName")
+ APP_NAME=$(node -p "require(\"$APP_PATH/Contents/Resources/app/product.json\").applicationName")
+ mv "$(Build.ArtifactStagingDirectory)/cli/$APP_NAME" "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME"
+ chmod +x "$APP_PATH/Contents/Resources/app/bin/$CLI_APP_NAME"
+ displayName: Make CLI executable
+
# Setting hardened entitlements is a requirement for:
# * Apple notarization
# * Running tests on Big Sur (because Big Sur has additional security precautions)
@@ -178,17 +171,14 @@ steps:
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
+ export CODESIGN_IDENTITY=$(security find-identity -v -p codesigning $(agent.tempdirectory)/buildagent.keychain | grep -oEi "([0-9A-F]{40})" | head -n 1)
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
+ DEBUG=electron-osx-sign* node build/darwin/sign.js $(agent.builddirectory)
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)) }}:
- - script: |
- set -e
- pushd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip * && popd
+ - script: cd $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH) && zip -r -X -y $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH).zip *
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)) }}:
- script: |
set -e
@@ -199,46 +189,38 @@ steps:
pushd .. && mv vscode-reh-web-darwin-$(VSCODE_ARCH) vscode-server-darwin-$(VSCODE_ARCH)-web && zip -Xry vscode-server-darwin-$(VSCODE_ARCH)-web.zip vscode-server-darwin-$(VSCODE_ARCH)-web && popd
displayName: Prepare to publish servers
- - ${{ 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
displayName: Generate SBOM (client)
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)) }}:
- publish: $(agent.builddirectory)/VSCode-darwin-$(VSCODE_ARCH)/_manifest
displayName: Publish SBOM (client)
artifact: vscode_client_darwin_$(VSCODE_ARCH)_sbom
- - ${{ 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
displayName: Generate SBOM (server)
inputs:
BuildDropPath: $(agent.builddirectory)/vscode-server-darwin-$(VSCODE_ARCH)
PackageName: Visual Studio Code Server
- - ${{ 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
displayName: Publish SBOM (server)
artifact: vscode_server_darwin_$(VSCODE_ARCH)_sbom
- - ${{ 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).zip
artifact: unsigned_vscode_client_darwin_$(VSCODE_ARCH)_archive
displayName: Publish client 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).zip
artifact: vscode_server_darwin_$(VSCODE_ARCH)_archive-unsigned
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
artifact: vscode_web_darwin_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish web server archive
- - ${{ if and(eq(parameters.VSCODE_PUBLISH, true), eq(parameters.VSCODE_RUN_UNIT_TESTS, false), eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, false), eq(parameters.VSCODE_RUN_SMOKE_TESTS, false)) }}:
- task: AzureCLI@2
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -250,7 +232,6 @@ steps:
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" \
diff --git a/build/azure-pipelines/darwin/sql-product-build-darwin.yml b/build/azure-pipelines/darwin/sql-product-build-darwin.yml
index fb5082ecaf..054a588ffc 100644
--- a/build/azure-pipelines/darwin/sql-product-build-darwin.yml
+++ b/build/azure-pipelines/darwin/sql-product-build-darwin.yml
@@ -172,7 +172,7 @@ steps:
set -e
unzip $(agent.builddirectory)/drop/darwin/archive/azuredatastudio-darwin-x64-unsigned.zip -d $(agent.builddirectory)/azuredatastudio-darwin-x64
unzip $(agent.builddirectory)/drop/darwin/archive/azuredatastudio-darwin-arm64-unsigned.zip -d $(agent.builddirectory)/azuredatastudio-darwin-arm64
- DEBUG=* node build/darwin/create-universal-app.js
+ DEBUG=* node build/darwin/create-universal-app.js $(agent.builddirectory)
displayName: Create Universal App
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'universal'))
diff --git a/build/azure-pipelines/distro-build.yml b/build/azure-pipelines/distro-build.yml
index db2d245cc5..fe09ecdeb2 100644
--- a/build/azure-pipelines/distro-build.yml
+++ b/build/azure-pipelines/distro-build.yml
@@ -10,35 +10,6 @@ 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"
-
- - 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"
-
- git remote add distro "https://github.com/$VSCODE_MIXIN_REPO.git"
- git fetch distro
-
- # Push main branch into oss/main
- git push distro origin/main:refs/heads/oss/main
-
- # Push every release branch into oss/release
- git for-each-ref --format="%(refname:short)" refs/remotes/origin/release/* | sed 's/^origin\/\(.*\)$/\0:refs\/heads\/oss\/\1/' | xargs git push distro
-
- git merge $(node -p "require('./package.json').distro")
-
- displayName: Sync & Merge Distro
+ - template: ./distro/download-distro.yml
+ - script: node build/azure-pipelines/distro/apply-cli-patches
+ displayName: Apply distro patches
diff --git a/build/azure-pipelines/distro/apply-cli-patches.js b/build/azure-pipelines/distro/apply-cli-patches.js
new file mode 100644
index 0000000000..3ef9834b94
--- /dev/null
+++ b/build/azure-pipelines/distro/apply-cli-patches.js
@@ -0,0 +1,18 @@
+"use strict";
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+const cp = require("child_process");
+function log(...args) {
+ console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);
+}
+log(`Applying CLI patches...`);
+const basePath = `.build/distro/cli-patches`;
+for (const patch of fs.readdirSync(basePath)) {
+ cp.execSync(`git apply --ignore-whitespace --ignore-space-change ${basePath}/${patch}`, { stdio: 'inherit' });
+ log('Applied CLI patch:', patch, '✔︎');
+}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbHktY2xpLXBhdGNoZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcHBseS1jbGktcGF0Y2hlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLHlCQUF5QjtBQUN6QixvQ0FBb0M7QUFFcEMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFXO0lBQzFCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDakcsQ0FBQztBQUVELEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBRS9CLE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDO0FBRTdDLEtBQUssTUFBTSxLQUFLLElBQUksRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtJQUM3QyxFQUFFLENBQUMsUUFBUSxDQUFDLHVEQUF1RCxRQUFRLElBQUksS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUM5RyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0NBQ3ZDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/distro/apply-cli-patches.ts b/build/azure-pipelines/distro/apply-cli-patches.ts
new file mode 100644
index 0000000000..f3d6a08c6f
--- /dev/null
+++ b/build/azure-pipelines/distro/apply-cli-patches.ts
@@ -0,0 +1,20 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as fs from 'fs';
+import * as cp from 'child_process';
+
+function log(...args: any[]): void {
+ console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);
+}
+
+log(`Applying CLI patches...`);
+
+const basePath = `.build/distro/cli-patches`;
+
+for (const patch of fs.readdirSync(basePath)) {
+ cp.execSync(`git apply --ignore-whitespace --ignore-space-change ${basePath}/${patch}`, { stdio: 'inherit' });
+ log('Applied CLI patch:', patch, '✔︎');
+}
diff --git a/build/azure-pipelines/distro/download-distro.yml b/build/azure-pipelines/distro/download-distro.yml
new file mode 100644
index 0000000000..2e727b28b4
--- /dev/null
+++ b/build/azure-pipelines/distro/download-distro.yml
@@ -0,0 +1,56 @@
+steps:
+ - task: AzureKeyVault@1
+ displayName: "Azure Key Vault: Get Secrets"
+ inputs:
+ azureSubscription: "vscode-builds-subscription"
+ KeyVaultName: vscode-build-secrets
+ SecretsFilter: "github-distro-mixin-password"
+
+ # TODO@joaomoreno: Keep pwsh once we move out of running entire jobs in containers
+ - pwsh: |
+ "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$Home/_netrc" -Encoding ASCII
+ condition: and(succeeded(), contains(variables['Agent.OS'], 'windows'))
+ displayName: Setup distro auth
+
+ - pwsh: |
+ $ErrorActionPreference = "Stop"
+ $ArchivePath = "$(Agent.TempDirectory)/distro.zip"
+ $PackageJson = Get-Content -Path package.json -Raw | ConvertFrom-Json
+ $DistroVersion = $PackageJson.distro
+
+ Invoke-WebRequest -Uri "https://api.github.com/repos/microsoft/vscode-distro/zipball/$DistroVersion" `
+ -OutFile $ArchivePath `
+ -Headers @{ "Accept" = "application/vnd.github+json"; "Authorization" = "Bearer $(github-distro-mixin-password)"; "X-GitHub-Api-Version" = "2022-11-28" }
+
+ New-Item -ItemType Directory -Path .build -Force
+ Expand-Archive -Path $ArchivePath -DestinationPath .build
+ Rename-Item -Path ".build/microsoft-vscode-distro-$DistroVersion" -NewName distro
+ condition: and(succeeded(), contains(variables['Agent.OS'], 'windows'))
+ displayName: Download distro
+
+ - script: |
+ mkdir -p .build
+ cat << EOF | tee ~/.netrc .build/.netrc > /dev/null
+ machine github.com
+ login vscode
+ password $(github-distro-mixin-password)
+ EOF
+ condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows')))
+ displayName: Setup distro auth
+
+ - script: |
+ set -e
+ ArchivePath="$(Agent.TempDirectory)/distro.zip"
+ DistroVersion=$(node -p "require('./package.json').distro")
+
+ curl -H "Accept: application/vnd.github+json" \
+ -H "Authorization: Bearer $(github-distro-mixin-password)" \
+ -H "X-GitHub-Api-Version: 2022-11-28" \
+ -o $ArchivePath \
+ -L "https://api.github.com/repos/microsoft/vscode-distro/zipball/$DistroVersion"
+
+ unzip $ArchivePath -d .build
+ mv .build/microsoft-vscode-distro-$DistroVersion .build/distro
+ cp remote/.yarnrc .build/distro/npm/remote/.yarnrc
+ condition: and(succeeded(), not(contains(variables['Agent.OS'], 'windows')))
+ displayName: Download distro
diff --git a/build/azure-pipelines/distro/mixin-npm.js b/build/azure-pipelines/distro/mixin-npm.js
new file mode 100644
index 0000000000..ba17d6d952
--- /dev/null
+++ b/build/azure-pipelines/distro/mixin-npm.js
@@ -0,0 +1,35 @@
+"use strict";
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+const path = require("path");
+const { dirs } = require('../../npm/dirs');
+function log(...args) {
+ console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);
+}
+function mixin(mixinPath) {
+ if (!fs.existsSync(`${mixinPath}/node_modules`)) {
+ log(`Skipping distro npm dependencies: ${mixinPath} (no node_modules)`);
+ return;
+ }
+ log(`Mixing in distro npm dependencies: ${mixinPath}`);
+ const distroPackageJson = JSON.parse(fs.readFileSync(`${mixinPath}/package.json`, 'utf8'));
+ const targetPath = path.relative('.build/distro/npm', mixinPath);
+ for (const dependency of Object.keys(distroPackageJson.dependencies)) {
+ fs.rmSync(`./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true });
+ fs.cpSync(`${mixinPath}/node_modules/${dependency}`, `./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true, dereference: true });
+ }
+ log(`Mixed in distro npm dependencies: ${mixinPath} ✔︎`);
+}
+function main() {
+ log(`Mixing in distro npm dependencies...`);
+ const mixinPaths = dirs.filter(d => /^.build\/distro\/npm/.test(d));
+ for (const mixinPath of mixinPaths) {
+ mixin(mixinPath);
+ }
+}
+main();
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4tbnBtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWl4aW4tbnBtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUF1QixDQUFDO0FBRWpFLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBVztJQUMxQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQ2pHLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxTQUFpQjtJQUMvQixJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsZUFBZSxDQUFDLEVBQUU7UUFDaEQsR0FBRyxDQUFDLHFDQUFxQyxTQUFTLG9CQUFvQixDQUFDLENBQUM7UUFDeEUsT0FBTztLQUNQO0lBRUQsR0FBRyxDQUFDLHNDQUFzQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRXZELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsU0FBUyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUMzRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLG1CQUFtQixFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBRWpFLEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsRUFBRTtRQUNyRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsVUFBVSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQzFGLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxTQUFTLGlCQUFpQixVQUFVLEVBQUUsRUFBRSxLQUFLLFVBQVUsaUJBQWlCLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQ3hKO0lBRUQsR0FBRyxDQUFDLHFDQUFxQyxTQUFTLEtBQUssQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLElBQUk7SUFDWixHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQztJQUU1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFcEUsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUU7UUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2pCO0FBQ0YsQ0FBQztBQUVELElBQUksRUFBRSxDQUFDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/distro/mixin-npm.ts b/build/azure-pipelines/distro/mixin-npm.ts
new file mode 100644
index 0000000000..4a51c6fc42
--- /dev/null
+++ b/build/azure-pipelines/distro/mixin-npm.ts
@@ -0,0 +1,43 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as fs from 'fs';
+import * as path from 'path';
+const { dirs } = require('../../npm/dirs') as { dirs: string[] };
+
+function log(...args: any[]): void {
+ console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);
+}
+
+function mixin(mixinPath: string) {
+ if (!fs.existsSync(`${mixinPath}/node_modules`)) {
+ log(`Skipping distro npm dependencies: ${mixinPath} (no node_modules)`);
+ return;
+ }
+
+ log(`Mixing in distro npm dependencies: ${mixinPath}`);
+
+ const distroPackageJson = JSON.parse(fs.readFileSync(`${mixinPath}/package.json`, 'utf8'));
+ const targetPath = path.relative('.build/distro/npm', mixinPath);
+
+ for (const dependency of Object.keys(distroPackageJson.dependencies)) {
+ fs.rmSync(`./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true });
+ fs.cpSync(`${mixinPath}/node_modules/${dependency}`, `./${targetPath}/node_modules/${dependency}`, { recursive: true, force: true, dereference: true });
+ }
+
+ log(`Mixed in distro npm dependencies: ${mixinPath} ✔︎`);
+}
+
+function main() {
+ log(`Mixing in distro npm dependencies...`);
+
+ const mixinPaths = dirs.filter(d => /^.build\/distro\/npm/.test(d));
+
+ for (const mixinPath of mixinPaths) {
+ mixin(mixinPath);
+ }
+}
+
+main();
diff --git a/build/azure-pipelines/distro/mixin-quality.js b/build/azure-pipelines/distro/mixin-quality.js
new file mode 100644
index 0000000000..3f1e1f5cc7
--- /dev/null
+++ b/build/azure-pipelines/distro/mixin-quality.js
@@ -0,0 +1,53 @@
+"use strict";
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = require("fs");
+const path = require("path");
+function log(...args) {
+ console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);
+}
+function main() {
+ const quality = process.env['VSCODE_QUALITY'];
+ if (!quality) {
+ throw new Error('Missing VSCODE_QUALITY, skipping mixin');
+ }
+ log(`Mixing in distro quality...`);
+ const basePath = `.build/distro/mixin/${quality}`;
+ for (const name of fs.readdirSync(basePath)) {
+ const distroPath = path.join(basePath, name);
+ const ossPath = path.relative(basePath, distroPath);
+ if (ossPath === 'product.json') {
+ const distro = JSON.parse(fs.readFileSync(distroPath, 'utf8'));
+ const oss = JSON.parse(fs.readFileSync(ossPath, 'utf8'));
+ let builtInExtensions = oss.builtInExtensions;
+ if (Array.isArray(distro.builtInExtensions)) {
+ log('Overwriting built-in extensions:', distro.builtInExtensions.map(e => e.name));
+ builtInExtensions = distro.builtInExtensions;
+ }
+ else if (distro.builtInExtensions) {
+ const include = distro.builtInExtensions['include'] ?? [];
+ const exclude = distro.builtInExtensions['exclude'] ?? [];
+ log('OSS built-in extensions:', builtInExtensions.map(e => e.name));
+ log('Including built-in extensions:', include.map(e => e.name));
+ log('Excluding built-in extensions:', exclude);
+ builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));
+ builtInExtensions = [...builtInExtensions, ...include];
+ log('Final built-in extensions:', builtInExtensions.map(e => e.name));
+ }
+ else {
+ log('Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));
+ }
+ const result = { webBuiltInExtensions: oss.webBuiltInExtensions, ...distro, builtInExtensions };
+ fs.writeFileSync(ossPath, JSON.stringify(result, null, '\t'), 'utf8');
+ }
+ else {
+ fs.cpSync(distroPath, ossPath, { force: true, recursive: true });
+ }
+ log(distroPath, '✔︎');
+ }
+}
+main();
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4tcXVhbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm1peGluLXF1YWxpdHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyx5QkFBeUI7QUFDekIsNkJBQTZCO0FBbUI3QixTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQVc7SUFDMUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsU0FBUyxJQUFJO0lBQ1osTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7S0FDMUQ7SUFFRCxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUVuQyxNQUFNLFFBQVEsR0FBRyx1QkFBdUIsT0FBTyxFQUFFLENBQUM7SUFFbEQsS0FBSyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQzVDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXBELElBQUksT0FBTyxLQUFLLGNBQWMsRUFBRTtZQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFZLENBQUM7WUFDMUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxD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
\ No newline at end of file
diff --git a/build/azure-pipelines/distro/mixin-quality.ts b/build/azure-pipelines/distro/mixin-quality.ts
new file mode 100644
index 0000000000..a7d2f88932
--- /dev/null
+++ b/build/azure-pipelines/distro/mixin-quality.ts
@@ -0,0 +1,80 @@
+/*---------------------------------------------------------------------------------------------
+ * Copyright (c) Microsoft Corporation. All rights reserved.
+ * Licensed under the Source EULA. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+import * as fs from 'fs';
+import * as path from 'path';
+
+interface IBuiltInExtension {
+ readonly name: string;
+ readonly version: string;
+ readonly repo: string;
+ readonly metadata: any;
+}
+
+interface OSSProduct {
+ readonly builtInExtensions: IBuiltInExtension[];
+ readonly webBuiltInExtensions?: IBuiltInExtension[];
+}
+
+interface Product {
+ readonly builtInExtensions?: IBuiltInExtension[] | { 'include'?: IBuiltInExtension[]; 'exclude'?: string[] };
+ readonly webBuiltInExtensions?: IBuiltInExtension[];
+}
+
+function log(...args: any[]): void {
+ console.log(`[${new Date().toLocaleTimeString('en', { hour12: false })}]`, '[distro]', ...args);
+}
+
+function main() {
+ const quality = process.env['VSCODE_QUALITY'];
+
+ if (!quality) {
+ throw new Error('Missing VSCODE_QUALITY, skipping mixin');
+ }
+
+ log(`Mixing in distro quality...`);
+
+ const basePath = `.build/distro/mixin/${quality}`;
+
+ for (const name of fs.readdirSync(basePath)) {
+ const distroPath = path.join(basePath, name);
+ const ossPath = path.relative(basePath, distroPath);
+
+ if (ossPath === 'product.json') {
+ const distro = JSON.parse(fs.readFileSync(distroPath, 'utf8')) as Product;
+ const oss = JSON.parse(fs.readFileSync(ossPath, 'utf8')) as OSSProduct;
+ let builtInExtensions = oss.builtInExtensions;
+
+ if (Array.isArray(distro.builtInExtensions)) {
+ log('Overwriting built-in extensions:', distro.builtInExtensions.map(e => e.name));
+
+ builtInExtensions = distro.builtInExtensions;
+ } else if (distro.builtInExtensions) {
+ const include = distro.builtInExtensions['include'] ?? [];
+ const exclude = distro.builtInExtensions['exclude'] ?? [];
+
+ log('OSS built-in extensions:', builtInExtensions.map(e => e.name));
+ log('Including built-in extensions:', include.map(e => e.name));
+ log('Excluding built-in extensions:', exclude);
+
+ builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));
+ builtInExtensions = [...builtInExtensions, ...include];
+
+ log('Final built-in extensions:', builtInExtensions.map(e => e.name));
+ } else {
+ log('Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));
+ }
+
+ const result = { webBuiltInExtensions: oss.webBuiltInExtensions, ...distro, builtInExtensions };
+ fs.writeFileSync(ossPath, JSON.stringify(result, null, '\t'), 'utf8');
+ } else {
+ fs.cpSync(distroPath, ossPath, { force: true, recursive: true });
+ }
+
+ log(distroPath, '✔︎');
+ }
+}
+
+main();
diff --git a/build/azure-pipelines/exploration-build.yml b/build/azure-pipelines/exploration-build.yml
deleted file mode 100644
index a81a83a0a5..0000000000
--- a/build/azure-pipelines/exploration-build.yml
+++ /dev/null
@@ -1,41 +0,0 @@
-pool:
- vmImage: "Ubuntu-16.04"
-
-trigger:
- branches:
- include: ["main"]
-pr:
- branches:
- include: ["main"]
-
-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"
-
- - 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"
-
- git checkout origin/electron-12.x.y
- git merge origin/main
-
- # Push main branch into exploration branch
- git push origin HEAD:electron-12.x.y
-
- displayName: Sync & Merge Exploration
diff --git a/build/azure-pipelines/linux/Dockerfile b/build/azure-pipelines/linux/Dockerfile
index c2b6b2ac34..d02318286c 100644
--- a/build/azure-pipelines/linux/Dockerfile
+++ b/build/azure-pipelines/linux/Dockerfile
@@ -1,22 +1,20 @@
-#Download base image ubuntu 20.04
-FROM mcr.microsoft.com/mirror/docker/library/ubuntu:20.04
+#Download base image ubuntu 22.04
+FROM mcr.microsoft.com/mirror/docker/library/ubuntu:22.04
-#Adding apt repos for g++-4.9
-RUN echo "deb http://dk.archive.ubuntu.com/ubuntu/ xenial main" >> /etc/apt/sources.list
-RUN echo "deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe" >> /etc/apt/sources.list
+#Set timezone to avoid blocking prompts on docker build
+ENV TZ=America/Los_Angeles
+RUN ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime
+RUN echo "$TZ" > /etc/timezone
+
+RUN apt-get update
+RUN apt-get install -y tzdata
# Update Software repository
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 \
libkrb5-dev git apt-transport-https ca-certificates curl gnupg-agent software-properties-common \
- libnss3 libasound2 make gcc libx11-dev fakeroot rpm libgconf-2-4 libunwind8 g++-4.9 python-dev \
- libgbm-dev
-
-RUN rm /usr/bin/gcc
-RUN rm /usr/bin/g++
-RUN ln -s /usr/bin/gcc-4.9 /usr/bin/gcc
-RUN ln -s /usr/bin/g++-4.9 /usr/bin/g++
+ libnss3 libasound2 make gcc libx11-dev fakeroot rpm libgconf-2-4 libunwind8 g++ libgbm-dev
#docker
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
diff --git a/build/azure-pipelines/linux/cli-build-linux.yml b/build/azure-pipelines/linux/cli-build-linux.yml
new file mode 100644
index 0000000000..1b94c69d78
--- /dev/null
+++ b/build/azure-pipelines/linux/cli-build-linux.yml
@@ -0,0 +1,91 @@
+parameters:
+ - name: VSCODE_BUILD_LINUX
+ type: boolean
+ default: false
+ - name: VSCODE_BUILD_LINUX_ARM64
+ type: boolean
+ default: false
+ - name: VSCODE_BUILD_LINUX_ARMHF
+ type: boolean
+ default: false
+ - name: VSCODE_QUALITY
+ type: string
+
+steps:
+ - task: NodeTool@0
+ inputs:
+ versionSpec: "16.x"
+
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - template: ../distro/download-distro.yml
+ - script: node build/azure-pipelines/distro/apply-cli-patches
+ displayName: Apply distro patches
+
+ - task: Npm@1
+ displayName: Download openssl prebuilt
+ inputs:
+ command: custom
+ customCommand: pack @vscode-internal/openssl-prebuilt@0.0.8
+ customRegistry: useFeed
+ customFeed: "Monaco/openssl-prebuilt"
+ workingDir: $(Build.ArtifactStagingDirectory)
+
+ - script: |
+ set -e
+ mkdir $(Build.ArtifactStagingDirectory)/openssl
+ tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.8.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl
+ displayName: Extract openssl prebuilt
+
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}:
+ - bash: sudo apt-get install -yq gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf binutils-arm-linux-gnueabihf
+ displayName: Install arm32 toolchains
+
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}:
+ - bash: sudo apt-get install -yq gcc-aarch64-linux-gnu g++-aarch64-linux-gnu binutils-aarch64-linux-gnu
+ displayName: Install arm64 toolchains
+
+ - script: node build/azure-pipelines/cli/prepare.js
+ displayName: Prepare CLI build
+ env:
+ VSCODE_CLI_PREPARE_ROOT: $(Build.SourcesDirectory)/.build/distro
+ VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+
+ - template: ../cli/install-rust-posix.yml
+ parameters:
+ targets:
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}:
+ - aarch64-unknown-linux-gnu
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
+ - x86_64-unknown-linux-gnu
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}:
+ - armv7-unknown-linux-gnueabihf
+
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARM64, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: aarch64-unknown-linux-gnu
+ VSCODE_CLI_ARTIFACT: vscode_cli_linux_arm64_cli
+ VSCODE_CLI_ENV:
+ CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-linux/include
+
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: x86_64-unknown-linux-gnu
+ VSCODE_CLI_ARTIFACT: vscode_cli_linux_x64_cli
+ VSCODE_CLI_ENV:
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-linux/include
+
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: armv7-unknown-linux-gnueabihf
+ VSCODE_CLI_ARTIFACT: vscode_cli_linux_armhf_cli
+ VSCODE_CLI_ENV:
+ CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER: arm-linux-gnueabihf-gcc
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm-linux/include
diff --git a/build/azure-pipelines/linux/product-build-alpine.yml b/build/azure-pipelines/linux/product-build-alpine.yml
deleted file mode 100644
index 3aef727924..0000000000
--- a/build/azure-pipelines/linux/product-build-alpine.yml
+++ /dev/null
@@ -1,197 +0,0 @@
-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"
-
- - 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
-
- - task: Docker@1
- displayName: "Pull image"
- inputs:
- azureSubscriptionEndpoint: "vscode-builds-subscription"
- azureContainerRegistry: vscodehub.azurecr.io
- command: "Run an image"
- imageName: "vscode-linux-build-agent:alpine-$(VSCODE_ARCH)"
- containerCommand: uname
-
- - 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 "alpine" $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
- 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 --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: |
- set -e
- node build/azure-pipelines/mixin
- node build/azure-pipelines/mixin --server
- displayName: Mix in quality
-
- - script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- displayName: "Register Docker QEMU"
- condition: eq(variables['VSCODE_ARCH'], 'arm64')
-
- - script: |
- 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
- env:
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- displayName: Prebuild
-
- - script: |
- set -e
-
- case $VSCODE_ARCH in
- x64)
- reh='vscode-reh-linux-alpine-min-ci'
- rehweb='vscode-reh-web-linux-alpine-min-ci'
- ;;
- arm64)
- reh='vscode-reh-alpine-arm64-min-ci'
- rehweb='vscode-reh-web-alpine-arm64-min-ci'
- ;;
- esac
-
- yarn gulp $reh
- yarn gulp $rehweb
- displayName: Build
-
- - script: |
- set -e
- REPO="$(pwd)"
- ROOT="$REPO/.."
-
- case $VSCODE_ARCH in
- x64)
- PLATFORM_LINUX='linux-alpine'
- ;;
- arm64)
- PLATFORM_LINUX='alpine-arm64'
- ;;
- esac
-
- # Publish Remote Extension Host
- LEGACY_SERVER_BUILD_NAME="vscode-reh-$PLATFORM_LINUX"
- SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX"
- SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX.tar.gz"
- SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
-
- rm -rf $ROOT/vscode-server-*.tar.*
- (cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
-
- # Publish Remote Extension Host (Web)
- LEGACY_SERVER_BUILD_NAME="vscode-reh-web-$PLATFORM_LINUX"
- SERVER_BUILD_NAME="vscode-server-$PLATFORM_LINUX-web"
- SERVER_TARBALL_FILENAME="vscode-server-$PLATFORM_LINUX-web.tar.gz"
- SERVER_TARBALL_PATH="$ROOT/$SERVER_TARBALL_FILENAME"
-
- rm -rf $ROOT/vscode-server-*-web.tar.*
- (cd $ROOT && mv $LEGACY_SERVER_BUILD_NAME $SERVER_BUILD_NAME && tar --owner=0 --group=0 -czf $SERVER_TARBALL_PATH $SERVER_BUILD_NAME)
- displayName: Prepare for publish
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
-
- - publish: $(Agent.BuildDirectory)/vscode-server-alpine-$(VSCODE_ARCH).tar.gz
- artifact: vscode_server_alpine_$(VSCODE_ARCH)_archive-unsigned
- displayName: Publish server archive
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'x64'))
-
- - publish: $(Agent.BuildDirectory)/vscode-server-alpine-$(VSCODE_ARCH)-web.tar.gz
- artifact: vscode_web_alpine_$(VSCODE_ARCH)_archive-unsigned
- displayName: Publish web server archive
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), ne(variables['VSCODE_ARCH'], 'x64'))
-
- # Legacy x64 artifact name
- - publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine.tar.gz
- artifact: vscode_server_linux_alpine_archive-unsigned
- displayName: Publish x64 server archive
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), eq(variables['VSCODE_ARCH'], 'x64'))
-
- - publish: $(Agent.BuildDirectory)/vscode-server-linux-alpine-web.tar.gz
- artifact: vscode_web_linux_alpine_archive-unsigned
- displayName: Publish x64 web server archive
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'), eq(variables['VSCODE_ARCH'], 'x64'))
diff --git a/build/azure-pipelines/linux/product-build-linux-server.yml b/build/azure-pipelines/linux/product-build-linux-server.yml
deleted file mode 100644
index 8ab58da435..0000000000
--- a/build/azure-pipelines/linux/product-build-linux-server.yml
+++ /dev/null
@@ -1,96 +0,0 @@
-parameters:
- - name: VSCODE_QUALITY
- type: string
-
-steps:
- - task: NodeTool@0
- inputs:
- versionSpec: "16.x"
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - task: AzureKeyVault@1
- displayName: "Azure Key Vault: Get Secrets"
- inputs:
- azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
- SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - task: Docker@1
- displayName: "Pull Docker image"
- inputs:
- azureSubscriptionEndpoint: "vscode-builds-subscription"
- azureContainerRegistry: vscodehub.azurecr.io
- command: "Run an image"
- imageName: "vscode-linux-build-agent:centos7-devtoolset8-arm64"
- containerCommand: uname
- condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
-
- - ${{ if ne(parameters.VSCODE_QUALITY, '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
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
- displayName: Merge distro
-
- - 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
- $(pwd)/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh
- displayName: Install dependencies
- env:
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- 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
- displayName: Register Docker QEMU
- condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- 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
- displayName: Install dependencies via qemu
- env:
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'arm64'))
-
- - script: |
- set -e
- tar -cz --ignore-failed-read -f $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz -C $(Build.SourcesDirectory)/remote node_modules
- displayName: Compress node_modules output
-
- - task: PublishPipelineArtifact@0
- displayName: "Publish remote node_modules"
- inputs:
- artifactName: "reh_node_modules-$(VSCODE_ARCH)"
- targetPath: $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz
diff --git a/build/azure-pipelines/linux/product-build-linux-client-test.yml b/build/azure-pipelines/linux/product-build-linux-test.yml
similarity index 78%
rename from build/azure-pipelines/linux/product-build-linux-client-test.yml
rename to build/azure-pipelines/linux/product-build-linux-test.yml
index 31d477e93a..a5a30a340f 100644
--- a/build/azure-pipelines/linux/product-build-linux-client-test.yml
+++ b/build/azure-pipelines/linux/product-build-linux-test.yml
@@ -9,10 +9,9 @@ parameters:
type: boolean
steps:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ - script: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download Electron and Playwright
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
@@ -41,40 +40,34 @@ steps:
- ${{ 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"
+ - script: ./scripts/test.sh --tfs "Unit Tests"
+ env:
+ DISPLAY: ":10"
displayName: Run unit tests (Electron)
timeoutInMinutes: 15
- - script: |
- set -e
- yarn test-node
+ - script: 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"
+ - script: yarn test-browser-no-install --browser chromium --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
displayName: Run unit tests (Browser, Chromium)
timeoutInMinutes: 15
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- ./scripts/test.sh --build --tfs "Unit Tests"
+ - script: ./scripts/test.sh --build --tfs "Unit Tests"
displayName: Run unit tests (Electron)
timeoutInMinutes: 15
- - script: |
- set -e
- yarn test-node --build
+ - script: 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"
+ - script: yarn test-browser-no-install --build --browser chromium --tfs "Browser Unit Tests"
+ env:
+ DEBUG: "*browser*"
displayName: Run unit tests (Browser, Chromium)
timeoutInMinutes: 15
@@ -97,27 +90,22 @@ steps:
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"
+ - script: ./scripts/test-integration.sh --tfs "Integration Tests"
+ env:
+ DISPLAY: ":10"
displayName: Run integration tests (Electron)
timeoutInMinutes: 20
- - script: |
- set -e
- ./scripts/test-web-integration.sh --browser chromium
+ - script: ./scripts/test-web-integration.sh --browser chromium
displayName: Run integration tests (Browser, Chromium)
timeoutInMinutes: 20
- - script: |
- set -e
- ./scripts/test-remote-integration.sh
+ - script: ./scripts/test-remote-integration.sh
displayName: Run integration tests (Remote)
timeoutInMinutes: 20
@@ -131,15 +119,15 @@ steps:
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"
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)
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
+ - script: ./scripts/test-web-integration.sh --browser chromium
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)
displayName: Run integration tests (Browser, Chromium)
timeoutInMinutes: 20
@@ -149,8 +137,9 @@ steps:
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
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-linux-$(VSCODE_ARCH)
displayName: Run integration tests (Remote)
timeoutInMinutes: 20
@@ -165,42 +154,32 @@ steps:
condition: succeededOrFailed()
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- yarn --cwd test/smoke compile
+ - script: yarn --cwd test/smoke compile
displayName: Compile smoke tests
- - script: |
- set -e
- yarn smoketest-no-compile --tracing
+ - script: yarn gulp compile-extension:markdown-language-features compile-extension-media compile-extension:vscode-test-resolver
+ displayName: Build extensions for smoke tests
+
+ - script: 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"
+ - script: 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
+ - script: 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"
+ - script: yarn smoketest-no-compile --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)"
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"
+ - script: yarn smoketest-no-compile --web --tracing --headless --electronArgs="--disable-dev-shm-usage"
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-reh-web-linux-$(VSCODE_ARCH)
timeoutInMinutes: 20
displayName: Run smoke tests (Browser, Chromium)
diff --git a/build/azure-pipelines/linux/product-build-linux-client.yml b/build/azure-pipelines/linux/product-build-linux.yml
similarity index 51%
rename from build/azure-pipelines/linux/product-build-linux-client.yml
rename to build/azure-pipelines/linux/product-build-linux.yml
index 97a9cf31d6..a3c47d8e15 100644
--- a/build/azure-pipelines/linux/product-build-linux-client.yml
+++ b/build/azure-pipelines/linux/product-build-linux.yml
@@ -1,14 +1,16 @@
parameters:
- - name: VSCODE_PUBLISH
- type: boolean
- name: VSCODE_QUALITY
type: string
+ - name: VSCODE_CIBUILD
+ type: boolean
- name: VSCODE_RUN_UNIT_TESTS
type: boolean
- name: VSCODE_RUN_INTEGRATION_TESTS
type: boolean
- name: VSCODE_RUN_SMOKE_TESTS
type: boolean
+ - name: VSCODE_ARCH
+ type: string
steps:
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
@@ -21,29 +23,24 @@ steps:
versionSpec: "16.x"
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - template: ../distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- task: DownloadPipelineArtifact@2
inputs:
artifact: Compilation
path: $(Build.ArtifactStagingDirectory)
displayName: Download compilation output
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - task: DownloadPipelineArtifact@2
- inputs:
- artifact: reh_node_modules-$(VSCODE_ARCH)
- path: $(Build.ArtifactStagingDirectory)
- displayName: Download server build dependencies
- condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
+ - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
+ displayName: Extract compilation output
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- script: |
set -e
# Start X server
@@ -54,79 +51,75 @@ steps:
displayName: Setup system services
condition: and(succeeded(), eq(variables['VSCODE_ARCH'], 'x64'))
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
- displayName: Extract compilation output
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- cat << EOF > ~/.netrc
- machine github.com
- login vscode
- password $(github-distro-mixin-password)
- EOF
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/yarnlockhash
+ displayName: Prepare node_modules cache key
- git config user.email "vscode@microsoft.com"
- git config user.name "VSCode"
- displayName: Prepare tooling
+ - task: Cache@2
+ inputs:
+ key: '"node_modules" | .build/yarnlockhash'
+ path: .build/node_modules_cache
+ cacheHitVar: NODE_MODULES_RESTORED
+ displayName: Restore node_modules cache
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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
-
- - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - task: Cache@2
- inputs:
- key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash"
- path: .build/node_modules_cache
- cacheHitVar: NODE_MODULES_RESTORED
- displayName: Restore node_modules cache
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - task: Cache@2
- inputs:
- key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
- path: .build/node_modules_cache
- cacheHitVar: NODE_MODULES_RESTORED
- displayName: Restore node_modules cache
-
- - script: |
- set -e
- tar -xzf .build/node_modules_cache/cache.tgz
+ - script: 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
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ # TODO@joaomoreno TODO@deepak1556 this should be part of the base image
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - script: |
+ if [ "$VSCODE_ARCH" = "x64" ]; then
+ OS=ubuntu
+ else
+ OS=debian
+ fi
+
+ sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg
+ sudo mkdir -m 0755 -p /etc/apt/keyrings
+ curl -fsSL https://download.docker.com/linux/$OS/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
+ echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$OS "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
+ sudo apt update && sudo apt install -y docker-ce-cli
+ displayName: Install Docker client
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+
+ - ${{ if and(ne(parameters.VSCODE_QUALITY, 'oss'), or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64'))) }}:
+ - task: Docker@1
+ displayName: "Pull Docker image"
+ inputs:
+ azureSubscriptionEndpoint: "vscode-builds-subscription"
+ azureContainerRegistry: vscodehub.azurecr.io
+ command: "Run an image"
+ imageName: vscode-linux-build-agent:centos7-devtoolset8-${{ parameters.VSCODE_ARCH }}
+ containerCommand: uname
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+
+ - ${{ if and(ne(parameters.VSCODE_QUALITY, 'oss'), eq(parameters.VSCODE_ARCH, 'arm64')) }}:
+ - script: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+ displayName: Register Docker QEMU
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), eq(variables['VSCODE_ARCH'], 'arm64'))
- script: |
set -e
- node build/npm/setupBuildYarnrc
- for i in {1..3}; do # try 3 times, for Terrapin
+
+ for i in {1..5}; do # try 5 times
yarn --cwd build --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -134,24 +127,10 @@ steps:
fi
echo "Yarn failed $i, trying again..."
done
- displayName: Install build dependencies
-
- - script: |
- set -e
- if [ "$NPM_ARCH" = "armv7l" ]; then
- # There is no target_arch="armv7l" supported by node_gyp,
- # arm versions for compilation are decided based on the CC
- # macros.
- # Mapping value is based on
- # https://github.com/nodejs/node/blob/0903515e126c2697042d6546c6aa4b72e1a4b33e/configure.py#L49-L50
- export npm_config_arch="arm"
- else
- export npm_config_arch=$(NPM_ARCH)
- fi
if [ -z "$CC" ] || [ -z "$CXX" ]; then
# Download clang based on chromium revision used by vscode
- curl -s https://raw.githubusercontent.com/chromium/chromium/98.0.4758.109/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux
+ curl -s https://raw.githubusercontent.com/chromium/chromium/108.0.5359.215/tools/clang/scripts/update.py | python - --output-dir=$PWD/.build/CR_Clang --host-os=linux
# Download libcxx headers and objects from upstream electron releases
DEBUG=libcxx-fetcher \
VSCODE_LIBCXX_OBJECTS_DIR=$PWD/.build/libcxx-objects \
@@ -161,18 +140,18 @@ steps:
node build/linux/libcxx-fetcher.js
# Set compiler toolchain
# Flags for the client build are based on
- # https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:build/config/arm.gni
- # https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:build/config/compiler/BUILD.gn
- # https://source.chromium.org/chromium/chromium/src/+/refs/tags/98.0.4758.109:build/config/c++/BUILD.gn
+ # https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:build/config/arm.gni
+ # https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:build/config/compiler/BUILD.gn
+ # https://source.chromium.org/chromium/chromium/src/+/refs/tags/108.0.5359.215:build/config/c++/BUILD.gn
export CC=$PWD/.build/CR_Clang/bin/clang
export CXX=$PWD/.build/CR_Clang/bin/clang++
- export CXXFLAGS="-nostdinc++ -D__NO_INLINE__ -isystem$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit"
+ export CXXFLAGS="-nostdinc++ -D__NO_INLINE__ -I$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit -D_LIBCPP_ABI_NAMESPACE=Cr"
export LDFLAGS="-stdlib=libc++ -fuse-ld=lld -flto=thin -L$PWD/.build/libcxx-objects -lc++abi -Wl,--lto-O0"
export VSCODE_REMOTE_CC=$(which gcc)
export VSCODE_REMOTE_CXX=$(which g++)
fi
- for i in {1..3}; do # try 3 times, for Terrapin
+ for i in {1..5}; do # try 5 times
yarn --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -181,19 +160,19 @@ steps:
echo "Yarn failed $i, trying again..."
done
env:
+ npm_config_arch: $(NPM_ARCH)
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ ${{ if and(ne(parameters.VSCODE_QUALITY, 'oss'), or(eq(parameters.VSCODE_ARCH, 'x64'), eq(parameters.VSCODE_ARCH, 'arm64'))) }}:
+ VSCODE_REMOTE_DEPENDENCIES_CONTAINER_NAME: vscodehub.azurecr.io/vscode-linux-build-agent:centos7-devtoolset8-${{ parameters.VSCODE_ARCH }}
displayName: Install dependencies
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- rm -rf remote/node_modules
- tar -xzf $(Build.ArtifactStagingDirectory)/reh_node_modules-$(VSCODE_ARCH).tar.gz --directory $(Build.SourcesDirectory)/remote
- displayName: Extract server node_modules output
- condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'armhf'))
+ - script: node build/azure-pipelines/distro/mixin-npm
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ displayName: Mixin distro node modules
- script: |
set -e
@@ -204,133 +183,120 @@ steps:
displayName: Create node_modules archive
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- node build/azure-pipelines/mixin
- displayName: Mix in quality
+ - script: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
+
+ - template: ../common/install-builtin-extensions.yml
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
- displayName: Build
+ - script: yarn gulp vscode-linux-$(VSCODE_ARCH)-min-ci
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Build client
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- node build/azure-pipelines/mixin --server
- displayName: Mix in server quality
+ - script: yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Build server
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn gulp vscode-reh-linux-$(VSCODE_ARCH)-min-ci
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
- displayName: Build Server
+ - script: yarn gulp vscode-reh-web-linux-$(VSCODE_ARCH)-min-ci
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Build server (web)
- - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn gulp "transpile-client" "transpile-extensions"
+ - ${{ else }}:
+ - script: yarn gulp "transpile-client-swc" "transpile-extensions"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
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)) }}:
- - template: product-build-linux-client-test.yml
+ - template: product-build-linux-test.yml
parameters:
VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
VSCODE_RUN_UNIT_TESTS: ${{ parameters.VSCODE_RUN_UNIT_TESTS }}
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - script: |
- set -e
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
- displayName: Build deb, rpm packages
+ - ${{ if and(ne(parameters.VSCODE_CIBUILD, true), ne(parameters.VSCODE_QUALITY, 'oss')) }}:
+ - task: DownloadPipelineArtifact@2
+ inputs:
+ artifact: vscode_cli_linux_$(VSCODE_ARCH)_cli
+ patterns: "**"
+ path: $(Build.ArtifactStagingDirectory)/cli
+ displayName: Download VS Code CLI
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- script: |
set -e
- yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
+ tar -xzvf $(Build.ArtifactStagingDirectory)/cli/*.tar.gz -C $(Build.ArtifactStagingDirectory)/cli
+ CLI_APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").tunnelApplicationName")
+ APP_NAME=$(node -p "require(\"$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/resources/app/product.json\").applicationName")
+ mv $(Build.ArtifactStagingDirectory)/cli/$APP_NAME $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/bin/$CLI_APP_NAME
+ displayName: Make CLI executable
+
+ - script: yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-deb"
+ displayName: Build deb package
+
+ - script: yarn gulp "vscode-linux-$(VSCODE_ARCH)-build-rpm"
+ displayName: Build rpm package
+
+ - script: yarn gulp "vscode-linux-$(VSCODE_ARCH)-prepare-snap"
displayName: Prepare snap package
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- task: UseDotNet@2
inputs:
- version: 2.x
+ version: 6.x
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- task: EsrpClientTool@1
+ continueOnError: true
displayName: Download ESRPClient
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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'
+ - script: node build/azure-pipelines/common/sign $(Agent.ToolsDirectory)/esrpclient/*/*/net6.0/esrpcli.dll rpm $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) .build/linux/rpm '*.rpm'
displayName: Codesign rpm
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - script: |
- set -e
- VSCODE_ARCH="$(VSCODE_ARCH)" \
- ./build/azure-pipelines/linux/prepare-publish.sh
+ - script: ./build/azure-pipelines/linux/prepare-publish.sh
displayName: Prepare for Publish
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- 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
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- publish: $(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)/_manifest
displayName: Publish SBOM (client)
artifact: vscode_client_linux_$(VSCODE_ARCH)_sbom
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- 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
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- publish: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)/_manifest
displayName: Publish SBOM (server)
artifact: vscode_server_linux_$(VSCODE_ARCH)_sbom
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- publish: $(DEB_PATH)
artifact: vscode_client_linux_$(VSCODE_ARCH)_deb-package
displayName: Publish deb package
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- publish: $(RPM_PATH)
artifact: vscode_client_linux_$(VSCODE_ARCH)_rpm-package
displayName: Publish rpm package
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- publish: $(TARBALL_PATH)
artifact: vscode_client_linux_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish client archive
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH).tar.gz
artifact: vscode_server_linux_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish server archive
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- publish: $(Agent.BuildDirectory)/vscode-server-linux-$(VSCODE_ARCH)-web.tar.gz
artifact: vscode_web_linux_$(VSCODE_ARCH)_archive-unsigned
displayName: Publish web server archive
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- task: PublishPipelineArtifact@0
displayName: "Publish Pipeline Artifact"
inputs:
diff --git a/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh b/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh
deleted file mode 100755
index d2f6208766..0000000000
--- a/build/azure-pipelines/linux/scripts/install-remote-dependencies.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/usr/bin/env bash
-set -e
-
-echo "Installing remote dependencies"
-(cd remote && rm -rf node_modules)
-
-for i in {1..3}; do # try 3 times, for Terrapin
- yarn --cwd remote --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
diff --git a/build/azure-pipelines/linux/snap-build-linux.yml b/build/azure-pipelines/linux/snap-build-linux.yml
index 1282933495..9002fcff5d 100644
--- a/build/azure-pipelines/linux/snap-build-linux.yml
+++ b/build/azure-pipelines/linux/snap-build-linux.yml
@@ -45,7 +45,7 @@ steps:
x64) SNAPCRAFT_TARGET_ARGS="" ;;
*) SNAPCRAFT_TARGET_ARGS="--target-arch $(VSCODE_ARCH)" ;;
esac
- (cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft prime $SNAPCRAFT_TARGET_ARGS && snap pack prime --compression=lzo --filename="$SNAP_PATH")
+ (cd $SNAP_ROOT/code-* && sudo --preserve-env snapcraft snap $SNAPCRAFT_TARGET_ARGS --output "$SNAP_PATH")
# Export SNAP_PATH
echo "##vso[task.setvariable variable=SNAP_PATH]$SNAP_PATH"
@@ -54,4 +54,3 @@ steps:
- publish: $(SNAP_PATH)
artifact: vscode_client_linux_$(VSCODE_ARCH)_snap
displayName: Publish snap package
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
diff --git a/build/azure-pipelines/linux/sql-product-build-linux.yml b/build/azure-pipelines/linux/sql-product-build-linux.yml
index 5f29358cc5..d97c658fa7 100644
--- a/build/azure-pipelines/linux/sql-product-build-linux.yml
+++ b/build/azure-pipelines/linux/sql-product-build-linux.yml
@@ -136,48 +136,50 @@ steps:
displayName: Run core integration tests
condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'), ne(variables['EXTENSIONS_ONLY'], 'true'))
- - script: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the unit tests
- # to run with these builds instead of running out of sources.
- set -e
- APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
- APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
- INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
- NO_CLEANUP=1 \
- VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
- DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
- displayName: Run Extension Unit Tests (Continue on Error)
- continueOnError: true
- condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), eq(variables['EXTENSION_UNIT_TESTS_FAIL_ON_ERROR'], 'false')))
+ # {{SQL CARBON TODO}} - disable extension unit tests while investigating post merge (6/26/2023)
+ # - script: |
+ # # Figure out the full absolute path of the product we just built
+ # # including the remote server and configure the unit tests
+ # # to run with these builds instead of running out of sources.
+ # set -e
+ # APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
+ # APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
+ # INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
+ # NO_CLEANUP=1 \
+ # VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
+ # DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
+ # displayName: Run Extension Unit Tests (Continue on Error)
+ # continueOnError: true
+ # condition: and(succeeded(), and(eq(variables['RUN_TESTS'], 'true'), eq(variables['EXTENSION_UNIT_TESTS_FAIL_ON_ERROR'], 'false')))
- - script: |
- # Figure out the full absolute path of the product we just built
- # including the remote server and configure the unit tests
- # to run with these builds instead of running out of sources.
- set -e
- APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
- APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
- INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
- NO_CLEANUP=1 \
- VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
- DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
- 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')))
+ # - script: |
+ # # Figure out the full absolute path of the product we just built
+ # # including the remote server and configure the unit tests
+ # # to run with these builds instead of running out of sources.
+ # set -e
+ # APP_ROOT=$(agent.builddirectory)/azuredatastudio-linux-x64
+ # APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName")
+ # INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \
+ # NO_CLEANUP=1 \
+ # VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/azuredatastudio-reh-linux-x64" \
+ # DISPLAY=:10 ./scripts/test-extensions-unit.sh --build --tfs "Extension Unit Tests"
+ # 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')))
- - bash: |
- set -e
- mkdir -p $(Build.ArtifactStagingDirectory)/logs/linux-x64
- cd /tmp
- for folder in adsuser*/
- do
- folder=${folder%/}
- # Only archive directories we want for debugging purposes
- tar -czvf $(Build.ArtifactStagingDirectory)/logs/linux-x64/$folder.tar.gz $folder/User $folder/logs
- done
- displayName: Archive Logs
- continueOnError: true
- condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
+ # - bash: |
+ # set -e
+ # mkdir -p $(Build.ArtifactStagingDirectory)/logs/linux-x64
+ # cd /tmp
+ # for folder in adsuser*/
+ # do
+ # folder=${folder%/}
+ # # Only archive directories we want for debugging purposes
+ # tar -czvf $(Build.ArtifactStagingDirectory)/logs/linux-x64/$folder.tar.gz $folder/User $folder/logs
+ # done
+ # displayName: Archive Logs
+ # continueOnError: true
+ # condition: and(succeeded(), eq(variables['RUN_TESTS'], 'true'))
+ # {{SQL CARBON TODO}} - end disable extension unit tests while investigating post merge (6/26/2023)
- script: |
set -e
diff --git a/build/azure-pipelines/mixin.js b/build/azure-pipelines/mixin.js
deleted file mode 100644
index 49dafea34e..0000000000
--- a/build/azure-pipelines/mixin.js
+++ /dev/null
@@ -1,86 +0,0 @@
-"use strict";
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the Source EULA. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-Object.defineProperty(exports, "__esModule", { value: true });
-const json = require("gulp-json-editor");
-const buffer = require('gulp-buffer');
-const filter = require("gulp-filter");
-const es = require("event-stream");
-const vfs = require("vinyl-fs");
-const fancyLog = require("fancy-log");
-const ansiColors = require("ansi-colors");
-const fs = require("fs");
-const path = require("path");
-async function mixinClient(quality) {
- const productJsonFilter = filter(f => f.relative === 'product.json', { restore: true });
- fancyLog(ansiColors.blue('[mixin]'), `Mixing in client:`);
- return new Promise((c, e) => {
- vfs
- .src(`quality/${quality}/**`, { base: `quality/${quality}` })
- .pipe(filter(f => !f.isDirectory()))
- .pipe(filter(f => f.relative !== 'product.server.json'))
- .pipe(productJsonFilter)
- .pipe(buffer())
- .pipe(json((o) => {
- const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8'));
- let builtInExtensions = originalProduct.builtInExtensions;
- if (Array.isArray(o.builtInExtensions)) {
- fancyLog(ansiColors.blue('[mixin]'), 'Overwriting built-in extensions:', o.builtInExtensions.map(e => e.name));
- builtInExtensions = o.builtInExtensions;
- }
- else if (o.builtInExtensions) {
- const include = o.builtInExtensions['include'] || [];
- const exclude = o.builtInExtensions['exclude'] || [];
- fancyLog(ansiColors.blue('[mixin]'), 'OSS built-in extensions:', builtInExtensions.map(e => e.name));
- fancyLog(ansiColors.blue('[mixin]'), 'Including built-in extensions:', include.map(e => e.name));
- fancyLog(ansiColors.blue('[mixin]'), 'Excluding built-in extensions:', exclude);
- builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));
- builtInExtensions = [...builtInExtensions, ...include];
- fancyLog(ansiColors.blue('[mixin]'), 'Final built-in extensions:', builtInExtensions.map(e => e.name));
- }
- else {
- fancyLog(ansiColors.blue('[mixin]'), 'Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));
- }
- return { webBuiltInExtensions: originalProduct.webBuiltInExtensions, ...o, builtInExtensions };
- }))
- .pipe(productJsonFilter.restore)
- .pipe(es.mapSync((f) => {
- fancyLog(ansiColors.blue('[mixin]'), f.relative, ansiColors.green('✔︎'));
- return f;
- }))
- .pipe(vfs.dest('.'))
- .on('end', () => c())
- .on('error', (err) => e(err));
- });
-}
-function mixinServer(quality) {
- const serverProductJsonPath = `quality/${quality}/product.server.json`;
- if (!fs.existsSync(serverProductJsonPath)) {
- fancyLog(ansiColors.blue('[mixin]'), `Server product not found`, serverProductJsonPath);
- return;
- }
- fancyLog(ansiColors.blue('[mixin]'), `Mixing in server:`);
- const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8'));
- const serverProductJson = JSON.parse(fs.readFileSync(serverProductJsonPath, 'utf8'));
- fs.writeFileSync('product.json', JSON.stringify({ ...originalProduct, ...serverProductJson }, undefined, '\t'));
- fancyLog(ansiColors.blue('[mixin]'), 'product.json', ansiColors.green('✔︎'));
-}
-function main() {
- const quality = process.env['VSCODE_QUALITY'];
- if (!quality) {
- console.log('Missing VSCODE_QUALITY, skipping mixin');
- return;
- }
- if (process.argv[2] === '--server') {
- mixinServer(quality);
- }
- else {
- mixinClient(quality).catch(err => {
- console.error(err);
- process.exit(1);
- });
- }
-}
-main();
diff --git a/build/azure-pipelines/mixin.ts b/build/azure-pipelines/mixin.ts
deleted file mode 100644
index 8658d98125..0000000000
--- a/build/azure-pipelines/mixin.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-/*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the Source EULA. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
-
-import * as json from 'gulp-json-editor';
-const buffer = require('gulp-buffer');
-import * as filter from 'gulp-filter';
-import * as es from 'event-stream';
-import * as Vinyl from 'vinyl';
-import * as vfs from 'vinyl-fs';
-import * as fancyLog from 'fancy-log';
-import * as ansiColors from 'ansi-colors';
-import * as fs from 'fs';
-import * as path from 'path';
-
-interface IBuiltInExtension {
- readonly name: string;
- readonly version: string;
- readonly repo: string;
- readonly metadata: any;
-}
-
-interface OSSProduct {
- readonly builtInExtensions: IBuiltInExtension[];
- readonly webBuiltInExtensions?: IBuiltInExtension[];
-}
-
-interface Product {
- readonly builtInExtensions?: IBuiltInExtension[] | { 'include'?: IBuiltInExtension[]; 'exclude'?: string[] };
- readonly webBuiltInExtensions?: IBuiltInExtension[];
-}
-
-async function mixinClient(quality: string): Promise {
- const productJsonFilter = filter(f => f.relative === 'product.json', { restore: true });
-
- fancyLog(ansiColors.blue('[mixin]'), `Mixing in client:`);
-
- return new Promise((c, e) => {
- vfs
- .src(`quality/${quality}/**`, { base: `quality/${quality}` })
- .pipe(filter(f => !f.isDirectory()))
- .pipe(filter(f => f.relative !== 'product.server.json'))
- .pipe(productJsonFilter)
- .pipe(buffer())
- .pipe(json((o: Product) => {
- const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8')) as OSSProduct;
- let builtInExtensions = originalProduct.builtInExtensions;
-
- if (Array.isArray(o.builtInExtensions)) {
- fancyLog(ansiColors.blue('[mixin]'), 'Overwriting built-in extensions:', o.builtInExtensions.map(e => e.name));
-
- builtInExtensions = o.builtInExtensions;
- } else if (o.builtInExtensions) {
- const include = o.builtInExtensions['include'] || [];
- const exclude = o.builtInExtensions['exclude'] || [];
-
- fancyLog(ansiColors.blue('[mixin]'), 'OSS built-in extensions:', builtInExtensions.map(e => e.name));
- fancyLog(ansiColors.blue('[mixin]'), 'Including built-in extensions:', include.map(e => e.name));
- fancyLog(ansiColors.blue('[mixin]'), 'Excluding built-in extensions:', exclude);
-
- builtInExtensions = builtInExtensions.filter(ext => !include.find(e => e.name === ext.name) && !exclude.find(name => name === ext.name));
- builtInExtensions = [...builtInExtensions, ...include];
-
- fancyLog(ansiColors.blue('[mixin]'), 'Final built-in extensions:', builtInExtensions.map(e => e.name));
- } else {
- fancyLog(ansiColors.blue('[mixin]'), 'Inheriting OSS built-in extensions', builtInExtensions.map(e => e.name));
- }
-
- return { webBuiltInExtensions: originalProduct.webBuiltInExtensions, ...o, builtInExtensions };
- }))
- .pipe(productJsonFilter.restore)
- .pipe(es.mapSync((f: Vinyl) => {
- fancyLog(ansiColors.blue('[mixin]'), f.relative, ansiColors.green('✔︎'));
- return f;
- }))
- .pipe(vfs.dest('.'))
- .on('end', () => c())
- .on('error', (err: any) => e(err));
- });
-}
-
-function mixinServer(quality: string) {
- const serverProductJsonPath = `quality/${quality}/product.server.json`;
-
- if (!fs.existsSync(serverProductJsonPath)) {
- fancyLog(ansiColors.blue('[mixin]'), `Server product not found`, serverProductJsonPath);
- return;
- }
-
- fancyLog(ansiColors.blue('[mixin]'), `Mixing in server:`);
-
- const originalProduct = JSON.parse(fs.readFileSync(path.join(__dirname, '..', '..', 'product.json'), 'utf8')) as OSSProduct;
- const serverProductJson = JSON.parse(fs.readFileSync(serverProductJsonPath, 'utf8'));
- fs.writeFileSync('product.json', JSON.stringify({ ...originalProduct, ...serverProductJson }, undefined, '\t'));
- fancyLog(ansiColors.blue('[mixin]'), 'product.json', ansiColors.green('✔︎'));
-}
-
-function main() {
- const quality = process.env['VSCODE_QUALITY'];
-
- if (!quality) {
- console.log('Missing VSCODE_QUALITY, skipping mixin');
- return;
- }
-
- if (process.argv[2] === '--server') {
- mixinServer(quality);
- } else {
- mixinClient(quality).catch(err => {
- console.error(err);
- process.exit(1);
- });
- }
-}
-
-main();
diff --git a/build/azure-pipelines/product-build-pr-cache.yml b/build/azure-pipelines/oss/product-build-pr-cache-linux.yml
similarity index 58%
rename from build/azure-pipelines/product-build-pr-cache.yml
rename to build/azure-pipelines/oss/product-build-pr-cache-linux.yml
index 067afa7492..97eba56abc 100644
--- a/build/azure-pipelines/product-build-pr-cache.yml
+++ b/build/azure-pipelines/oss/product-build-pr-cache-linux.yml
@@ -7,35 +7,41 @@ steps:
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
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
+
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux $VSCODE_ARCH > .build/yarnlockhash
+ displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash"
+ key: '"node_modules" | .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
+ - script: 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
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
- script: |
set -e
- for i in {1..3}; do # try 3 times, for Terrapin
+ for i in {1..5}; do # try 5 times
yarn --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
diff --git a/build/azure-pipelines/oss/product-build-pr-cache-win32.yml b/build/azure-pipelines/oss/product-build-pr-cache-win32.yml
new file mode 100644
index 0000000000..61b0bf37d2
--- /dev/null
+++ b/build/azure-pipelines/oss/product-build-pr-cache-win32.yml
@@ -0,0 +1,66 @@
+steps:
+ - checkout: self
+ fetchDepth: 1
+ retryCountOnTaskFailure: 3
+
+ - task: NodeTool@0
+ inputs:
+ versionSpec: "16.x"
+
+ - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
+
+ - pwsh: |
+ mkdir .build -ea 0
+ node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/yarnlockhash
+ displayName: Prepare node_modules cache key
+
+ - task: Cache@2
+ inputs:
+ key: '"node_modules" | .build/yarnlockhash'
+ path: .build/node_modules_cache
+ cacheHitVar: NODE_MODULES_RESTORED
+ displayName: Restore node_modules cache
+
+ - powershell: 7z.exe x .build/node_modules_cache/cache.7z -aoa
+ condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
+ displayName: Extract node_modules cache
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
+ exec { npm config set always-auth=true --location=project }
+ exec { yarn config set registry "$env:NPM_REGISTRY" }
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ . build/azure-pipelines/win32/retry.ps1
+ $ErrorActionPreference = "Stop"
+ $env:npm_config_arch="$(VSCODE_ARCH)"
+ $env:CHILD_CONCURRENCY="1"
+ retry { exec { yarn --frozen-lockfile --check-files } }
+ 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'))
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt }
+ exec { mkdir -Force .build/node_modules_cache }
+ exec { 7z.exe a .build/node_modules_cache/cache.7z -mx3 `@.build/node_modules_list.txt }
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ displayName: Create node_modules archive
diff --git a/build/azure-pipelines/product-build-pr.yml b/build/azure-pipelines/product-build-pr.yml
index 8362da25ee..789996060e 100644
--- a/build/azure-pipelines/product-build-pr.yml
+++ b/build/azure-pipelines/product-build-pr.yml
@@ -11,12 +11,10 @@ variables:
value: true
- name: skipComponentGovernanceDetection
value: true
- - name: ENABLE_TERRAPIN
- value: false
+ - name: NPM_REGISTRY
+ value: "none"
- 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
@@ -26,7 +24,7 @@ jobs:
- ${{ if ne(variables['VSCODE_CIBUILD'], true) }}:
- job: Compile
displayName: Compile & Hygiene
- pool: vscode-1es-vscode-linux-20.04
+ pool: 1es-oss-ubuntu-20.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
@@ -37,69 +35,135 @@ jobs:
- job: Linuxx64UnitTest
displayName: Linux (Unit Tests)
- pool: vscode-1es-vscode-linux-20.04
+ pool: 1es-oss-ubuntu-20.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
NPM_ARCH: x64
DISPLAY: ":10"
steps:
- - template: linux/product-build-linux-client.yml
+ - template: linux/product-build-linux.yml
parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
+ VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
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
+ pool: 1es-oss-ubuntu-20.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
NPM_ARCH: x64
DISPLAY: ":10"
steps:
- - template: linux/product-build-linux-client.yml
+ - template: linux/product-build-linux.yml
parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
+ VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
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
+ pool: 1es-oss-ubuntu-20.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
NPM_ARCH: x64
DISPLAY: ":10"
steps:
- - template: linux/product-build-linux-client.yml
+ - template: linux/product-build-linux.yml
parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
+ VSCODE_ARCH: x64
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
VSCODE_RUN_UNIT_TESTS: false
VSCODE_RUN_INTEGRATION_TESTS: false
VSCODE_RUN_SMOKE_TESTS: true
+ - job: LinuxCLI
+ displayName: Linux (CLI)
+ pool: 1es-oss-ubuntu-20.04-x64
+ timeoutInMinutes: 30
+ steps:
+ - template: cli/test.yml
+
+ - job: Windowsx64UnitTests
+ displayName: Windows (Unit Tests)
+ pool: 1es-oss-windows-2019-x64
+ timeoutInMinutes: 30
+ variables:
+ VSCODE_ARCH: x64
+ NPM_ARCH: x64
+ steps:
+ - template: win32/product-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ VSCODE_RUN_UNIT_TESTS: true
+ VSCODE_RUN_INTEGRATION_TESTS: false
+ VSCODE_RUN_SMOKE_TESTS: false
+
+ - job: Windowsx64IntegrationTests
+ displayName: Windows (Integration Tests)
+ pool: 1es-oss-windows-2019-x64
+ timeoutInMinutes: 30
+ variables:
+ VSCODE_ARCH: x64
+ NPM_ARCH: x64
+ steps:
+ - template: win32/product-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ VSCODE_RUN_UNIT_TESTS: false
+ VSCODE_RUN_INTEGRATION_TESTS: true
+ VSCODE_RUN_SMOKE_TESTS: false
+
+ # - job: Windowsx64SmokeTests
+ # displayName: Windows (Smoke Tests)
+ # pool: 1es-oss-windows-2019-x64
+ # timeoutInMinutes: 30
+ # variables:
+ # VSCODE_ARCH: x64
+ # NPM_ARCH: x64
+ # steps:
+ # - template: win32/product-build-win32.yml
+ # parameters:
+ # 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
+ pool: 1es-oss-ubuntu-20.04-x64
timeoutInMinutes: 30
variables:
VSCODE_ARCH: x64
steps:
- - template: product-build-pr-cache.yml
+ - template: oss/product-build-pr-cache-linux.yml
+
+ - job: Windowsx64MaintainNodeModulesCache
+ displayName: Windows (Maintain node_modules cache)
+ pool: 1es-oss-windows-2019-x64
+ timeoutInMinutes: 30
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: oss/product-build-pr-cache-win32.yml
# - job: macOSUnitTest
# displayName: macOS (Unit Tests)
# pool:
- # vmImage: macOS-latest
+ # vmImage: macOS-11
# timeoutInMinutes: 60
# variables:
# BUILDSECMON_OPT_IN: true
@@ -107,7 +171,6 @@ jobs:
# 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
@@ -115,7 +178,7 @@ jobs:
# - job: macOSIntegrationTest
# displayName: macOS (Integration Tests)
# pool:
- # vmImage: macOS-latest
+ # vmImage: macOS-11
# timeoutInMinutes: 60
# variables:
# BUILDSECMON_OPT_IN: true
@@ -123,7 +186,6 @@ jobs:
# 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
@@ -131,7 +193,7 @@ jobs:
# - job: macOSSmokeTest
# displayName: macOS (Smoke Tests)
# pool:
- # vmImage: macOS-latest
+ # vmImage: macOS-11
# timeoutInMinutes: 60
# variables:
# BUILDSECMON_OPT_IN: true
@@ -139,50 +201,6 @@ jobs:
# 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
diff --git a/build/azure-pipelines/product-build.yml b/build/azure-pipelines/product-build.yml
index 958203ec56..5be7f43abf 100644
--- a/build/azure-pipelines/product-build.yml
+++ b/build/azure-pipelines/product-build.yml
@@ -6,17 +6,12 @@ schedules:
branches:
include:
- main
- - joao/web
trigger:
branches:
include: ["main", "release/*"]
parameters:
- - name: VSCODE_DISTRO_REF
- displayName: Distro Ref (Private build)
- type: string
- default: " "
- name: VSCODE_QUALITY
displayName: Quality
type: string
@@ -25,10 +20,10 @@ parameters:
- exploration
- insider
- stable
- - name: ENABLE_TERRAPIN
- displayName: "Enable Terrapin"
- type: boolean
- default: true
+ - name: NPM_REGISTRY
+ displayName: "Custom NPM Registry"
+ type: string
+ default: 'https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/npm/registry/'
- name: VSCODE_BUILD_WIN32
displayName: "🎯 Windows x64"
type: boolean
@@ -53,12 +48,12 @@ parameters:
displayName: "🎯 Linux armhf"
type: boolean
default: true
- - name: VSCODE_BUILD_LINUX_ALPINE
- displayName: "🎯 Alpine Linux x64"
+ - name: VSCODE_BUILD_ALPINE
+ displayName: "🎯 Alpine x64"
type: boolean
default: true
- - name: VSCODE_BUILD_LINUX_ALPINE_ARM64
- displayName: "🎯 Alpine Linux arm64"
+ - name: VSCODE_BUILD_ALPINE_ARM64
+ displayName: "🎯 Alpine arm64"
type: boolean
default: true
- name: VSCODE_BUILD_MACOS
@@ -99,16 +94,18 @@ parameters:
default: false
variables:
- - name: VSCODE_DISTRO_REF
- value: ${{ parameters.VSCODE_DISTRO_REF }}
- - name: ENABLE_TERRAPIN
- value: ${{ eq(parameters.ENABLE_TERRAPIN, true) }}
+ - name: VSCODE_PRIVATE_BUILD
+ value: ${{ ne(variables['Build.Repository.Uri'], 'https://github.com/microsoft/vscode.git') }}
+ - name: NPM_REGISTRY
+ value: ${{ parameters.NPM_REGISTRY }}
- name: VSCODE_QUALITY
value: ${{ parameters.VSCODE_QUALITY }}
- 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)) }}
- 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)) }}
+ - name: VSCODE_BUILD_STAGE_ALPINE
+ value: ${{ or(eq(parameters.VSCODE_BUILD_ALPINE, true), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}
- name: VSCODE_BUILD_STAGE_MACOS
value: ${{ or(eq(parameters.VSCODE_BUILD_MACOS, true), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}
- name: VSCODE_BUILD_STAGE_WEB
@@ -116,7 +113,7 @@ variables:
- name: VSCODE_CIBUILD
value: ${{ in(variables['Build.Reason'], 'IndividualCI', 'BatchedCI') }}
- name: VSCODE_PUBLISH
- value: ${{ and(eq(parameters.VSCODE_PUBLISH, true), eq(variables.VSCODE_CIBUILD, false)) }}
+ value: ${{ and(eq(parameters.VSCODE_PUBLISH, true), eq(variables.VSCODE_CIBUILD, false), eq(parameters.VSCODE_COMPILE_ONLY, false)) }}
- name: VSCODE_PUBLISH_TO_MOONCAKE
value: ${{ eq(parameters.VSCODE_PUBLISH_TO_MOONCAKE, true) }}
- name: VSCODE_SCHEDULEDBUILD
@@ -138,6 +135,8 @@ variables:
- name: Codeql.SkipTaskAutoInjection
value: true
+name: "$(Date:yyyyMMdd).$(Rev:r) (${{ parameters.VSCODE_QUALITY }})"
+
resources:
containers:
- container: vscode-bionic-x64
@@ -145,25 +144,22 @@ resources:
endpoint: VSCodeHub
options: --user 0:0 --cap-add SYS_ADMIN
- container: vscode-arm64
- image: vscodehub.azurecr.io/vscode-linux-build-agent:stretch-arm64
+ image: vscodehub.azurecr.io/vscode-linux-build-agent:buster-arm64
endpoint: VSCodeHub
options: --user 0:0 --cap-add SYS_ADMIN
- container: vscode-armhf
- image: vscodehub.azurecr.io/vscode-linux-build-agent:stretch-armhf
- endpoint: VSCodeHub
- options: --user 0:0 --cap-add SYS_ADMIN
- - container: centos7-devtoolset8-x64
- image: vscodehub.azurecr.io/vscode-linux-build-agent:centos7-devtoolset8-x64
+ image: vscodehub.azurecr.io/vscode-linux-build-agent:buster-armhf
endpoint: VSCodeHub
options: --user 0:0 --cap-add SYS_ADMIN
- container: snapcraft
- image: snapcore/snapcraft:stable
+ image: vscodehub.azurecr.io/vscode-linux-build-agent:snapcraft-x64
+ endpoint: VSCodeHub
stages:
- stage: Compile
jobs:
- job: Compile
- pool: vscode-1es-linux
+ pool: 1es-ubuntu-20.04-x64
variables:
VSCODE_ARCH: x64
steps:
@@ -171,435 +167,526 @@ stages:
parameters:
VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ - stage: CompileCLI
+ dependsOn: []
+ jobs:
+ - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
+ - job: CLILinuxX64
+ pool: 1es-ubuntu-20.04-x64
+ steps:
+ - template: ./linux/cli-build-linux.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_LINUX: ${{ parameters.VSCODE_BUILD_LINUX }}
+
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), or(eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true))) }}:
+ - job: CLILinuxGnuARM
+ pool: 1es-ubuntu-20.04-x64
+ steps:
+ - template: ./linux/cli-build-linux.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_LINUX_ARMHF: ${{ parameters.VSCODE_BUILD_LINUX_ARMHF }}
+ VSCODE_BUILD_LINUX_ARM64: ${{ parameters.VSCODE_BUILD_LINUX_ARM64 }}
+
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE, true)) }}:
+ - job: CLIAlpineX64
+ pool: 1es-ubuntu-20.04-x64
+ steps:
+ - template: ./alpine/cli-build-alpine.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_ALPINE: ${{ parameters.VSCODE_BUILD_ALPINE }}
+
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true)) }}:
+ - job: CLIAlpineARM64
+ pool: 1es-ubuntu-20.04-arm64
+ steps:
+ - bash: sudo apt update && sudo apt install -y unzip
+ displayName: Install unzip
+ - template: ./alpine/cli-build-alpine.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_ALPINE_ARM64: ${{ parameters.VSCODE_BUILD_ALPINE_ARM64 }}
+
+ - ${{ if eq(parameters.VSCODE_BUILD_MACOS, true) }}:
+ - job: CLIMacOSX64
+ pool:
+ vmImage: macOS-11
+ steps:
+ - template: ./darwin/cli-build-darwin.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }}
+
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}:
+ - job: CLIMacOSARM64
+ pool:
+ vmImage: macOS-11
+ steps:
+ - template: ./darwin/cli-build-darwin.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }}
+
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:
+ - job: CLIWindowsX64
+ pool: 1es-windows-2019-x64
+ steps:
+ - template: ./win32/cli-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }}
+
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
+ - job: CLIWindowsARM64
+ pool: 1es-windows-2019-x64
+ steps:
+ - template: ./win32/cli-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }}
+
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}:
+ - job: CLIWindowsX86
+ pool: 1es-windows-2019-x64
+ steps:
+ - template: ./win32/cli-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_BUILD_WIN32_32BIT: ${{ parameters.VSCODE_BUILD_WIN32_32BIT }}
+
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_WINDOWS'], true)) }}:
- - stage: Windows
- dependsOn:
- - Compile
- pool: vscode-1es-windows
- jobs:
- - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
- - job: WindowsUnitTests
- displayName: Unit Tests
- timeoutInMinutes: 60
- variables:
- VSCODE_ARCH: x64
- steps:
- - template: win32/product-build-win32.yml
- parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
- VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_RUN_UNIT_TESTS: true
- VSCODE_RUN_INTEGRATION_TESTS: false
- VSCODE_RUN_SMOKE_TESTS: false
- - job: WindowsIntegrationTests
- displayName: Integration Tests
- timeoutInMinutes: 60
- variables:
- VSCODE_ARCH: x64
- steps:
- - template: win32/product-build-win32.yml
- parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
- VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_RUN_UNIT_TESTS: false
- VSCODE_RUN_INTEGRATION_TESTS: true
- VSCODE_RUN_SMOKE_TESTS: false
- - job: WindowsSmokeTests
- displayName: Smoke Tests
- timeoutInMinutes: 60
- variables:
- VSCODE_ARCH: x64
- steps:
- - template: win32/product-build-win32.yml
- parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
- VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_RUN_UNIT_TESTS: false
- VSCODE_RUN_INTEGRATION_TESTS: false
- VSCODE_RUN_SMOKE_TESTS: true
+ - stage: Windows
+ dependsOn:
+ - Compile
+ - CompileCLI
+ pool: 1es-windows-2019-x64
+ jobs:
+ - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
+ - job: WindowsUnitTests
+ displayName: Unit Tests
+ timeoutInMinutes: 60
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: win32/product-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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
- timeoutInMinutes: 120
- 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: ${{ 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, true)) }}:
+ - job: Windows
+ timeoutInMinutes: 120
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: win32/product-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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)) }}:
- - job: Windows32
- timeoutInMinutes: 120
- variables:
- VSCODE_ARCH: ia32
- steps:
- - 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) }}
+ - job: WindowsCLISign
+ timeoutInMinutes: 90
+ steps:
+ - template: win32/product-build-win32-cli-sign.yml
+ parameters:
+ VSCODE_BUILD_WIN32: ${{ parameters.VSCODE_BUILD_WIN32 }}
+ VSCODE_BUILD_WIN32_ARM64: ${{ parameters.VSCODE_BUILD_WIN32_ARM64 }}
+ VSCODE_BUILD_WIN32_32BIT: ${{ parameters.VSCODE_BUILD_WIN32_32BIT }}
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_ARM64, true)) }}:
- - job: WindowsARM64
- timeoutInMinutes: 90
- variables:
- VSCODE_ARCH: arm64
- 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: false
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_WIN32_32BIT, true)) }}:
+ - job: Windows32
+ timeoutInMinutes: 120
+ variables:
+ VSCODE_ARCH: ia32
+ steps:
+ - template: win32/product-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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)) }}:
+ - job: WindowsARM64
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: arm64
+ steps:
+ - template: win32/product-build-win32.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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)) }}:
- - stage: LinuxServerDependencies
- dependsOn: [] # run in parallel to compile stage
- pool: vscode-1es-linux
- jobs:
- - ${{ if eq(parameters.VSCODE_BUILD_LINUX, true) }}:
- - job: x64
- container: centos7-devtoolset8-x64
- variables:
+ - stage: Linux
+ dependsOn:
+ - Compile
+ - CompileCLI
+ pool: 1es-ubuntu-20.04-x64
+ jobs:
+ - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
+ - job: Linuxx64UnitTest
+ displayName: Unit Tests
+ container: vscode-bionic-x64
+ variables:
+ VSCODE_ARCH: x64
+ NPM_ARCH: x64
+ DISPLAY: ":10"
+ steps:
+ - template: linux/product-build-linux.yml
+ parameters:
VSCODE_ARCH: x64
- NPM_ARCH: x64
- steps:
- - template: linux/product-build-linux-server.yml
- parameters:
- VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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.yml
+ parameters:
+ VSCODE_ARCH: x64
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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.yml
+ parameters:
+ VSCODE_ARCH: x64
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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_ARM64, true)) }}:
- - job: arm64
- variables:
- VSCODE_ARCH: arm64
- steps:
- - 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, true)) }}:
+ - job: Linuxx64
+ container: vscode-bionic-x64
+ variables:
+ VSCODE_ARCH: x64
+ NPM_ARCH: x64
+ DISPLAY: ":10"
+ steps:
+ - template: linux/product-build-linux.yml
+ parameters:
+ VSCODE_ARCH: x64
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_LINUX'], true)) }}:
- - stage: Linux
- dependsOn:
- - Compile
- - LinuxServerDependencies
- pool: vscode-1es-linux
- jobs:
- - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
- - job: Linuxx64UnitTest
- displayName: Unit Tests
- container: vscode-bionic-x64
- variables:
- VSCODE_ARCH: x64
- NPM_ARCH: x64
- DISPLAY: ":10"
- steps:
- - template: linux/product-build-linux-client.yml
- parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
- VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_RUN_UNIT_TESTS: true
- VSCODE_RUN_INTEGRATION_TESTS: false
- VSCODE_RUN_SMOKE_TESTS: false
- - job: Linuxx64IntegrationTest
- displayName: Integration Tests
- container: vscode-bionic-x64
- variables:
- VSCODE_ARCH: x64
- NPM_ARCH: x64
- DISPLAY: ":10"
- steps:
- - template: linux/product-build-linux-client.yml
- parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
- VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_RUN_UNIT_TESTS: false
- VSCODE_RUN_INTEGRATION_TESTS: true
- VSCODE_RUN_SMOKE_TESTS: false
- - job: Linuxx64SmokeTest
- displayName: Smoke Tests
- container: vscode-bionic-x64
- variables:
- VSCODE_ARCH: x64
- NPM_ARCH: x64
- DISPLAY: ":10"
- steps:
- - template: linux/product-build-linux-client.yml
- parameters:
- VSCODE_PUBLISH: ${{ variables.VSCODE_PUBLISH }}
- VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
- VSCODE_RUN_UNIT_TESTS: false
- VSCODE_RUN_INTEGRATION_TESTS: false
- VSCODE_RUN_SMOKE_TESTS: true
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}:
+ - job: LinuxSnap
+ dependsOn:
+ - Linuxx64
+ container: snapcraft
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: linux/snap-build-linux.yml
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX, true)) }}:
- - job: Linuxx64
- 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: ${{ 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')) }}:
- - job: LinuxSnap
- dependsOn:
- - Linuxx64
- container: snapcraft
- variables:
- VSCODE_ARCH: x64
- steps:
- - template: linux/snap-build-linux.yml
-
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}:
- - job: LinuxArmhf
- container: vscode-armhf
- variables:
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}:
+ - job: LinuxArmhf
+ container: vscode-armhf
+ variables:
+ VSCODE_ARCH: armhf
+ NPM_ARCH: arm
+ steps:
+ - template: linux/product-build-linux.yml
+ parameters:
VSCODE_ARCH: armhf
- NPM_ARCH: armv7l
- 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: false
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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
- - ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARMHF, true)) }}:
- - job: LinuxSnapArmhf
- dependsOn:
- - LinuxArmhf
- container: snapcraft
- variables:
- VSCODE_ARCH: armhf
- steps:
- - template: linux/snap-build-linux.yml
-
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
- - job: LinuxArm64
- container: vscode-arm64
- variables:
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
+ - job: LinuxArm64
+ container: vscode-arm64
+ variables:
+ VSCODE_ARCH: arm64
+ NPM_ARCH: arm64
+ steps:
+ - template: linux/product-build-linux.yml
+ parameters:
VSCODE_ARCH: arm64
- NPM_ARCH: arm64
- 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: false
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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
- - ${{ if and(false, eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ARM64, true)) }}:
- - job: LinuxSnapArm64
- dependsOn:
- - LinuxArm64
- container: snapcraft
- variables:
- VSCODE_ARCH: arm64
- steps:
- - template: linux/snap-build-linux.yml
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_ALPINE'], true)) }}:
+ - stage: Alpine
+ dependsOn:
+ - Compile
+ - CompileCLI
+ pool: 1es-ubuntu-20.04-x64
+ jobs:
+ - ${{ if eq(parameters.VSCODE_BUILD_ALPINE, true) }}:
+ - job: LinuxAlpine
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: alpine/product-build-alpine.yml
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ALPINE, true)) }}:
- - job: LinuxAlpine
- variables:
- VSCODE_ARCH: x64
- steps:
- - template: linux/product-build-alpine.yml
-
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_LINUX_ALPINE_ARM64, true)) }}:
- - job: LinuxAlpineArm64
- timeoutInMinutes: 120
- variables:
- VSCODE_ARCH: arm64
- steps:
- - template: linux/product-build-alpine.yml
+ - ${{ if eq(parameters.VSCODE_BUILD_ALPINE_ARM64, true) }}:
+ - job: LinuxAlpineArm64
+ timeoutInMinutes: 120
+ variables:
+ VSCODE_ARCH: arm64
+ steps:
+ - template: alpine/product-build-alpine.yml
- ${{ if and(eq(parameters.VSCODE_COMPILE_ONLY, false), eq(variables['VSCODE_BUILD_STAGE_MACOS'], true)) }}:
- - stage: macOS
- dependsOn:
- - Compile
- pool:
- vmImage: macOS-latest
- variables:
- BUILDSECMON_OPT_IN: true
- jobs:
- - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
- - job: macOSUnitTest
- displayName: Unit 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: 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
+ - stage: macOS
+ dependsOn:
+ - Compile
+ - CompileCLI
+ pool:
+ vmImage: macOS-11
+ variables:
+ BUILDSECMON_OPT_IN: true
+ jobs:
+ - ${{ if eq(variables['VSCODE_CIBUILD'], true) }}:
+ - job: macOSUnitTest
+ displayName: Unit Tests
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: darwin/product-build-darwin.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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 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_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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
- 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: ${{ 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(parameters.VSCODE_STEP_ON_IT, false) }}:
+ - job: macOSTest
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: darwin/product-build-darwin.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ 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
- dependsOn:
- - macOS
- timeoutInMinutes: 90
- variables:
- VSCODE_ARCH: x64
- steps:
- - template: darwin/product-build-darwin-sign.yml
+ - job: macOSSign
+ dependsOn:
+ - macOS
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: x64
+ steps:
+ - template: darwin/product-build-darwin-sign.yml
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}:
- - job: macOSARM64
- timeoutInMinutes: 90
- variables:
- VSCODE_ARCH: arm64
- 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
+ - job: macOSCLISign
+ timeoutInMinutes: 90
+ steps:
+ - template: darwin/product-build-darwin-cli-sign.yml
+ parameters:
+ VSCODE_BUILD_MACOS: ${{ parameters.VSCODE_BUILD_MACOS }}
+ VSCODE_BUILD_MACOS_ARM64: ${{ parameters.VSCODE_BUILD_MACOS_ARM64 }}
- - ${{ if eq(variables['VSCODE_PUBLISH'], true) }}:
- - job: macOSARM64Sign
- dependsOn:
- - macOSARM64
- timeoutInMinutes: 90
- variables:
- VSCODE_ARCH: arm64
- steps:
- - template: darwin/product-build-darwin-sign.yml
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(parameters.VSCODE_BUILD_MACOS_ARM64, true)) }}:
+ - job: macOSARM64
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: arm64
+ steps:
+ - template: darwin/product-build-darwin.yml
+ parameters:
+ VSCODE_QUALITY: ${{ variables.VSCODE_QUALITY }}
+ VSCODE_CIBUILD: ${{ variables.VSCODE_CIBUILD }}
+ VSCODE_RUN_UNIT_TESTS: false
+ VSCODE_RUN_INTEGRATION_TESTS: false
+ VSCODE_RUN_SMOKE_TESTS: false
- - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(variables['VSCODE_BUILD_MACOS_UNIVERSAL'], true)) }}:
- - job: macOSUniversal
- dependsOn:
- - macOS
- - macOSARM64
- timeoutInMinutes: 90
- variables:
- VSCODE_ARCH: universal
- steps:
- - template: darwin/product-build-darwin-universal.yml
+ - job: macOSARM64Sign
+ dependsOn:
+ - macOSARM64
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: arm64
+ steps:
+ - template: darwin/product-build-darwin-sign.yml
- - ${{ if eq(variables['VSCODE_PUBLISH'], true) }}:
- - job: macOSUniversalSign
- dependsOn:
- - macOSUniversal
- timeoutInMinutes: 90
- variables:
- VSCODE_ARCH: universal
- steps:
- - template: darwin/product-build-darwin-sign.yml
+ - ${{ if and(eq(variables['VSCODE_CIBUILD'], false), eq(variables['VSCODE_BUILD_MACOS_UNIVERSAL'], true)) }}:
+ - job: macOSUniversal
+ dependsOn:
+ - macOS
+ - macOSARM64
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: universal
+ steps:
+ - template: darwin/product-build-darwin-universal.yml
+
+ - job: macOSUniversalSign
+ dependsOn:
+ - macOSUniversal
+ timeoutInMinutes: 90
+ variables:
+ VSCODE_ARCH: universal
+ steps:
+ - 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')) }}:
- - stage: Publish
- dependsOn:
- - Compile
- pool: vscode-1es-linux
- variables:
- - name: BUILDS_API_URL
- value: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/
- jobs:
- - job: PublishBuild
- timeoutInMinutes: 180
- displayName: Publish Build
+ - stage: Web
+ dependsOn:
+ - Compile
+ pool: 1es-ubuntu-20.04-x64
+ jobs:
+ - ${{ if eq(parameters.VSCODE_BUILD_WEB, true) }}:
+ - job: Web
+ variables:
+ VSCODE_ARCH: x64
steps:
- - template: product-publish.yml
+ - template: web/product-build-web.yml
- - ${{ if or(and(parameters.VSCODE_RELEASE, eq(parameters.VSCODE_DISTRO_REF, ' ')), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true))) }}:
- - stage: Release
- dependsOn:
- - Publish
- pool: vscode-1es-linux
- jobs:
- - job: ReleaseBuild
- displayName: Release Build
- steps:
- - template: product-release.yml
+ - ${{ if eq(variables['VSCODE_PUBLISH'], 'true') }}:
+ - stage: Publish
+ dependsOn:
+ - Compile
+ pool: 1es-ubuntu-20.04-x64
+ variables:
+ - name: BUILDS_API_URL
+ value: $(System.CollectionUri)$(System.TeamProject)/_apis/build/builds/$(Build.BuildId)/
+ jobs:
+ - job: PublishBuild
+ timeoutInMinutes: 180
+ displayName: Publish Build
+ steps:
+ - template: product-publish.yml
+
+ - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}:
+ - stage: ApproveRelease
+ dependsOn: [] # run in parallel to compile stage
+ pool: 1es-ubuntu-20.04-x64
+ jobs:
+ - deployment: ApproveRelease
+ displayName: "Approve Release"
+ environment: "vscode"
+ variables:
+ skipComponentGovernanceDetection: true
+ strategy:
+ runOnce:
+ deploy:
+ steps:
+ - checkout: none
+
+ - ${{ if or(and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)), and(in(parameters.VSCODE_QUALITY, 'insider', 'exploration'), eq(variables['VSCODE_SCHEDULEDBUILD'], true))) }}:
+ - stage: Release
+ dependsOn:
+ - Publish
+ - ${{ if and(parameters.VSCODE_RELEASE, eq(variables['VSCODE_PRIVATE_BUILD'], false)) }}:
+ - ApproveRelease
+ pool: 1es-ubuntu-20.04-x64
+ jobs:
+ - job: ReleaseBuild
+ displayName: Release Build
+ steps:
+ - template: product-release.yml
+ parameters:
+ VSCODE_RELEASE: ${{ parameters.VSCODE_RELEASE }}
diff --git a/build/azure-pipelines/product-compile.yml b/build/azure-pipelines/product-compile.yml
index 381d49ee75..94a48b4325 100644
--- a/build/azure-pipelines/product-compile.yml
+++ b/build/azure-pipelines/product-compile.yml
@@ -8,78 +8,54 @@ steps:
versionSpec: "16.x"
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - template: ./distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password"
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- cat << EOF > ~/.netrc
- machine github.com
- login vscode
- password $(github-distro-mixin-password)
- EOF
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
- git config user.email "vscode@microsoft.com"
- git config user.name "VSCode"
- displayName: Prepare tooling
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js compile > .build/yarnlockhash
+ displayName: Prepare node_modules cache key
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - 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
-
- # using `genericNodeModules` instead of `nodeModules` here to avoid sharing the cache with builds running inside containers
- task: Cache@2
inputs:
- key: "genericNodeModules | $(Agent.OS) | .build/yarnlockhash"
+ key: '"node_modules" | .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
+ - script: 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
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
- - script: |
- set -e
- sudo apt update -y
- sudo apt install -y build-essential pkg-config libx11-dev libx11-xcb-dev libxkbfile-dev libsecret-1-dev libnotify-bin
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ - script: sudo apt update -y && sudo apt install -y build-essential pkg-config libx11-dev libx11-xcb-dev libxkbfile-dev libsecret-1-dev libnotify-bin
displayName: Install build tools
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
- script: |
set -e
- for i in {1..3}; do # try 3 times, for Terrapin
+ for i in {1..5}; do # try 5 times
yarn --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -94,6 +70,11 @@ steps:
displayName: Install dependencies
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - script: node build/azure-pipelines/distro/mixin-npm
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ displayName: Mixin distro node modules
+
- script: |
set -e
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
@@ -102,16 +83,17 @@ steps:
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
displayName: Create node_modules archive
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- # Mixin must run before optimize, because the CSS loader will inline small SVGs
- - script: |
- set -e
- node build/azure-pipelines/mixin
- displayName: Mix in quality
+ - ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
+ - script: yarn --cwd build compile && ./.github/workflows/check-clean-git-state.sh
+ displayName: Check /build/ folder
- - script: |
- set -e
- yarn npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - script: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
+
+ - template: common/install-builtin-extensions.yml
+
+ - script: yarn npm-run-all -lp core-ci extensions-ci hygiene eslint valid-layers-check vscode-dts-compile-check tsec-compile-check
env:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Compile & Hygiene
@@ -124,7 +106,6 @@ steps:
displayName: Compile test suites
condition: and(succeeded(), eq(variables['VSCODE_STEP_ON_IT'], 'false'))
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- task: AzureCLI@2
inputs:
azureSubscription: "vscode-builds-subscription"
@@ -136,7 +117,6 @@ steps:
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 ne(parameters.VSCODE_QUALITY, 'oss') }}:
- script: |
set -e
AZURE_STORAGE_ACCOUNT="ticino" \
@@ -146,35 +126,26 @@ steps:
node build/azure-pipelines/upload-sourcemaps
displayName: Upload sourcemaps
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -
- ./build/azure-pipelines/common/extract-telemetry.sh
+ - script: ./build/azure-pipelines/common/extract-telemetry.sh
displayName: Extract Telemetry
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- 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
+ - script: tar -cz --ignore-failed-read --exclude='.build/node_modules_cache' --exclude='.build/node_modules_list.txt' --exclude='.build/distro' -f $(Build.ArtifactStagingDirectory)/compilation.tar.gz .build out-* test/integration/browser/out test/smoke/out test/automation/out
displayName: Compress compilation artifact
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- task: PublishPipelineArtifact@1
inputs:
targetPath: $(Build.ArtifactStagingDirectory)/compilation.tar.gz
artifactName: Compilation
displayName: Publish compilation artifact
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn download-builtin-extensions-cg
+ - script: yarn download-builtin-extensions-cg
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Built-in extensions component details
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0
displayName: "Component Detection"
inputs:
sourceScanPath: $(Build.SourcesDirectory)
+ alertWarningLevel: Medium
continueOnError: true
diff --git a/build/azure-pipelines/product-publish.ps1 b/build/azure-pipelines/product-publish.ps1
index 5006ec61a3..a9170d54f5 100644
--- a/build/azure-pipelines/product-publish.ps1
+++ b/build/azure-pipelines/product-publish.ps1
@@ -45,6 +45,7 @@ New-Item -Path $ARTIFACT_PROCESSED_FILE_PATH -Force | Out-Null
$stages = @(
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
+ if ($env:VSCODE_BUILD_STAGE_ALPINE -eq 'True') { 'Alpine' }
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
if ($env:VSCODE_BUILD_STAGE_WEB -eq 'True') { 'Web' }
)
@@ -62,12 +63,15 @@ do {
if($set.Add($artifactName)) {
Write-Host "Processing artifact: '$artifactName. Downloading from: $($_.resource.downloadUrl)"
+ $extractPath = "$env:AGENT_TEMPDIRECTORY/$artifactName.zip"
try {
- Invoke-RestMethod $_.resource.downloadUrl -OutFile "$env:AGENT_TEMPDIRECTORY/$artifactName.zip" -Headers @{
+ Invoke-RestMethod $_.resource.downloadUrl -OutFile $extractPath -Headers @{
Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
- } -MaximumRetryCount 5 -RetryIntervalSec 1 | Out-Null
+ } -MaximumRetryCount 5 -RetryIntervalSec 1 -TimeoutSec 300 | Out-Null
- Expand-Archive -Path "$env:AGENT_TEMPDIRECTORY/$artifactName.zip" -DestinationPath $env:AGENT_TEMPDIRECTORY | Out-Null
+ Write-Host "Extracting artifact: '$extractPath'"
+
+ Expand-Archive -Path $extractPath -DestinationPath $env:AGENT_TEMPDIRECTORY | Out-Null
} catch {
Write-Warning $_
$set.Remove($artifactName) | Out-Null
@@ -76,6 +80,13 @@ do {
$null,$product,$os,$arch,$type = $artifactName -split '_'
$asset = Get-ChildItem -rec "$env:AGENT_TEMPDIRECTORY/$artifactName"
+
+ if ($asset.Size -ne $_.resource.properties.artifactsize) {
+ Write-Warning "Artifact size mismatch for '$artifactName'. Expected: $($_.resource.properties.artifactsize). Actual: $($asset.Size)"
+ $set.Remove($artifactName) | Out-Null
+ continue
+ }
+
Write-Host "Processing artifact with the following values:"
# turning in into an object just to log nicely
@{
diff --git a/build/azure-pipelines/product-publish.yml b/build/azure-pipelines/product-publish.yml
index 80076fd666..2e2d735da0 100644
--- a/build/azure-pipelines/product-publish.yml
+++ b/build/azure-pipelines/product-publish.yml
@@ -7,38 +7,15 @@ steps:
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password"
- - script: |
- set -e
- cat << EOF > ~/.netrc
- machine github.com
- login vscode
- password $(github-distro-mixin-password)
- EOF
+ # allow-any-unicode-next-line
+ - pwsh: Write-Host "##vso[build.addbuildtag]🚀"
+ displayName: Add build tag
- 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
-
- - pwsh: |
- . build/azure-pipelines/win32/exec.ps1
- cd build
- exec { yarn }
+ - pwsh: yarn
+ workingDirectory: build
displayName: Install build dependencies
- download: current
@@ -75,24 +52,24 @@ steps:
return
}
- $env:AZURE_TENANT_ID = "$(AZURE_TENANT_ID)"
- $env:AZURE_CLIENT_ID = "$(AZURE_CLIENT_ID)"
- $env:AZURE_CLIENT_SECRET = "$(AZURE_CLIENT_SECRET)"
$VERSION = node -p "require('./package.json').version"
Write-Host "Creating build with version: $VERSION"
exec { node build/azure-pipelines/common/createBuild.js $VERSION }
+ env:
+ AZURE_TENANT_ID: "$(AZURE_TENANT_ID)"
+ AZURE_CLIENT_ID: "$(AZURE_CLIENT_ID)"
+ AZURE_CLIENT_SECRET: "$(AZURE_CLIENT_SECRET)"
displayName: Create build if it hasn't been created before
- - pwsh: |
- $env:VSCODE_MIXIN_PASSWORD = "$(github-distro-mixin-password)"
- $env:AZURE_TENANT_ID = "$(AZURE_TENANT_ID)"
- $env:AZURE_CLIENT_ID = "$(AZURE_CLIENT_ID)"
- $env:AZURE_CLIENT_SECRET = "$(AZURE_CLIENT_SECRET)"
- $env:AZURE_MOONCAKE_TENANT_ID = "$(AZURE_MOONCAKE_TENANT_ID)"
- $env:AZURE_MOONCAKE_CLIENT_ID = "$(AZURE_MOONCAKE_CLIENT_ID)"
- $env:AZURE_MOONCAKE_CLIENT_SECRET = "$(AZURE_MOONCAKE_CLIENT_SECRET)"
- build/azure-pipelines/product-publish.ps1
+ - pwsh: build/azure-pipelines/product-publish.ps1
env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ AZURE_TENANT_ID: "$(AZURE_TENANT_ID)"
+ AZURE_CLIENT_ID: "$(AZURE_CLIENT_ID)"
+ AZURE_CLIENT_SECRET: "$(AZURE_CLIENT_SECRET)"
+ AZURE_MOONCAKE_TENANT_ID: "$(AZURE_MOONCAKE_TENANT_ID)"
+ AZURE_MOONCAKE_CLIENT_ID: "$(AZURE_MOONCAKE_CLIENT_ID)"
+ AZURE_MOONCAKE_CLIENT_SECRET: "$(AZURE_MOONCAKE_CLIENT_SECRET)"
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
displayName: Process artifacts
@@ -108,6 +85,7 @@ steps:
$stages = @(
if ($env:VSCODE_BUILD_STAGE_WINDOWS -eq 'True') { 'Windows' }
if ($env:VSCODE_BUILD_STAGE_LINUX -eq 'True') { 'Linux' }
+ if ($env:VSCODE_BUILD_STAGE_ALPINE -eq 'True') { 'Alpine' }
if ($env:VSCODE_BUILD_STAGE_MACOS -eq 'True') { 'macOS' }
if ($env:VSCODE_BUILD_STAGE_WEB -eq 'True') { 'Web' }
)
diff --git a/build/azure-pipelines/product-release.yml b/build/azure-pipelines/product-release.yml
index a108694559..8be900a9b4 100644
--- a/build/azure-pipelines/product-release.yml
+++ b/build/azure-pipelines/product-release.yml
@@ -1,3 +1,7 @@
+parameters:
+ - name: VSCODE_RELEASE
+ type: boolean
+
steps:
- task: NodeTool@0
inputs:
@@ -20,4 +24,4 @@ steps:
AZURE_TENANT_ID="$(AZURE_TENANT_ID)" \
AZURE_CLIENT_ID="$(AZURE_CLIENT_ID)" \
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
- node build/azure-pipelines/common/releaseBuild.js
+ node build/azure-pipelines/common/releaseBuild.js ${{ parameters.VSCODE_RELEASE }}
diff --git a/build/azure-pipelines/publish-types/check-version.js b/build/azure-pipelines/publish-types/check-version.js
index f787f897ae..3a2ed7222a 100644
--- a/build/azure-pipelines/publish-types/check-version.js
+++ b/build/azure-pipelines/publish-types/check-version.js
@@ -34,3 +34,4 @@ function isValidTag(t) {
}
return true;
}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stdmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNoZWNrLXZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxvQ0FBb0M7QUFFcEMsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2IsSUFBSTtJQUNILEdBQUcsR0FBRyxFQUFFO1NBQ04sUUFBUSxDQUFDLHlEQUF5RCxDQUFDO1NBQ25FLFFBQVEsRUFBRTtTQUNWLElBQUksRUFBRSxDQUFDO0lBRVQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNyQixNQUFNLEtBQUssQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDLENBQUM7S0FDbEM7Q0FDRDtBQUFDLE9BQU8sR0FBRyxFQUFFO0lBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuQixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDeEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztDQUNoQjtBQUVELFNBQVMsVUFBVSxDQUFDLENBQVM7SUFDNUIsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUIsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFekMsb0NBQW9DO0lBQ3BDLElBQUksR0FBRyxLQUFLLEdBQUcsRUFBRTtRQUNoQixPQUFPLEtBQUssQ0FBQztLQUNiO0lBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFDN0QsT0FBTyxLQUFLLENBQUM7S0FDYjtJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQyJ9
\ No newline at end of file
diff --git a/build/azure-pipelines/publish-types/update-types.js b/build/azure-pipelines/publish-types/update-types.js
index 6da5a12a86..be9b3fdd9c 100644
--- a/build/azure-pipelines/publish-types/update-types.js
+++ b/build/azure-pipelines/publish-types/update-types.js
@@ -74,3 +74,4 @@ function getNewFileHeader(tag) {
].join('\n');
return header;
}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBkYXRlLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcseUJBQXlCO0FBQ3pCLG9DQUFvQztBQUNwQyw2QkFBNkI7QUFFN0IsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2IsSUFBSTtJQUNILEdBQUcsR0FBRyxFQUFFO1NBQ04sUUFBUSxDQUFDLHlEQUF5RCxDQUFDO1NBQ25FLFFBQVEsRUFBRTtTQUNWLElBQUksRUFBRSxDQUFDO0lBRVQsTUFBTSxNQUFNLEdBQUcsK0RBQStELEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxzQ0FBc0M7SUFDL0ksTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUseUNBQXlDLENBQUMsQ0FBQyxDQUFDLHNDQUFzQztJQUM5SCxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsTUFBTSxhQUFhLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFFbEQsYUFBYSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUU1QixPQUFPLENBQUMsR0FBRyxDQUFDLGdDQUFnQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsc0NBQXNDO0NBQzlGO0FBQUMsT0FBTyxHQUFHLEVBQUU7SUFDYixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUN4QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0NBQ2hCO0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBZSxFQUFFLEdBQVc7SUFDbEQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRXRELEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZDLENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxHQUFXLEVBQUUsS0FBYTtJQUN6QyxNQUFNLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDaEI7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsR0FBVztJQUN2QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDO0FBRUQsU0FBUyxpQkFBaUIsQ0FBQyxPQUFlLEVBQUUsR0FBVztJQUN0RCxNQUFNLFNBQVMsR0FBRztRQUNqQixpR0FBaUc7UUFDakcsK0RBQStEO1FBQy9ELGtHQUFrRztRQUNsRyxrR0FBa0c7S0FDbEcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFYixPQUFPLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsZ0JBQWdCLENBQUMsR0FBVztJQUNwQyxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTSxRQUFRLEdBQUcsR0FBRyxLQUFLLElBQUksS0FBSyxFQUFFLENBQUM7SUFFckMseUNBQXlDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHO1FBQ2QsNkNBQTZDLFFBQVEsRUFBRTtRQUN2RCwwREFBMEQ7UUFDMUQsdUVBQXVFO1FBQ3ZFLCtEQUErRDtRQUMvRCxnRUFBZ0U7UUFDaEUsc0VBQXNFO1FBQ3RFLG9FQUFvRTtRQUNwRSxFQUFFO1FBQ0YsaUdBQWlHO1FBQ2pHLCtEQUErRDtRQUMvRCxxQ0FBcUM7UUFDckMscUdBQXFHO1FBQ3JHLGtHQUFrRztRQUNsRyxFQUFFO1FBQ0YsS0FBSztRQUNMLDRDQUE0QyxRQUFRLGdCQUFnQjtRQUNwRSxpR0FBaUc7UUFDakcsS0FBSztLQUNMLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWIsT0FBTyxNQUFNLENBQUM7QUFDZixDQUFDIn0=
\ No newline at end of file
diff --git a/build/azure-pipelines/sdl-scan.yml b/build/azure-pipelines/sdl-scan.yml
index f6a44d4862..8c81ee2040 100644
--- a/build/azure-pipelines/sdl-scan.yml
+++ b/build/azure-pipelines/sdl-scan.yml
@@ -2,10 +2,10 @@ trigger: none
pr: none
parameters:
- - name: ENABLE_TERRAPIN
- displayName: "Enable Terrapin"
- type: boolean
- default: true
+ - name: NPM_REGISTRY
+ displayName: "Custom NPM Registry"
+ type: string
+ default: "https://pkgs.dev.azure.com/monacotools/Monaco/_packaging/vscode/npm/registry/"
- name: SCAN_WINDOWS
displayName: "Scan Windows"
type: boolean
@@ -16,8 +16,8 @@ parameters:
default: false
variables:
- - name: ENABLE_TERRAPIN
- value: ${{ eq(parameters.ENABLE_TERRAPIN, true) }}
+ - name: NPM_REGISTRY
+ value: ${{ parameters.NPM_REGISTRY }}
- name: SCAN_WINDOWS
value: ${{ eq(parameters.SCAN_WINDOWS, true) }}
- name: SCAN_LINUX
@@ -30,12 +30,17 @@ variables:
value: x64
- name: VSCODE_ARCH
value: x64
+ - name: Codeql.enabled
+ value: true
+ - name: Codeql.TSAEnabled
+ value: true
+ - name: Codeql.TSAOptionsPath
+ value: '$(Build.SourcesDirectory)\build\azure-pipelines\config\tsaoptions.json'
stages:
- stage: Windows
condition: eq(variables.SCAN_WINDOWS, 'true')
- pool:
- vmImage: windows-latest
+ pool: 1es-windows-2019-x64
jobs:
- job: WindowsJob
timeoutInMinutes: 0
@@ -49,77 +54,89 @@ stages:
inputs:
versionSpec: "16.x"
+ - template: ./distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password"
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
+ exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
+ exec { npm config set always-auth=true --location=project }
+ exec { yarn config set registry "$env:NPM_REGISTRY" }
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
- exec { git config user.email "vscode@microsoft.com" }
- exec { git config user.name "VSCode" }
- displayName: Prepare tooling
-
- # - powershell: |
- # . build/azure-pipelines/win32/exec.ps1
- # $ErrorActionPreference = "Stop"
-
- # exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) }
- # exec { git checkout FETCH_HEAD }
- # condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
- # displayName: Checkout override commit
-
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") }
- displayName: Merge distro
-
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { npx https://aka.ms/enablesecurefeed standAlone }
- timeoutInMinutes: 5
- retryCountOnTaskFailure: 3
- condition: and(succeeded(), eq(variables['ENABLE_TERRAPIN'], 'true'))
- displayName: Switch to Terrapin packages
-
- - task: Semmle@1
+ - task: npmAuthenticate@0
inputs:
- sourceCodeDirectory: "$(Build.SourcesDirectory)"
- language: "cpp"
- buildCommandsString: "yarn --frozen-lockfile --check-files"
- querySuite: "Required"
- timeout: "1800"
- ram: "16384"
- addProjectDirToScanningExclusionList: true
- env:
- npm_config_arch: "$(NPM_ARCH)"
- PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
- GITHUB_TOKEN: "$(github-distro-mixin-password)"
- displayName: CodeQL
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { node build/setup-npm-registry.js $env:NPM_REGISTRY }
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
+
+ - task: CodeQL3000Init@0
+ displayName: CodeQL Initialize
+ condition: eq(variables['Codeql.enabled'], 'True')
+
+ - powershell: |
+ mkdir -Force .build/node-gyp
+ displayName: Create custom node-gyp directory
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+
+ - powershell: |
+ . ../../build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ # TODO: Should be replaced with upstream URL once https://github.com/nodejs/node-gyp/pull/2825
+ # gets merged.
+ exec { git clone https://github.com/rzhao271/node-gyp.git . } "Cloning rzhao271/node-gyp failed"
+ exec { git checkout 102b347da0c92c29f9c67df22e864e70249cf086 } "Checking out 102b347 failed"
+ exec { npm install } "Building rzhao271/node-gyp failed"
+ displayName: Install custom node-gyp
+ workingDirectory: .build/node-gyp
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
- powershell: |
. build/azure-pipelines/win32/exec.ps1
. build/azure-pipelines/win32/retry.ps1
$ErrorActionPreference = "Stop"
+ $env:npm_config_node_gyp = "$(Join-Path $pwd.Path '.build/node-gyp/bin/node-gyp.js')"
+ $env:npm_config_arch = "$(NPM_ARCH)"
retry { exec { yarn --frozen-lockfile --check-files } }
env:
- npm_config_arch: "$(NPM_ARCH)"
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
GITHUB_TOKEN: "$(github-distro-mixin-password)"
CHILD_CONCURRENCY: 1
displayName: Install dependencies
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { yarn gulp "vscode-symbols-win32-$(VSCODE_ARCH)" }
+ - script: node build/azure-pipelines/distro/mixin-npm
+ displayName: Mixin distro node modules
+
+ - script: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
+ env:
+ VSCODE_QUALITY: stable
+
+ - powershell: yarn compile
+ displayName: Compile
+
+ - task: CodeQL3000Finalize@0
+ displayName: CodeQL Finalize
+ condition: eq(variables['Codeql.enabled'], 'True')
+
+ - powershell: yarn gulp "vscode-symbols-win32-$(VSCODE_ARCH)"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Download Symbols
- task: BinSkim@4
@@ -130,10 +147,21 @@ stages:
AnalyzeTargetGlob: '$(agent.builddirectory)\scanbin\**.dll;$(agent.builddirectory)\scanbin\**.exe;$(agent.builddirectory)\scanbin\**.node'
AnalyzeLocalSymbolDirectories: '$(agent.builddirectory)\scanbin\VSCode-win32-$(VSCODE_ARCH)\pdb'
+ - task: AntiMalware@4
+ inputs:
+ InputType: Basic
+ ScanType: CustomScan
+ FileDirPath: '$(Build.SourcesDirectory)'
+ EnableServices: true
+ SupportLogOnError: false
+ TreatSignatureUpdateFailureAs: 'Warning'
+ SignatureFreshness: 'OneDay'
+ TreatStaleSignatureAs: 'Error'
+
- task: TSAUpload@2
inputs:
GdnPublishTsaOnboard: true
- GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)\build\azure-pipelines\.gdntsa'
+ GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)\build\azure-pipelines\config\tsaoptions.json'
- stage: Linux
dependsOn: []
@@ -150,49 +178,36 @@ stages:
inputs:
versionSpec: "16.x"
+ - template: ./distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password"
- script: |
set -e
- cat << EOF > ~/.netrc
- machine github.com
- login vscode
- password $(github-distro-mixin-password)
- EOF
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
- git config user.email "vscode@microsoft.com"
- git config user.name "VSCode"
- displayName: Prepare tooling
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
- # - 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: node build/setup-npm-registry.js $NPM_REGISTRY
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
- script: |
set -e
- git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro")
- displayName: Merge distro
-
- - 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
+ for i in {1..5}; do # try 5 times
yarn --cwd build --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -219,13 +234,13 @@ stages:
# Set compiler toolchain
export CC=$PWD/.build/CR_Clang/bin/clang
export CXX=$PWD/.build/CR_Clang/bin/clang++
- export CXXFLAGS="-nostdinc++ -D__NO_INLINE__ -isystem$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit"
+ export CXXFLAGS="-std=c++17 -nostdinc++ -D__NO_INLINE__ -I$PWD/.build/libcxx_headers -isystem$PWD/.build/libcxx_headers/include -isystem$PWD/.build/libcxxabi_headers/include -fPIC -flto=thin -fsplit-lto-unit -D_LIBCPP_ABI_NAMESPACE=Cr"
export LDFLAGS="-stdlib=libc++ -fuse-ld=lld -flto=thin -fsplit-lto-unit -L$PWD/.build/libcxx-objects -lc++abi"
export VSCODE_REMOTE_CC=$(which gcc)
export VSCODE_REMOTE_CXX=$(which g++)
fi
- for i in {1..3}; do # try 3 times, for Terrapin
+ for i in {1..5}; do # try 5 times
yarn --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -238,9 +253,23 @@ stages:
GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Install dependencies
- - script: |
- set -e
- yarn gulp vscode-symbols-linux-$(VSCODE_ARCH)
+ - script: yarn --frozen-lockfile --check-files
+ workingDirectory: .build/distro/npm
+ env:
+ npm_config_arch: $(NPM_ARCH)
+ displayName: Install distro node modules
+
+ - script: node build/azure-pipelines/distro/mixin-npm
+ displayName: Mixin distro node modules
+
+ - script: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
+ env:
+ VSCODE_QUALITY: stable
+
+ - script: yarn gulp vscode-symbols-linux-$(VSCODE_ARCH)
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Build
- task: BinSkim@3
@@ -251,4 +280,4 @@ stages:
- task: TSAUpload@2
inputs:
- GdnPublishTsaConfigFile: '$(Build.SourceDirectory)\build\azure-pipelines\.gdntsa'
+ GdnPublishTsaConfigFile: '$(Build.SourceDirectory)\build\azure-pipelines\config\tsaoptions.json'
diff --git a/build/azure-pipelines/sql-product-build.yml b/build/azure-pipelines/sql-product-build.yml
index 0ce7c696d8..b1dfaaa41a 100644
--- a/build/azure-pipelines/sql-product-build.yml
+++ b/build/azure-pipelines/sql-product-build.yml
@@ -1,7 +1,7 @@
resources:
containers:
- container: linux-x64
- image: sqltoolscontainers.azurecr.io/linux-build-agent:6
+ image: sqltoolscontainers.azurecr.io/linux-build-agent:7
endpoint: SqlToolsContainers
stages:
diff --git a/build/azure-pipelines/upload-cdn.js b/build/azure-pipelines/upload-cdn.js
index 5bf24c505a..621db49524 100644
--- a/build/azure-pipelines/upload-cdn.js
+++ b/build/azure-pipelines/upload-cdn.js
@@ -9,50 +9,109 @@ const Vinyl = require("vinyl");
const vfs = require("vinyl-fs");
const filter = require("gulp-filter");
const gzip = require("gulp-gzip");
+const mime = require("mime");
const identity_1 = require("@azure/identity");
const azure = require('gulp-azure-storage');
-const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
+const 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']);
+mime.define({
+ 'application/typescript': ['ts'],
+ 'application/json': ['code-snippets'],
+});
+// From default AFD configuration
+const MimeTypesToCompress = new Set([
+ 'application/eot',
+ 'application/font',
+ 'application/font-sfnt',
+ 'application/javascript',
+ 'application/json',
+ 'application/opentype',
+ 'application/otf',
+ 'application/pkcs7-mime',
+ 'application/truetype',
+ 'application/ttf',
+ 'application/typescript',
+ 'application/vnd.ms-fontobject',
+ 'application/xhtml+xml',
+ 'application/xml',
+ 'application/xml+rss',
+ 'application/x-font-opentype',
+ 'application/x-font-truetype',
+ 'application/x-font-ttf',
+ 'application/x-httpd-cgi',
+ 'application/x-javascript',
+ 'application/x-mpegurl',
+ 'application/x-opentype',
+ 'application/x-otf',
+ 'application/x-perl',
+ 'application/x-ttf',
+ 'font/eot',
+ 'font/ttf',
+ 'font/otf',
+ 'font/opentype',
+ 'image/svg+xml',
+ 'text/css',
+ 'text/csv',
+ 'text/html',
+ 'text/javascript',
+ 'text/js',
+ 'text/markdown',
+ 'text/plain',
+ 'text/richtext',
+ 'text/tab-separated-values',
+ 'text/xml',
+ 'text/x-script',
+ 'text/x-component',
+ 'text/x-java-source'
+]);
+function wait(stream) {
+ return new Promise((c, e) => {
+ stream.on('end', () => c());
+ stream.on('error', (err) => e(err));
+ });
+}
async function main() {
const files = [];
- const options = {
+ const options = (compressed) => ({
account: process.env.AZURE_STORAGE_ACCOUNT,
credential,
container: process.env.VSCODE_QUALITY,
prefix: commit + '/',
contentSettings: {
- contentEncoding: 'gzip',
+ contentEncoding: compressed ? 'gzip' : undefined,
cacheControl: 'max-age=31536000, public'
}
- };
- await new Promise((c, e) => {
- vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
- .pipe(filter(f => !f.isDirectory()))
- .pipe(gzip({ append: false }))
- .pipe(es.through(function (data) {
- console.log('Uploading:', data.relative); // debug
- files.push(data.relative);
- this.emit('data', data);
- }))
- .pipe(azure.upload(options))
- .on('end', () => c())
- .on('error', (err) => e(err));
});
- await new Promise((c, e) => {
- const listing = new Vinyl({
- path: 'files.txt',
- contents: Buffer.from(files.join('\n')),
- stat: { mode: 0o666 }
- });
- console.log(`Uploading: files.txt (${files.length} files)`); // debug
- es.readArray([listing])
- .pipe(gzip({ append: false }))
- .pipe(azure.upload(options))
- .on('end', () => c())
- .on('error', (err) => e(err));
+ const all = vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
+ .pipe(filter(f => !f.isDirectory()));
+ const compressed = all
+ .pipe(filter(f => MimeTypesToCompress.has(mime.lookup(f.path))))
+ .pipe(gzip({ append: false }))
+ .pipe(azure.upload(options(true)));
+ const uncompressed = all
+ .pipe(filter(f => !MimeTypesToCompress.has(mime.lookup(f.path))))
+ .pipe(azure.upload(options(false)));
+ const out = es.merge(compressed, uncompressed)
+ .pipe(es.through(function (f) {
+ console.log('Uploaded:', f.relative);
+ files.push(f.relative);
+ this.emit('data', f);
+ }));
+ console.log(`Uploading files to CDN...`); // debug
+ await wait(out);
+ const listing = new Vinyl({
+ path: 'files.txt',
+ contents: Buffer.from(files.join('\n')),
+ stat: { mode: 0o666 }
});
+ const filesOut = es.readArray([listing])
+ .pipe(gzip({ append: false }))
+ .pipe(azure.upload(options(true)));
+ console.log(`Uploading: files.txt (${files.length} files)`); // debug
+ await wait(filesOut);
}
main().catch(err => {
console.error(err);
process.exit(1);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNkbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInVwbG9hZC1jZG4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Z0dBR2dHOztBQUVoRyxtQ0FBbUM7QUFDbkMsK0JBQStCO0FBQy9CLGdDQUFnQztBQUNoQyxzQ0FBc0M7QUFDdEMsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUM3Qiw4Q0FBeUQ7QUFDekQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFFNUMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksaUNBQXNCLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFFLENBQUMsQ0FBQztBQUVySixJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ1gsd0JBQXdCLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDaEMsa0JBQWtCLEVBQUUsQ0FBQyxlQUFlLENBQUM7Q0FDckMsQ0FBQyxDQUFDO0FBRUgsaUNBQWlDO0FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDbkMsaUJBQWlCO0lBQ2pCLGtCQUFrQjtJQUNsQix1QkFBdUI7SUFDdkIsd0JBQXdCO0lBQ3hCLGtCQUFrQjtJQUNsQixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QixzQkFBc0I7SUFDdEIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QiwrQkFBK0I7SUFDL0IsdUJBQXVCO0lBQ3ZCLGlCQUFpQjtJQUNqQixxQkFBcUI7SUFDckIsNkJBQTZCO0lBQzdCLDZCQUE2QjtJQUM3Qix3QkFBd0I7SUFDeEIseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix1QkFBdUI7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
\ No newline at end of file
diff --git a/build/azure-pipelines/upload-cdn.ts b/build/azure-pipelines/upload-cdn.ts
index d28f20ac52..e6de5e15dd 100644
--- a/build/azure-pipelines/upload-cdn.ts
+++ b/build/azure-pipelines/upload-cdn.ts
@@ -8,53 +8,119 @@ import * as Vinyl from 'vinyl';
import * as vfs from 'vinyl-fs';
import * as filter from 'gulp-filter';
import * as gzip from 'gulp-gzip';
+import * as mime from 'mime';
import { ClientSecretCredential } from '@azure/identity';
const azure = require('gulp-azure-storage');
-const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
+const commit = process.env['BUILD_SOURCEVERSION'];
const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!);
+mime.define({
+ 'application/typescript': ['ts'],
+ 'application/json': ['code-snippets'],
+});
+
+// From default AFD configuration
+const MimeTypesToCompress = new Set([
+ 'application/eot',
+ 'application/font',
+ 'application/font-sfnt',
+ 'application/javascript',
+ 'application/json',
+ 'application/opentype',
+ 'application/otf',
+ 'application/pkcs7-mime',
+ 'application/truetype',
+ 'application/ttf',
+ 'application/typescript',
+ 'application/vnd.ms-fontobject',
+ 'application/xhtml+xml',
+ 'application/xml',
+ 'application/xml+rss',
+ 'application/x-font-opentype',
+ 'application/x-font-truetype',
+ 'application/x-font-ttf',
+ 'application/x-httpd-cgi',
+ 'application/x-javascript',
+ 'application/x-mpegurl',
+ 'application/x-opentype',
+ 'application/x-otf',
+ 'application/x-perl',
+ 'application/x-ttf',
+ 'font/eot',
+ 'font/ttf',
+ 'font/otf',
+ 'font/opentype',
+ 'image/svg+xml',
+ 'text/css',
+ 'text/csv',
+ 'text/html',
+ 'text/javascript',
+ 'text/js',
+ 'text/markdown',
+ 'text/plain',
+ 'text/richtext',
+ 'text/tab-separated-values',
+ 'text/xml',
+ 'text/x-script',
+ 'text/x-component',
+ 'text/x-java-source'
+]);
+
+function wait(stream: es.ThroughStream): Promise {
+ return new Promise((c, e) => {
+ stream.on('end', () => c());
+ stream.on('error', (err: any) => e(err));
+ });
+}
+
async function main(): Promise {
const files: string[] = [];
- const options = {
+ const options = (compressed: boolean) => ({
account: process.env.AZURE_STORAGE_ACCOUNT,
credential,
container: process.env.VSCODE_QUALITY,
prefix: commit + '/',
contentSettings: {
- contentEncoding: 'gzip',
+ contentEncoding: compressed ? 'gzip' : undefined,
cacheControl: 'max-age=31536000, public'
}
- };
-
- await new Promise((c, e) => {
- vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
- .pipe(filter(f => !f.isDirectory()))
- .pipe(gzip({ append: false }))
- .pipe(es.through(function (data: Vinyl) {
- console.log('Uploading:', data.relative); // debug
- files.push(data.relative);
- this.emit('data', data);
- }))
- .pipe(azure.upload(options))
- .on('end', () => c())
- .on('error', (err: any) => e(err));
});
- await new Promise((c, e) => {
- const listing = new Vinyl({
- path: 'files.txt',
- contents: Buffer.from(files.join('\n')),
- stat: { mode: 0o666 } as any
- });
+ const all = vfs.src('**', { cwd: '../vscode-web', base: '../vscode-web', dot: true })
+ .pipe(filter(f => !f.isDirectory()));
- console.log(`Uploading: files.txt (${files.length} files)`); // debug
- es.readArray([listing])
- .pipe(gzip({ append: false }))
- .pipe(azure.upload(options))
- .on('end', () => c())
- .on('error', (err: any) => e(err));
+ const compressed = all
+ .pipe(filter(f => MimeTypesToCompress.has(mime.lookup(f.path))))
+ .pipe(gzip({ append: false }))
+ .pipe(azure.upload(options(true)));
+
+ const uncompressed = all
+ .pipe(filter(f => !MimeTypesToCompress.has(mime.lookup(f.path))))
+ .pipe(azure.upload(options(false)));
+
+ const out = es.merge(compressed, uncompressed)
+ .pipe(es.through(function (f) {
+ console.log('Uploaded:', f.relative);
+ files.push(f.relative);
+ this.emit('data', f);
+ }));
+
+ console.log(`Uploading files to CDN...`); // debug
+ await wait(out);
+
+ const listing = new Vinyl({
+ path: 'files.txt',
+ contents: Buffer.from(files.join('\n')),
+ stat: { mode: 0o666 } as any
});
+
+ const filesOut = es.readArray([listing])
+ .pipe(gzip({ append: false }))
+ .pipe(azure.upload(options(true)));
+
+ console.log(`Uploading: files.txt (${files.length} files)`); // debug
+ await wait(filesOut);
}
main().catch(err => {
diff --git a/build/azure-pipelines/upload-configuration.js b/build/azure-pipelines/upload-configuration.js
index a8739f80cd..11e706c994 100644
--- a/build/azure-pipelines/upload-configuration.js
+++ b/build/azure-pipelines/upload-configuration.js
@@ -13,7 +13,7 @@ const util = require("../lib/util");
const identity_1 = require("@azure/identity");
const azure = require('gulp-azure-storage');
const packageJson = require("../../package.json");
-const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
+const commit = process.env['BUILD_SOURCEVERSION'];
function generateVSCodeConfigurationTask() {
return new Promise((resolve, reject) => {
const buildDir = process.env['AGENT_BUILDDIRECTORY'];
@@ -109,3 +109,4 @@ if (require.main === module) {
process.exit(1);
});
}
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1cGxvYWQtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7OztBQUVoRyw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLG9DQUFvQztBQUNwQyxnQ0FBZ0M7QUFDaEMsb0NBQW9DO0FBQ3BDLDhDQUF5RDtBQUN6RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUM1QyxrREFBa0Q7QUFFbEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0FBRWxELFNBQVMsK0JBQStCO0lBQ3ZDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdEMsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7UUFFRCxJQUFJLENBQUMseUJBQXlCLEVBQUUsRUFBRTtZQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQztZQUM3RixPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUMxQjtRQUVELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFFBQVEsRUFBRTtZQUN4RixPQUFPLENBQUMsR0FBRyxDQUFDLGtEQUFrRCxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7WUFDNUYsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFD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
\ No newline at end of file
diff --git a/build/azure-pipelines/upload-configuration.ts b/build/azure-pipelines/upload-configuration.ts
index dbcc1b99b7..ffee530c44 100644
--- a/build/azure-pipelines/upload-configuration.ts
+++ b/build/azure-pipelines/upload-configuration.ts
@@ -12,7 +12,7 @@ import { ClientSecretCredential } from '@azure/identity';
const azure = require('gulp-azure-storage');
import * as packageJson from '../../package.json';
-const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
+const commit = process.env['BUILD_SOURCEVERSION'];
function generateVSCodeConfigurationTask(): Promise {
return new Promise((resolve, reject) => {
diff --git a/build/azure-pipelines/upload-nlsmetadata.js b/build/azure-pipelines/upload-nlsmetadata.js
index df30c0d159..4a73a2f5b3 100644
--- a/build/azure-pipelines/upload-nlsmetadata.js
+++ b/build/azure-pipelines/upload-nlsmetadata.js
@@ -12,7 +12,7 @@ const identity_1 = require("@azure/identity");
const path = require("path");
const fs_1 = require("fs");
const azure = require('gulp-azure-storage');
-const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
+const 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']);
function main() {
return new Promise((c, e) => {
@@ -99,3 +99,4 @@ main().catch(err => {
console.error(err);
process.exit(1);
});
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLW5sc21ldGFkYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidXBsb2FkLW5sc21ldGFkYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7O2dHQUdnRzs7QUFFaEcsbUNBQW1DO0FBRW5DLGdDQUFnQztBQUNoQyx5Q0FBeUM7QUFDekMsa0NBQWtDO0FBQ2xDLDhDQUF5RDtBQUN6RCw2QkFBOEI7QUFDOUIsMkJBQWtDO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRTVDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLGlDQUFzQixDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFFLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsQ0FBRSxDQUFDLENBQUM7QUFRckosU0FBUyxJQUFJO0lBQ1osT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUUzQixFQUFFLENBQUMsS0FBSyxDQUNQLEdBQUcsQ0FBQyxHQUFHLENBQUMsc0NBQXNDLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQyxFQUMvRSxHQUFHLENBQUMsR0FBRyxDQUFDLHdDQUF3QyxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLENBQUMsRUFDaEYsR0FBRyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsRUFBRSxFQUFFLElBQUksRUFBRSxtQkFBbUIsRUFBRSxDQUFDLEVBQ3ZGLEdBQUcsQ0FBQyxHQUFHLENBQUMsdUNBQXVDLEVBQUUsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2FBQy9FLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDWCxRQUFRLEVB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
\ No newline at end of file
diff --git a/build/azure-pipelines/upload-nlsmetadata.ts b/build/azure-pipelines/upload-nlsmetadata.ts
index e2a95c782b..46245925df 100644
--- a/build/azure-pipelines/upload-nlsmetadata.ts
+++ b/build/azure-pipelines/upload-nlsmetadata.ts
@@ -13,7 +13,7 @@ import path = require('path');
import { readFileSync } from 'fs';
const azure = require('gulp-azure-storage');
-const commit = process.env['VSCODE_DISTRO_COMMIT'] || process.env['BUILD_SOURCEVERSION'];
+const commit = process.env['BUILD_SOURCEVERSION'];
const credential = new ClientSecretCredential(process.env['AZURE_TENANT_ID']!, process.env['AZURE_CLIENT_ID']!, process.env['AZURE_CLIENT_SECRET']!);
interface NlsMetadata {
diff --git a/build/azure-pipelines/upload-sourcemaps.js b/build/azure-pipelines/upload-sourcemaps.js
index 7392cd2efe..9983c44c77 100644
--- a/build/azure-pipelines/upload-sourcemaps.js
+++ b/build/azure-pipelines/upload-sourcemaps.js
@@ -53,3 +53,4 @@ function main() {
}));
}
main();
+//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLXNvdXJjZW1hcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ1cGxvYWQtc291cmNlbWFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztnR0FHZ0c7O0FBRWhHLDZCQUE2QjtBQUM3QixtQ0FBbUM7QUFFbkMsZ0NBQWdDO0FBQ2hDLG9DQUFvQztBQUNwQyxhQUFhO0FBQ2IsNENBQTRDO0FBQzVDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRTVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFckMsMkRBQTJEO0FBQzNELE1BQU0sQ0FBQyxFQUFFLEFBQUQsRUFBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUV0QyxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsSUFBSSxHQUFHLEdBQUcsSUFBSSxXQUFXO0lBQ25ELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUM1QixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQVEsRUFBRSxFQUFFO1FBQzdCLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4QyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsU0FBUyxJQUFJO0lBQ1osTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBRW5CLCtCQUErQjtJQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ1YsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQywwQkFBMEI7UUFDNUQsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLHNCQUFzQixHQUFzRCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkgsTUFBTSx5QkFBeUIsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0gsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQzthQUNuRSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekUsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUUxQixNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsK0JBQStCLEVBQUUscUJBQXFCLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzVHLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDNUI7SUFFRCw0QkFBNEI7U0FDdkI7UUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUM5QjtJQUVELE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLE9BQU8sQ0FBQztTQUN6QixJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQVc7UUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRO1FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO1NBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFDbEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCO1FBQzFDLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QjtRQUN6QyxTQUFTLEVBQUUsWUFBWTtRQUN2QixNQUFNLEVBQUUsTUFBTSxHQUFHLEdBQUc7S0FDcEIsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsSUFBSSxFQUFFLENBQUMifQ==
\ No newline at end of file
diff --git a/build/azure-pipelines/web/product-build-web.yml b/build/azure-pipelines/web/product-build-web.yml
index 376f14c6bc..556f1f23ef 100644
--- a/build/azure-pipelines/web/product-build-web.yml
+++ b/build/azure-pipelines/web/product-build-web.yml
@@ -3,11 +3,13 @@ steps:
inputs:
versionSpec: "16.x"
+ - template: ../distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password"
- task: DownloadPipelineArtifact@2
@@ -16,65 +18,44 @@ steps:
path: $(Build.ArtifactStagingDirectory)
displayName: Download compilation output
- - script: |
- set -e
- tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
+ - script: tar -xzf $(Build.ArtifactStagingDirectory)/compilation.tar.gz
displayName: Extract compilation output
- - script: |
- set -e
- cat << EOF > ~/.netrc
- machine github.com
- login vscode
- password $(github-distro-mixin-password)
- EOF
+ - script: node build/setup-npm-registry.js $NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
- 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 "web" $ENABLE_TERRAPIN > .build/yarnlockhash
- displayName: Prepare yarn cache flags
+ - script: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js web > .build/yarnlockhash
+ displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: "nodeModules | $(Agent.OS) | .build/yarnlockhash"
+ key: '"node_modules" | .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
+ - script: 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
+ npm config set registry "$NPM_REGISTRY" --location=project
+ npm config set always-auth=true --location=project
+ yarn config set registry "$NPM_REGISTRY"
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
- script: |
set -e
- for i in {1..3}; do # try 3 times, for Terrapin
+ for i in {1..5}; do # try 5 times
yarn --frozen-lockfile --check-files && break
if [ $i -eq 3 ]; then
echo "Yarn failed too many times" >&2
@@ -89,6 +70,10 @@ steps:
displayName: Install dependencies
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ - script: node build/azure-pipelines/distro/mixin-npm
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ displayName: Mixin distro node modules
+
- script: |
set -e
node build/azure-pipelines/common/listNodeModules.js .build/node_modules_list.txt
@@ -97,15 +82,14 @@ steps:
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
displayName: Create node_modules archive
- - script: |
- set -e
- node build/azure-pipelines/mixin
- displayName: Mix in quality
+ - script: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
- - script: |
- set -e
- VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)" \
- yarn gulp vscode-web-min-ci
+ - template: ../common/install-builtin-extensions.yml
+
+ - script: yarn gulp vscode-web-min-ci
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Build
- task: AzureCLI@2
@@ -148,7 +132,6 @@ steps:
AZURE_CLIENT_SECRET="$(AZURE_CLIENT_SECRET)" \
node build/azure-pipelines/upload-nlsmetadata
displayName: Upload NLS Metadata
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- script: |
set -e
@@ -163,9 +146,7 @@ steps:
cd $ROOT && tar --owner=0 --group=0 -czf $WEB_TARBALL_PATH $WEB_BUILD_NAME
displayName: Prepare for publish
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
- publish: $(Agent.BuildDirectory)/vscode-web.tar.gz
artifact: vscode_web_linux_standalone_archive-unsigned
displayName: Publish web archive
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
diff --git a/build/azure-pipelines/win32/cli-build-win32.yml b/build/azure-pipelines/win32/cli-build-win32.yml
new file mode 100644
index 0000000000..2e600bc18c
--- /dev/null
+++ b/build/azure-pipelines/win32/cli-build-win32.yml
@@ -0,0 +1,83 @@
+parameters:
+ - name: VSCODE_BUILD_WIN32
+ type: boolean
+ default: false
+ - name: VSCODE_BUILD_WIN32_32BIT
+ type: boolean
+ default: false
+ - name: VSCODE_BUILD_WIN32_ARM64
+ type: boolean
+ default: false
+ - name: VSCODE_QUALITY
+ type: string
+
+steps:
+ - task: NodeTool@0
+ inputs:
+ versionSpec: "16.x"
+
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - template: ../distro/download-distro.yml
+ - pwsh: node build/azure-pipelines/distro/apply-cli-patches
+ displayName: Apply distro patches
+
+ - task: Npm@1
+ displayName: Download openssl prebuilt
+ inputs:
+ command: custom
+ customCommand: pack @vscode-internal/openssl-prebuilt@0.0.8
+ customRegistry: useFeed
+ customFeed: "Monaco/openssl-prebuilt"
+ workingDir: $(Build.ArtifactStagingDirectory)
+
+ - powershell: |
+ mkdir $(Build.ArtifactStagingDirectory)/openssl
+ tar -xvzf $(Build.ArtifactStagingDirectory)/vscode-internal-openssl-prebuilt-0.0.8.tgz --strip-components=1 --directory=$(Build.ArtifactStagingDirectory)/openssl
+ displayName: Extract openssl prebuilt
+
+ - powershell: node build/azure-pipelines/cli/prepare.js
+ displayName: Prepare CLI build
+ env:
+ VSCODE_CLI_PREPARE_ROOT: $(Build.SourcesDirectory)/.build/distro
+ VSCODE_QUALITY: ${{ parameters.VSCODE_QUALITY }}
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+
+ - template: ../cli/install-rust-win32.yml
+ parameters:
+ targets:
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:
+ - x86_64-pc-windows-msvc
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}:
+ - aarch64-pc-windows-msvc
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32_32BIT, true) }}:
+ - i686-pc-windows-msvc
+
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: x86_64-pc-windows-msvc
+ VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_x64_cli
+ VSCODE_CLI_ENV:
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-windows-static-md/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x64-windows-static-md/include
+ RUSTFLAGS: "-C target-feature=+crt-static"
+
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: aarch64-pc-windows-msvc
+ VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_arm64_cli
+ VSCODE_CLI_ENV:
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-windows-static-md/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/arm64-windows-static-md/include
+ RUSTFLAGS: "-C target-feature=+crt-static"
+
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32_32BIT, true) }}:
+ - template: ../cli/cli-compile-and-publish.yml
+ parameters:
+ VSCODE_CLI_TARGET: i686-pc-windows-msvc
+ VSCODE_CLI_ARTIFACT: unsigned_vscode_cli_win32_ia32_cli
+ VSCODE_CLI_ENV:
+ OPENSSL_LIB_DIR: $(Build.ArtifactStagingDirectory)/openssl/x86-windows-static-md/lib
+ OPENSSL_INCLUDE_DIR: $(Build.ArtifactStagingDirectory)/openssl/x86-windows-static-md/include
+ RUSTFLAGS: "-C target-feature=+crt-static"
diff --git a/build/azure-pipelines/win32/product-build-win32-cli-sign.yml b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml
new file mode 100644
index 0000000000..31bffda478
--- /dev/null
+++ b/build/azure-pipelines/win32/product-build-win32-cli-sign.yml
@@ -0,0 +1,52 @@
+parameters:
+ - name: VSCODE_BUILD_WIN32
+ type: boolean
+ - name: VSCODE_BUILD_WIN32_ARM64
+ type: boolean
+ - name: VSCODE_BUILD_WIN32_32BIT
+ type: boolean
+
+steps:
+ - task: NodeTool@0
+ displayName: "Use Node.js"
+ inputs:
+ versionSpec: "16.x"
+
+ - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY build
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
+
+ - powershell: |
+ . azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
+ exec { npm config set always-auth=true --location=project }
+ exec { yarn config set registry "$env:NPM_REGISTRY" }
+ workingDirectory: build
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: build/.npmrc
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ - powershell: |
+ . azure-pipelines/win32/exec.ps1
+ . azure-pipelines/win32/retry.ps1
+ $ErrorActionPreference = "Stop"
+ $env:CHILD_CONCURRENCY="1"
+ retry { exec { yarn --frozen-lockfile --check-files } }
+ workingDirectory: build
+ displayName: Install build dependencies
+
+ - template: ../cli/cli-win32-sign.yml
+ parameters:
+ VSCODE_CLI_ARTIFACTS:
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:
+ - unsigned_vscode_cli_win32_x64_cli
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32_ARM64, true) }}:
+ - unsigned_vscode_cli_win32_arm64_cli
+ - ${{ if eq(parameters.VSCODE_BUILD_WIN32_32BIT, true) }}:
+ - unsigned_vscode_cli_win32_ia32_cli
diff --git a/build/azure-pipelines/win32/product-build-win32-test.yml b/build/azure-pipelines/win32/product-build-win32-test.yml
index 59c91cd2b1..19d5e8feac 100644
--- a/build/azure-pipelines/win32/product-build-win32-test.yml
+++ b/build/azure-pipelines/win32/product-build-win32-test.yml
@@ -9,58 +9,36 @@ parameters:
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" }
+ - powershell: yarn npm-run-all -lp "electron $(VSCODE_ARCH)" "playwright-install"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
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" }
+ - powershell: .\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 }
+ - powershell: 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)
+ - powershell: node test/unit/browser/index.js --sequential --browser chromium --tfs "Browser Unit Tests"
+ displayName: Run unit tests (Browser, Chromium)
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" }
+ - powershell: .\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 }
+ - powershell: 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)
+ - powershell: yarn test-browser-no-install --sequential --build --browser chromium --tfs "Browser Unit Tests"
+ displayName: Run unit tests (Browser, Chromium)
timeoutInMinutes: 20
- ${{ if eq(parameters.VSCODE_RUN_INTEGRATION_TESTS, true) }}:
@@ -83,30 +61,20 @@ steps:
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" }
+ - powershell: .\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 }
+ - powershell: .\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 }
+ - powershell: .\scripts\test-remote-integration.bat
displayName: Run integration tests (Remote)
timeoutInMinutes: 20
@@ -142,57 +110,44 @@ steps:
timeoutInMinutes: 20
- ${{ if eq(parameters.VSCODE_RUN_SMOKE_TESTS, true) }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- exec {.\build\azure-pipelines\win32\listprocesses.bat }
+ - powershell: .\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 }
+ - powershell: yarn --cwd test/smoke compile
displayName: Compile smoke tests
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { yarn smoketest-no-compile --tracing }
+ - powershell: yarn gulp compile-extension-media
+ displayName: Build extensions for smoke tests
+
+ - powershell: 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" }
+ - powershell: yarn smoketest-no-compile --tracing --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
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 }
+ - powershell: yarn smoketest-no-compile --web --tracing --headless
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-reh-web-win32-$(VSCODE_ARCH)
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" }
+ - powershell: yarn gulp compile-extension:vscode-test-resolver
+ displayName: Compile test resolver extension
+ timeoutInMinutes: 20
+
+ - powershell: yarn smoketest-no-compile --tracing --remote --build "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)"
+ env:
+ VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)\vscode-reh-win32-$(VSCODE_ARCH)
displayName: Run smoke tests (Remote)
timeoutInMinutes: 20
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- exec {.\build\azure-pipelines\win32\listprocesses.bat }
+ - powershell: .\build\azure-pipelines\win32\listprocesses.bat
displayName: Diagnostics after smoke test run
continueOnError: true
condition: succeededOrFailed()
diff --git a/build/azure-pipelines/win32/product-build-win32.yml b/build/azure-pipelines/win32/product-build-win32.yml
index 41f0a8da8c..ab985554bb 100644
--- a/build/azure-pipelines/win32/product-build-win32.yml
+++ b/build/azure-pipelines/win32/product-build-win32.yml
@@ -1,8 +1,8 @@
parameters:
- - name: VSCODE_PUBLISH
- type: boolean
- name: VSCODE_QUALITY
type: string
+ - name: VSCODE_CIBUILD
+ type: boolean
- name: VSCODE_RUN_UNIT_TESTS
type: boolean
- name: VSCODE_RUN_INTEGRATION_TESTS
@@ -26,89 +26,84 @@ steps:
addToPath: true
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - template: ../distro/download-distro.yml
+
- task: AzureKeyVault@1
displayName: "Azure Key Vault: Get Secrets"
inputs:
azureSubscription: "vscode-builds-subscription"
- KeyVaultName: vscode
+ KeyVaultName: vscode-build-secrets
SecretsFilter: "github-distro-mixin-password,ESRP-PKI,esrp-aad-username,esrp-aad-password"
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- task: DownloadPipelineArtifact@2
inputs:
artifact: Compilation
path: $(Build.ArtifactStagingDirectory)
displayName: Download compilation output
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- task: ExtractFiles@1
displayName: Extract compilation output
inputs:
archiveFilePatterns: "$(Build.ArtifactStagingDirectory)/compilation.tar.gz"
cleanDestinationFolder: false
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- "machine github.com`nlogin vscode`npassword $(github-distro-mixin-password)" | Out-File "$env:USERPROFILE\_netrc" -Encoding ASCII
+ - powershell: node build/setup-npm-registry.js $env:NPM_REGISTRY
+ condition: and(succeeded(), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Registry
- exec { git config user.email "vscode@microsoft.com" }
- exec { git config user.name "VSCode" }
- displayName: Prepare tooling
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
-
- exec { git fetch https://github.com/$(VSCODE_MIXIN_REPO).git $(VSCODE_DISTRO_REF) }
- Write-Host "##vso[task.setvariable variable=VSCODE_DISTRO_COMMIT;]$(git rev-parse FETCH_HEAD)"
- exec { git checkout FETCH_HEAD }
- condition: and(succeeded(), ne(variables.VSCODE_DISTRO_REF, ' '))
- displayName: Checkout override commit
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { git pull --no-rebase https://github.com/$(VSCODE_MIXIN_REPO).git $(node -p "require('./package.json').distro") }
- displayName: Merge distro
-
- - powershell: |
- if (!(Test-Path ".build")) { New-Item -Path ".build" -ItemType Directory }
- "$(VSCODE_ARCH)" | Out-File -Encoding ascii -NoNewLine .build\arch
- "$env:ENABLE_TERRAPIN" | Out-File -Encoding ascii -NoNewLine .build\terrapin
- node build/azure-pipelines/common/computeNodeModulesCacheKey.js > .build/yarnlockhash
- displayName: Prepare yarn cache flags
+ - pwsh: |
+ mkdir .build -ea 0
+ node build/azure-pipelines/common/computeNodeModulesCacheKey.js win32 $(VSCODE_ARCH) > .build/yarnlockhash
+ displayName: Prepare node_modules cache key
- task: Cache@2
inputs:
- key: "nodeModules | $(Agent.OS) | .build/arch, .build/terrapin, .build/yarnlockhash"
+ key: '"node_modules" | .build/yarnlockhash'
path: .build/node_modules_cache
cacheHitVar: NODE_MODULES_RESTORED
displayName: Restore node_modules cache
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { 7z.exe x .build/node_modules_cache/cache.7z -aos }
+ - powershell: 7z.exe x .build/node_modules_cache/cache.7z -aoa
condition: and(succeeded(), eq(variables.NODE_MODULES_RESTORED, 'true'))
displayName: Extract node_modules cache
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { 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
+ exec { npm config set registry "$env:NPM_REGISTRY" --location=project }
+ exec { npm config set always-auth=true --location=project }
+ exec { yarn config set registry "$env:NPM_REGISTRY" }
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM & Yarn
+
+ - task: npmAuthenticate@0
+ inputs:
+ workingFile: .npmrc
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'), ne(variables['NPM_REGISTRY'], 'none'))
+ displayName: Setup NPM Authentication
+
+ - powershell: |
+ mkdir -Force .build/node-gyp
+ displayName: Create custom node-gyp directory
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+
+ - powershell: |
+ . ../../build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ # TODO: Should be replaced with upstream URL once https://github.com/nodejs/node-gyp/pull/2825
+ # gets merged.
+ exec { git clone https://github.com/rzhao271/node-gyp.git . } "Cloning rzhao271/node-gyp failed"
+ exec { git checkout 102b347da0c92c29f9c67df22e864e70249cf086 } "Checking out 102b347 failed"
+ exec { npm install } "Building rzhao271/node-gyp failed"
+ displayName: Install custom node-gyp
+ workingDirectory: .build/node-gyp
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
- powershell: |
. build/azure-pipelines/win32/exec.ps1
. build/azure-pipelines/win32/retry.ps1
$ErrorActionPreference = "Stop"
+ $env:npm_config_node_gyp="$(Join-Path $pwd.Path '.build/node-gyp/bin/node-gyp.js')"
$env:npm_config_arch="$(VSCODE_ARCH)"
$env:CHILD_CONCURRENCY="1"
retry { exec { yarn --frozen-lockfile --check-files } }
@@ -119,6 +114,11 @@ steps:
displayName: Install dependencies
condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - powershell: node build/azure-pipelines/distro/mixin-npm
+ condition: and(succeeded(), ne(variables.NODE_MODULES_RESTORED, 'true'))
+ displayName: Mixin distro node modules
+
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
@@ -129,61 +129,50 @@ steps:
displayName: Create node_modules archive
- ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { node build/azure-pipelines/mixin }
- displayName: Mix in quality
+ - powershell: node build/azure-pipelines/distro/mixin-quality
+ displayName: Mixin distro quality
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { node build\lib\policies }
+ - template: ../common/install-builtin-extensions.yml
+
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - powershell: node build\lib\policies
displayName: Generate Group Policy definitions
+ retryCountOnTaskFailure: 3
- ${{ if eq(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
- exec { yarn gulp "transpile-client" "transpile-extensions" }
+ - powershell: yarn gulp "transpile-client-swc" "transpile-extensions"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Transpile
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - ${{ else }}:
+ - ${{ if eq(parameters.VSCODE_QUALITY, 'insider') }}:
+ - powershell: node build/win32/explorer-appx-fetcher .build/win32/appx
+ displayName: Download Explorer Sparse Package
+
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-min-ci" }
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
displayName: Build
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
- exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater" }
- displayName: Prepare Package
+ - powershell: yarn gulp "vscode-win32-$(VSCODE_ARCH)-inno-updater"
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Prepare Setup Package
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- powershell: |
. build/azure-pipelines/win32/exec.ps1
$ErrorActionPreference = "Stop"
- exec { node build/azure-pipelines/mixin --server }
- displayName: Mix in quality
- condition: and(succeeded(), ne(variables['VSCODE_ARCH'], 'arm64'))
-
- - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- $env:VSCODE_MIXIN_PASSWORD="$(github-distro-mixin-password)"
exec { yarn gulp "vscode-reh-win32-$(VSCODE_ARCH)-min-ci" }
exec { yarn gulp "vscode-reh-web-win32-$(VSCODE_ARCH)-min-ci" }
echo "##vso[task.setvariable variable=CodeSigningFolderPath]$(CodeSigningFolderPath),$(agent.builddirectory)/vscode-reh-win32-$(VSCODE_ARCH)"
- displayName: Build Server
+ env:
+ GITHUB_TOKEN: "$(github-distro-mixin-password)"
+ displayName: Build Servers
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)) }}:
@@ -194,110 +183,108 @@ steps:
VSCODE_RUN_INTEGRATION_TESTS: ${{ parameters.VSCODE_RUN_INTEGRATION_TESTS }}
VSCODE_RUN_SMOKE_TESTS: ${{ parameters.VSCODE_RUN_SMOKE_TESTS }}
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - task: UseDotNet@2
- inputs:
- version: 3.x
- condition: and(succeeded(), ne(variables['VSCODE_PUBLISH'], 'false'))
+ - ${{ if ne(parameters.VSCODE_CIBUILD, true) }}:
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - task: DownloadPipelineArtifact@2
+ inputs:
+ artifact: unsigned_vscode_cli_win32_$(VSCODE_ARCH)_cli
+ patterns: "**"
+ path: $(Build.ArtifactStagingDirectory)/cli
+ displayName: Download VS Code CLI
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - task: EsrpClientTool@1
- displayName: Download ESRPClient
+ - powershell: |
+ . build/azure-pipelines/win32/exec.ps1
+ $ErrorActionPreference = "Stop"
+ $ArtifactName = (gci -Path "$(Build.ArtifactStagingDirectory)/cli" | Select-Object -last 1).FullName
+ Expand-Archive -Path $ArtifactName -DestinationPath "$(Build.ArtifactStagingDirectory)/cli"
+ $AppProductJson = Get-Content -Raw -Path "$(agent.builddirectory)\VSCode-win32-$(VSCODE_ARCH)\resources\app\product.json" | ConvertFrom-Json
+ $CliAppName = $AppProductJson.tunnelApplicationName
+ $AppName = $AppProductJson.applicationName
+ Move-Item -Path "$(Build.ArtifactStagingDirectory)/cli/$AppName.exe" -Destination "$(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/bin/$CliAppName.exe"
+ displayName: Move VS Code CLI
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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
+ - task: UseDotNet@2
+ inputs:
+ version: 6.x
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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
+ - task: EsrpClientTool@1
+ displayName: Download ESRPClient
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- exec { yarn gulp "vscode-win32-$(VSCODE_ARCH)-archive" }
- displayName: Package archive
+ - 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
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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
+ - powershell: node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.dll,*.exe,*.node'
+ displayName: Codesign
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - powershell: |
- . build/azure-pipelines/win32/exec.ps1
- $ErrorActionPreference = "Stop"
- .\build\azure-pipelines\win32\prepare-publish.ps1
- displayName: Publish
+ - ${{ if eq(parameters.VSCODE_QUALITY, 'insider') }}:
+ - powershell: node build\azure-pipelines\common\sign $env:EsrpCliDllPath windows-appx $(ESRP-PKI) $(esrp-aad-username) $(esrp-aad-password) $(CodeSigningFolderPath) '*.appx'
+ displayName: Codesign context menu appx package
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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
+ - ${{ if ne(parameters.VSCODE_QUALITY, 'oss') }}:
+ - powershell: yarn gulp "vscode-win32-$(VSCODE_ARCH)-archive"
+ displayName: Package archive
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - publish: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/_manifest
- displayName: Publish SBOM (client)
- artifact: vscode_client_win32_$(VSCODE_ARCH)_sbom
+ - 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
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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_ARCH'], 'arm64'))
+ - powershell: .\build\azure-pipelines\win32\prepare-publish.ps1
+ displayName: Publish
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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_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
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\$(ARCHIVE_NAME)
- artifact: vscode_client_win32_$(VSCODE_ARCH)_archive
- displayName: Publish archive
+ - publish: $(agent.builddirectory)/VSCode-win32-$(VSCODE_ARCH)/_manifest
+ displayName: Publish SBOM (client)
+ artifact: vscode_client_win32_$(VSCODE_ARCH)_sbom
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\$(SYSTEM_SETUP_NAME)
- artifact: vscode_client_win32_$(VSCODE_ARCH)_setup
- displayName: Publish system setup
+ - 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_ARCH'], 'arm64'))
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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: $(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_ARCH'], 'arm64'))
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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_ARCH'], 'arm64'))
+ - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\archive\$(ARCHIVE_NAME)
+ artifact: vscode_client_win32_$(VSCODE_ARCH)_archive
+ displayName: Publish archive
- - ${{ if eq(parameters.VSCODE_PUBLISH, true) }}:
- - 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_ARCH'], 'arm64'))
+ - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\system-setup\$(SYSTEM_SETUP_NAME)
+ artifact: vscode_client_win32_$(VSCODE_ARCH)_setup
+ displayName: Publish system setup
+
+ - publish: $(System.DefaultWorkingDirectory)\.build\win32-$(VSCODE_ARCH)\user-setup\$(USER_SETUP_NAME)
+ artifact: vscode_client_win32_$(VSCODE_ARCH)_user-setup
+ displayName: Publish user setup
+
+ - 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_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_ARCH'], 'arm64'))
diff --git a/build/azure-pipelines/win32/retry.ps1 b/build/azure-pipelines/win32/retry.ps1
index 002a5e274b..0cc67f58c0 100644
--- a/build/azure-pipelines/win32/retry.ps1
+++ b/build/azure-pipelines/win32/retry.ps1
@@ -6,7 +6,7 @@ function Retry
)
$retry = 0
- while ($retry++ -lt 3) {
+ while ($retry++ -lt 5) {
try {
& $cmd
return
diff --git a/build/builtin/index.html b/build/builtin/index.html
index 13c84e0375..dc2a7ca6d0 100644
--- a/build/builtin/index.html
+++ b/build/builtin/index.html
@@ -5,7 +5,6 @@
-
Manage Built-in Extensions
@@ -43,4 +42,4 @@
-