Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
260 changes: 260 additions & 0 deletions .github/workflows/copilot-setup-steps.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,260 @@
name: "Copilot Setup Steps"

# Automatically run the setup steps when they are changed to allow for easy validation, and
# allow manual testing through the repository's "Actions" tab
on:
workflow_dispatch:
push:
paths:
- .github/workflows/copilot-setup-steps.yml
pull_request:
paths:
- .github/workflows/copilot-setup-steps.yml

jobs:
# The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
copilot-setup-steps:
runs-on: ubuntu-latest

# Set the permissions to the lowest permissions possible needed for your steps.
# Copilot will be given its own token for its operations.
permissions:
# If you want to clone the repository as part of your setup steps, for example to install dependencies, you'll need the `contents: read` permission. If you don't clone the repository in your setup steps, Copilot will do this for you automatically after the steps complete.
contents: read

# You can define any steps you want, and they will run before the agent starts.
# If you do not check out your code, Copilot will do this for you.
steps:
- name: Checkout microsoft/vscode
uses: actions/checkout@v5

- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version-file: .nvmrc

- name: Setup system services
run: |
set -e
# Start X server
./build/azure-pipelines/linux/apt-retry.sh sudo apt-get update
./build/azure-pipelines/linux/apt-retry.sh sudo apt-get install -y pkg-config \
xvfb \
libgtk-3-0 \
libxkbfile-dev \
libkrb5-dev \
libgbm1 \
rpm
sudo cp build/azure-pipelines/linux/xvfb.init /etc/init.d/xvfb
sudo chmod +x /etc/init.d/xvfb
sudo update-rc.d xvfb defaults
sudo service xvfb start

- name: Prepare node_modules cache key
run: mkdir -p .build && node build/azure-pipelines/common/computeNodeModulesCacheKey.js linux x64 $(node -p process.arch) > .build/packagelockhash

- name: Restore node_modules cache
id: cache-node-modules
uses: actions/cache/restore@v4
with:
path: .build/node_modules_cache
key: "node_modules-linux-${{ hashFiles('.build/packagelockhash') }}"

- name: Extract node_modules cache
if: steps.cache-node-modules.outputs.cache-hit == 'true'
run: tar -xzf .build/node_modules_cache/cache.tgz

- name: Install build dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
working-directory: build
run: |
set -e

for i in {1..5}; do # try 5 times
npm ci && break
if [ $i -eq 5 ]; then
echo "Npm install failed too many times" >&2
exit 1
fi
echo "Npm install failed $i, trying again..."
done
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: |
set -e

source ./build/azure-pipelines/linux/setup-env.sh

for i in {1..5}; do # try 5 times
npm ci && break
if [ $i -eq 5 ]; then
echo "Npm install failed too many times" >&2
exit 1
fi
echo "Npm install failed $i, trying again..."
done
env:
npm_config_arch: x64
VSCODE_ARCH: x64
ELECTRON_SKIP_BINARY_DOWNLOAD: 1
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Create node_modules archive
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: |
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

- name: Create .build folder
run: mkdir -p .build

- name: Prepare built-in extensions cache key
run: node build/azure-pipelines/common/computeBuiltInDepsCacheKey.js > .build/builtindepshash

- name: Restore built-in extensions cache
id: cache-builtin-extensions
uses: actions/cache/restore@v4
with:
enableCrossOsArchive: true
path: .build/builtInExtensions
key: "builtin-extensions-${{ hashFiles('.build/builtindepshash') }}"

- name: Download built-in extensions
if: steps.cache-builtin-extensions.outputs.cache-hit != 'true'
run: node build/lib/builtInExtensions.js
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# - name: Transpile client and extensions
# run: npm run gulp transpile-client-esbuild transpile-extensions

- name: Download Electron and Playwright
run: |
set -e

for i in {1..3}; do # try 3 times (matching retryCountOnTaskFailure: 3)
if npm exec -- npm-run-all -lp "electron x64" "playwright-install"; then
echo "Download successful on attempt $i"
break
fi

if [ $i -eq 3 ]; then
echo "Download failed after 3 attempts" >&2
exit 1
fi

echo "Download failed on attempt $i, retrying..."
sleep 5 # optional: add a small delay between retries
done
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# - name: 🧪 Run unit tests (Electron)
# if: ${{ inputs.electron_tests }}
# timeout-minutes: 15
# run: ./scripts/test.sh --tfs "Unit Tests"
# env:
# DISPLAY: ":10"

