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: vscode-large-runners # 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@v6 - name: Setup Node.js uses: actions/setup-node@v6 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.ts linux x64 $(node -p process.arch) > .build/packagelockhash - name: Restore node_modules cache id: cache-node-modules uses: actions/cache/restore@v5 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.ts .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.ts > .build/builtindepshash - name: Restore built-in extensions cache id: cache-builtin-extensions uses: actions/cache/restore@v5 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.ts env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - 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-all2 -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 }}