name: CI on: push: branches: - master - release/* pull_request: branches: - master - release/* jobs: hygiene: name: Hygiene and Layering runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Run Hygiene Checks run: yarn gulp hygiene - name: Run Valid Layers Checks run: yarn valid-layers-check build-compile: name: "Build: Compile" runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Cache compiled code id: cacheCompiledCode uses: actions/cache@v2 with: path: | .build out-build out-vscode-min key: cacheCompiledCode-${{ github.sha }} - name: Compile Core if: ${{ steps.cacheCompiledCode.outputs.cache-hit != 'true' }} run: yarn gulp compile-build - name: Compile Extensions if: ${{ steps.cacheCompiledCode.outputs.cache-hit != 'true' }} run: yarn gulp compile-extensions-build - name: Minify VS Code if: ${{ steps.cacheCompiledCode.outputs.cache-hit != 'true' }} run: yarn gulp minify-vscode build-linux-unit-tests: name: "Build: Linux Unit Tests" needs: build-compile runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 # TODO: rename azure-pipelines/linux/xvfb.init to github-actions - name: Setup Build Environment run: | sudo apt-get update sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 libgbm1 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 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Restore cached node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Restore cached /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Restore cached compiled code id: cacheCompiledCode uses: actions/cache@v2 with: path: | .build out-build out-vscode-min key: cacheCompiledCode-${{ github.sha }} - name: Build VS Code run: yarn gulp vscode-linux-x64-min-ci - name: Download Electron run: yarn electron x64 - name: Run Unit Tests (Electron) run: DISPLAY=:10 ./scripts/test.sh --build - name: Download Playwright run: node ./node_modules/playwright/install.js - name: Run Unit Tests (Browser) run: DISPLAY=:10 yarn test-browser --build --browser chromium build-linux-integration-tests: name: "Build: Linux Integration Tests" needs: build-compile runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 # TODO: rename azure-pipelines/linux/xvfb.init to github-actions - name: Setup Build Environment run: | sudo apt-get update sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 libgbm1 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 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Restore cached node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Restore cached /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Restore cached compiled code id: cacheCompiledCode uses: actions/cache@v2 with: path: | .build out-build out-vscode-min key: cacheCompiledCode-${{ github.sha }} - name: Build VS Code run: yarn gulp vscode-linux-x64-min-ci - name: Download Electron run: yarn electron x64 - name: Run Integration Tests (Electron) run: DISPLAY=:10 ./scripts/test-integration.sh --build build-darwin-unit-tests: name: "Build: macOS Unit Tests" needs: build-compile runs-on: macos-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Restore cached compiled code id: cacheCompiledCode uses: actions/cache@v2 with: path: | .build out-build out-vscode-min key: cacheCompiledCode-${{ github.sha }} - name: Build VS Code run: yarn gulp vscode-darwin-x64-min-ci - name: Download Electron run: yarn electron x64 - name: Run Unit Tests (Electron) run: ./scripts/test.sh --build - name: Download Playwright run: node ./node_modules/playwright/install.js - name: Run Unit Tests (Browser) run: yarn test-browser --build --browser chromium --browser webkit --browser firefox build-darwin-integration-tests: name: "Build: macOS Integration Tests" needs: build-compile runs-on: macos-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Restore cached compiled code id: cacheCompiledCode uses: actions/cache@v2 with: path: | .build out-build out-vscode-min key: cacheCompiledCode-${{ github.sha }} - name: Build VS Code run: yarn gulp vscode-darwin-x64-min-ci - name: Download Electron run: yarn electron x64 - name: Run Integration Tests (Electron) run: ./scripts/test-integration.sh --build build-darwin-smoke-tests: name: "Build: macOS Smoke Tests" needs: build-compile runs-on: macos-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Restore cached compiled code id: cacheCompiledCode uses: actions/cache@v2 with: path: | .build out-build out-vscode-min key: cacheCompiledCode-${{ github.sha }} - name: Build VS Code run: yarn gulp vscode-darwin-x64-min-ci - name: Run Smoke Tests (Electron) continue-on-error: true run: | set -e APP_ROOT=$(GITHUB_WORKSPACE)/VSCode-darwin-x64 APP_NAME="`ls $APP_ROOT | head -n 1`" yarn smoketest --build "$APP_ROOT/$APP_NAME" linux: name: Linux runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 # TODO: rename azure-pipelines/linux/xvfb.init to github-actions - name: Setup Build Environment run: | sudo apt-get update sudo apt-get install -y libxkbfile-dev pkg-config libsecret-1-dev libxss1 dbus xvfb libgtk-3-0 libgbm1 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 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Compile and Download run: yarn concurrently --max_old_space_size=4095 --names "compile,electron,playwright,builtin-extensions" "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile" "yarn electron x64" "node ./node_modules/playwright/install.js" "yarn download-builtin-extensions" - name: Run Unit Tests (Electron) id: electron-unit-tests run: DISPLAY=:10 ./scripts/test.sh - name: Run Unit Tests (Browser) id: browser-unit-tests run: DISPLAY=:10 yarn test-browser --browser chromium - name: Run Integration Tests (Electron) id: electron-integration-tests run: DISPLAY=:10 ./scripts/test-integration.sh - name: Create Issue on Unit Test Failure uses: nashmaniac/create-issue-action@v1.1 if: ${{ steps.electron-unit-tests.outputs.status == 'failure' || steps.browser-unit-tests.outputs.status == 'failure' }} with: title: Unit Test Failed token: ${{secrets.GITHUB_TOKEN}} assignees: ${{github.actor}} labels: unit-test-failure body: Running unit tests failed for commit ${{github.sha}}. Please see https://github.com/microsoft/vscode/runs/${{GITHUB_RUN_ID}} - name: Create Issue on Integration Test Failure uses: nashmaniac/create-issue-action@v1.1 if: ${{ steps.electron-integration-tests.outputs.status == 'failure' && steps.electron-unit-tests.outputs.status != 'failure' && steps.browser-unit-tests.outputs.status != 'failure' }} with: title: Integration Test Failed token: ${{secrets.GITHUB_TOKEN}} assignees: ${{github.actor}} labels: integration-test-failure body: Running integration tests failed for commit ${{github.sha}}. Please see https://github.com/microsoft/vscode/runs/${{GITHUB_RUN_ID}} windows: name: Windows runs-on: windows-latest env: CHILD_CONCURRENCY: "1" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - uses: actions/setup-python@v2 with: python-version: '2.x' - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Compile and Download run: yarn concurrently --max_old_space_size=4095 --names "compile,electron,playwright,builtin-extensions" "node --max_old_space_size=4095 ./node_modules/gulp/bin/gulp.js compile" "yarn electron x64" "node ./node_modules/playwright/install.js" "yarn download-builtin-extensions" - name: Run Unit Tests (Electron) run: .\scripts\test.bat - name: Run Unit Tests (Browser) run: yarn test-browser --browser chromium - name: Run Integration Tests (Electron) run: .\scripts\test-integration.bat darwin: name: macOS runs-on: macos-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Compile and Download run: yarn concurrently --max_old_space_size=4095 --names "compile,electron,playwright,builtin-extensions" "yarn compile" "yarn electron x64" "node ./node_modules/playwright/install.js" "yarn download-builtin-extensions" - name: Run Unit Tests (Electron) run: DISPLAY=:10 ./scripts/test.sh - name: Run Unit Tests (Browser) run: DISPLAY=:10 yarn test-browser --browser chromium - name: Run Integration Tests (Electron) run: DISPLAY=:10 ./scripts/test-integration.sh monaco: name: Monaco Editor runs-on: ubuntu-latest env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2-beta with: node-version: 12 - name: Cache node modules id: cacheNodeModules uses: actions/cache@v2 with: path: '**/node_modules' key: ${{ runner.os }}-cacheNodeModules-${{ hashFiles('.yarnrc', 'remote/.yarnrc', '**/yarn.lock', '!**/node_modules/**/yarn.lock', '!**/.*/**/yarn.lock') }} restore-keys: ${{ runner.os }}-cacheNodeModules- - name: Cache /build/ scripts id: cacheBuildScripts uses: actions/cache@v2 with: path: build/**/*.js key: ${{ runner.os }}-cacheBuildScripts-${{ hashFiles('build/yarn.lock', 'build/tsconfig.json', 'build/tsconfig.build.json', 'build/**/*.ts', '!**/node_modules/**/*.ts') }} - name: Execute yarn if: ${{ steps.cacheNodeModules.outputs.cache-hit != 'true' || steps.cacheBuildScripts.outputs.cache-hit != 'true' }} env: PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 run: yarn --frozen-lockfile - name: Run Monaco Editor Checks run: yarn monaco-compile-check - name: Editor Distro & ESM Bundle run: yarn gulp editor-esm-bundle