# - name: 🧪 Run unit tests (node.js)
# if: ${{ inputs.electron_tests }}
# timeout-minutes: 15
# run: npm run test-node

# - name: 🧪 Run unit tests (Browser, Chromium)
# if: ${{ inputs.browser_tests }}
# timeout-minutes: 30
# run: npm run test-browser-no-install -- --browser chromium --tfs "Browser Unit Tests"
# env:
# DEBUG: "*browser*"

# - name: Build integration tests
# run: |
# set -e
# npm run gulp \
# compile-extension:configuration-editing \
# compile-extension:css-language-features-server \
# compile-extension:emmet \
# compile-extension:git \
# compile-extension:github-authentication \
# compile-extension:html-language-features-server \
# compile-extension:ipynb \
# compile-extension:notebook-renderers \
# compile-extension:json-language-features-server \
# compile-extension:markdown-language-features \
# compile-extension-media \
# compile-extension:microsoft-authentication \
# compile-extension:typescript-language-features \
# compile-extension:vscode-api-tests \
# compile-extension:vscode-colorize-tests \
# compile-extension:vscode-colorize-perf-tests \
# compile-extension:vscode-test-resolver

# - name: 🧪 Run integration tests (Electron)
# if: ${{ inputs.electron_tests }}
# timeout-minutes: 20
# run: ./scripts/test-integration.sh --tfs "Integration Tests"
# env:
# DISPLAY: ":10"

# - name: 🧪 Run integration tests (Browser, Chromium)
# if: ${{ inputs.browser_tests }}
# timeout-minutes: 20
# run: ./scripts/test-web-integration.sh --browser chromium

# - name: 🧪 Run integration tests (Remote)
# if: ${{ inputs.remote_tests }}
# timeout-minutes: 20
# run: ./scripts/test-remote-integration.sh
# env:
# DISPLAY: ":10"

# - name: Compile smoke tests
# working-directory: test/smoke
# run: npm run compile

# - name: Compile extensions for smoke tests
# run: npm run gulp compile-extension-media

# - name: Diagnostics before smoke test run (processes, max_user_watches, number of opened file handles)
# run: |
# set -e
# ps -ef
# cat /proc/sys/fs/inotify/max_user_watches
# lsof | wc -l
# continue-on-error: true
# if: always()

# - name: 🧪 Run smoke tests (Electron)
# if: ${{ inputs.electron_tests }}
# timeout-minutes: 20
# run: npm run smoketest-no-compile -- --tracing
# env:
# DISPLAY: ":10"

# - name: 🧪 Run smoke tests (Browser, Chromium)
# if: ${{ inputs.browser_tests }}
# timeout-minutes: 20
# run: npm run smoketest-no-compile -- --web --tracing --headless

# - name: 🧪 Run smoke tests (Remote)
# if: ${{ inputs.remote_tests }}
# timeout-minutes: 20
# run: npm run smoketest-no-compile -- --remote --tracing
# env:
# DISPLAY: ":10"

# - name: Diagnostics after smoke test run (processes, max_user_watches, number of opened file handles)
# run: |
# set -e
# ps -ef
# cat /proc/sys/fs/inotify/max_user_watches
# lsof | wc -l
# continue-on-error: true
# if: always()
4 changes: 0 additions & 4 deletions build/azure-pipelines/common/publish-artifact.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,6 @@ parameters:
- name: sbomPackageVersion
type: string
default: ""
- name: isProduction
type: boolean
default: true
- name: condition
type: string
default: succeeded()
Expand Down Expand Up @@ -80,7 +77,6 @@ steps:
targetPath: ${{ parameters.targetPath }}
artifactName: $(ARTIFACT_NAME)
sbomEnabled: ${{ parameters.sbomEnabled }}
isProduction: ${{ parameters.isProduction }}
${{ if ne(parameters.sbomBuildDropPath, '') }}:
sbomBuildDropPath: ${{ parameters.sbomBuildDropPath }}
${{ if ne(parameters.sbomPackageName, '') }}:
Expand Down
8 changes: 2 additions & 6 deletions build/azure-pipelines/darwin/cli-build-darwin.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,16 +71,12 @@ steps:
targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_darwin_x64_cli.zip
artifactName: unsigned_vscode_cli_darwin_x64_cli
displayName: Publish unsigned_vscode_cli_darwin_x64_cli artifact
sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli
sbomPackageName: "VS Code macOS x64 CLI (unsigned)"
sbomPackageVersion: $(Build.SourceVersion)
sbomEnabled: false

