Skip to content

CI

CI #4

Workflow file for this run

# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
name: CI
on:
push:
branches: main
pull_request:
schedule:
- cron: '0 19 * * 0'
env:
# Keep this in sync with /pipeline/install-node-prerequisites.yaml
NODE_VERSION: 16.14.2
jobs:
build:
runs-on: ubuntu-20.04
env: { PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 }
steps:
- uses: actions/[email protected]
timeout-minutes: 2
- uses: actions/setup-node@v4
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
timeout-minutes: 5
- run: yarn install --immutable
timeout-minutes: 10
# CG and NOTICE generation would go here
- run: yarn tbuild:all
timeout-minutes: 10
- name: upload artifact build-results
uses: actions/upload-artifact@v4
with:
name: build-results
path: drop
timeout-minutes: 5
unit-tests:
name: unit-tests (${{ matrix.shard-index }}/${{ strategy.job-total }})
runs-on: ubuntu-20.04
env: { PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 }
strategy:
fail-fast: false
matrix:
shard-index: [1, 2]
steps:
- uses: actions/[email protected]
timeout-minutes: 2
- uses: actions/setup-node@v4
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
timeout-minutes: 5
- run: yarn install --immutable
timeout-minutes: 10
# We set maxWorkers to 2 since GH Action VMs have 2 cores and by default Jest only uses 1.
# If this were to change in the future, the number here should change accordingly.
- run: yarn test --maxWorkers=2 --ci --shard=${{ matrix.shard-index }}/${{ strategy.job-total }}
timeout-minutes: 10
- name: upload artifact unit-tests-results
uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: unit-tests-${{ matrix.shard-index }}-results
path: |
test-results/unit/junit.xml
test-results/unit/coverage/cobertura-coverage.xml
timeout-minutes: 5
publish-code-coverage:
needs: unit-tests # This waits for *all* of the unit-tests jobs
runs-on: ubuntu-20.04
steps:
# This only needs to be present so codecov can use the source tree for some post-processing
# This job doesn't require that we install dependencies
- uses: actions/[email protected]
timeout-minutes: 2
- uses: actions/setup-node@v4
with: { node-version: "${{ env.NODE_VERSION }}" }
timeout-minutes: 2
- uses: actions/download-artifact@v4
with:
name: unit-tests-1-results
path: unit-tests-1-results
timeout-minutes: 2
- uses: actions/download-artifact@v4
with:
name: unit-tests-2-results
path: unit-tests-2-results
timeout-minutes: 2
- run: npx codecov
timeout-minutes: 3
lints:
runs-on: ubuntu-20.04
env: { PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 }
steps:
- uses: actions/[email protected]
timeout-minutes: 2
- uses: actions/setup-node@v4
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
timeout-minutes: 5
- run: yarn install --immutable
timeout-minutes: 10
- run: yarn copyright:check
timeout-minutes: 1
- run: yarn format:check
timeout-minutes: 5
- run: yarn lint:check:all
timeout-minutes: 5
- run: yarn scss:build
timeout-minutes: 3
- run: yarn null:check
timeout-minutes: 5
- name: verify null:autoadd finds no changes
run: yarn null:autoadd && node .github/workflows/verify-unchanged-strict-null-checks.js
timeout-minutes: 6
codeql:
runs-on: ubuntu-20.04
steps:
- uses: actions/[email protected]
timeout-minutes: 2
- uses: github/codeql-action/init@v3
timeout-minutes: 2
with:
trap-caching: false
languages: javascript
- uses: github/codeql-action/analyze@v3
timeout-minutes: 10
e2e-web-tests:
name: e2e-web-tests (${{ matrix.shard-index }}/${{ strategy.job-total }})
runs-on: ubuntu-20.04
# We need to update this each time we update playwright
container: mcr.microsoft.com/playwright:v1.42.1-focal
strategy:
fail-fast: false
matrix:
shard-index: [1, 2]
steps:
- uses: actions/[email protected]
timeout-minutes: 2
- uses: actions/setup-node@v4
with:
node-version: "${{ env.NODE_VERSION }}"
# Intentionally omitting caching; it would need a separate, larger
# cache bucket to account for differences in container image and
# PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD, and that would eat so far into
# our 5GB cache quota that we'd run into issues with useful main builds'
# caches being evicted anytime dependabot filed a few PRs in a row.
timeout-minutes: 2
- run: yarn install --immutable
timeout-minutes: 10
- run: yarn build:prod
timeout-minutes: 5
- name: yarn test:e2e
run: |
xvfb-run --server-args="-screen 0 1024x768x24" yarn test:e2e --ci --shard=${{ matrix.shard-index }}/${{ strategy.job-total }}
env:
# If you need to debug Playwright/Chromium, using pw:* instead may help
DEBUG: pw:api
WEB_E2E_TARGET: 'production'
timeout-minutes: 10
- name: upload artifact e2e-web-tests-results
uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: e2e-web-tests-${{ matrix.shard-index }}-results
path: test-results/e2e/junit-e2e.xml
timeout-minutes: 3
- name: upload artifact e2e-web-tests-debug-logs
uses: actions/upload-artifact@v4
if: ${{ failure() }}
with:
name: e2e-web-tests-${{ matrix.shard-index }}-debug-logs
path: |
test-results/e2e/chrome-logs
test-results/e2e/failure-screenshots
timeout-minutes: 15 # chrome-logs is several GB, this can take a while
e2e-report-tests:
runs-on: ubuntu-20.04
env: { PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD: 1 }
steps:
- uses: actions/[email protected]
timeout-minutes: 2
- uses: actions/setup-node@v4
with:
node-version: "${{ env.NODE_VERSION }}"
cache: yarn
timeout-minutes: 5
- run: yarn install --immutable
timeout-minutes: 10
- run: yarn build:package:report
timeout-minutes: 5
- run: yarn test:report:e2e --ci
timeout-minutes: 5
- name: upload artifact e2e-report-tests-results
uses: actions/upload-artifact@v4
if: ${{ always() }}
with:
name: e2e-report-tests-results
path: packages/report-e2e-tests/test-results
timeout-minutes: 3
check-clearly-defined:
runs-on: ubuntu-20.04
steps:
- uses: actions/[email protected]
timeout-minutes: 2
- name: Check ClearlyDefined for dependabot PR's
run: ./tools/clearly-defined/check-clearly-defined.ps1 -Verbose -PipelineType action
shell: pwsh