Skip to content

fix: skip cmd.exe wrapping for MCP servers when Windows host connects to WSL #5263

fix: skip cmd.exe wrapping for MCP servers when Windows host connects to WSL

fix: skip cmd.exe wrapping for MCP servers when Windows host connects to WSL #5263

Workflow file for this run

name: PR Checks
# PR Checks run on all PRs to the main branch and must pass before merging.
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
track-rerun:
runs-on: ubuntu-latest
if: github.run_attempt > 1
steps:
- uses: actions/checkout@v6
- name: Track workflow rerun
uses: ./.github/actions/track-rerun
prettier-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version-file: ".nvmrc"
- uses: actions/cache@v5
id: root-cache
with:
path: node_modules
key: ${{ runner.os }}-root-node-modules-${{ hashFiles('package-lock.json') }}
- name: Install root dependencies
if: steps.root-cache.outputs.cache-hit != 'true'
run: npm ci
- name: Check code formatting with Prettier
run: npx prettier --check "**/*.{js,jsx,ts,tsx,json,css,md}" --ignore-path .gitignore --ignore-path .prettierignore
core-checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0 # Needed for git diff to work
- name: Setup packages
uses: ./.github/actions/setup-packages
- name: Setup core component
uses: ./.github/actions/setup-component
with:
component: core
include-root: true
- name: Check if LLM-related files changed
id: llm-changes
uses: ./.github/actions/check-llm-changes
with:
is_fork: ${{ github.event.pull_request.head.repo.fork == true }}
is_dependabot: ${{ github.actor == 'dependabot[bot]' }}
- name: Type check and lint
run: |
cd core
npx tsc --noEmit
npm run lint
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- name: Run tests
run: |
cd core
npm test
npm run vitest
env:
IGNORE_API_KEY_TESTS: ${{ steps.llm-changes.outputs.ignore_api_tests }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
AZURE_FOUNDRY_CODESTRAL_API_KEY: ${{ secrets.AZURE_FOUNDRY_CODESTRAL_API_KEY }}
AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY: ${{ secrets.AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY }}
AZURE_OPENAI_GPT41_API_KEY: ${{ secrets.AZURE_OPENAI_GPT41_API_KEY }}
VOYAGE_API_KEY: ${{ secrets.VOYAGE_API_KEY }}
RELACE_API_KEY: ${{ secrets.RELACE_API_KEY }}
INCEPTION_API_KEY: ${{ secrets.INCEPTION_API_KEY }}
gui-checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup packages
uses: ./.github/actions/setup-packages
- name: Setup core component
uses: ./.github/actions/setup-component
with:
component: core
include-root: true
- name: Setup gui component
uses: ./.github/actions/setup-component
with:
component: gui
include-packages: false
env:
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
- name: Type check and lint
run: |
cd gui
npx tsc --noEmit
npm run lint
- name: Run tests
run: |
cd gui
npm test
binary-checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup packages
uses: ./.github/actions/setup-packages
- name: Setup core component
uses: ./.github/actions/setup-component
with:
component: core
include-root: true
- name: Setup binary component
uses: ./.github/actions/setup-component
with:
component: binary
include-packages: false
- name: Type check
run: |
cd binary
npx tsc --noEmit
vscode-checks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Setup packages
uses: ./.github/actions/setup-packages
- name: Setup core component
uses: ./.github/actions/setup-component
with:
component: core
include-root: true
- name: Setup vscode component
uses: ./.github/actions/setup-component
with:
component: vscode
include-packages: false
env:
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
- name: Type check and lint
run: |
cd extensions/vscode
npm run write-build-timestamp
npx tsc --noEmit
npm run lint
- name: Run vitest tests
run: |
cd extensions/vscode
npm run vitest
get-packages-matrix:
runs-on: ubuntu-latest
outputs:
packages: ${{ steps.get-packages.outputs.packages }}
steps:
- uses: actions/checkout@v6
- name: Get package list
id: get-packages
run: |
packages=$(find packages/ -maxdepth 1 -type d -not -path packages/ -exec basename {} \; | sort | jq -R -s -c 'split("\n")[:-1]')
echo "packages=$packages" >> $GITHUB_OUTPUT
echo "Found packages: $packages"
packages-checks:
needs: get-packages-matrix
runs-on: ubuntu-latest
strategy:
matrix:
package: ${{ fromJson(needs.get-packages-matrix.outputs.packages) }}
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0 # Needed for git diff to work
- name: Setup packages
uses: ./.github/actions/setup-packages
- name: Check if LLM-related files changed
id: llm-changes
uses: ./.github/actions/check-llm-changes
with:
is_fork: ${{ github.event.pull_request.head.repo.fork == true }}
is_dependabot: ${{ github.actor == 'dependabot[bot]' }}
- name: Test and check ${{ matrix.package }}
run: |
cd packages/${{ matrix.package }}
npm ci
npm test
env:
IGNORE_API_KEY_TESTS: ${{ steps.llm-changes.outputs.ignore_api_tests }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }}
MISTRAL_API_KEY: ${{ secrets.MISTRAL_API_KEY }}
AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }}
AZURE_FOUNDRY_CODESTRAL_API_KEY: ${{ secrets.AZURE_FOUNDRY_CODESTRAL_API_KEY }}
AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY: ${{ secrets.AZURE_FOUNDRY_MISTRAL_SMALL_API_KEY }}
AZURE_OPENAI_GPT41_API_KEY: ${{ secrets.AZURE_OPENAI_GPT41_API_KEY }}
VOYAGE_API_KEY: ${{ secrets.VOYAGE_API_KEY }}
RELACE_API_KEY: ${{ secrets.RELACE_API_KEY }}
INCEPTION_API_KEY: ${{ secrets.INCEPTION_API_KEY }}
vscode-get-test-file-matrix:
runs-on: ubuntu-latest
outputs:
test_file_matrix: ${{ steps.vscode-get-test-file-matrix.outputs.test_file_matrix }}
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version-file: ".nvmrc"
- name: Cache npm
uses: actions/cache@v5
with:
path: ~/.npm
key: ${{ runner.os }}-npm-cache-matrix-${{ hashFiles('core/package-lock.json', 'extensions/vscode/package-lock.json') }}
- name: Cache packages node_modules
uses: actions/cache@v5
with:
path: |
packages/*/node_modules
key: ${{ runner.os }}-packages-node-modules-${{ hashFiles('packages/*/package-lock.json') }}
- name: Cache core node modules
uses: actions/cache@v5
with:
path: core/node_modules
key: ${{ runner.os }}-core-node-modules-${{ hashFiles('core/package-lock.json') }}
- name: Cache vscode extension node modules
uses: actions/cache@v5
id: vscode-cache
with:
path: extensions/vscode/node_modules
key: ${{ runner.os }}-vscode-node-modules-${{ hashFiles('extensions/vscode/package-lock.json') }}
- name: Build packages and get test files
id: vscode-get-test-file-matrix
run: |
node ./scripts/build-packages.js
cd extensions/vscode
npm ci
npm run e2e:compile
if [[ "${{ github.event.pull_request.head.repo.fork }}" == "true" || "${{ github.actor }}" == "dependabot[bot]" ]]; then
# Exclude SSH tests for forks
FILES=$(ls -1 e2e/_output/tests/*.test.js | grep -v "SSH" | jq -R . | jq -s .)
else
# Include all tests for non-forks
FILES=$(ls -1 e2e/_output/tests/*.test.js | jq -R . | jq -s .)
fi
echo "test_file_matrix<<EOF" >> $GITHUB_OUTPUT
echo "$FILES" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
env:
# https://github.com/microsoft/vscode-ripgrep/issues/9#issuecomment-643965333
GITHUB_TOKEN: ${{ secrets.CI_GITHUB_TOKEN }}
- name: Debug Outputs
run: |
echo "Test files: ${{ steps.vscode-get-test-file-matrix.outputs.test_file_matrix }}"
vscode-package-extension-linux:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Build VS Code extension
uses: ./.github/actions/build-vscode-extension
with:
platform: linux
arch: x64
npm_config_arch: x64
pre-release: false
commit-sha: ${{ github.sha }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Upload build artifact
uses: actions/upload-artifact@v6
with:
name: vscode-extension-build-Linux
path: extensions/vscode/build
vscode-e2e-tests:
name: ${{ matrix.test_file || 'unknown' }} (${{ matrix.command }})
needs: [vscode-get-test-file-matrix, vscode-package-extension-linux]
runs-on: ubuntu-latest
timeout-minutes: 15
# Tests requiring secrets need approval from maintainers
strategy:
fail-fast: false
matrix:
test_file: ${{ fromJson(needs.vscode-get-test-file-matrix.outputs.test_file_matrix) }}
command: ["e2e:ci:run", "e2e:ci:run-yaml"]
steps:
- uses: actions/checkout@v6
- name: Run VS Code E2E test
uses: ./.github/actions/run-vscode-e2e-test
with:
test_file: ${{ matrix.test_file }}
command: ${{ matrix.command }}
ssh_key: ${{ secrets.GH_ACTIONS_SSH_TEST_KEY_PEM }}
ssh_host: ${{ secrets.GH_ACTIONS_SSH_TEST_DNS_NAME }}
is_fork: ${{ github.event.pull_request.head.repo.fork == true || github.actor == 'dependabot[bot]' }}
jetbrains-tests:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Free disk space
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: true
dotnet: true
haskell: true
large-packages: false
docker-images: true
swap-storage: true
- uses: actions/checkout@v6
- name: Run JetBrains tests
uses: ./.github/actions/run-jetbrains-tests
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
ci-github-token: ${{ secrets.CI_GITHUB_TOKEN }}
# GitHub does not have a way of requiring that all checks pass (you must manually select each job)
# This action at least lets us manage the list of required tests via source control
# so that creators of new jobs can add them to this list
require-all-checks-to-pass:
if: always()
runs-on: ubuntu-latest
needs:
- prettier-check
- core-checks
- gui-checks
- binary-checks
- vscode-checks
- get-packages-matrix
- packages-checks
- vscode-get-test-file-matrix
- vscode-package-extension-linux
- vscode-e2e-tests
- jetbrains-tests
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}