- ${{ if eq(parameters.VSCODE_BUILD_MACOS_ARM64, true) }}:
- template: ../common/publish-artifact.yml@self
parameters:
targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_darwin_arm64_cli.zip
artifactName: unsigned_vscode_cli_darwin_arm64_cli
displayName: Publish unsigned_vscode_cli_darwin_arm64_cli artifact
sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli
sbomPackageName: "VS Code macOS arm64 CLI (unsigned)"
sbomPackageVersion: $(Build.SourceVersion)
sbomEnabled: false
3 changes: 0 additions & 3 deletions build/azure-pipelines/darwin/product-build-darwin-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,6 @@ steps:
${{ else }}:
artifactName: crash-dump-macos-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
displayName: "Publish Crash Reports"
isProduction: false
sbomEnabled: false
continueOnError: true
condition: failed()
Expand All @@ -147,7 +146,6 @@ steps:
${{ else }}:
artifactName: node-modules-macos-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
displayName: "Publish Node Modules"
isProduction: false
sbomEnabled: false
continueOnError: true
condition: failed()
Expand All @@ -160,7 +158,6 @@ steps:
${{ else }}:
artifactName: logs-macos-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
displayName: "Publish Log Files"
isProduction: false
sbomEnabled: false
continueOnError: true
condition: succeededOrFailed()
Expand Down
3 changes: 0 additions & 3 deletions build/azure-pipelines/linux/product-build-linux-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,6 @@ steps:
${{ else }}:
artifactName: crash-dump-linux-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
displayName: "Publish Crash Reports"
isProduction: false
sbomEnabled: false
continueOnError: true
condition: failed()
Expand All @@ -162,7 +161,6 @@ steps:
${{ else }}:
artifactName: node-modules-linux-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
displayName: "Publish Node Modules"
isProduction: false
sbomEnabled: false
continueOnError: true
condition: failed()
Expand All @@ -175,7 +173,6 @@ steps:
${{ else }}:
artifactName: logs-linux-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
displayName: "Publish Log Files"
isProduction: false
sbomEnabled: false
continueOnError: true
condition: succeededOrFailed()
Expand Down
8 changes: 2 additions & 6 deletions build/azure-pipelines/win32/cli-build-win32.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,16 +74,12 @@ steps:
targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_win32_arm64_cli.zip
artifactName: unsigned_vscode_cli_win32_arm64_cli
displayName: Publish unsigned_vscode_cli_win32_arm64_cli artifact
sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli
sbomPackageName: "VS Code Windows arm64 CLI (unsigned)"
sbomPackageVersion: $(Build.SourceVersion)
sbomEnabled: false

- ${{ if eq(parameters.VSCODE_BUILD_WIN32, true) }}:
- template: ../common/publish-artifact.yml@self
parameters:
targetPath: $(Build.ArtifactStagingDirectory)/unsigned_vscode_cli_win32_x64_cli.zip
artifactName: unsigned_vscode_cli_win32_x64_cli
displayName: Publish unsigned_vscode_cli_win32_x64_cli artifact
sbomBuildDropPath: $(Build.ArtifactStagingDirectory)/cli
sbomPackageName: "VS Code Windows x64 CLI (unsigned)"
sbomPackageVersion: $(Build.SourceVersion)
sbomEnabled: false
3 changes: 0 additions & 3 deletions build/azure-pipelines/win32/product-build-win32-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@ steps:
artifactName: crash-dump-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
${{ else }}:
artifactName: crash-dump-windows-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
isProduction: false
sbomEnabled: false
displayName: "Publish Crash Reports"
continueOnError: true
Expand All @@ -164,7 +163,6 @@ steps:
artifactName: node-modules-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
${{ else }}:
artifactName: node-modules-windows-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
isProduction: false
sbomEnabled: false
displayName: "Publish Node Modules"
continueOnError: true
Expand All @@ -177,7 +175,6 @@ steps:
artifactName: logs-windows-$(VSCODE_ARCH)-$(System.JobAttempt)
${{ else }}:
artifactName: logs-windows-$(VSCODE_ARCH)-${{ parameters.VSCODE_TEST_ARTIFACT_NAME }}-$(System.JobAttempt)
isProduction: false
sbomEnabled: false
displayName: "Publish Log Files"
continueOnError: true
Expand Down
Loading
Loading