parameters: - name: VSCODE_RUN_ELECTRON_TESTS type: boolean - name: VSCODE_RUN_BROWSER_TESTS type: boolean - name: VSCODE_RUN_REMOTE_TESTS type: boolean steps: - script: npm exec -- npm-run-all2 -lp "electron $(VSCODE_ARCH)" "playwright-install" env: GITHUB_TOKEN: "$(github-distro-mixin-password)" displayName: Download Electron and Playwright retryCountOnTaskFailure: 3 - script: | set -e APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) ELECTRON_ROOT=.build/electron sudo chown root $APP_ROOT/chrome-sandbox sudo chown root $ELECTRON_ROOT/chrome-sandbox sudo chmod 4755 $APP_ROOT/chrome-sandbox sudo chmod 4755 $ELECTRON_ROOT/chrome-sandbox stat $APP_ROOT/chrome-sandbox stat $ELECTRON_ROOT/chrome-sandbox displayName: Change setuid helper binary permission - ${{ if eq(parameters.VSCODE_RUN_ELECTRON_TESTS, true) }}: - script: ./scripts/test.sh --build --tfs "Unit Tests" env: VSCODE_SKIP_PRELAUNCH: '1' displayName: 🧪 Run unit tests (Electron) timeoutInMinutes: 15 - script: npm run test-node -- --build displayName: 🧪 Run unit tests (node.js) timeoutInMinutes: 15 - ${{ if eq(parameters.VSCODE_RUN_BROWSER_TESTS, true) }}: - script: npm run test-browser-no-install -- --build --browser chromium --tfs "Browser Unit Tests" env: DEBUG: "*browser*" displayName: 🧪 Run unit tests (Browser, Chromium) timeoutInMinutes: 15 - script: | 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 displayName: Build integration tests - ${{ if eq(parameters.VSCODE_RUN_ELECTRON_TESTS, true) }}: - script: | # Figure out the full absolute path of the product we just built # including the remote server and configure the integration tests # to run with these builds instead of running out of sources. set -e APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") INTEGRATION_TEST_APP_NAME="$APP_NAME" \ INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ ./scripts/test-integration.sh --build --tfs "Integration Tests" env: VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) VSCODE_SKIP_PRELAUNCH: '1' displayName: 🧪 Run integration tests (Electron) timeoutInMinutes: 20 - ${{ if eq(parameters.VSCODE_RUN_BROWSER_TESTS, true) }}: - script: ./scripts/test-web-integration.sh --browser chromium env: VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web displayName: 🧪 Run integration tests (Browser, Chromium) timeoutInMinutes: 20 - ${{ if eq(parameters.VSCODE_RUN_REMOTE_TESTS, true) }}: - script: | set -e APP_ROOT=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) APP_NAME=$(node -p "require(\"$APP_ROOT/resources/app/product.json\").applicationName") INTEGRATION_TEST_APP_NAME="$APP_NAME" \ INTEGRATION_TEST_ELECTRON_PATH="$APP_ROOT/$APP_NAME" \ ./scripts/test-remote-integration.sh env: VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH) VSCODE_SKIP_PRELAUNCH: '1' displayName: 🧪 Run integration tests (Remote) timeoutInMinutes: 20 - script: | set -e ps -ef cat /proc/sys/fs/inotify/max_user_watches lsof | wc -l displayName: Diagnostics before smoke test run (processes, max_user_watches, number of opened file handles) continueOnError: true condition: succeededOrFailed() - ${{ if eq(parameters.VSCODE_RUN_ELECTRON_TESTS, true) }}: - script: npm run smoketest-no-compile -- --tracing --build "$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH)" timeoutInMinutes: 20 displayName: 🧪 Run smoke tests (Electron) - ${{ if eq(parameters.VSCODE_RUN_BROWSER_TESTS, true) }}: - script: npm run smoketest-no-compile -- --web --tracing --headless env: VSCODE_REMOTE_SERVER_PATH: $(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)-web timeoutInMinutes: 20 displayName: 🧪 Run smoke tests (Browser, Chromium) - ${{ if eq(parameters.VSCODE_RUN_REMOTE_TESTS, true) }}: - script: | set -e APP_PATH=$(agent.builddirectory)/VSCode-linux-$(VSCODE_ARCH) VSCODE_REMOTE_SERVER_PATH="$(agent.builddirectory)/vscode-server-linux-$(VSCODE_ARCH)" \ npm run smoketest-no-compile -- --tracing --remote --build "$APP_PATH" timeoutInMinutes: 20 displayName: 🧪 Run smoke tests (Remote) - script: | set -e ps -ef cat /proc/sys/fs/inotify/max_user_watches lsof | wc -l displayName: Diagnostics after smoke test run (processes, max_user_watches, number of opened file handles) continueOnError: true condition: succeededOrFailed() - task: PublishTestResults@2 displayName: Publish Tests Results inputs: testResultsFiles: "*-results.xml" searchFolder: "$(Build.ArtifactStagingDirectory)/test-results" condition: succeededOrFailed()