diff --git a/docs/ci-data.md b/docs/ci-data.md new file mode 100644 index 0000000000000..cd5293007f05d --- /dev/null +++ b/docs/ci-data.md @@ -0,0 +1,374 @@ +# CI data (time metrics from running pipelines on whole monorepo) + +**Legend:** + +- optimization v1 => narrowing tsconfig for v9 `isConformance` / https://uifabric.visualstudio.com/fabricpublic/_build/results?buildId=291729&view=logs&j=4fecd60f-6595-5d51-257b-4743b034536f&t=0df5d56b-1f79-5ca2-2e20-703f84ecb970 +- optimization v2 => removing runInBand,maxWorkers,coverage from jest execution in v0,v8 / + +| CI Run (test,build,lint,type-check --all) | time | remarks | +| ------------------------------------------------------------------ | ------- | -------------------------------------------------------- | +| NX test optimization v1 | 50m 14s | | +| Lage test optimization v1 | 49m 38s | | +| NX test optimization v2 | ? | | +| Lage test optimization v2 | ? | | +| NX with maxWorkers=4 (v0,v8) | 42m 0s | | +| Lage with maxWorkers=4 (v0,v8) | 49m 0s | | +| NX with maxWorkers=4 (v0,v8,v9) | 38m 20s | | +| Lage with maxWorkers=4 (v0,v8,v9) | 58m 0s | πŸ’€ pipeline reached 1 hour threshold | +| NX with maxWorkers=4 (v0,v8,v9) + ts-jest isolatedModules | 37m 5s | πŸš… (most effective testing perf optimizations) | +| Lage with maxWorkers=4 (v0,v8,v9)+ ts-jest isolatedModules | ??m 0s | πŸ’€ pipeline reached 1 hour threshold | +| ---- | | ------- | +| NX (with test opt) + type-check optimization | 33m 35s | πŸš…πŸš…πŸš… (fastest !!!) | +| Lage (with test opt) + type-check optimization | xxx | 🚨 didn't finish - invalid targets dependency resolution | +| ---- | | ------- | +| NX (with test opt) + type-check optimization + build optimization | 34m 48s | data with rebase from master (+200 commits) | +| Lage (with test opt) + type-check optimization+ build optimization | xxx | 🚨 didn't finish - invalid targets dependency resolution | + +# Optimizations + +During analysis of our tasks/pipelines we found various opportunities how to improve our pipeline speeds to enable faster time do delivery. + +Following Chapters contain most impactful findings with some amount of detail for how to enable them. + +We were able to implement some of these suggestions during experimentation phase which gave us following worst case scenario pipeline durations. + +> **Note:** +> +> With improvements also uses Node 16, which is more subtle to OOM/unhandled promise rejections (initially we weren't able to make it pass until we landed some of optimizations described in this document) + +| CI Run (test,build,lint,type-check --all) | time | failure rate (Timeout/OOM) | +| ----------------------------------------- | ---- | -------------------------- | +| current | 40m | 50% | +| with improvements | 30m | 0% | + +## Stop using TS path aliases on CI + +Using TS path aliases provides excellent DX and blazing fast Application Bundling speeds with tools like swc or esbuild. + +For running `type-check` and d.ts emit within our codebase it inflicts huge performance penalty, as TSC needs to traverse and parse all the paths on every run. + +For `type-check` in particular, which is used by running `tsc -b` on ts solution configuration per project, the performance penalty is the biggest. + +By stopping using path aliases on CI for type-checks we will get 40% speed bumps for type-checking ! + +**Speed metrics:** + +| Run type | time | delta | +| ------------------------------ | ------- | -------- | +| current / parallel 1 | 16m 41s | | +| with optimization / parallel 1 | 9m 57s | 40,4% πŸš… | +| | | | +| current / parallel 8 | 3m 20s | | +| with optimization / parallel 8 | 2m 12s | 34% πŸš… | + +### Blockers: + +#### Storybook Stories + +Because our approach to stories we create circular dependency between packages. + +_Example:_ + +`react-table` stories import from `react-data-grid-react-window`, while `react-data-grid-react-window` production code imports from `react-table`. + +``` +react-table <---> react-data-grid-react-window +``` + +This makes it impossible to implement turning off path aliases for type-checks on CI, because following task relationship will not work: + +`generate-api` --> `type-check` + +#### Possible solutions (Storybook Stories) + +**1. lets keep things as is - having the per penalty increased with every new line of code** + +**2. make stories separate packages** + +```diff ++react-text-stories/ ++ |- .storybook ++ |- src ++ |- package.json ++ |- project.json +react-text/ +- |- .storybook/ +- |- stories/ + |- src/ + |- package.json + |- project.json +``` + +**3. make stories separate packages - via nx "hack"** + +```diff +react-text/ + |- .storybook/ + |- stories/ ++ |- package.json ++ |- project.json + |- src/ + |- package.json + |- project.json +``` + +This approach might be a ticking bomb as we are approaching a package within package (regarding resolution algorithms and tools). + +Clean approach would be to restructure folder structure to following: + +```sh +react-text/ + |- stories/ + |- .storybook/ + |- src/ + |- package.json + |- project.json + |- tsconfig.json + |- impl/ + |- src/ + |- package.json + |- project.json + |- tsconfig.json + |- tsconfig.lib.json + |- tsconfig.spec.json + |- tsconfig.cy.json + |- impl/ +``` + +**4. generate dts manually before running `type-check` on CI** + +Before `type-check` pipeline is run we manually generate type declaration for all v9 packages present in stories. + +_Simplified flow:_ + +- `tsc -p tsconfig.lib.json` within `react-components` +- parse story files to create import Map and run `tsc -p tsconfig.lib.json` on those dependencies that exist in stories but are not part of `react-components` suite +- create temporary `tsconfig.base.dts.json` that will map to `.d.ts` path aliases instead of `.ts` source files +- start `type-check` pipeline + +## Enable `incremental` for TS solution configs + `emitDeclarationOnly` + +By enabling `incremental:true` for projects that use TS Solution configs, we will get around 15% perf boost. + +This improvement will be leveraged on [`type-check` --depends on--> `generate-api`] task execution relationship, +where `type-check` will leverage incremental emit metadata from running `tsc -p tsconfig.lib.json (part of generate api)`. + +**Speed metrics:** + +| Run: yarn workspace @fluentui/react-table tsc -b | time | delta | +| -------------------------------------------------------------------- | ----------------------- | ------ | +| current | 27.73s | | +| with incremental: true / 1st(cold) run | 27.73s | | +| with incremental: true / 2nd run | 4.4s | | +| -- | | | +| current / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.86s + 22.32s) 29.18s | | +| with incremental:true / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.83s + 18.07) 24.9s | 15% πŸš… | + +## Migrate react(v8) to TS solution configs + +Besides small speed benefits, using solution configs will provide additional ones like: + +- mitigate any type globals leaks +- narrows down dep tree of files for both build and test execution that will give us around 5% speed boost +- lower memory pressure on conformance tests + +**Speed metrics:** + +| command: `@fluentui/react test --no-cache --runInBand` | time | delta | remarks | +| ------------------------------------------------------ | ---- | ----- | ------- | +| ts-jest (current state) | 281s | BASE | | +| ts-jest + tsconfig.spec.json config + target: ES2019 | 270s | 4% | | + +## Emit declarations only - react-northstar + +v0 uses solely babel for transpilation thus tsc is doing unnecessary work. TSC should generate only declaration files. This will give use approx 10% speed bump. + +## Jest Test transform tweaks + +- use `@swc/jest` for v9 - this will give us up to 10% speed boost +- use ts-jest with `isolatedModules` for v8 + - v8 explodes with swc/jest - additional work needed + +**Speed metrics:** + +| command: `@fluentui/react test --no-cache --runInBand` | time | delta | remarks | +| ------------------------------------------------------ | ---- | ----- | ------- | +| ts-jest (current state) | 281s | BASE | | +| ts-jest + `isolatedModules:true` | 260s | 7% | | + +## stop running Code Coverage on CI + +Slows test execution up to 10% (present in react-northstar) + +| Run type | time | command | +| --------------- | ----- | -------------------------------------------------------------------------- | +| current | 382 s | `gulp test --config ./jest.config.js --coverage --maxWorkers=2 --no-cache` | +| without codecov | 340 s | `gulp test --config ./jest.config.js --maxWorkers=2 | + +## Tests memory leaks + +Both v0 and v8 tests contain memory leaks and consume above **2GB of memory per test** !!! + +> discovered while executing via raw `jest` instead `gulp` + +``` +A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` + +By cleaning up those tests to not leak / not drastically add memory heap, we could make them run faster as is and enable full `maxWorkers` count (we use 8 core CPUs on CI) which would drastically cut time execution. + +**Speed metrics:** + +| Run type (node --expose-gc ../../node_modules/.bin/jest --runInBand --logHeapUsage --no-cache ) | max heap size (MB) | delta | +| ----------------------------------------------------------------------------------------------- | ------------------ | ----- | +| conformance | 2029 MB | | +| no conformance | 1819 MB | | +| fixed leaks attempt 1 + conformance | 1954 MB | 4% | +| fixed leaks attempt 1 + no conformance | 1618 MB | 11% | + +## Components Conformance Tests + +**Speed metrics::** + +_Legend:_ + +- optimization v1 = fixing react-conformance to consume tsconfig.lib.json for ts solution projects +- optimization v2 = removing creation of TS Program via `ts.createProgram()`. + - > Note: with optimization v2, optimization v1 is not needed as that's logic is not invoked + +| command: `yarn workspace @fluentui/react-text --no-cache --runInBand` | time | delta | remarks | +| --------------------------------------------------------------------- | ----- | ----- | ------- | +| 1) ts-jest (current state) | 69s | BASE | | +| 2) optimization v1 + ts-jest | 37.43 | 46% | | +| 3) optimization v1 + swc | 28.79 | 58% | | +| 4) optimization v2 + ts-jest | 20.16 | 71% | | +| 5) optimization v2 + swc | 15.10 | 78% | | + +**Summary:** + +From the performance metrics 4th and 5th approach is clear winner in terms of performance. +πŸ₯Ά Unfortunately, that approach (nor 4 nor 5) cannot be possible achieved with current conformance architecture. + +Why? + +Because of jest architecture - every test is executed in separate sandbox and executed in parallel( runInBand wont solve anything), thus we cannot cache anything per test scenario (in our case TS program instance) on global level (only serializable data via globalConfig hook). +What's the issue with TS program ? it is re-created on every test for exactly same set of compiler options and files. This has also implication where "bigger codebase of package" === "longer time to execute" + +### narrow down TS program + +For v9 we use TS path aliases. react-conformance will consume those solution config which cause to load huge trees of programs that inflict big perf slowdown. + +We can consume `tsconfig.lib.json` for ts solution projects which will gain us **45% speed boost** + +### mitigate need of TS program use + +We can do partial rewrite of react-conformance to create TS program via ` removing creation of TS Program via ``ts.createProgram() ` only when necessary (lazily). With that we can get up to 70% speed boost case ( depends on usage of conformance test scenarios ) + +### architecture rewrite + +Our UI controls conformance architecture inflicts one of the the biggest performance impacts (bottleneck). It needs to be rewritten in a way where TS program are created only once - a set of Eslint rules is excellent candidate for this. + +## Task runner/s change + +Replace gulp and just with nx executors/native node scripts. + +Every gulp and just execution takes 2-3 seconds. + +> lets say we have 150 projects in monorepo, every project has 4 tasks. If run everything in series only the task runner boot will take 30 minutes (150 x 4 x 3) πŸ₯Ά + +**Example:** + +running `yarn workspace @fluentui/react-button build`: + +> `build` is executed via just-scripts + +| command/task | time | delta | remarks | +| ----------------- | ------------ | ----- | ---------------------------------------------------------------------------------------------------------------------------- | +| just-scripts | 2-3s | 25% | πŸ”₯ / invoking just tasks adds 2-3 seconds in comparison with running those by raw binaries !!! | +| copy-compiled | 0.8s - 1.85s | 15% | πŸ”₯ / time spent here depends on amount of files and targets that exist (esm/cjs/amd) | +| ts:compile | 3.0s | 25% | invokes tsc 2-3 times (based on target spec) | +| ts:postprocess | 0.0s | 0% | noop | +| babel:postprocess | 1.8s | 14.7% | πŸ”₯ / we do imperative source map creation (why?). Also same transform is executed twice , once for esm output , once for cjs | +| api-extractor | 2.6s | 21.3% | long time as expected as it needs to create TSC program similar to ts:compile + run rolluping | +| | | | | +| SUM | 12.25s | | | + +## `e2e` target leveraging TS path aliases for bundling + +> TL;DR enable pathAliases processed via esbuild/swc to run e2e without need to build anything. Speed bumps up to 60% + +ATM e2e task execution is mixed with bundle and deploy in 1 job. We have setup already in place where we don't need to physically trigger `build` nor `bundle` tasks for `e2e` execution, thus decouple these jobs. + +By doing that we can get following speed improvements: + +| command: `nx run-many --target=e2e --skip-cache` | time | delta | remarks | +| ------------------------------------------------ | -------------------------- | ----- | ------- | +| current | 13m 16s(bundle) + 6m (e2e) | BASE | | +| with path aliases | 6m 41s (bundle + e2e) | 65% | | + +**Solution Suggestion:** + +1. Decouple existing `Deploy & E2E` pipeline +2. enable ts path aliases bundling for all e2e and make it part of main (build,test,lint job) + +## apps `build` target change + +most of application that live within `apps` leverage path aliases with esbuild/swc. + +Using that setup for bundling is more than 50% faster then using incremental build based on our repo dependency tree. + +**Solution Suggestion:** + +We could rename target `build` to `bundle-app`. This would stop triggering `build` on every package on every PR/Release. + +## Decoupling dependency tree + +Mitigate v8 dependency tree creep which triggers literally all v8 packages "re-builds" on any change (v9) + +> TBA: more research needed +> +> partially fixed: https://github.com/microsoft/fluentui/pull/27334 + +## Enable caching/distributed caching + +we execute `build` task multiple times on every separate pipeline. This adds around 4 minutes to every pipeline we ran. + +**Solution Suggestion:** + +1. using caching would completely mitigate this +2. aggregating everything to 1 pipeline ( no caching needed ) + +- pros: easy to setup and maintenance/reasoning about for devs what is happening. +- cons: "main build" pipeline would block other pipelines, thus all checks might take longer total time then being executed in parallel + +## Cache node_modules (yarn install) + +`yarn install` takes significant amount for every pipeline job (up to 1m 30s). + +> ATM: we have 2 + 5 + 4 + 3 (14 jobs x 1.5 minutes = 21 minutes of `yarn install` πŸ₯Ά x number of PR re-runs on daily basis ) + +**Solution Suggestion:** + +This is a low hanging fruit that can be improved by caching node_modules for `yarn install` (from 2 minutes to 5 seconds) + +## Improve master pipeline + +On every PR merge (push to master), we run pipelines on default branch (master), which triggers `lint,build,test,type-check` on whole monorepo. + +metrics of this approach: + +- this has around 56% success rate +- it takes up to 57 minutes (if successful) + +**Solution Suggestion:** + +There is no need real need to run everything on every push to master. + +We should run pipelines only against latest successful merge commit. + +`yarn nx affected --targets=build,lint,type-check,test --base=LAST_SUCCESSFUL_SHA --head=HEAD` + +# Actionable + +- implement proposed suggestions +- create tools to will guard our pipelines to run into these issues again in the future diff --git a/docs/ci-perf-build.md b/docs/ci-perf-build.md new file mode 100644 index 0000000000000..5630dcc91b1ec --- /dev/null +++ b/docs/ci-perf-build.md @@ -0,0 +1,530 @@ +# `build` + +## Results + +**Projects with build target:** 143 + +**Legend:** + +- optimization v1 === disable path aliases for tsc -p tsconfig.lib.json runs +- optimization v2 === enabling `incremental:true` for projects with solution configs. this will have probably no impact on `build` task but should speed up `type-check` as execution for tsconfig.lib.json should be already cached by `build` task which is pre-requirement of `type-check` task +- optimization v3 === just-tasks speed improvements (copy-compiled task speed boost) + +| Run type (nx run-many build) | time | delta | +| ------------------------------------ | ------- | ----- | +| current / parallel 1 | 22m 33s | | +| with optimization v1 / parallel 1 | 20m 5s | 11% | +| with optimization v1+v2 / parallel 1 | 20m 33s | x | +| with optimization v1+v3 / parallel 1 | 20m 27s | x | +| | | | +| current / parallel 8 | 7m 49s | | +| with optimization v1 / parallel 8 | 7m 17s | 7% | + +## Experiments + +### Current task data + +> yarn workspace @fluentui/react-button build +> +> build is executed via just-scripts + +| command | time | delta | remarks | +| ----------------- | ------------ | ----- | ---------------------------------------------------------------------------------------------------------------------------- | +| just-scripts | 2-3s | 25% | πŸ”₯ / invoking just tasks adds 2-3 seconds in comparison with running those by raw binaries !!! | +| copy-compiled | 0.8s - 1.85s | 15% | πŸ”₯ / time spent here depends on amount of files and targets that exist (esm/cjs/amd) | +| ts:compile | 3.0s | 25% | invokes tsc 2-3 times (based on target spec) | +| ts:postprocess | 0.0s | 0% | noop | +| babel:postprocess | 1.8s | 14.7% | πŸ”₯ / we do imperative source map creation (why?). Also same transform is executed twice , once for esm output , once for cjs | +| api-extractor | 2.6s | 21.3% | long time as expected as it needs to create TSC program similar to ts:compile + run rolluping | +| | | | | +| SUM | 12.25s | | | + +**Notes:** + +just-scripts slow processing: + +- invoking just adds 2-3 seconds to every task execution. I got the delta confirmation by running same task via native binaries "tsc && api-extractor" vs running those via "just" +- one of reasons why this is so slow is that every `just-scripts` needs to invoked `tsc` behind the scenes to compile all the custom code written in TS to JS. We have no control on how is that being compiled (for example ts-node allows us to use `swc` under the hood which makes TS->Js rather instant ) +- what about using `.cache()` for `task()` ? it's a lie https://github.com/microsoft/just/issues/392 + +nx run-commands executor: + +- whilst this is definitely not an 1:1 comparison with current just setup, it can give us at least nx slow-down numbers + +**potential improvements:** + +- just-scripts + + - use `swc:true` with ts-node (0.5s speed boost) - ts-node config is hardcoded and swc cannot be set + - using just.config.js with `swc-node/register/register` (0.5 speed boost) + +- copy-compiled: + + - use `parallel` (0.3s speed boost) + - don't use getProjectMetadata (1.2s speed boost) + + | task name | before | after | delta | + | ------------- | ------ | ----- | ----- | + | copy-compiled | 1.85s | 0.02s | 99% | + | just-scripts | 3s | 2.5s | 16.7% | + +### disable path aliases for tsc -p tsconfig.lib.json + +| Run type ( @fluentui/react-table build) | time | delta | +| --------------------------------------- | ---- | ------ | +| current | 20s | | +| with optimization v1 | 12s | 40% πŸš… | + +**Summary:** + +Delta varies up to 50% speed improvement for v9 packages + +### enable incremental for TS + +Having `incremental:true` will probably not provide any time benefits for actual `build` (tsc -p tsconfig.lib.json), +but should provide already cached execution for `type-check` task, which should re-use cache and run TSC program check only for other ts configs(spec/e2e/storybook) + +> NOTE: this uses already optimization v1 (disable path aliases for tsc -p tsconfig.lib.json) + +| Run type ( @fluentui/react-table build & type-check) | time | delta | remarks | +| -------------------------------------------------------------------------- | ------ | ----- | -------------- | +| current | 24.2s | | | +| with optimization 1 (incremental:true) | 21.9s | 10% | worth a shot ? | +| with optimization 2 (removing tsconfig.lib.json from references for tsc-b) | 22.5s | | | +| with optimization 1+2 | 21.39s | | | + +**Summary:** + +While delta per package seems good enough (10%) when executed on whole repo there are almost zero time execution benefits + +**Update:** looks like the configuration was wrong previously. To be able to achieve caching for `tsconfig.lib.json` it needs to be invoked with same parameters as `generate-api` task which is `emitDeclarationOnly`. With that in place, `type-check` leverages cache from previously run `tsconfig.lib.json` and gives us approx 15% speed bump. + +## Local + +### Current + +> - 145 projects have target:build + +> parallel 1 + +total: 1353s / 22m 33s + +> parallel 8 + +total: 469s / ~7m 49s + +**result for `parallel 1`:** + +> - parallel 1 + +Run 2: + +```sh +nx run-many --target=build --skip-nx-cache + +nx run @fluentui/react-conformance:build (6s) +nx run @fluentui/react-conformance-griffel:build (7s) +nx run @fluentui/set-version:build (4s) +nx run @fluentui/keyboard-keys:build (5s) +nx run @fluentui/react-utilities:build (8s) +nx run @fluentui/react-context-selector:build (7s) +nx run @fluentui/merge-styles:build (6s) +nx run @fluentui/jest-serializer-merge-styles:build (4s) +nx run @fluentui/react-aria:build (8s) +nx run @fluentui/example-data:build (5s) +nx run @fluentui/styles:build (5s) +nx run @fluentui/react-component-event-listener:build (5s) +nx run @fluentui/accessibility:build (6s) +nx run @fluentui/babel-preset-storybook-full-source:build (8s) +nx run @fluentui/test-utilities:build (5s) +nx run @fluentui/react-northstar-styles-renderer:build (6s) +nx run @fluentui/react-component-ref:build (8s) +nx run @fluentui/dom-utilities:build (6s) +nx run @fluentui/utilities:build (7s) +nx run @fluentui/theme:build (7s) +nx run @fluentui/style-utilities:build (7s) +nx run @fluentui/font-icons-mdl2:build (5s) +nx run @fluentui/foundation-legacy:build (8s) +nx run @fluentui/common-styles:build (3s) +nx run @fluentui/docs-components:build (5s) +nx run @fluentui/react-storybook-addon-codesandbox:build (5s) +nx run @fluentui/react-portal-compat-context:build (5s) +nx run @fluentui/a11y-testing:build (4s) +nx run @fluentui/scheme-utilities:build (5s) +nx run @fluentui/react-window-provider:build (6s) +nx run @fluentui/react-hooks:build (7s) +nx run @fluentui/date-time-utilities:build (5s) +nx run @fluentui/state:build (4s) +nx run @fluentui/react-northstar-fela-renderer:build (6s) +πŸ”₯πŸ”₯ nx run @fluentui/react-bindings:build (16s) +πŸ”₯ nx run @fluentui/react-icons-northstar:build (12s) +nx run @fluentui/public-docsite-setup:build (4s) +nx run @fluentui/react-file-type-icons:build (5s) +nx run @fluentui/tokens:build (6s) +nx run @fluentui/react-theme:build (5s) +nx run @fluentui/react-shared-contexts:build (6s) +nx run @fluentui/react-tabster:build (8s) +nx run @fluentui/react-label:build (8s) +nx run @fluentui/react-field:build (10s) +nx run @fluentui/react-portal:build (7s) +πŸ”₯ nx run @fluentui/react-button:build (12s) +nx run @fluentui/react-positioning:build (8s) +nx run @fluentui/react-popover:build (10s) +nx run @fluentui/react-provider:build (9s) +nx run @fluentui/react-badge:build (10s) +nx run @fluentui/react-radio:build (10s) +nx run @fluentui/react-tooltip:build (9s) +πŸ”₯ nx run @fluentui/react-avatar:build (13s) +nx run @fluentui/react-text:build (10s) +nx run @fluentui/react-divider:build (8s) +nx run @fluentui/react-spinbutton:build (10s) +nx run @fluentui/react-checkbox:build (10s) +nx run @fluentui/react-infobutton:build (11s) +πŸ”₯ nx run @fluentui/react-persona:build (12s) +nx run @fluentui/react-input:build (10s) +πŸ”₯πŸ”₯ nx run @fluentui/react-table:build (17s) +nx run @fluentui/react-storybook-addon:build (9s) +nx run @fluentui/react-image:build (8s) +nx run @fluentui/react-accordion:build (11s) +nx run @fluentui/react-link:build (9s) +nx run @fluentui/react-tabs:build (10s) +nx run @fluentui/react-spinner:build (9s) +nx run @fluentui/react-progress:build (9s) +nx run @fluentui/react-textarea:build (10s) +nx run @fluentui/react-select:build (10s) +nx run @fluentui/react-slider:build (10s) +nx run @fluentui/react-switch:build (10s) +nx run @fluentui/react-dialog:build (11s) +nx run @fluentui/react-card:build (10s) +πŸ”₯ nx run @fluentui/react-combobox:build (12s) +πŸ”₯ nx run @fluentui/react-menu:build (12s) +πŸ”₯ nx run @fluentui/react-toolbar:build (12s) +πŸ”₯ nx run @fluentui/react-alert:build (14s) +nx run @fluentui/keyboard-key:build (5s) +nx run @fluentui/react-focus:build (8s) +nx run @fluentui/webpack-utilities:build (4s) +πŸ”₯πŸ”₯ nx run @fluentui/react:build (19s) +nx run @fluentui/theme-samples:build (5s) +nx run @fluentui/azure-themes:build (6s) +nx run @fluentui/react-experiments:build (10s) +nx run @fluentui/storybook:build (5s) +nx run @fluentui/fluent2-theme:build (6s) +nx run @fluentui/react-component-nesting-registry:build (5s) +nx run @fluentui/priority-overflow:build (6s) +nx run @fluentui/react-proptypes:build (5s) +πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/react-northstar:build (25s) +πŸ”₯πŸ”₯ nx run @fluentui/code-sandbox:build (22s) +πŸ”₯πŸ”₯ nx run @fluentui/react-northstar-prototypes:build (16s) +nx run @fluentui/react-virtualizer:build (8s) +nx run @fluentui/react-overflow:build (7s) +πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/react-components:build (25s) +nx run @fluentui/monaco-editor:build (7s) +nx run @fluentui/react-monaco-editor:build (6s) +nx run @fluentui/react-docsite-components:build (8s) +nx run @fluentui/react-icon-provider:build (7s) +πŸ”₯πŸ”₯ nx run @fluentui/react-icons-mdl2:build (17s) +nx run @fluentui/react-charting:build (8s) +nx run @fluentui/react-cards:build (8s) +πŸ”₯πŸ”₯ nx run @fluentui/react-examples:build (15s) +nx run @fluentui/api-docs:build (3s) +nx run @fluentui/public-docsite-resources:build (6s) +nx run @fluentui/ability-attributes:build (5s) +nx run @fluentui/react-northstar-emotion-renderer:build (5s) +nx run @fluentui/react-telemetry:build (6s) +nx run @fluentui/react-builder:build (8s) +nx run @fluentui/digest:build (2s) +nx run @fluentui/global-context:build (7s) +πŸ”₯πŸ”₯ nx run @fluentui/react-migration-v0-v9:build (23s) +πŸ”₯πŸ”₯ nx run @fluentui/react-migration-v8-v9:build (21s) +nx run @fluentui/react-icons-mdl2-branded:build (7s) +nx run @fluentui/web-components:build (13s) +πŸ”₯πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/docs:build (44s) +nx run @fluentui/codemods:build (7s) +nx run @fluentui/my-lib:build (2s) +nx run @fluentui/react-avatar-context:build (5s) +nx run @fluentui/react-breadcrumb:build (8s) +nx run @fluentui/react-theme-sass:build (5s) +nx run @fluentui/react-drawer:build (9s) +nx run @fluentui/react-tags:build (8s) +nx run @fluentui/react-skeleton:build (9s) +πŸ”₯ nx run @fluentui/react-tree:build (14s) +nx run @fluentui/perf-test-react-components:build (11s) +πŸ”₯ nx run @fluentui/react-datepicker-compat:build (14s) +πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/vr-tests-react-components:build (26s) # build-storybook +nx run @fluentui/react-date-time:build (6s) +nx run @fluentui/perf-test:build (6s) +nx run @fluentui/local-sandbox:build (6s) +nx run @fluentui/projects-test:build (4s) +πŸ”₯πŸ”₯ nx run @fluentui/react-data-grid-react-window:build (15s) +πŸ”₯πŸ”₯ nx run @fluentui/react-portal-compat:build (19s) +πŸ”₯πŸ”₯ nx run @fluentui/theme-designer:build (22s) +πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/recipes-react-components:build (30s) # build-storybook +nx run @fluentui/ssr-tests-v9:build (11s) +nx run @fluentui/theming-designer:build (6s) +πŸ”₯πŸ”₯ nx run @fluentui/vr-tests:build (18s) +nx run @fluentui/ssr-tests:build (11s) +nx run @fluentui/perf-test-northstar:build (2s) +nx run @fluentui/babel-preset-global-context:build (8s) +nx run @fluentui/public-docsite-v9:build (7s) +πŸ”₯ nx run @fluentui/public-docsite:build (12s) +``` + +**slowest from 1st run (not CI=true set -> api-extractor uses declaration files for path-aliases in v9 packages):** + +```sh +# NOTE: no CI=true used +nx run-many --target=build --skip-nx-cache + +# wc +@fluentui/web-components:build (15s) + +# v0 +# no api-extractor used +@fluentui/react-icons-northstar:build (15s) +@fluentui/react-bindings:build (20s) +@fluentui/react-northstar-prototypes:build (21s) +@fluentui/code-sandbox:build (29s) +@fluentui/react-northstar:build (2m) + +# v8 +@fluentui/react-experiments:build (12s) +@fluentui/ssr-tests:build (14s) +@fluentui/public-docsite:build (15s) +@fluentui/react-examples:build (18s) +@fluentui/vr-tests:build (18s) +@fluentui/react-icons-mdl2:build (20s) +@fluentui/react:build (24s) # note: this is with using ts-solution configs ( without it would be around 30s) +@fluentui/docs:build (1m) +@fluentui/perf-test:build (2m) + + +# v9 ish +@fluentui/babel-preset-storybook-full-source:build (13s) + +# v9 +@fluentui/react-field:build (13s) +@fluentui/react-dialog:build (14s) +@fluentui/react-infobutton:build (15s) +@fluentui/react-combobox:build (15s) +@fluentui/react-toolbar:build (15s) +@fluentui/react-menu:build (16s) +@fluentui/react-button:build (16s) +@fluentui/react-avatar:build (16s) +@fluentui/react-persona:build (16s) +@fluentui/react-datepicker-compat:build (16s) +@fluentui/react-alert:build (17s) +@fluentui/react-tree:build (18s) +@fluentui/react-data-grid-react-window:build (19s) +@fluentui/react-table:build (21s) +@fluentui/react-portal-compat:build (22s) +@fluentui/react-migration-v8-v9:build (26s) +@fluentui/vr-tests-react-components:build (26s) +@fluentui/theme-designer:build (27s) +@fluentui/react-migration-v0-v9:build (28s) +@fluentui/react-components:build (30s) +@fluentui/recipes-react-components:build (33s) +``` + +### With optimization v1 + +> - disable TS path aliases for v9 builds + +> parallel 1 / 1205s / (CI true/api-extractor won't use path aliases) / s + +```sh +nx run @fluentui/react-conformance:build (6s) +nx run @fluentui/react-conformance-griffel:build (7s) +nx run @fluentui/set-version:build (5s) +nx run @fluentui/keyboard-keys:build (6s) +nx run @fluentui/react-utilities:build (8s) +nx run @fluentui/react-context-selector:build (6s) +nx run @fluentui/merge-styles:build (7s) +nx run @fluentui/jest-serializer-merge-styles:build (4s) +nx run @fluentui/react-aria:build (7s) +nx run @fluentui/example-data:build (5s) +nx run @fluentui/styles:build (6s) +nx run @fluentui/react-component-event-listener:build (5s) +nx run @fluentui/accessibility:build (6s) +nx run @fluentui/babel-preset-storybook-full-source:build (9s) +nx run @fluentui/test-utilities:build (5s) +nx run @fluentui/react-northstar-styles-renderer:build (6s) +nx run @fluentui/react-component-ref:build (8s) +nx run @fluentui/dom-utilities:build (6s) +nx run @fluentui/utilities:build (7s) +nx run @fluentui/theme:build (7s) +nx run @fluentui/style-utilities:build (7s) +nx run @fluentui/font-icons-mdl2:build (5s) +nx run @fluentui/foundation-legacy:build (8s) +nx run @fluentui/common-styles:build (3s) +nx run @fluentui/docs-components:build (6s) +nx run @fluentui/react-storybook-addon-codesandbox:build (5s) +nx run @fluentui/react-portal-compat-context:build (6s) +nx run @fluentui/a11y-testing:build (4s) +nx run @fluentui/scheme-utilities:build (6s) +nx run @fluentui/react-window-provider:build (7s) +nx run @fluentui/react-hooks:build (7s) +nx run @fluentui/date-time-utilities:build (5s) +nx run @fluentui/state:build (5s) +nx run @fluentui/react-northstar-fela-renderer:build (7s) +πŸ”₯πŸ”₯ nx run @fluentui/react-bindings:build (16s) # + build:component-info / 11s tsc (because tsc -b with lot of project references) +πŸ”₯ nx run @fluentui/react-icons-northstar:build (12s) +nx run @fluentui/public-docsite-setup:build (4s) +nx run @fluentui/react-file-type-icons:build (5s) +nx run @fluentui/tokens:build (6s) +nx run @fluentui/react-theme:build (5s) +nx run @fluentui/react-shared-contexts:build (7s) +nx run @fluentui/react-tabster:build (7s) +nx run @fluentui/react-label:build (7s) +nx run @fluentui/react-field:build (8s) +nx run @fluentui/react-portal:build (6s) +πŸ”₯ nx run @fluentui/react-button:build (11s) +nx run @fluentui/react-positioning:build (7s) +nx run @fluentui/react-popover:build (8s) +nx run @fluentui/react-provider:build (8s) +nx run @fluentui/react-badge:build (8s) +nx run @fluentui/react-radio:build (9s) +nx run @fluentui/react-tooltip:build (8s) +πŸ”₯ nx run @fluentui/react-avatar:build (11s) +nx run @fluentui/react-text:build (9s) +nx run @fluentui/react-divider:build (7s) +nx run @fluentui/react-spinbutton:build (8s) +nx run @fluentui/react-checkbox:build (9s) +nx run @fluentui/react-infobutton:build (9s) +nx run @fluentui/react-persona:build (8s) +nx run @fluentui/react-input:build (8s) +πŸ”₯ nx run @fluentui/react-table:build (13s) +nx run @fluentui/react-storybook-addon:build (6s) +nx run @fluentui/react-image:build (7s) +nx run @fluentui/react-accordion:build (9s) +nx run @fluentui/react-link:build (8s) +nx run @fluentui/react-tabs:build (8s) +nx run @fluentui/react-spinner:build (8s) +nx run @fluentui/react-progress:build (8s) +nx run @fluentui/react-textarea:build (8s) +nx run @fluentui/react-select:build (8s) +nx run @fluentui/react-slider:build (8s) +nx run @fluentui/react-switch:build (9s) +nx run @fluentui/react-dialog:build (10s) +nx run @fluentui/react-card:build (8s) +nx run @fluentui/react-combobox:build (10s) +πŸ”₯ nx run @fluentui/react-menu:build (11s) +nx run @fluentui/react-toolbar:build (8s) +nx run @fluentui/react-alert:build (10s) +nx run @fluentui/keyboard-key:build (6s) +nx run @fluentui/react-focus:build (8s) +nx run @fluentui/webpack-utilities:build (4s) +πŸ”₯πŸ”₯ nx run @fluentui/react:build (20s) +nx run @fluentui/theme-samples:build (6s) +nx run @fluentui/azure-themes:build (6s) +nx run @fluentui/react-experiments:build (10s) +nx run @fluentui/storybook:build (5s) +nx run @fluentui/fluent2-theme:build (6s) +nx run @fluentui/react-component-nesting-registry:build (5s) +nx run @fluentui/priority-overflow:build (5s) +nx run @fluentui/react-proptypes:build (5s) +πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/react-northstar:build (25s) +πŸ”₯πŸ”₯ nx run @fluentui/code-sandbox:build (23s) # has react-northstar and docs-components as project-references (slow TS) +πŸ”₯πŸ”₯ nx run @fluentui/react-northstar-prototypes:build (17s) # has react-northstar,icons etc as project-references (slow TS) +nx run @fluentui/react-virtualizer:build (7s) +nx run @fluentui/react-overflow:build (6s) +πŸ”₯ nx run @fluentui/react-components:build (12s) +nx run @fluentui/monaco-editor:build (7s) +nx run @fluentui/react-monaco-editor:build (6s) +nx run @fluentui/react-docsite-components:build (8s) +nx run @fluentui/react-icon-provider:build (7s) +πŸ”₯πŸ”₯ nx run @fluentui/react-icons-mdl2:build (17s) # tsc takes 13 seconds !!! if emitDeclaration only is used - reduced to 9 seconds +nx run @fluentui/react-charting:build (8s) +nx run @fluentui/react-cards:build (8s) +πŸ”₯πŸ”₯ nx run @fluentui/react-examples:build (15s) +nx run @fluentui/api-docs:build (4s) +nx run @fluentui/public-docsite-resources:build (6s) +nx run @fluentui/ability-attributes:build (5s) +nx run @fluentui/react-northstar-emotion-renderer:build (5s) +nx run @fluentui/react-telemetry:build (6s) +nx run @fluentui/react-builder:build (8s) +nx run @fluentui/digest:build (2s) +nx run @fluentui/global-context:build (6s) +πŸ”₯ nx run @fluentui/react-migration-v0-v9:build (12s) +nx run @fluentui/react-migration-v8-v9:build (11s) +nx run @fluentui/react-icons-mdl2-branded:build (7s) +πŸ”₯ nx run @fluentui/web-components:build (12s) +πŸ”₯πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/docs:build (42s) # webpack + component-info(react-docgen) +nx run @fluentui/codemods:build (7s) +nx run @fluentui/my-lib:build (2s) +nx run @fluentui/react-avatar-context:build (6s) +nx run @fluentui/react-breadcrumb:build (7s) +nx run @fluentui/react-theme-sass:build (5s) +nx run @fluentui/react-drawer:build (7s) +nx run @fluentui/react-tags:build (7s) +nx run @fluentui/react-skeleton:build (8s) +nx run @fluentui/react-tree:build (10s) +πŸ”₯ nx run @fluentui/perf-test-react-components:build (12s) +nx run @fluentui/react-datepicker-compat:build (11s) +πŸ”₯πŸ”₯ nx run @fluentui/vr-tests-react-components:build (24s) # build-storybook +nx run @fluentui/react-date-time:build (6s) +nx run @fluentui/perf-test:build (6s) +nx run @fluentui/local-sandbox:build (6s) +nx run @fluentui/projects-test:build (4s) +nx run @fluentui/react-data-grid-react-window:build (8s) +nx run @fluentui/react-portal-compat:build (6s) +nx run @fluentui/theme-designer:build (11s) +πŸ”₯πŸ”₯πŸ”₯ nx run @fluentui/recipes-react-components:build (28s) # build-storybook +nx run @fluentui/ssr-tests-v9:build (9s) +nx run @fluentui/theming-designer:build (6s) +πŸ”₯πŸ”₯ nx run @fluentui/vr-tests:build (17s) # build-storybook +nx run @fluentui/ssr-tests:build (11s) +nx run @fluentui/perf-test-northstar:build (1s) +nx run @fluentui/babel-preset-global-context:build (8s) +nx run @fluentui/public-docsite-v9:build (7s) +πŸ”₯ nx run @fluentui/public-docsite:build (12s) +``` + +## Using TS solution configs for v8,v0 + +### @fluentui/react + +> tsc -p tsconfig.lib.json - means solution config style is used - ts include is narrowed down to impl files only (also stricter global typings) + +| Run | time | delta | remarks | +| ---------------------------------------------------------------- | ------ | ------ | ------------------------------------------------ | +| yarn workspace @fluentui/react tsc | 12s | | | +| yarn workspace @fluentui/react tsc -p tsconfig.lib.json | 6.5s | 46% πŸš… | | +| yarn workspace @fluentui/react tsc -b tsconfig.json | 10.46s | 12.8% | in reality we need -b exec with solution configs | +| --- | | | | +| yarn workspace @fluentui/utilities tsc | 3.10s | | | +| yarn workspace @fluentui/utilities tsc -p tsconfig.lib.json | 2.59s | 16% | | +| --- | | | | +| yarn workspace @fluentui/react-examples tsc | 12.73s | | | +| yarn workspace @fluentui/react-examples tsc -p tsconfig.lib.json | ?s | ?% | | +| --- | | | | +| yarn workspace @fluentui/react-charting tsc | 4.62s | | | +| yarn workspace @fluentui/react-charting tsc -p tsconfig.lib.json | ?s | ?% | | + +**Summary (ts solution configs):** + +Based on data metrics ts solution configs for old projects (v8) will give use approx 46% speed boost for `build` task. +Even better production file will be properly narrowed in sense of TSC context this giving us better/real state of ECMA features used in these old libraries. + +**Various emit modes (with TS solution config)** + +| Run: @fluentui/react tsc -p tsconfig.lib.json | time | delta | +| --------------------------------------------- | ------ | ------- | +| declaration: true | 10.24s | | +| declaration: false (transpile only mode) | 9.48s | | +| declaration: false (transpile only with swc) | 0.3s | | +| emitDeclarationOnly: true | 7.51s | % 26 πŸš… | + +**Summary (emit modes):** + +Based on data metrics using swc for transpilation and tsc only for type declaration will give us approx 26% speed boost for `build` task. Besides of measured "time to run" metrics, using ts only for type declaration generation will also use less memory/CPU as we wont execute full TSC 3 times to produce both `js` and `.d.ts` output. + +> TSC will be executed only once (also there is no difference between type declaration for different module formats), while swc 2(3 for amd) times (tsc --1-> es6 --2-> cjs --(3)-->amd). + +### @fluentui/react-northstar + +| Run: yarn workspace @fluentui/react-northstar tsc -b -f tsconfig.json | time | delta | +| --------------------------------------------------------------------- | ---- | ----- | +| current | 27s | | +| emitDeclarationOnly: true | 26s | | +| narrowed `"include" in all packages` | 25s | | +| narrowed `"include" in all packages` + emitDeclarationOnly | 23s | | diff --git a/docs/ci-perf-bundle.md b/docs/ci-perf-bundle.md new file mode 100644 index 0000000000000..0a271aa33c115 --- /dev/null +++ b/docs/ci-perf-bundle.md @@ -0,0 +1,5 @@ +## bundle + +## Results + +**Projects with bundle target:** 24 ( all v8 besides `perf-test-react-components` app) diff --git a/docs/ci-perf-e2e.md b/docs/ci-perf-e2e.md new file mode 100644 index 0000000000000..b556df502f35c --- /dev/null +++ b/docs/ci-perf-e2e.md @@ -0,0 +1,5 @@ +## e2e + +## Results + +**Projects with e2e target:** 16 ( from which only 1 is a real e2e (fluentui/e2e - v0). The rest uses cypress component testing) diff --git a/docs/ci-perf-lint.md b/docs/ci-perf-lint.md new file mode 100644 index 0000000000000..d275f675ec357 --- /dev/null +++ b/docs/ci-perf-lint.md @@ -0,0 +1,24 @@ +# `lint` + +## Results + +**Projects with lint target:** 172 + +## current build times within whole repo + +### CI + +| Run type | time | delta | +| -------------------------------------- | ------ | ----- | +| lage lint | 7m 21s | | +| nx run-many --target=lint --parallel=8 | 6m 4s | 17.4% | + +### Local + +> - parallel 1 +> - ??? projects have target:lint + +``` +nx run-many --target=build --skip-nx-cache + +``` diff --git a/docs/ci-perf-tests.md b/docs/ci-perf-tests.md new file mode 100644 index 0000000000000..c4fff384db43f --- /dev/null +++ b/docs/ci-perf-tests.md @@ -0,0 +1,1491 @@ +## test + +## Results + +**Projects with test target:** 150 + +| Run type | time | delta | remarks | +| --------------------------------------------------------------------------------------------------------------- | ------- | ----- | ------- | +| 1. nx run-many --target=test --parallel=4 | 26m 9s | | | +| 2. nx run-many --target=test --parallel=8 --maxWorkers=4 | 23m 34s | | πŸš… | +| 3. nx run-many --target=test --parallel=8 --maxWorkers=2 | 25m 34s | | | +| 4. nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 | 29m 11s | | | +| 5. nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 && ts-jest isolatedModules | 31m 56s | | | + +(5.) - this doesn't make any sense, the test time should have been the same as the fastest or even faster (23m) + +### Local + +> - parallel 1, maxWorkers=default +> - ? projects have target:test + +``` +nx run-many --target=test --skip-nx-cache + +βœ” nx run @fluentui/scripts-utils:test (2s) +βœ” nx run @fluentui/scripts-monorepo:test (2s) +βœ” nx run @fluentui/scripts-prettier:test (1s) +βœ” nx run @fluentui/eslint-plugin:test (4s) +βœ” nx run @fluentui/scripts-tasks:test (3s) +βœ” nx run @fluentui/scripts-api-extractor:test (2s) +βœ” nx run @fluentui/scripts-jest:test (3s) +βœ” nx run @fluentui/react-conformance:test (20s) +βœ” nx run @fluentui/keyboard-keys:test (2s) +βœ” nx run @fluentui/react-utilities:test (3s) +βœ” nx run @fluentui/tokens:test (3s) +βœ” nx run @fluentui/react-theme:test (2s) +βœ” nx run @fluentui/set-version:test (3s) +βœ” nx run @fluentui/react-conformance-griffel:test (2s) +βœ” nx run @fluentui/react-shared-contexts:test (2s) +βœ” nx run @fluentui/dom-utilities:test (6s) +βœ” nx run @fluentui/scripts-cypress:test (2s) +βœ” nx run @fluentui/scripts-webpack:test (2s) +βœ” nx run @fluentui/react-context-selector:test (3s) +βœ” nx run @fluentui/react-tabster:test (2s) +βœ” nx run @fluentui/test-utilities:test (6s) +βœ” nx run @fluentui/merge-styles:test (8s) +βœ” nx run @fluentui/jest-serializer-merge-styles:test (6s) +βœ” nx run @fluentui/react-portal-compat-context:test (2s) +βœ” nx run @fluentui/utilities:test (10s) +βœ” nx run @fluentui/scripts-puppeteer:test (2s) +βœ” nx run @fluentui/theme:test (7s) +βœ” nx run @fluentui/style-utilities:test (6s) +βœ” nx run @fluentui/scripts-projects-test:test (2s) +βœ” nx run @fluentui/react-label:test (3s) +βœ” nx run @fluentui/scripts-babel:test (2s) +βœ” nx run @fluentui/react-field:test (5s) +βœ” nx run @fluentui/react-aria:test (3s) +βœ” nx run @fluentui/scripts-gulp:test (2s) +βœ” nx run @fluentui/react-portal:test (4s) +βœ” nx run @fluentui/react-window-provider:test (6s) +βœ” nx run @fluentui/keyboard-key:test (5s) +βœ” nx run @fluentui/react-positioning:test (4s) +βœ” nx run @fluentui/date-time-utilities:test (7s) +βœ” nx run @fluentui/foundation-legacy:test (7s) +βœ” nx run @fluentui/font-icons-mdl2:test (3s) +βœ” nx run @fluentui/example-data:test (3s) +βœ” nx run @fluentui/react-focus:test (8s) +βœ” nx run @fluentui/react-hooks:test (8s) +πŸ”₯ βœ” nx run @fluentui/react:test (1m) +βœ” nx run @fluentui/react-popover:test (5s) +βœ” nx run @fluentui/react-tooltip:test (3s) +βœ” nx run @fluentui/react-badge:test (5s) +βœ” nx run @fluentui/styles:test (8s) +βœ” nx run @fluentui/react-avatar:test (6s) +βœ” nx run @fluentui/react-button:test (7s) +βœ” nx run @fluentui/react-component-event-listener:test (7s) +βœ” nx run @fluentui/react-northstar-fela-renderer:test (7s) +βœ” nx run @fluentui/react-component-ref:test (7s) +βœ” nx run @fluentui/accessibility:test (10s) +βœ” nx run @fluentui/react-provider:test (5s) +βœ” nx run @fluentui/react-radio:test (6s) +βœ” nx run @fluentui/react-text:test (10s) +βœ” nx run @fluentui/react-bindings:test (13s) +βœ” nx run @fluentui/react-infobutton:test (5s) +βœ” nx run @fluentui/react-spinbutton:test (6s) +βœ” nx run @fluentui/react-checkbox:test (5s) +βœ” nx run @fluentui/react-divider:test (4s) +βœ” nx run @fluentui/react-persona:test (5s) +βœ” nx run @fluentui/react-input:test (4s) +βœ” nx run @fluentui/react-component-nesting-registry:test (6s) +βœ” nx run @fluentui/priority-overflow:test (3s) +βœ” nx run @fluentui/react-accordion:test (7s) +βœ” nx run @fluentui/react-combobox:test (9s) +βœ” nx run @fluentui/react-progress:test (5s) +βœ” nx run @fluentui/react-textarea:test (5s) +βœ” nx run @fluentui/react-icons-northstar:test (13s) +βœ” nx run @fluentui/react-spinner:test (4s) +βœ” nx run @fluentui/react-toolbar:test (8s) +βœ” nx run @fluentui/react-dialog:test (8s) +βœ” nx run @fluentui/react-select:test (6s) +βœ” nx run @fluentui/react-slider:test (5s) +βœ” nx run @fluentui/react-switch:test (5s) +βœ” nx run @fluentui/react-image:test (4s) +βœ” nx run @fluentui/react-table:test (13s) +βœ” nx run @fluentui/react-card:test (4s) +βœ” nx run @fluentui/react-link:test (4s) +βœ” nx run @fluentui/react-menu:test (10s) +βœ” nx run @fluentui/react-tabs:test (5s) +βœ” nx run @fluentui/react-proptypes:test (7s) +βœ” nx run @fluentui/react-virtualizer:test (2s) +βœ” nx run @fluentui/react-overflow:test (3s) +πŸ”₯ βœ” nx run @fluentui/react-alert:test (17m) 🚨🚨🚨 / takes 8s when run independently +πŸ”₯ βœ” nx run @fluentui/react-northstar:test (5m) +βœ” nx run @fluentui/react-components:test (8s) +βœ” nx run @fluentui/babel-preset-storybook-full-source:test (6s) +βœ” nx run @fluentui/scripts-storybook:test (14s) +βœ” nx run @fluentui/react-icon-provider:test (10s) +βœ” nx run @fluentui/react-monaco-editor:test (11s) +πŸ”₯ βœ” nx run @fluentui/react-icons-mdl2:test (16m) 🚨🚨🚨 / takes 20s when run independently +βœ” nx run @fluentui/react-docsite-components:test (7s) +βœ” nx run @fluentui/react-experiments:test (8s) +βœ” nx run @fluentui/react-storybook-addon-codesandbox:test (2s) +βœ” nx run @fluentui/react-file-type-icons:test (6s) +βœ” nx run @fluentui/react-charting:test (13s) +βœ” nx run @fluentui/react-cards:test (6s) +βœ” nx run @fluentui/react-storybook-addon:test (2s) +βœ” nx run @fluentui/api-docs:test (3s) +βœ” nx run @fluentui/react-northstar-emotion-renderer:test (7s) +πŸ”₯ βœ” nx run @fluentui/react-builder:test (17s) +βœ” nx run @fluentui/scripts-github:test (2s) +βœ” nx run @fluentui/react-migration-v0-v9:test (9s) +βœ” nx run @fluentui/react-migration-v8-v9:test (2s) +βœ” nx run @fluentui/global-context:test (3s) +βœ” nx run @fluentui/digest:test (1s) +βœ” nx run @fluentui/web-components:test (6s) +βœ” nx run @fluentui/react-data-grid-react-window:test (2s) +βœ” nx run @fluentui/babel-preset-global-context:test (2s) +βœ” nx run @fluentui/react-datepicker-compat:test (2s) +βœ” nx run @fluentui/react-avatar-context:test (1s) +βœ” nx run @fluentui/react-portal-compat:test (3s) +βœ” nx run @fluentui/react-breadcrumb:test (3s) +βœ” nx run @fluentui/react-theme-sass:test (2s) +βœ” nx run @fluentui/react-skeleton:test (4s) +βœ” nx run @fluentui/theme-designer:test (2s) +βœ” nx run @fluentui/react-drawer:test (3s) +βœ” nx run @fluentui/perf-test-northstar:test (1s) +πŸ”₯ βœ” nx run @fluentui/ts-minbar-test-react-components:test (36s) +βœ” nx run @fluentui/react-tags:test (4s) +βœ” nx run @fluentui/react-tree:test (6s) +βœ” nx run @fluentui/circulars-test:test (6s) +πŸ”₯ βœ” nx run @fluentui/projects-test:test (5m) +βœ” nx run @fluentui/vr-tests-react-components:test (8s) +βœ” nx run @fluentui/scripts-update-release-notes:test (2s) +πŸ”₯ βœ” nx run @fluentui/ts-minbar-test-react:test (42s) +βœ” nx run @fluentui/scripts-fluentui-publish:test (1s) +βœ” nx run @fluentui/scripts-package-manager:test (2s) +βœ” nx run @fluentui/react-18-tests-v8:test (3s) +βœ” nx run @fluentui/react-18-tests-v9:test (4s) +βœ” nx run @fluentui/theming-designer:test (3s) +πŸ”₯ βœ” nx run @fluentui/cra-template:test (2m) +βœ” nx run @fluentui/bundle-size:test (3s) +βœ” nx run @fluentui/public-docsite:test (4s) +βœ” nx run @fluentui/scripts-lint-staged:test (2s) +βœ” nx run @fluentui/scripts-generators:test (3s) +βœ” nx run @fluentui/scripts-triage-bot:test (3s) +βœ” nx run @fluentui/ssr-tests-v9:test (9s) +πŸ”₯ βœ” nx run @fluentui/codemods:test (20s) +βœ” nx run @fluentui/scripts-beachball:test (11s) +βœ” nx run @fluentui/scripts-executors:test (3s) +βœ” nx run @fluentui/scripts-dangerjs:test (1s) +βœ” nx run @fluentui/my-lib:test (3s) +βœ” nx run @fluentui/scripts-ts-node:test (1s) +βœ” nx run @fluentui/ssr-tests:test (6s) +βœ” nx run @fluentui/nx-workspace-tools:test (3s) +``` + +## whole pipeline with test optimization v1 + +**Total:** lage test / 33m 37.51s + +``` +lage build test lint type-check + + +@fluentui/pr-deploy-site lint βœ”οΈ done - 4.16s + +@fluentui/digest build βœ”οΈ done - 6.06s + +@fluentui/public-docsite-resources lint βœ”οΈ done - 9.54s + +@fluentui/perf-test-react-components lint βœ”οΈ done - 15.36s + +@fluentui/perf-test lint βœ”οΈ done - 16.57s + +@fluentui/public-docsite-v9 lint βœ”οΈ done - 15.91s + +@fluentui/public-docsite lint βœ”οΈ done - 24.72s + +@fluentui/react-18-tests-v8 lint βœ”οΈ done - 19.86s + +@fluentui/react-18-tests-v9 lint βœ”οΈ done - 22.72s + +@fluentui/recipes-react-components lint βœ”οΈ done - 17.12s + +@fluentui/theming-designer lint βœ”οΈ done - 15.28s + +@fluentui/ssr-tests-v9 lint βœ”οΈ done - 24.02s + +@fluentui/vr-tests lint βœ”οΈ done - 17.50s + +@fluentui/api-docs lint βœ”οΈ done - 10.71s + +@fluentui/a11y-testing lint βœ”οΈ done - 11.03s + +@fluentui/bundle-size lint βœ”οΈ done - 4.70s + +@fluentui/vr-tests-react-components lint βœ”οΈ done - 19.54s + +@fluentui/web-components build βœ”οΈ done - 49.87s + +@fluentui/azure-themes lint βœ”οΈ done - 17.53s + +@fluentui/cra-template lint βœ”οΈ done - 9.87s + +@fluentui/dom-utilities lint βœ”οΈ done - 9.40s + +@fluentui/date-time-utilities lint βœ”οΈ done - 11.81s + +@fluentui/eslint-plugin lint βœ”οΈ done - 11.24s + +@fluentui/codemods lint βœ”οΈ done - 15.00s + +@fluentui/example-data lint βœ”οΈ done - 8.91s + +@fluentui/font-icons-mdl2 lint βœ”οΈ done - 9.51s + +@fluentui/jest-serializer-merge-styles lint βœ”οΈ done - 7.92s + +@fluentui/keyboard-key lint βœ”οΈ done - 9.17s + +@fluentui/monaco-editor lint βœ”οΈ done - 8.44s + +@fluentui/fluent2-theme lint βœ”οΈ done - 14.20s + +@fluentui/foundation-legacy lint βœ”οΈ done - 13.36s + +@fluentui/merge-styles lint βœ”οΈ done - 11.72s + +@fluentui/public-docsite-setup lint βœ”οΈ done - 11.68s + +@fluentui/react-cards lint βœ”οΈ done - 11.01s + +@fluentui/react-date-time lint βœ”οΈ done - 8.83s + +@fluentui/react-conformance lint βœ”οΈ done - 12.43s + +@fluentui/react-docsite-components lint βœ”οΈ done - 16.28s + +@fluentui/react-file-type-icons lint βœ”οΈ done - 10.37s + +@fluentui/react-charting lint βœ”οΈ done - 25.96s + +@fluentui/react-focus lint βœ”οΈ done - 14.40s + +@fluentui/react-icon-provider lint βœ”οΈ done - 10.60s + +@fluentui/react-hooks lint βœ”οΈ done - 13.27s + +@fluentui/react-experiments lint βœ”οΈ done - 24.46s + +@fluentui/react-window-provider lint βœ”οΈ done - 9.54s + +@fluentui/react-monaco-editor lint βœ”οΈ done - 13.97s + +@fluentui/react-icons-mdl2-branded lint βœ”οΈ done - 19.13s + +@fluentui/scheme-utilities lint βœ”οΈ done - 12.71s + +@fluentui/set-version lint βœ”οΈ done - 8.66s + +@fluentui/storybook lint βœ”οΈ done - 8.96s + +@fluentui/test-utilities lint βœ”οΈ done - 8.87s + +@fluentui/style-utilities lint βœ”οΈ done - 10.20s + +@fluentui/theme lint βœ”οΈ done - 9.71s + +@fluentui/web-components lint βœ”οΈ done - 5.82s + +@fluentui/theme-samples lint βœ”οΈ done - 12.39s + +πŸ”₯ @fluentui/react lint βœ”οΈ done - 1m 11.98s + +@fluentui/tokens lint βœ”οΈ done - 12.34s + +πŸ”₯ @fluentui/react-examples lint βœ”οΈ done - 1m 7.04s + +@fluentui/react-icons-mdl2 lint βœ”οΈ done - 49.12s + +@fluentui/utilities lint βœ”οΈ done - 19.85s + +@fluentui/webpack-utilities lint βœ”οΈ done - 11.61s + +@fluentui/global-context lint βœ”οΈ done - 14.14s + +@fluentui/babel-preset-storybook-full-source lint βœ”οΈ done - 14.88s + +@fluentui/keyboard-keys lint βœ”οΈ done - 9.24s + +@fluentui/priority-overflow lint βœ”οΈ done - 11.00s + +@fluentui/babel-preset-global-context lint βœ”οΈ done - 21.04s + +@fluentui/react-avatar-context lint βœ”οΈ done - 8.19s + +@fluentui/react-aria lint βœ”οΈ done - 21.28s + +@fluentui/react-breadcrumb lint βœ”οΈ done - 18.00s + +@fluentui/react-accordion lint βœ”οΈ done - 29.74s + +@fluentui/react-alert lint βœ”οΈ done - 30.83s + +@fluentui/react-badge lint βœ”οΈ done - 27.50s + +@fluentui/react-avatar lint βœ”οΈ done - 42.07s + +@fluentui/react-conformance-griffel lint βœ”οΈ done - 13.41s + +@fluentui/react-button lint βœ”οΈ done - 39.23s + +@fluentui/react-card lint βœ”οΈ done - 32.90s + +@fluentui/react-checkbox lint βœ”οΈ done - 31.50s + +@fluentui/react-context-selector lint βœ”οΈ done - 12.65s + +@fluentui/react-combobox lint βœ”οΈ done - 37.18s + +@fluentui/react-data-grid-react-window lint βœ”οΈ done - 18.97s + +@fluentui/react-components lint βœ”οΈ done - 43.98s + +@fluentui/react-drawer lint βœ”οΈ done - 18.69s + +@fluentui/react-divider lint βœ”οΈ done - 22.92s + +@fluentui/react-datepicker-compat lint βœ”οΈ done - 32.67s + +@fluentui/react-image lint βœ”οΈ done - 21.97s + +@fluentui/react-field lint βœ”οΈ done - 29.97s + +@fluentui/react-dialog lint βœ”οΈ done - 38.31s + +@fluentui/react-infobutton lint βœ”οΈ done - 30.33s + +@fluentui/react-label lint βœ”οΈ done - 22.84s + +@fluentui/react-input lint βœ”οΈ done - 26.65s + +@fluentui/react-link lint βœ”οΈ done - 23.24s + +@fluentui/react-overflow lint βœ”οΈ done - 25.69s + +@fluentui/react-portal lint βœ”οΈ done - 22.86s + +@fluentui/react-popover lint βœ”οΈ done - 28.35s + +@fluentui/react-menu lint βœ”οΈ done - 44.12s + +@fluentui/react-persona lint βœ”οΈ done - 31.08s + +@fluentui/react-migration-v0-v9 lint βœ”οΈ done - 42.53s + +@fluentui/react-migration-v8-v9 lint βœ”οΈ done - 41.32s + +@fluentui/react-portal-compat-context lint βœ”οΈ done - 9.03s + +@fluentui/react-positioning lint βœ”οΈ done - 13.75s + +@fluentui/react-shared-contexts lint βœ”οΈ done - 10.09s + +@fluentui/react-portal-compat lint βœ”οΈ done - 25.77s + +@fluentui/react-progress lint βœ”οΈ done - 24.65s + +@fluentui/react-provider lint βœ”οΈ done - 23.52s + +@fluentui/react-select lint βœ”οΈ done - 29.15s + +@fluentui/react-radio lint βœ”οΈ done - 31.63s + +@fluentui/react-skeleton lint βœ”οΈ done - 22.96s + +@fluentui/react-slider lint βœ”οΈ done - 26.11s + +@fluentui/react-storybook-addon-codesandbox lint βœ”οΈ done - 11.55s + +@fluentui/react-storybook-addon lint βœ”οΈ done - 20.26s + +@fluentui/react-spinner lint βœ”οΈ done - 24.68s + +@fluentui/react-spinbutton lint βœ”οΈ done - 29.98s + +@fluentui/react-tabster lint βœ”οΈ done - 15.49s + +@fluentui/react-tags lint βœ”οΈ done - 18.49s + +@fluentui/react-switch lint βœ”οΈ done - 29.47s + +@fluentui/react-theme-sass lint βœ”οΈ done - 8.06s + +@fluentui/react-tabs lint βœ”οΈ done - 31.66s + +@fluentui/react-text lint βœ”οΈ done - 26.05s + +@fluentui/react-textarea lint βœ”οΈ done - 25.95s + +@fluentui/react-theme lint βœ”οΈ done - 19.51s + +@fluentui/react-utilities lint βœ”οΈ done - 17.76s + +@fluentui/react-table lint βœ”οΈ done - 57.84s + +@fluentui/react-tooltip lint βœ”οΈ done - 24.13s + +@fluentui/scripts-api-extractor lint βœ”οΈ done - 3.64s + +@fluentui/react-toolbar lint βœ”οΈ done - 34.81s + +@fluentui/react-virtualizer lint βœ”οΈ done - 22.23s + +@fluentui/scripts-babel lint βœ”οΈ done - 5.99s + +@fluentui/scripts-cypress lint βœ”οΈ done - 6.65s + +@fluentui/scripts-beachball lint βœ”οΈ done - 10.01s + +@fluentui/scripts-fluentui-publish lint βœ”οΈ done - 6.20s + +@fluentui/scripts-dangerjs lint βœ”οΈ done - 7.81s + +@fluentui/react-tree lint βœ”οΈ done - 32.97s + +@fluentui/theme-designer lint βœ”οΈ done - 28.71s + +@fluentui/scripts-executors lint βœ”οΈ done - 9.93s + +@fluentui/scripts-lint-staged lint βœ”οΈ done - 3.29s + +@fluentui/scripts-github lint βœ”οΈ done - 5.92s + +@fluentui/scripts-package-manager lint βœ”οΈ done - 3.28s + +@fluentui/scripts-generators lint βœ”οΈ done - 9.36s + +@fluentui/scripts-jest lint βœ”οΈ done - 7.91s + +@fluentui/scripts-monorepo lint βœ”οΈ done - 7.51s + +@fluentui/scripts-prettier lint βœ”οΈ done - 5.53s + +@fluentui/scripts-projects-test lint βœ”οΈ done - 6.60s + +@fluentui/scripts-gulp lint βœ”οΈ done - 13.24s + +@fluentui/scripts-ts-node lint βœ”οΈ done - 3.28s + +@fluentui/scripts-puppeteer lint βœ”οΈ done - 6.86s + +@fluentui/scripts-storybook lint βœ”οΈ done - 8.03s + +@fluentui/scripts-triage-bot lint βœ”οΈ done - 7.84s + +@fluentui/scripts-utils lint βœ”οΈ done - 5.32s + +@fluentui/code-sandbox lint βœ”οΈ done - 3.79s + +@fluentui/scripts-tasks lint βœ”οΈ done - 10.03s + +@fluentui/scripts-webpack lint βœ”οΈ done - 5.98s + +@fluentui/scripts-update-release-notes lint βœ”οΈ done - 7.92s + +@fluentui/projects-test lint βœ”οΈ done - 1.58s + +@fluentui/accessibility lint βœ”οΈ done - 7.59s + +@fluentui/perf lint βœ”οΈ done - 3.75s + +@fluentui/docs-components lint βœ”οΈ done - 4.51s + +@fluentui/react-component-event-listener lint βœ”οΈ done - 3.32s + +@fluentui/e2e lint βœ”οΈ done - 6.30s + +@fluentui/react-component-nesting-registry lint βœ”οΈ done - 3.63s + +@fluentui/react-component-ref lint βœ”οΈ done - 3.93s + +@fluentui/react-builder lint βœ”οΈ done - 6.70s + +@fluentui/react-bindings lint βœ”οΈ done - 8.17s + +@fluentui/react-northstar-emotion-renderer lint βœ”οΈ done - 3.83s + +@fluentui/react-northstar-fela-renderer lint βœ”οΈ done - 4.27s + +@fluentui/react-northstar-styles-renderer lint βœ”οΈ done - 3.46s + +@fluentui/react-icons-northstar lint βœ”οΈ done - 9.09s + +@fluentui/react-proptypes lint βœ”οΈ done - 3.75s + +@fluentui/react-telemetry lint βœ”οΈ done - 4.05s + +@fluentui/state lint βœ”οΈ done - 3.71s + +@fluentui/react-northstar-prototypes lint βœ”οΈ done - 10.37s + +@fluentui/styles lint βœ”οΈ done - 4.82s + +@fluentui/bundle-size test βœ”οΈ done - 5.42s + +@fluentui/scripts-api-extractor test βœ”οΈ done - 2.70s + +@fluentui/bundle-size type-check βœ”οΈ done - 7.48s + +@fluentui/scripts-api-extractor type-check βœ”οΈ done - 3.16s + +@fluentui/nx-workspace-tools lint βœ”οΈ done - 14.01s + +@fluentui/scripts-babel test βœ”οΈ done - 2.38s + +@fluentui/scripts-cypress test βœ”οΈ done - 2.64s + +@fluentui/scripts-babel type-check βœ”οΈ done - 3.89s + +@fluentui/eslint-plugin test βœ”οΈ done - 12.44s + +@fluentui/scripts-cypress type-check βœ”οΈ done - 4.09s + +@fluentui/scripts-github test βœ”οΈ done - 2.10s + +@fluentui/scripts-package-manager test βœ”οΈ done - 2.02s + +@fluentui/scripts-github type-check βœ”οΈ done - 3.35s + +@fluentui/scripts-package-manager type-check βœ”οΈ done - 2.89s + +@fluentui/scripts-puppeteer type-check βœ”οΈ done - 3.60s + +@fluentui/scripts-ts-node test βœ”οΈ done - 2.23s + +@fluentui/scripts-triage-bot type-check βœ”οΈ done - 4.09s + +@fluentui/scripts-ts-node type-check βœ”οΈ done - 1.15s + +@fluentui/docs lint βœ”οΈ done - 43.39s + +@fluentui/scripts-puppeteer test βœ”οΈ done - 8.55s + +@fluentui/scripts-utils test βœ”οΈ done - 2.25s + +@fluentui/react-northstar lint βœ”οΈ done - 36.87s + +@fluentui/scripts-triage-bot test βœ”οΈ done - 8.31s + +@fluentui/typings type-check βœ”οΈ done - 1.13s + +@fluentui/scripts-utils type-check βœ”οΈ done - 2.85s + +@fluentui/digest test βœ”οΈ done - 1.76s + +@fluentui/scripts-update-release-notes test βœ”οΈ done - 2.27s + +@fluentui/scripts-update-release-notes type-check βœ”οΈ done - 6.13s + +@fluentui/scripts-monorepo type-check βœ”οΈ done - 6.56s + +@fluentui/scripts-monorepo test βœ”οΈ done - 11.88s + +@fluentui/nx-workspace-tools type-check βœ”οΈ done - 15.64s + +@fluentui/scripts-dangerjs test βœ”οΈ done - 4.78s + +@fluentui/scripts-beachball type-check βœ”οΈ done - 10.25s + +@fluentui/scripts-fluentui-publish test βœ”οΈ done - 3.15s + +@fluentui/scripts-fluentui-publish type-check βœ”οΈ done - 1.89s + +@fluentui/scripts-dangerjs type-check βœ”οΈ done - 8.39s + +@fluentui/nx-workspace-tools test βœ”οΈ done - 24.48s + +@fluentui/scripts-lint-staged test βœ”οΈ done - 1.99s + +@fluentui/scripts-jest type-check βœ”οΈ done - 4.86s + +@fluentui/scripts-beachball test βœ”οΈ done - 20.32s + +@fluentui/scripts-prettier test βœ”οΈ done - 2.05s + +@fluentui/scripts-lint-staged type-check βœ”οΈ done - 3.89s + +@fluentui/scripts-projects-test test βœ”οΈ done - 2.33s + +@fluentui/scripts-webpack test βœ”οΈ done - 2.23s + +@fluentui/scripts-prettier type-check βœ”οΈ done - 3.58s + +@fluentui/scripts-jest test βœ”οΈ done - 10.07s + +@fluentui/scripts-projects-test type-check βœ”οΈ done - 4.21s + +@fluentui/scripts-webpack type-check βœ”οΈ done - 3.71s + +@fluentui/scripts-executors type-check βœ”οΈ done - 5.02s + +@fluentui/scripts-executors test βœ”οΈ done - 8.17s + +@fluentui/a11y-testing build βœ”οΈ done - 6.74s + +@fluentui/api-docs build βœ”οΈ done - 6.65s + +@fluentui/public-docsite-setup build βœ”οΈ done - 7.12s + +@fluentui/example-data build βœ”οΈ done - 11.07s + +@fluentui/codemods build βœ”οΈ done - 15.30s + +@fluentui/web-components test βœ”οΈ done - 48.68s + +@fluentui/keyboard-key build βœ”οΈ done - 12.57s + +@fluentui/set-version build βœ”οΈ done - 9.30s + +@fluentui/monaco-editor build βœ”οΈ done - 22.28s + +@fluentui/webpack-utilities build βœ”οΈ done - 10.78s + +@fluentui/react-conformance build βœ”οΈ done - 16.76s + +@fluentui/test-utilities build βœ”οΈ done - 14.05s + +@fluentui/tokens build βœ”οΈ done - 14.13s + +@fluentui/keyboard-keys build βœ”οΈ done - 12.23s + +@fluentui/priority-overflow build βœ”οΈ done - 11.63s + +@fluentui/react-storybook-addon-codesandbox build βœ”οΈ done - 12.96s + +@fluentui/react-portal-compat-context build βœ”οΈ done - 13.81s + +@fluentui/babel-preset-global-context build βœ”οΈ done - 23.53s + +@fluentui/scripts-tasks type-check βœ”οΈ done - 6.78s + +@fluentui/scripts-generators type-check βœ”οΈ done - 7.40s + +@fluentui/scripts-tasks test βœ”οΈ done - 11.15s + +@fluentui/babel-preset-storybook-full-source build βœ”οΈ done - 24.69s + +@fluentui/scripts-generators test βœ”οΈ done - 10.34s + +@fluentui/ability-attributes build βœ”οΈ done - 18.36s + +@fluentui/accessibility build βœ”οΈ done - 21.61s + +@fluentui/react-component-event-listener build βœ”οΈ done - 17.47s + +@fluentui/react-component-nesting-registry build βœ”οΈ done - 17.41s + +@fluentui/docs-components build βœ”οΈ done - 19.52s + +@fluentui/scripts-gulp test βœ”οΈ done - 2.21s + +@fluentui/react-component-ref build βœ”οΈ done - 25.57s + +@fluentui/pr-deploy-site type-check βœ”οΈ done - 8.36s + +@fluentui/react-proptypes build βœ”οΈ done - 16.07s + +@fluentui/scripts-gulp type-check βœ”οΈ done - 11.21s + +@fluentui/state build βœ”οΈ done - 13.50s + +@fluentui/api-docs test βœ”οΈ done - 4.70s + +@fluentui/styles build βœ”οΈ done - 15.36s + +@fluentui/example-data test βœ”οΈ done - 4.70s + +@fluentui/set-version test βœ”οΈ done - 4.42s + +@fluentui/keyboard-key test βœ”οΈ done - 9.54s + +@fluentui/date-time-utilities build βœ”οΈ done - 12.54s + +@fluentui/dom-utilities build βœ”οΈ done - 14.11s + +@fluentui/react-conformance-griffel build βœ”οΈ done - 11.59s + +@fluentui/merge-styles build βœ”οΈ done - 16.77s + +@fluentui/test-utilities test βœ”οΈ done - 11.81s + +@fluentui/tokens test βœ”οΈ done - 9.44s + +@fluentui/react-theme build βœ”οΈ done - 12.92s + +@fluentui/react-window-provider build βœ”οΈ done - 19.10s + +@fluentui/tokens type-check βœ”οΈ done - 4.82s + +πŸ”₯ @fluentui/react-northstar build:info βœ”οΈ done - 2m 54.71s + +@fluentui/keyboard-keys test βœ”οΈ done - 2.07s + +@fluentui/keyboard-keys type-check βœ”οΈ done - 2.52s + +@fluentui/priority-overflow test βœ”οΈ done - 3.28s + +@fluentui/priority-overflow type-check βœ”οΈ done - 4.07s + +@fluentui/react-storybook-addon-codesandbox test βœ”οΈ done - 3.47s + +@fluentui/react-portal-compat-context test βœ”οΈ done - 2.30s + +@fluentui/react-storybook-addon-codesandbox type-check βœ”οΈ done - 4.93s + +@fluentui/react-portal-compat-context type-check βœ”οΈ done - 2.89s + +@fluentui/babel-preset-global-context test βœ”οΈ done - 4.66s + +@fluentui/babel-preset-storybook-full-source test βœ”οΈ done - 5.59s + +@fluentui/react-utilities build βœ”οΈ done - 21.67s + +@fluentui/babel-preset-storybook-full-source type-check βœ”οΈ done - 12.84s + +@fluentui/react-component-event-listener test βœ”οΈ done - 9.87s + +@fluentui/babel-preset-global-context type-check βœ”οΈ done - 18.08s + +@fluentui/react-component-nesting-registry test βœ”οΈ done - 9.34s + +@fluentui/react-component-ref test βœ”οΈ done - 11.30s + +@fluentui/accessibility test βœ”οΈ done - 24.39s + +@fluentui/react-proptypes test βœ”οΈ done - 11.22s + +πŸ”₯ @fluentui/react-conformance test βœ”οΈ done - 1m 0.92s + +@fluentui/react-conformance-griffel test βœ”οΈ done - 4.75s + +@fluentui/styles test βœ”οΈ done - 14.92s + +@fluentui/dom-utilities test βœ”οΈ done - 10.17s + +@fluentui/react-conformance-griffel type-check βœ”οΈ done - 7.27s + +@fluentui/react-northstar-styles-renderer build βœ”οΈ done - 21.02s + +@fluentui/date-time-utilities test βœ”οΈ done - 15.14s + +@fluentui/react-theme test βœ”οΈ done - 2.06s + +@fluentui/jest-serializer-merge-styles build βœ”οΈ done - 9.47s + +@fluentui/react-theme-sass build βœ”οΈ done - 10.94s + +@fluentui/react-window-provider test βœ”οΈ done - 10.93s + +@fluentui/merge-styles test βœ”οΈ done - 16.64s + +@fluentui/react-shared-contexts build βœ”οΈ done - 16.16s + +@fluentui/scripts-storybook test βœ”οΈ done - 18.10s + +@fluentui/react-avatar-context build βœ”οΈ done - 12.80s + +@fluentui/scripts-storybook type-check βœ”οΈ done - 16.16s + +πŸ”₯ @fluentui/codemods test βœ”οΈ done - 1m 49.51s + +@fluentui/react-aria build βœ”οΈ done - 27.17s + +@fluentui/react-breadcrumb build βœ”οΈ done - 26.26s + +@fluentui/react-context-selector build βœ”οΈ done - 22.54s + +@fluentui/react-utilities test βœ”οΈ done - 8.97s + +@fluentui/react-theme type-check βœ”οΈ done - 52.13s + +@fluentui/react-image build βœ”οΈ done - 30.98s + +@fluentui/react-tags build βœ”οΈ done - 28.94s + +@fluentui/react-drawer build βœ”οΈ done - 33.23s + +@fluentui/react-virtualizer build βœ”οΈ done - 27.25s + +@fluentui/react-utilities type-check βœ”οΈ done - 16.28s + +@fluentui/jest-serializer-merge-styles test βœ”οΈ done - 10.89s + +@fluentui/react-theme-sass test βœ”οΈ done - 4.63s + +@fluentui/react-theme-sass type-check βœ”οΈ done - 5.20s + +@fluentui/react-text build βœ”οΈ done - 35.31s + +@fluentui/react-northstar-emotion-renderer build βœ”οΈ done - 23.94s + +@fluentui/utilities build βœ”οΈ done - 23.30s + +@fluentui/react-northstar-fela-renderer build βœ”οΈ done - 27.40s + +@fluentui/react-shared-contexts test βœ”οΈ done - 3.55s + +@fluentui/react-avatar-context test βœ”οΈ done - 4.52s + +@fluentui/react-shared-contexts type-check βœ”οΈ done - 6.80s + +@fluentui/react-avatar-context type-check βœ”οΈ done - 3.21s + +@fluentui/react-aria test βœ”οΈ done - 6.14s + +@fluentui/react-positioning build βœ”οΈ done - 27.84s + +@fluentui/react-divider build βœ”οΈ done - 29.87s + +@fluentui/react-label build βœ”οΈ done - 29.05s + +@fluentui/react-tabster build βœ”οΈ done - 26.98s + +@fluentui/react-badge build βœ”οΈ done - 34.76s + +@fluentui/react-breadcrumb test βœ”οΈ done - 7.59s + +@fluentui/react-context-selector test βœ”οΈ done - 5.20s + +@fluentui/react-image test βœ”οΈ done - 8.87s + +@fluentui/react-context-selector type-check βœ”οΈ done - 15.02s + +@fluentui/react-tags test βœ”οΈ done - 10.09s + +@fluentui/react-overflow build βœ”οΈ done - 22.82s + +@fluentui/global-context build βœ”οΈ done - 24.50s + +@fluentui/react-breadcrumb type-check βœ”οΈ done - 26.55s + +@fluentui/react-virtualizer test βœ”οΈ done - 3.84s + +@fluentui/react-drawer test βœ”οΈ done - 7.41s + +@fluentui/react-tags type-check βœ”οΈ done - 33.51s + +πŸ”₯ @fluentui/react-aria type-check βœ”οΈ done - 1m 6.46s + +@fluentui/react-text test βœ”οΈ done - 28.71s + +@fluentui/react-drawer type-check βœ”οΈ done - 38.03s + +@fluentui/react-northstar-emotion-renderer test βœ”οΈ done - 13.36s + +πŸ”₯ @fluentui/react-image type-check βœ”οΈ done - 1m 6.68s + +@fluentui/theme build βœ”οΈ done - 21.72s + +@fluentui/react-hooks build βœ”οΈ done - 24.89s + +@fluentui/react-positioning test βœ”οΈ done - 7.00s + +@fluentui/react-northstar-fela-renderer test βœ”οΈ done - 15.14s + +πŸ”₯ @fluentui/react-virtualizer type-check βœ”οΈ done - 1m 5.67s + +@fluentui/react-divider test βœ”οΈ done - 7.76s + +πŸ”₯ @fluentui/react-text type-check βœ”οΈ done - 1m 5.91s + +@fluentui/react-positioning type-check βœ”οΈ done - 15.29s + +@fluentui/react-label test βœ”οΈ done - 8.58s + +@fluentui/utilities test βœ”οΈ done - 49.69s + +@fluentui/react-spinner build βœ”οΈ done - 31.08s + +@fluentui/react-field build βœ”οΈ done - 33.43s + +πŸ”₯ @fluentui/react-bindings build βœ”οΈ done - 1m 8.56s + +@fluentui/react-accordion build βœ”οΈ done - 40.16s + +πŸ”₯ @fluentui/react-divider type-check βœ”οΈ done - 1m 0.78s + +@fluentui/react-portal build βœ”οΈ done - 25.19s + +@fluentui/react-tabster test βœ”οΈ done - 2.79s + +@fluentui/react-button build βœ”οΈ done - 41.81s + +@fluentui/react-link build βœ”οΈ done - 29.65s + +πŸ”₯ @fluentui/react-label type-check βœ”οΈ done - 1m 0.96s + +@fluentui/react-overflow test βœ”οΈ done - 6.86s + +@fluentui/react-provider build βœ”οΈ done - 31.03s + +@fluentui/react-tabster type-check βœ”οΈ done - 14.31s + +@fluentui/global-context test βœ”οΈ done - 5.53s + +@fluentui/react-badge test βœ”οΈ done - 15.09s + +@fluentui/react-tabs build βœ”οΈ done - 33.83s + +@fluentui/scheme-utilities build βœ”οΈ done - 12.82s + +@fluentui/theme test βœ”οΈ done - 13.48s + +@fluentui/global-context type-check βœ”οΈ done - 20.03s + +@fluentui/style-utilities build βœ”οΈ done - 19.86s + +@fluentui/react-spinner test βœ”οΈ done - 9.41s + +@fluentui/react-hooks test βœ”οΈ done - 26.07s + +πŸ”₯ @fluentui/react-badge type-check βœ”οΈ done - 1m 0.82s + +@fluentui/react-checkbox build βœ”οΈ done - 34.70s + +@fluentui/react-progress build βœ”οΈ done - 32.43s + +@fluentui/react-input build βœ”οΈ done - 33.28s + +πŸ”₯ @fluentui/react-overflow type-check βœ”οΈ done - 1m 3.01s + +@fluentui/react-radio build βœ”οΈ done - 37.93s + +πŸ”₯ @fluentui/react-spinner type-check βœ”οΈ done - 1m 4.26s + +@fluentui/react-select build βœ”οΈ done - 36.37s + +@fluentui/react-skeleton build βœ”οΈ done - 31.83s + +@fluentui/react-spinbutton build βœ”οΈ done - 38.10s + +@fluentui/react-field test βœ”οΈ done - 13.25s + +@fluentui/react-slider build βœ”οΈ done - 38.73s + +@fluentui/react-switch build βœ”οΈ done - 38.43s + +@fluentui/react-accordion test βœ”οΈ done - 19.95s + +@fluentui/react-textarea build βœ”οΈ done - 37.22s + +@fluentui/react-bindings test βœ”οΈ done - 46.94s + +@fluentui/react-telemetry build βœ”οΈ done - 48.91s + +πŸ”₯ @fluentui/react-icons-northstar build βœ”οΈ done - 1m 0.29s + +πŸ”₯ @fluentui/react-field type-check βœ”οΈ done - 1m 7.34s + +@fluentui/react-dialog build βœ”οΈ done - 39.63s + +@fluentui/react-combobox build βœ”οΈ done - 46.90s + +@fluentui/react-portal test βœ”οΈ done - 10.00s + +πŸ”₯ @fluentui/react-accordion type-check βœ”οΈ done - 1m 16.06s + +@fluentui/react-popover build βœ”οΈ done - 39.73s + +@fluentui/react-button test βœ”οΈ done - 22.89s + +@fluentui/react-tooltip build βœ”οΈ done - 40.36s + +@fluentui/react-menu build βœ”οΈ done - 48.82s + +@fluentui/react-link test βœ”οΈ done - 9.76s + +@fluentui/react-provider test βœ”οΈ done - 10.85s + +@fluentui/react-card build βœ”οΈ done - 40.61s + +@fluentui/react-tabs test βœ”οΈ done - 11.43s + +@fluentui/react-storybook-addon build βœ”οΈ done - 26.17s + +@fluentui/common-styles build βœ”οΈ done - 5.03s + +πŸ”₯ @fluentui/react-portal type-check βœ”οΈ done - 1m 5.98s + +@fluentui/font-icons-mdl2 build βœ”οΈ done - 11.84s + +@fluentui/react-file-type-icons build βœ”οΈ done - 15.18s + +@fluentui/react-link type-check βœ”οΈ done - 59.53s + +@fluentui/foundation-legacy build βœ”οΈ done - 28.20s + +@fluentui/react-provider type-check βœ”οΈ done - 53.18s + +πŸ”₯ @fluentui/react-button type-check βœ”οΈ done - 1m 15.11s + +@fluentui/react-focus build βœ”οΈ done - 28.41s + +@fluentui/react-icon-provider build βœ”οΈ done - 20.41s + +@fluentui/style-utilities test βœ”οΈ done - 12.63s + +@fluentui/react-progress test βœ”οΈ done - 11.87s + +@fluentui/react-checkbox test βœ”οΈ done - 13.53s + +πŸ”₯ @fluentui/react-tabs type-check βœ”οΈ done - 1m 2.67s + +@fluentui/react-input test βœ”οΈ done - 11.89s + +@fluentui/react-radio test βœ”οΈ done - 15.50s + +@fluentui/react-select test βœ”οΈ done - 14.13s + +@fluentui/react-skeleton test βœ”οΈ done - 10.05s + +@fluentui/react-toolbar build βœ”οΈ done - 38.20s + +πŸ”₯ @fluentui/react-checkbox type-check βœ”οΈ done - 1m 1.06s + +@fluentui/react-progress type-check βœ”οΈ done - 57.34s + +@fluentui/react-spinbutton test βœ”οΈ done - 15.31s + +@fluentui/react-input type-check βœ”οΈ done - 57.89s + +@fluentui/react-slider test βœ”οΈ done - 11.24s + +@fluentui/react-radio type-check βœ”οΈ done - 58.45s + +@fluentui/react-select type-check βœ”οΈ done - 53.87s + +@fluentui/react-switch test βœ”οΈ done - 12.63s + +@fluentui/react-textarea test βœ”οΈ done - 11.52s + +@fluentui/react-skeleton type-check βœ”οΈ done - 49.78s + +@fluentui/react-dialog test βœ”οΈ done - 22.61s + +@fluentui/react-icons-northstar test βœ”οΈ done - 37.35s + +πŸ”₯ @fluentui/react-spinbutton type-check βœ”οΈ done - 1m 5.40s + +πŸ”₯ @fluentui/react-slider type-check βœ”οΈ done - 1m 4.43s + +πŸ”₯ @fluentui/react-switch type-check βœ”οΈ done - 1m 12.12s + +πŸ”₯ @fluentui/react-textarea type-check βœ”οΈ done - 1m 15.14s + +@fluentui/react-combobox test βœ”οΈ done - 31.74s + +@fluentui/react-popover test βœ”οΈ done - 13.57s + +@fluentui/react-datepicker-compat build βœ”οΈ done - 52.58s + +@fluentui/react-infobutton build βœ”οΈ done - 37.68s + +@fluentui/react-tooltip test βœ”οΈ done - 10.13s + +πŸ”₯ @fluentui/react-combobox type-check βœ”οΈ done - 1m 15.28s + +@fluentui/react-avatar build βœ”οΈ done - 47.83s + +πŸ”₯ @fluentui/react-dialog type-check βœ”οΈ done - 1m 46.09s + +@fluentui/react-menu test βœ”οΈ done - 32.64s + +@fluentui/react-storybook-addon test βœ”οΈ done - 3.17s + +@fluentui/react-card test βœ”οΈ done - 12.04s + +@fluentui/font-icons-mdl2 test βœ”οΈ done - 5.02s + +πŸ”₯ @fluentui/react-popover type-check βœ”οΈ done - 1m 19.54s + +@fluentui/react-file-type-icons test βœ”οΈ done - 11.03s + +πŸ”₯ @fluentui/react-tooltip type-check βœ”οΈ done - 1m 6.35s + +@fluentui/foundation-legacy test βœ”οΈ done - 16.21s + +@fluentui/react-focus test βœ”οΈ done - 22.56s + +πŸ”₯ @fluentui/react-menu type-check βœ”οΈ done - 1m 17.03s + +@fluentui/react-storybook-addon type-check βœ”οΈ done - 50.14s + +@fluentui/react-icon-provider test βœ”οΈ done - 15.52s + +@fluentui/react-datepicker-compat test βœ”οΈ done - 5.27s + +@fluentui/react-toolbar test βœ”οΈ done - 23.14s + +πŸ”₯ @fluentui/react-card type-check βœ”οΈ done - 1m 20.90s + +πŸ”₯ @fluentui/react-icons-mdl2 build βœ”οΈ done - 1m 1.80s + +@fluentui/react-infobutton test βœ”οΈ done - 15.10s + +πŸ”₯ @fluentui/react build βœ”οΈ done - 1m 20.90s + +@fluentui/react-persona build βœ”οΈ done - 40.97s + +@fluentui/react-alert build βœ”οΈ done - 46.53s + +πŸ”₯ @fluentui/react-datepicker-compat type-check βœ”οΈ done - 1m 14.83s + +πŸ”₯ @fluentui/react-toolbar type-check βœ”οΈ done - 1m 31.56s + +πŸ”₯ @fluentui/react-northstar build βœ”οΈ done - 4m 54.28s + +πŸ”₯ @fluentui/react-infobutton type-check βœ”οΈ done - 1m 11.65s + +@fluentui/react-avatar test βœ”οΈ done - 20.02s + +πŸ”₯ @fluentui/react-table build βœ”οΈ done - 1m 1.06s + +@fluentui/perf-test build βœ”οΈ done - 17.34s + +@fluentui/react-icons-mdl2-branded build βœ”οΈ done - 25.66s + +@fluentui/azure-themes build βœ”οΈ done - 17.79s + +@fluentui/fluent2-theme build βœ”οΈ done - 17.42s + +@fluentui/react-tree build βœ”οΈ done - 56.62s + +@fluentui/react-date-time build βœ”οΈ done - 17.73s + +@fluentui/react-charting build βœ”οΈ done - 26.29s + +@fluentui/react-cards build βœ”οΈ done - 31.25s + +@fluentui/theme-samples build βœ”οΈ done - 15.67s + +@fluentui/react-monaco-editor build βœ”οΈ done - 24.39s + +@fluentui/react-experiments build βœ”οΈ done - 39.38s + +@fluentui/react-persona test βœ”οΈ done - 17.60s + +@fluentui/react-alert test βœ”οΈ done - 16.05s + +@fluentui/perf-test-react-components build βœ”οΈ done - 39.87s + +πŸ”₯ @fluentui/react-avatar type-check βœ”οΈ done - 1m 35.12s + +πŸ”₯ @fluentui/react-icons-mdl2 test βœ”οΈ done - 1m 49.90s + +@fluentui/local-sandbox build βœ”οΈ done - 21.38s + +@fluentui/react-18-tests-v8 test βœ”οΈ done - 12.11s + +@fluentui/react-18-tests-v8 type-check βœ”οΈ done - 5.88s + +πŸ”₯ @fluentui/react-persona type-check βœ”οΈ done - 1m 7.45s + +@fluentui/ts-minbar-test-react type-check βœ”οΈ done - 3.40s + +@fluentui/react-alert type-check βœ”οΈ done - 59.39s + +πŸ”₯ @fluentui/projects-test build βœ”οΈ done - 1m 13.49s + +πŸ”₯ @fluentui/code-sandbox build βœ”οΈ done - 1m 33.07s + +πŸ”₯ @fluentui/vr-tests-react-components build βœ”οΈ done - 1m 36.97s + +πŸ”₯ @fluentui/ts-minbar-test-react test βœ”οΈ done - 1m 43.04s + +πŸ”₯ @fluentui/react-data-grid-react-window build βœ”οΈ done - 1m 10.93s + +@fluentui/react-table test βœ”οΈ done - 55.85s + +πŸ”₯ @fluentui/react-components build βœ”οΈ done - 1m 42.52s + +@fluentui/cra-template type-check βœ”οΈ done - 9.36s + +@fluentui/react-tree test βœ”οΈ done - 19.91s + +@fluentui/react-cards test βœ”οΈ done - 18.40s + +@fluentui/storybook build βœ”οΈ done - 13.24s + +@fluentui/react-charting test βœ”οΈ done - 53.18s + +@fluentui/react-docsite-components build βœ”οΈ done - 26.80s + +@fluentui/react-monaco-editor test βœ”οΈ done - 19.79s + +πŸ”₯ @fluentui/react-tree type-check βœ”οΈ done - 1m 25.58s + +@fluentui/circulars-test test βœ”οΈ done - 20.96s + +πŸ”₯ @fluentui/react-table type-check βœ”οΈ done - 1m 49.95s + +@fluentui/react-experiments test βœ”οΈ done - 43.91s + +@fluentui/react-builder build βœ”οΈ done - 51.11s + +@fluentui/vr-tests-react-components test βœ”οΈ done - 33.88s + +@fluentui/react-data-grid-react-window test βœ”οΈ done - 2.46s + +πŸ”₯ @fluentui/react-northstar-prototypes build βœ”οΈ done - 1m 9.90s + +@fluentui/vr-tests-react-components type-check βœ”οΈ done - 50.44s + +@fluentui/react-data-grid-react-window type-check βœ”οΈ done - 54.65s + +@fluentui/ssr-tests-v9 build βœ”οΈ done - 11.08s + +πŸ”₯ @fluentui/cra-template test βœ”οΈ done - 4m 7.04s + +πŸ”₯ @fluentui/recipes-react-components build βœ”οΈ done - 1m 20.80s + +πŸ”₯ @fluentui/react-migration-v8-v9 build βœ”οΈ done - 1m 28.56s + +πŸ”₯ @fluentui/react-migration-v0-v9 build βœ”οΈ done - 1m 32.87s + +@fluentui/react-components test βœ”οΈ done - 14.92s + +πŸ”₯ @fluentui/react-portal-compat build βœ”οΈ done - 1m 18.69s + +@fluentui/theming-designer build βœ”οΈ done - 15.93s + +πŸ”₯ @fluentui/theme-designer build βœ”οΈ done - 1m 30.24s + +@fluentui/react-docsite-components test βœ”οΈ done - 18.74s + +@fluentui/vr-tests build βœ”οΈ done - 51.35s + +@fluentui/react-examples build βœ”οΈ done - 55.11s + +@fluentui/perf-test-northstar build βœ”οΈ done - 2.63s + +@fluentui/react-builder test βœ”οΈ done - 48.20s + +@fluentui/react-18-tests-v9 type-check βœ”οΈ done - 6.31s + +πŸ”₯ @fluentui/react-components type-check βœ”οΈ done - 2m 5.75s + +@fluentui/stress-test type-check βœ”οΈ done - 53.42s + +@fluentui/ts-minbar-test-react-components type-check βœ”οΈ done - 4.30s + +@fluentui/ssr-tests-v9 test βœ”οΈ done - 26.28s + +πŸ”₯ @fluentui/ts-minbar-test-react-components test βœ”οΈ done - 1m 12.35s + +@fluentui/recipes-react-components type-check βœ”οΈ done - 1.33s + +πŸ”₯ @fluentui/react-18-tests-v9 test βœ”οΈ done - 1m 49.28s + +@fluentui/react-migration-v8-v9 test βœ”οΈ done - 2.43s + +@fluentui/public-docsite-v9 build βœ”οΈ done - 23.22s + +@fluentui/react-migration-v0-v9 test βœ”οΈ done - 34.40s + +πŸ”₯ @fluentui/ssr-tests-v9 type-check βœ”οΈ done - 1m 48.83s + +@fluentui/react-portal-compat test βœ”οΈ done - 9.17s + +πŸ”₯ @fluentui/react-migration-v8-v9 type-check βœ”οΈ done - 2m 2.36s + +@fluentui/theming-designer test βœ”οΈ done - 5.09s + +@fluentui/theme-designer test βœ”οΈ done - 2.88s + +πŸ”₯ @fluentui/projects-test test βœ”οΈ done - 9m 43.18s + +πŸ”₯ @fluentui/react-migration-v0-v9 type-check βœ”οΈ done - 1m 56.75s + +@fluentui/public-docsite-resources build βœ”οΈ done - 21.85s + +@fluentui/perf-test-northstar test βœ”οΈ done - 1.62s + +@fluentui/vr-tests type-check βœ”οΈ done - 47.06s + +πŸ”₯ @fluentui/react test βœ”οΈ done - 15m 10.01s +πŸ”₯ @fluentui/theme-designer type-check βœ”οΈ done - 1m 26.10s +πŸ”₯ @fluentui/react-portal-compat type-check βœ”οΈ done - 1m 47.39s +@fluentui/public-docsite build βœ”οΈ done - 33.47s + +@fluentui/public-docsite test βœ”οΈ done - 6.36s +@fluentui/ssr-tests build βœ”οΈ done - 34.77s + +πŸ”₯ @fluentui/docs build βœ”οΈ done - 6m 30.13s +@fluentui/ssr-tests test βœ”οΈ done - 7.87s +πŸ”₯ @fluentui/react-northstar test βœ”οΈ done - 18m 16.83s + +πŸ— Summary + +[Tasks Count] success: 570, skipped: 0, incomplete: 0 +---------------------------------------------- +Took a total of 45m 37.51s to complete +2023-03-08T19:21:27.6494704Z Done in 2738.23s. Peak memory usage 33.66MB. +2023-03-08T19:21:27.6677257Z ##[section]Finishing: build, test, lint, type-check +``` + +### Slowest tasks + +``` +πŸ”₯ @fluentui/react lint βœ”οΈ done - 1m 11.98s +πŸ”₯ @fluentui/react-examples lint βœ”οΈ done - 1m 7.04s +πŸ”₯ @fluentui/react-northstar build:info βœ”οΈ done - 2m 54.71s +πŸ”₯ @fluentui/react-conformance test βœ”οΈ done - 1m 0.92s +πŸ”₯ @fluentui/codemods test βœ”οΈ done - 1m 49.51s +πŸ”₯ @fluentui/react-aria type-check βœ”οΈ done - 1m 6.46s +πŸ”₯ @fluentui/react-image type-check βœ”οΈ done - 1m 6.68s +πŸ”₯ @fluentui/react-virtualizer type-check βœ”οΈ done - 1m 5.67s +πŸ”₯ @fluentui/react-text type-check βœ”οΈ done - 1m 5.91s +πŸ”₯ @fluentui/react-bindings build βœ”οΈ done - 1m 8.56s +πŸ”₯ @fluentui/react-divider type-check βœ”οΈ done - 1m 0.78s +πŸ”₯ @fluentui/react-label type-check βœ”οΈ done - 1m 0.96s +πŸ”₯ @fluentui/react-badge type-check βœ”οΈ done - 1m 0.82s +πŸ”₯ @fluentui/react-overflow type-check βœ”οΈ done - 1m 3.01s +πŸ”₯ @fluentui/react-spinner type-check βœ”οΈ done - 1m 4.26s +πŸ”₯ @fluentui/react-icons-northstar build βœ”οΈ done - 1m 0.29s +πŸ”₯ @fluentui/react-field type-check βœ”οΈ done - 1m 7.34s +πŸ”₯ @fluentui/react-accordion type-check βœ”οΈ done - 1m 16.06s +πŸ”₯ @fluentui/react-portal type-check βœ”οΈ done - 1m 5.98s +πŸ”₯ @fluentui/react-button type-check βœ”οΈ done - 1m 15.11s +πŸ”₯ @fluentui/react-tabs type-check βœ”οΈ done - 1m 2.67s +πŸ”₯ @fluentui/react-checkbox type-check βœ”οΈ done - 1m 1.06s +πŸ”₯ @fluentui/react-spinbutton type-check βœ”οΈ done - 1m 5.40s +πŸ”₯ @fluentui/react-slider type-check βœ”οΈ done - 1m 4.43s +πŸ”₯ @fluentui/react-switch type-check βœ”οΈ done - 1m 12.12s +πŸ”₯ @fluentui/react-textarea type-check βœ”οΈ done - 1m 15.14s +πŸ”₯ @fluentui/react-combobox type-check βœ”οΈ done - 1m 15.28s +πŸ”₯ @fluentui/react-dialog type-check βœ”οΈ done - 1m 46.09s +πŸ”₯ @fluentui/react-popover type-check βœ”οΈ done - 1m 19.54s +πŸ”₯ @fluentui/react-tooltip type-check βœ”οΈ done - 1m 6.35s +πŸ”₯ @fluentui/react-menu type-check βœ”οΈ done - 1m 17.03s +πŸ”₯ @fluentui/react-card type-check βœ”οΈ done - 1m 20.90s +πŸ”₯ @fluentui/react-icons-mdl2 build βœ”οΈ done - 1m 1.80s +πŸ”₯ @fluentui/react build βœ”οΈ done - 1m 20.90s +πŸ”₯ @fluentui/react-datepicker-compat type-check βœ”οΈ done - 1m 14.83s +πŸ”₯ @fluentui/react-toolbar type-check βœ”οΈ done - 1m 31.56s +πŸ”₯ @fluentui/react-northstar build βœ”οΈ done - 4m 54.28s +πŸ”₯ @fluentui/react-infobutton type-check βœ”οΈ done - 1m 11.65s +πŸ”₯ @fluentui/react-table build βœ”οΈ done - 1m 1.06s +πŸ”₯ @fluentui/react-avatar type-check βœ”οΈ done - 1m 35.12s +πŸ”₯ @fluentui/react-icons-mdl2 test βœ”οΈ done - 1m 49.90s +πŸ”₯ @fluentui/react-persona type-check βœ”οΈ done - 1m 7.45s +πŸ”₯ @fluentui/projects-test build βœ”οΈ done - 1m 13.49s +πŸ”₯ @fluentui/code-sandbox build βœ”οΈ done - 1m 33.07s +πŸ”₯ @fluentui/vr-tests-react-components build βœ”οΈ done - 1m 36.97s +πŸ”₯ @fluentui/ts-minbar-test-react test βœ”οΈ done - 1m 43.04s +πŸ”₯ @fluentui/react-data-grid-react-window build βœ”οΈ done - 1m 10.93s +πŸ”₯ @fluentui/react-components build βœ”οΈ done - 1m 42.52s +πŸ”₯ @fluentui/react-tree type-check βœ”οΈ done - 1m 25.58s +πŸ”₯ @fluentui/react-table type-check βœ”οΈ done - 1m 49.95s +πŸ”₯ @fluentui/react-northstar-prototypes build βœ”οΈ done - 1m 9.90s +πŸ”₯ @fluentui/cra-template test βœ”οΈ done - 4m 7.04s +πŸ”₯ @fluentui/recipes-react-components build βœ”οΈ done - 1m 20.80s +πŸ”₯ @fluentui/react-migration-v8-v9 build βœ”οΈ done - 1m 28.56s +πŸ”₯ @fluentui/react-migration-v0-v9 build βœ”οΈ done - 1m 32.87s +πŸ”₯ @fluentui/react-portal-compat build βœ”οΈ done - 1m 18.69s +πŸ”₯ @fluentui/theme-designer build βœ”οΈ done - 1m 30.24s +πŸ”₯ @fluentui/react-components type-check βœ”οΈ done - 2m 5.75s +πŸ”₯ @fluentui/ts-minbar-test-react-components test βœ”οΈ done - 1m 12.35s +πŸ”₯ @fluentui/react-18-tests-v9 test βœ”οΈ done - 1m 49.28s +πŸ”₯ @fluentui/ssr-tests-v9 type-check βœ”οΈ done - 1m 48.83s +πŸ”₯ @fluentui/react-migration-v8-v9 type-check βœ”οΈ done - 2m 2.36s +πŸ”₯ @fluentui/projects-test test βœ”οΈ done - 9m 43.18s +πŸ”₯ @fluentui/react-migration-v0-v9 type-check βœ”οΈ done - 1m 56.75s +πŸ”₯ @fluentui/react test βœ”οΈ done - 15m 10.01s +πŸ”₯ @fluentui/theme-designer type-check βœ”οΈ done - 1m 26.10s +πŸ”₯ @fluentui/react-portal-compat type-check βœ”οΈ done - 1m 47.39s +πŸ”₯ @fluentui/docs build βœ”οΈ done - 6m 30.13s +πŸ”₯ @fluentui/react-northstar test βœ”οΈ done - 18m 16.83s +``` + +**Most slowest tasks:** + +``` +πŸ”₯ @fluentui/react-northstar build βœ”οΈ done - 4m 54.28s +πŸ”₯ @fluentui/docs build βœ”οΈ done - 6m 30.13s +πŸ”₯ @fluentui/projects-test test βœ”οΈ done - 9m 43.18s +πŸ”₯ @fluentui/react test βœ”οΈ done - 15m 10.01s +πŸ”₯ @fluentui/react-northstar test βœ”οΈ done - 18m 16.83s + +πŸ”₯ @fluentui/react-migration-v8-v9 type-check βœ”οΈ done - 2m 2.36s +πŸ”₯ @fluentui/react-components type-check βœ”οΈ done - 2m 5.75s +πŸ”₯ @fluentui/react-migration-v0-v9 type-check βœ”οΈ done - 1m 56.75s +πŸ”₯ @fluentui/react-portal-compat type-check βœ”οΈ done - 1m 47.39s +``` + +--- + +## Per project data + +### react-components + +~~All packages use native jest so no perf bottlenecks caused by test execution. βœ…~~ + +πŸ”₯ v9 packages are not using maxWorkers which might cause OOM and other issues on CI !!!! + +- fixed by setting maxWorkers on CI + +### react + +- used `runInBand` on CI !!!!! (update: without that it will never finish because memory leaks, we will use maxThreadWorkers=4) + +| Run type | time | command | +| ------------------------------ | ---------- | ----------------------------------------------------------------------- | +| current | 263 s | `just test --runInBand --no-cache` | +| current (CI) | 15m 10.01s | part of `lage build test lint type-check` | +| without runInBand | 85 s | `just test --no-cache` | +| without runInBand (+ raw jest) | 82 s | `jest --no-cache` | +| without runInBand (CI) | ? | part of `lage build test lint type-check`. This will never finish on CI | + +**Tests contain memory leaks** + +> discovered on CI when pipeline was executed via nx: + +``` +worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` + +### react-northstar + +| Run type | time | command | +| --------------------------------------- | ----- | -------------------------------------------------------------------------- | +| current | 382 s | `gulp test --config ./jest.config.js --coverage --maxWorkers=2 --no-cache` | +| without codecov | 348 s | `gulp test --config ./jest.config.js --maxWorkers=2 --no-cache` | +| without codecov,maxWorkers | 232 s | `gulp test --config ./jest.config.js --no-cache` | +| without codecov,maxWorkers (+ raw jest) | 196 s | `jest --config ./jest.config.js --no-cache` | + +#### More data: + +**70% of the test scenarios are very slow** - triggering jest warnings: + +``` + PASS test/specs/components/Skeleton/SkeletonButton-test.tsx (10.063 s) + PASS test/specs/components/Skeleton/SkeletonAvatar-test.tsx (10.126 s) + PASS test/specs/components/Chat/ChatMessageReadStatus-test.tsx (9.917 s) + PASS test/specs/components/Carousel/CarouselNavigationItem-test.tsx (10.338 s) + PASS test/specs/components/Button/ButtonContent-test.tsx (9.267 s) + PASS test/specs/components/Attachment/AttachmentDescription-test.tsx (9.598 s) + PASS test/specs/components/Toolbar/ToolbarMenuItemIcon-test.ts (9.674 s) + PASS test/specs/components/Dropdown/DropdownItem-test.tsx (9.877 s) + PASS test/specs/components/Toolbar/ToolbarMenu-test.tsx (10.047 s) + PASS test/specs/components/Toolbar/ToolbarMenuDivider-test.ts (9.796 s) + PASS test/specs/components/Toolbar/ToolbarItemWrapper-test.tsx (9.426 s) + PASS test/specs/components/Breadcrumb/Breadcrumb-test.ts (11.22 s) + PASS test/specs/components/Breadcrumb/BreadcrumbDivider-test.ts (9.089 s) + PASS test/specs/components/SplitButton/SplitButtonToggle-test.tsx (9.46 s) + PASS test/specs/components/Alert/AlertDismissAction-test.tsx (10.006 s) + PASS test/specs/components/List/ListItemContentMedia-test.tsx (9.923 s) + PASS test/specs/components/Skeleton/SkeletonInput-test.tsx (9.283 s) + PASS test/specs/components/Skeleton/SkeletonShape-test.tsx (9.819 s) + PASS test/specs/components/Chat/ChatMessageContent-test.tsx (11.646 s) + PASS test/specs/components/Menu/MenuItemIndicator-test.tsx (11.176 s) +``` + +**Tests contain memory leaks** + +> discovered while executing via raw `jest` instead `gulp` + +``` +A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` diff --git a/docs/ci-perf-type-check.md b/docs/ci-perf-type-check.md new file mode 100644 index 0000000000000..06a004a7fe497 --- /dev/null +++ b/docs/ci-perf-type-check.md @@ -0,0 +1,304 @@ +# `type-check` + +## Results + +**Projects with type-check:** 105 + +**Legend:** + +- optimization === disable path aliases for `tsc -b` runs + +| Run type | time | delta | +| ------------------------------ | ------- | -------- | +| current / parallel 1 | 16m 41s | | +| with optimization / parallel 1 | 9m 57s | 40,4% πŸš… | +| | | | +| current / parallel 8 | 3m 20s | | +| with optimization / parallel 8 | 2m 12s | 34% πŸš… | + +## Local + +### current (no optimization) + +> - type-check parallel 1 +> - ? projects have target:type-check + +total: 1001.36s / ~16m 41s + +> type-check parallel 8 + +total: 200.00s / ~3m 20s + +**result for `parallel 1`:** + +``` +nx run-many --target=type-check --skip-nx-cache + + βœ” nx run @fluentui/scripts-utils:type-check (2s) + βœ” nx run @fluentui/scripts-monorepo:type-check (2s) + βœ” nx run @fluentui/scripts-prettier:type-check (2s) + βœ” nx run @fluentui/scripts-tasks:type-check (2s) + βœ” nx run @fluentui/scripts-api-extractor:type-check (1s) + βœ” nx run @fluentui/scripts-jest:type-check (2s) + βœ” nx run @fluentui/keyboard-keys:type-check (999ms) + βœ” nx run @fluentui/react-utilities:type-check (4s) + βœ” nx run @fluentui/tokens:type-check (2s) +πŸ”₯ βœ” nx run @fluentui/react-theme:type-check (12s) + βœ” nx run @fluentui/react-conformance-griffel:type-check (2s) + βœ” nx run @fluentui/react-shared-contexts:type-check (996ms) + βœ” nx run @fluentui/scripts-cypress:type-check (2s) + βœ” nx run @fluentui/scripts-webpack:type-check (2s) + βœ” nx run @fluentui/react-context-selector:type-check (3s) + βœ” nx run @fluentui/react-tabster:type-check (3s) + βœ” nx run @fluentui/react-portal-compat-context:type-check (1s) + βœ” nx run @fluentui/scripts-puppeteer:type-check (2s) + βœ” nx run @fluentui/scripts-projects-test:type-check (2s) +πŸ”₯ βœ” nx run @fluentui/react-label:type-check (14s) + βœ” nx run @fluentui/scripts-babel:type-check (2s) +πŸ”₯ βœ” nx run @fluentui/react-field:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-aria:type-check (13s) + βœ” nx run @fluentui/scripts-gulp:type-check (3s) +πŸ”₯ βœ” nx run @fluentui/react-portal:type-check (15s) + βœ” nx run @fluentui/react-positioning:type-check (3s) +πŸ”₯ βœ” nx run @fluentui/react-popover:type-check (16s) +πŸ”₯ βœ” nx run @fluentui/react-tooltip:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-badge:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-avatar:type-check (18s) +πŸ”₯ βœ” nx run @fluentui/react-button:type-check (15s) +πŸ”₯ βœ” nx run @fluentui/react-provider:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-radio:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-text:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-infobutton:type-check (17s) +πŸ”₯ βœ” nx run @fluentui/react-spinbutton:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-checkbox:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-divider:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-persona:type-check (15s) +πŸ”₯ βœ” nx run @fluentui/react-input:type-check (14s) + βœ” nx run @fluentui/priority-overflow:type-check (2s) +πŸ”₯ βœ” nx run @fluentui/react-accordion:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-combobox:type-check (15s) +πŸ”₯ βœ” nx run @fluentui/react-progress:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-textarea:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-spinner:type-check (14s) +πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-toolbar:type-check (19s) +πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-dialog:type-check (22s) +πŸ”₯ βœ” nx run @fluentui/react-select:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-slider:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-switch:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-image:type-check (13s) +πŸ”₯πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-table:type-check (29s) +πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-card:type-check (20s) +πŸ”₯ βœ” nx run @fluentui/react-link:type-check (14s) +πŸ”₯ βœ” nx run @fluentui/react-menu:type-check (17s) +πŸ”₯ βœ” nx run @fluentui/react-tabs:type-check (15s) +πŸ”₯ βœ” nx run @fluentui/react-virtualizer:type-check (16s) +πŸ”₯ βœ” nx run @fluentui/react-overflow:type-check (16s) +πŸ”₯ βœ” nx run @fluentui/react-alert:type-check (13s) +πŸ”₯πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-components:type-check (33s) + βœ” nx run @fluentui/babel-preset-storybook-full-source:type-check (4s) + βœ” nx run @fluentui/scripts-storybook:type-check (4s) + βœ” nx run @fluentui/react-storybook-addon-codesandbox:type-check (2s) +πŸ”₯ βœ” nx run @fluentui/react-storybook-addon:type-check (14s) + βœ” nx run @fluentui/scripts-github:type-check (2s) +πŸ”₯πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-migration-v0-v9:type-check (33s) +πŸ”₯πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-migration-v8-v9:type-check (32s) + βœ” nx run @fluentui/global-context:type-check (5s) +πŸ”₯ βœ” nx run @fluentui/react-data-grid-react-window:type-check (14s) + βœ” nx run @fluentui/babel-preset-global-context:type-check (6s) +πŸ”₯ βœ” nx run @fluentui/react-datepicker-compat:type-check (19s) + βœ” nx run @fluentui/react-avatar-context:type-check (1s) +πŸ”₯ βœ” nx run @fluentui/react-portal-compat:type-check (18s) + βœ” nx run @fluentui/react-breadcrumb:type-check (7s) + βœ” nx run @fluentui/react-theme-sass:type-check (2s) +πŸ”₯ βœ” nx run @fluentui/react-skeleton:type-check (15s) +πŸ”₯πŸ”₯ βœ” nx run @fluentui/theme-designer:type-check (22s) + βœ” nx run @fluentui/react-drawer:type-check (8s) + βœ” nx run @fluentui/ts-minbar-test-react-components:type-check (2s) + βœ” nx run @fluentui/react-tags:type-check (7s) +πŸ”₯πŸ”₯ βœ” nx run @fluentui/react-tree:type-check (22s) +πŸ”₯ βœ” nx run @fluentui/vr-tests-react-components:type-check (13s) + βœ” nx run @fluentui/recipes-react-components:type-check (1s) + βœ” nx run @fluentui/scripts-update-release-notes:type-check (2s) + βœ” nx run @fluentui/ts-minbar-test-react:type-check (2s) + βœ” nx run @fluentui/scripts-fluentui-publish:type-check (1s) + βœ” nx run @fluentui/scripts-package-manager:type-check (2s) + βœ” nx run @fluentui/react-18-tests-v8:type-check (2s) + βœ” nx run @fluentui/react-18-tests-v9:type-check (2s) + βœ” nx run @fluentui/cra-template:type-check (3s) + βœ” nx run @fluentui/bundle-size:type-check (3s) + βœ” nx run @fluentui/pr-deploy-site:type-check (3s) + βœ” nx run @fluentui/scripts-lint-staged:type-check (2s) + βœ” nx run @fluentui/scripts-generators:type-check (2s) + βœ” nx run @fluentui/scripts-triage-bot:type-check (2s) +πŸ”₯πŸ”₯ βœ” nx run @fluentui/ssr-tests-v9:type-check (25s) + βœ” nx run @fluentui/scripts-beachball:type-check (2s) + βœ” nx run @fluentui/scripts-executors:type-check (3s) +πŸ”₯ βœ” nx run @fluentui/stress-test:type-check (13s) + βœ” nx run @fluentui/scripts-dangerjs:type-check (2s) + βœ” nx run @fluentui/scripts-ts-node:type-check (1s) +πŸ”₯ βœ” nx run @fluentui/vr-tests:type-check (10s) + βœ” nx run @fluentui/typings:type-check (1s) + βœ” nx run @fluentui/nx-workspace-tools:type-check (2s) +``` + +### Summary: + +Disabling TS Path aliases for `tsc -b` execution reduces type-check time 4-5x ! + +@fluentui/react-migration-v8-v9 type-check / 32s -> 6s +@fluentui/react-dialog / 22s -> 6s + +## Local (After improvements) + +> custom type-check command in place that disables path aliases. relies on dts being generated prior to execution. + +> type-check parallel 1 + +total: 597.71s / ~9m 57s + +> type-check parallel 8 + +total: 132.00s / ~2m 12s + +**result for `parallel 1`:** + +``` +nx run-many --target=type-check --skip-nx-cache + + βœ” nx run @fluentui/scripts-utils:type-check (1s) + βœ” nx run @fluentui/scripts-monorepo:type-check (2s) + βœ” nx run @fluentui/scripts-prettier:type-check (1s) + βœ” nx run @fluentui/scripts-tasks:type-check (2s) + βœ” nx run @fluentui/scripts-api-extractor:type-check (1s) + βœ” nx run @fluentui/scripts-jest:type-check (2s) + βœ” nx run @fluentui/keyboard-keys:type-check (4s) + βœ” nx run @fluentui/react-utilities:type-check (7s) + βœ” nx run @fluentui/tokens:type-check (4s) + βœ” nx run @fluentui/react-theme:type-check (7s) + βœ” nx run @fluentui/react-conformance-griffel:type-check (5s) + βœ” nx run @fluentui/react-shared-contexts:type-check (4s) + βœ” nx run @fluentui/scripts-cypress:type-check (1s) + βœ” nx run @fluentui/scripts-webpack:type-check (1s) + βœ” nx run @fluentui/react-context-selector:type-check (4s) + βœ” nx run @fluentui/react-tabster:type-check (5s) + βœ” nx run @fluentui/react-portal-compat-context:type-check (4s) + βœ” nx run @fluentui/scripts-puppeteer:type-check (2s) + βœ” nx run @fluentui/scripts-projects-test:type-check (1s) + βœ” nx run @fluentui/react-label:type-check (7s) + βœ” nx run @fluentui/scripts-babel:type-check (1s) + βœ” nx run @fluentui/react-field:type-check (8s) + βœ” nx run @fluentui/react-aria:type-check (7s) + βœ” nx run @fluentui/scripts-gulp:type-check (1s) + βœ” nx run @fluentui/react-portal:type-check (7s) + βœ” nx run @fluentui/react-positioning:type-check (5s) + βœ” nx run @fluentui/react-popover:type-check (8s) + βœ” nx run @fluentui/react-tooltip:type-check (8s) + βœ” nx run @fluentui/react-badge:type-check (8s) + βœ” nx run @fluentui/react-avatar:type-check (11s) + βœ” nx run @fluentui/react-button:type-check (11s) + βœ” nx run @fluentui/react-provider:type-check (8s) + βœ” nx run @fluentui/react-radio:type-check (9s) + βœ” nx run @fluentui/react-text:type-check (9s) + βœ” nx run @fluentui/react-infobutton:type-check (8s) + βœ” nx run @fluentui/react-spinbutton:type-check (8s) + βœ” nx run @fluentui/react-checkbox:type-check (8s) + βœ” nx run @fluentui/react-divider:type-check (7s) + βœ” nx run @fluentui/react-persona:type-check (7s) + βœ” nx run @fluentui/react-input:type-check (8s) + βœ” nx run @fluentui/priority-overflow:type-check (4s) + βœ” nx run @fluentui/react-accordion:type-check (8s) + βœ” nx run @fluentui/react-combobox:type-check (10s) + βœ” nx run @fluentui/react-progress:type-check (7s) + βœ” nx run @fluentui/react-textarea:type-check (7s) + βœ” nx run @fluentui/react-spinner:type-check (8s) + βœ” nx run @fluentui/react-toolbar:type-check (8s) + βœ” nx run @fluentui/react-dialog:type-check (9s) + βœ” nx run @fluentui/react-select:type-check (8s) + βœ” nx run @fluentui/react-slider:type-check (7s) + βœ” nx run @fluentui/react-switch:type-check (8s) + βœ” nx run @fluentui/react-image:type-check (7s) + βœ” nx run @fluentui/react-table:type-check (14s) + βœ” nx run @fluentui/react-card:type-check (9s) + βœ” nx run @fluentui/react-link:type-check (7s) + βœ” nx run @fluentui/react-menu:type-check (10s) + βœ” nx run @fluentui/react-tabs:type-check (9s) + βœ” nx run @fluentui/react-virtualizer:type-check (7s) + βœ” nx run @fluentui/react-overflow:type-check (7s) + βœ” nx run @fluentui/react-alert:type-check (9s) + βœ” nx run @fluentui/react-components:type-check (9s) + βœ” nx run @fluentui/babel-preset-storybook-full-source:type-check (6s) + βœ” nx run @fluentui/scripts-storybook:type-check (3s) + βœ” nx run @fluentui/react-storybook-addon-codesandbox:type-check (4s) + βœ” nx run @fluentui/react-storybook-addon:type-check (7s) + βœ” nx run @fluentui/scripts-github:type-check (1s) + βœ” nx run @fluentui/react-migration-v0-v9:type-check (11s) + βœ” nx run @fluentui/react-migration-v8-v9:type-check (10s) + βœ” nx run @fluentui/global-context:type-check (4s) + βœ” nx run @fluentui/react-data-grid-react-window:type-check (7s) + βœ” nx run @fluentui/babel-preset-global-context:type-check (7s) + βœ” nx run @fluentui/react-datepicker-compat:type-check (8s) + βœ” nx run @fluentui/react-avatar-context:type-check (3s) + βœ” nx run @fluentui/react-portal-compat:type-check (5s) + βœ” nx run @fluentui/react-breadcrumb:type-check (7s) + βœ” nx run @fluentui/react-theme-sass:type-check (4s) + βœ” nx run @fluentui/react-skeleton:type-check (7s) + βœ” nx run @fluentui/theme-designer:type-check (9s) + βœ” nx run @fluentui/react-drawer:type-check (7s) + βœ” nx run @fluentui/ts-minbar-test-react-components:type-check (2s) + βœ” nx run @fluentui/react-tags:type-check (6s) + βœ” nx run @fluentui/react-tree:type-check (8s) + βœ” nx run @fluentui/vr-tests-react-components:type-check (13s) + βœ” nx run @fluentui/recipes-react-components:type-check (6s) + βœ” nx run @fluentui/scripts-update-release-notes:type-check (1s) + βœ” nx run @fluentui/ts-minbar-test-react:type-check (2s) + βœ” nx run @fluentui/scripts-fluentui-publish:type-check (1s) + βœ” nx run @fluentui/scripts-package-manager:type-check (949ms) + βœ” nx run @fluentui/react-18-tests-v8:type-check (6s) + βœ” nx run @fluentui/react-18-tests-v9:type-check (5s) + βœ” nx run @fluentui/cra-template:type-check (2s) + βœ” nx run @fluentui/bundle-size:type-check (2s) + βœ” nx run @fluentui/pr-deploy-site:type-check (3s) + βœ” nx run @fluentui/scripts-lint-staged:type-check (1s) + βœ” nx run @fluentui/scripts-generators:type-check (2s) + βœ” nx run @fluentui/scripts-triage-bot:type-check (2s) + βœ” nx run @fluentui/ssr-tests-v9:type-check (10s) + βœ” nx run @fluentui/scripts-beachball:type-check (2s) + βœ” nx run @fluentui/scripts-executors:type-check (2s) + βœ” nx run @fluentui/stress-test:type-check (13s) + βœ” nx run @fluentui/scripts-dangerjs:type-check (1s) + βœ” nx run @fluentui/scripts-ts-node:type-check (1s) + βœ” nx run @fluentui/vr-tests:type-check (10s) + βœ” nx run @fluentui/typings:type-check (1s) + βœ” nx run @fluentui/nx-workspace-tools:type-check (2s) +``` + +## Leveraging `incremental` + +| Run: yarn workspace @fluentui/react-table tsc -b | time | delta | +| -------------------------------------------------------------------- | ----------------------- | ------ | +| current | 27.73s | | +| with incremental: true / 1st(cold) run | 27.73s | | +| with incremental: true / 2nd run | 4.4s | | +| -- | | | +| current / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.86s + 22.32s) 29.18s | 34% | +| with incremental:true / (tsc -p tsconfig.lib + tsc -b tsconfig.json) | (6.83s + 18.07) 24.9s | 15% πŸš… | + +## Leveraging "build react-components first and remap path aliases to those d.ts" + +_experiment:_ using path aliasing to .d.ts (not rolluped ones): + +1. generate d.ts for react-components (vNext tagged libraries) +2. create path aliases configuration to point to those d.ts +3. run `type-check` + +> what does "create path aliases configuration to point to those d.ts mean ? + +```diff +- "@fluentui/babel-preset-global-context": ["packages/react-components/babel-preset-global-context/src/index.ts"], ++ "@fluentui/babel-preset-global-context": ["dist/out-tsc/types/packages/react-components/babel-preset-global-context/src/index.d.ts"], +``` + +| Run: yarn workspace @fluentui/react-table tsc -b | time | delta | +| ------------------------------------------------ | ------ | ------ | +| current | 34.20s | | +| with react-components remapped aliases to d/ts | 10.88s | 32% πŸš… | diff --git a/docs/ci-test-data-v8.md b/docs/ci-test-data-v8.md new file mode 100644 index 0000000000000..97474974c619e --- /dev/null +++ b/docs/ci-test-data-v8.md @@ -0,0 +1,584 @@ +## test v8 + +> run 281.05s + +``` +src/components/ComboBox/ComboBox.test.tsx (19.355 s) +src/components/ContextualMenu/ContextualMenu.test.tsx +src/components/DetailsList/DetailsListV2.test.tsx +src/components/SpinButton/SpinButton.test.tsx +src/components/DetailsList/DetailsList.test.tsx +src/components/TextField/TextField.test.tsx +src/components/Button/Button.test.tsx +src/components/Dropdown/Dropdown.test.tsx +src/components/ColorPicker/ColorPicker.test.tsx (6.786 s) +src/components/OverflowSet/OverflowSet.test.tsx +src/utilities/positioning/positioning.test.ts +src/components/DetailsList/DetailsHeader.test.tsx +src/components/ResizeGroup/ResizeGroup.test.tsx +src/components/KeytipLayer/KeytipTree.test.tsx +src/components/DatePicker/DatePicker.test.tsx +src/components/pickers/BasePicker.test.tsx +src/components/Slider/Slider.test.tsx +src/utilities/selection/SelectionZone.test.tsx +src/components/KeytipLayer/KeytipLayer.test.tsx +src/utilities/color/colors.test.ts +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx +src/components/MessageBar/MessageBar.test.tsx +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx +src/utilities/keytips/KeytipManager.test.tsx +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx +src/components/Autofill/Autofill.test.tsx +src/components/Stack/Stack.test.tsx +src/components/GroupedList/GroupedListV2.test.tsx +src/components/GroupedList/GroupedList.test.tsx +src/components/ChoiceGroup/ChoiceGroup.test.tsx +src/components/Layer/Layer.test.tsx +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx +src/components/DetailsList/DetailsColumn.test.tsx +src/components/Checkbox/Checkbox.test.tsx +src/components/SearchBox/SearchBox.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx +src/components/Breadcrumb/Breadcrumb.test.tsx +src/components/Facepile/Facepile.test.tsx +src/components/CommandBar/CommandBar.test.tsx +src/components/List/List.test.tsx +src/components/Persona/Persona.test.tsx +src/components/Dialog/Dialog.test.tsx +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx +src/components/Nav/Nav.test.tsx +src/components/TeachingBubble/TeachingBubble.test.tsx +src/components/Callout/Callout.test.tsx +src/components/HoverCard/HoverCard.test.tsx +src/components/Panel/Panel.test.tsx +src/components/ContextualMenu/ContextualMenuItem.test.tsx +src/components/TextField/MaskedTextField/inputMask.test.ts +src/components/Modal/Modal.test.tsx (5.25 s) +src/components/Stack/StackUtils.test.ts +src/components/Pivot/Pivot.test.tsx +src/components/pickers/TagPicker/TagPicker.test.tsx +src/components/Toggle/Toggle.test.tsx +src/components/Image/Image.test.tsx +src/components/TimePicker/TimePicker.test.tsx +src/components/Tooltip/TooltipHost.test.tsx +src/components/CommandBar/CommandBar.deprecated.test.tsx +src/components/pickers/Suggestions/Suggestions.test.tsx +src/components/DetailsList/DetailsRow.test.tsx +src/components/Persona/Persona.deprecated.test.tsx +src/utilities/ThemeProvider/ThemeProvider.test.tsx +src/components/Link/Link.test.tsx +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx +src/components/FloatingPicker/BaseFloatingPicker.test.tsx +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts +src/utilities/keytips/KeytipConfig.test.ts +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx +src/utilities/keytips/KeytipUtils.test.ts +src/components/Icon/Icon.test.tsx +src/utilities/ButtonGrid/ButtonGrid.test.tsx +src/components/Coachmark/Coachmark.test.tsx +src/utilities/ThemeProvider/makeStyles.test.tsx +src/components/ActivityItem/ActivityItem.test.tsx +src/components/ColorPicker/ColorPicker.deprecated.test.tsx +src/utilities/contextualMenu/contextualMenuUtility.test.ts +src/components/MarqueeSelection/MarqueeSelection.test.tsx +src/components/Icon/ImageIcon.test.tsx +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx +src/components/Rating/Rating.test.tsx +src/utilities/keytips/IKeytipTransitionKey.test.ts +src/components/KeytipData/useKeytipData.test.tsx +src/components/Announced/Announced.test.tsx +src/components/Fabric/Fabric.test.tsx +src/components/Tooltip/Tooltip.test.tsx +src/components/Shimmer/Shimmer.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx +src/components/Icon/FontIcon.test.tsx +src/components/List/utils/scroll.test.ts +src/utilities/hooks/useResponsiveMode.test.tsx +src/components/Dialog/Dialog.deprecated.test.tsx +src/components/ProgressIndicator/ProgressIndicator.test.tsx +src/components/DocumentCard/DocumentCardImage.test.tsx +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx +src/components/Stack/StackItem/StackItem.test.tsx +src/components/FocusTrapZone/FocusTrapZone.test.tsx +src/components/ComponentConformance.test.tsx (10.352 s) +src/components/Popup/Popup.test.tsx +src/components/Spinner/Spinner.test.tsx +src/components/Button/Button.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx +src/components/Toggle/Toggle.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx +src/utilities/groupedList/GroupedListUtility.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx +src/components/pickers/TagPicker/TagItem.test.tsx +src/components/Keytip/KeytipContent.test.tsx +src/components/Text/Text.test.tsx +src/components/Persona/PersonaInitialsColor.test.ts +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx +src/components/DetailsList/ShimmeredDetailsList.test.tsx +src/components/Label/Label.test.tsx +src/components/Pivot/Pivot.deprecated.test.tsx +src/components/ScrollablePane/ScrollablePane.test.tsx +src/components/DocumentCard/DocumentCard.test.tsx +src/components/Check/Check.test.tsx +src/utilities/decorators/withResponsiveMode.test.tsx +src/components/KeytipData/useKeytipRef.test.ts +src/components/Sticky/Sticky.test.tsx +src/components/Overlay/Overlay.test.tsx +src/components/Divider/VerticalDivider.test.tsx +src/components/Separator/Separator.test.tsx +src/components/Calendar/Calendar.test.tsx +``` + +## test v8 with ts-solution config + +> run 277.18s + +``` +src/components/ComboBox/ComboBox.test.tsx (22.526 s) +src/components/ContextualMenu/ContextualMenu.test.tsx +src/components/DetailsList/DetailsListV2.test.tsx +src/components/SpinButton/SpinButton.test.tsx +src/components/DetailsList/DetailsList.test.tsx +src/components/TextField/TextField.test.tsx +src/components/Button/Button.test.tsx +src/components/Dropdown/Dropdown.test.tsx +src/components/ColorPicker/ColorPicker.test.tsx (6.394 s) +src/components/OverflowSet/OverflowSet.test.tsx +src/utilities/positioning/positioning.test.ts +src/components/DetailsList/DetailsHeader.test.tsx +src/components/ResizeGroup/ResizeGroup.test.tsx +src/components/KeytipLayer/KeytipTree.test.tsx +src/components/DatePicker/DatePicker.test.tsx +src/components/pickers/BasePicker.test.tsx +src/components/Slider/Slider.test.tsx +src/utilities/selection/SelectionZone.test.tsx +src/components/KeytipLayer/KeytipLayer.test.tsx +src/utilities/color/colors.test.ts +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx +src/components/MessageBar/MessageBar.test.tsx +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx +src/utilities/keytips/KeytipManager.test.tsx +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx +src/components/Autofill/Autofill.test.tsx +src/components/Stack/Stack.test.tsx +src/components/GroupedList/GroupedListV2.test.tsx +src/components/GroupedList/GroupedList.test.tsx +src/components/ChoiceGroup/ChoiceGroup.test.tsx +src/components/Layer/Layer.test.tsx +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx +src/components/DetailsList/DetailsColumn.test.tsx +src/components/Checkbox/Checkbox.test.tsx +src/components/SearchBox/SearchBox.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx +src/components/Breadcrumb/Breadcrumb.test.tsx +src/components/Facepile/Facepile.test.tsx +src/components/CommandBar/CommandBar.test.tsx +src/components/List/List.test.tsx +src/components/Persona/Persona.test.tsx +src/components/Dialog/Dialog.test.tsx +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx +src/components/Nav/Nav.test.tsx +src/components/TeachingBubble/TeachingBubble.test.tsx +src/components/Callout/Callout.test.tsx +src/components/HoverCard/HoverCard.test.tsx +src/components/Panel/Panel.test.tsx +src/components/ContextualMenu/ContextualMenuItem.test.tsx +src/components/TextField/MaskedTextField/inputMask.test.ts +src/components/Modal/Modal.test.tsx +src/components/Stack/StackUtils.test.ts +src/components/Pivot/Pivot.test.tsx +src/components/pickers/TagPicker/TagPicker.test.tsx +src/components/Toggle/Toggle.test.tsx +src/components/Image/Image.test.tsx +src/components/TimePicker/TimePicker.test.tsx +src/components/Tooltip/TooltipHost.test.tsx +src/components/CommandBar/CommandBar.deprecated.test.tsx +src/components/pickers/Suggestions/Suggestions.test.tsx +src/components/DetailsList/DetailsRow.test.tsx +src/components/Persona/Persona.deprecated.test.tsx +src/utilities/ThemeProvider/ThemeProvider.test.tsx +src/components/Link/Link.test.tsx +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx +src/components/FloatingPicker/BaseFloatingPicker.test.tsx +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts +src/utilities/keytips/KeytipConfig.test.ts +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx +src/utilities/keytips/KeytipUtils.test.ts +src/components/Icon/Icon.test.tsx +src/utilities/ButtonGrid/ButtonGrid.test.tsx +src/components/Coachmark/Coachmark.test.tsx +src/utilities/ThemeProvider/makeStyles.test.tsx +src/components/ActivityItem/ActivityItem.test.tsx +src/components/ColorPicker/ColorPicker.deprecated.test.tsx +src/utilities/contextualMenu/contextualMenuUtility.test.ts +src/components/MarqueeSelection/MarqueeSelection.test.tsx +src/components/Icon/ImageIcon.test.tsx +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx +src/components/Rating/Rating.test.tsx +src/utilities/keytips/IKeytipTransitionKey.test.ts +src/components/KeytipData/useKeytipData.test.tsx +src/components/Announced/Announced.test.tsx +src/components/Fabric/Fabric.test.tsx +src/components/Tooltip/Tooltip.test.tsx +src/components/Shimmer/Shimmer.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx +src/components/Icon/FontIcon.test.tsx +src/components/List/utils/scroll.test.ts +src/utilities/hooks/useResponsiveMode.test.tsx +src/components/Dialog/Dialog.deprecated.test.tsx +src/components/ProgressIndicator/ProgressIndicator.test.tsx +src/components/DocumentCard/DocumentCardImage.test.tsx +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx +src/components/Stack/StackItem/StackItem.test.tsx +src/components/FocusTrapZone/FocusTrapZone.test.tsx +src/components/ComponentConformance.test.tsx (12.284 s) +src/components/Popup/Popup.test.tsx +src/components/Spinner/Spinner.test.tsx +src/components/Button/Button.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx +src/components/Toggle/Toggle.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx +src/utilities/groupedList/GroupedListUtility.test.tsx +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx +src/components/pickers/TagPicker/TagItem.test.tsx +src/components/Keytip/KeytipContent.test.tsx +src/components/Text/Text.test.tsx +src/components/Persona/PersonaInitialsColor.test.ts +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx +src/components/DetailsList/ShimmeredDetailsList.test.tsx +src/components/Label/Label.test.tsx +src/components/Pivot/Pivot.deprecated.test.tsx +src/components/ScrollablePane/ScrollablePane.test.tsx +src/components/DocumentCard/DocumentCard.test.tsx +src/components/Check/Check.test.tsx +src/utilities/decorators/withResponsiveMode.test.tsx +src/components/KeytipData/useKeytipRef.test.ts +src/components/Sticky/Sticky.test.tsx +src/components/Overlay/Overlay.test.tsx +src/components/Divider/VerticalDivider.test.tsx +src/components/Separator/Separator.test.tsx +src/components/Calendar/Calendar.test.tsx +``` + +## test v8 with tsconfig:false (disabled ts config lookup) + +> - @see https://kulshekhar.github.io/ts-jest/docs/28.0/getting-started/options/tsconfig#disable-auto-lookup +> - uses target: ES2015 instead ES5 + +> run 283s + +``` + +``` + +## OOM troubleshooting + +leaks fixed + no conformance (1618 MB heap size) +leaks fixed + conformance (1618 MB heap size) + +| Run type | max heap size (MB) | delta | +| -------------------------------------- | ------------------ | ----- | +| conformance | 2029 MB | | +| no conformance | 1819 MB | | +| fixed leaks attempt 1 + conformance | 1954 MB | | +| fixed leaks attempt 1 + no conformance | 1618 MB | | + +### current + +``` +src/components/ComponentConformance.test.tsx (11.427 s, 339 MB heap size) +src/components/ColorPicker/ColorPicker.test.tsx (6.235 s, 540 MB heap size) +src/components/ComboBox/ComboBox.test.tsx (5.275 s, 573 MB heap size) +src/components/Dropdown/Dropdown.test.tsx (467 MB heap size) +src/components/TextField/TextField.test.tsx (395 MB heap size) +src/components/Button/Button.test.tsx (261 MB heap size) +src/components/DetailsList/DetailsList.test.tsx (232 MB heap size) +src/components/ContextualMenu/ContextualMenu.test.tsx (418 MB heap size) +src/components/Breadcrumb/Breadcrumb.test.tsx (427 MB heap size) +src/components/DetailsList/DetailsListV2.test.tsx (297 MB heap size) +src/components/DatePicker/DatePicker.test.tsx (470 MB heap size) +src/components/CommandBar/CommandBar.test.tsx (497 MB heap size) +src/components/Facepile/Facepile.test.tsx (503 MB heap size) +src/components/SpinButton/SpinButton.test.tsx (682 MB heap size) +src/components/ChoiceGroup/ChoiceGroup.test.tsx (487 MB heap size) +src/components/Dialog/Dialog.test.tsx (441 MB heap size) +src/components/Callout/Callout.test.tsx (616 MB heap size) +src/components/Panel/Panel.test.tsx (532 MB heap size) +src/components/Modal/Modal.test.tsx (578 MB heap size) +src/components/DetailsList/DetailsHeader.test.tsx (576 MB heap size) +src/components/Pivot/Pivot.test.tsx (780 MB heap size) +src/components/OverflowSet/OverflowSet.test.tsx (959 MB heap size) +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx (954 MB heap size) +src/utilities/selection/SelectionZone.test.tsx (753 MB heap size) +src/components/DetailsList/DetailsColumn.test.tsx (612 MB heap size) +src/components/Slider/Slider.test.tsx (815 MB heap size) +src/components/KeytipLayer/KeytipLayer.test.tsx (665 MB heap size) +src/components/Coachmark/Coachmark.test.tsx (863 MB heap size) +src/components/FloatingPicker/BaseFloatingPicker.test.tsx (726 MB heap size) +src/components/pickers/BasePicker.test.tsx (931 MB heap size) +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx (971 MB heap size) +src/components/pickers/TagPicker/TagPicker.test.tsx (1150 MB heap size) +src/components/Stack/Stack.test.tsx (1086 MB heap size) +src/components/Nav/Nav.test.tsx (1113 MB heap size) +src/components/FocusTrapZone/FocusTrapZone.test.tsx (1286 MB heap size) +src/components/MessageBar/MessageBar.test.tsx (1208 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx (1064 MB heap size) +src/components/Layer/Layer.test.tsx (1080 MB heap size) +src/components/List/List.test.tsx (1287 MB heap size) +src/components/Toggle/Toggle.test.tsx (1325 MB heap size) +src/components/TimePicker/TimePicker.test.tsx (1317 MB heap size) +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx (1384 MB heap size) +src/components/GroupedList/GroupedListV2.test.tsx (1428 MB heap size) +src/components/TeachingBubble/TeachingBubble.test.tsx (1476 MB heap size) +src/components/Rating/Rating.test.tsx (1656 MB heap size) +src/components/CommandBar/CommandBar.deprecated.test.tsx (1650 MB heap size) +src/components/Button/Button.deprecated.test.tsx (1396 MB heap size) +src/components/Checkbox/Checkbox.test.tsx (1597 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx (1453 MB heap size) +src/components/Popup/Popup.test.tsx (1653 MB heap size) +src/components/DetailsList/DetailsRow.test.tsx (1513 MB heap size) +src/components/SearchBox/SearchBox.test.tsx (1711 MB heap size) +src/components/Calendar/Calendar.test.tsx (1887 MB heap size) +src/components/Persona/Persona.test.tsx (1805 MB heap size) +src/components/Link/Link.test.tsx (1850 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx (1707 MB heap size) +src/components/Announced/Announced.test.tsx (1907 MB heap size) +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx (1766 MB heap size) +src/components/Persona/Persona.deprecated.test.tsx (1779 MB heap size) +src/components/pickers/TagPicker/TagItem.test.tsx (1791 MB heap size) +src/components/Label/Label.test.tsx (1851 MB heap size) +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx (1712 MB heap size) +src/components/ResizeGroup/ResizeGroup.test.tsx (1911 MB heap size) +src/utilities/ButtonGrid/ButtonGrid.test.tsx (2087 MB heap size) +src/components/GroupedList/GroupedList.test.tsx (462 MB heap size) +src/components/MarqueeSelection/MarqueeSelection.test.tsx (519 MB heap size) +src/components/Dialog/Dialog.deprecated.test.tsx (512 MB heap size) +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx (530 MB heap size) +src/components/HoverCard/HoverCard.test.tsx (428 MB heap size) +src/utilities/keytips/KeytipUtils.test.ts (282 MB heap size) +src/utilities/color/colors.test.ts (293 MB heap size) +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx (455 MB heap size) +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx (500 MB heap size) +src/utilities/positioning/positioning.test.ts (352 MB heap size) +src/components/Toggle/Toggle.deprecated.test.tsx (362 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx (375 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx (388 MB heap size) +src/components/Stack/StackItem/StackItem.test.tsx (396 MB heap size) +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx (523 MB heap size) +src/components/Sticky/Sticky.test.tsx (566 MB heap size) +src/components/ColorPicker/ColorPicker.deprecated.test.tsx (427 MB heap size) +src/components/ActivityItem/ActivityItem.test.tsx (558 MB heap size) +src/components/DetailsList/ShimmeredDetailsList.test.tsx (420 MB heap size) +src/components/KeytipData/useKeytipData.test.tsx (426 MB heap size) +src/components/Shimmer/Shimmer.test.tsx (484 MB heap size) +src/components/Image/Image.test.tsx (427 MB heap size) +src/components/Icon/Icon.test.tsx (473 MB heap size) +src/components/Divider/VerticalDivider.test.tsx (516 MB heap size) +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx (569 MB heap size) +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx (728 MB heap size) +src/utilities/decorators/withResponsiveMode.test.tsx (456 MB heap size) +src/components/Tooltip/Tooltip.test.tsx (471 MB heap size) +src/components/pickers/Suggestions/Suggestions.test.tsx (598 MB heap size) +src/components/Spinner/Spinner.test.tsx (642 MB heap size) +src/components/Icon/FontIcon.test.tsx (499 MB heap size) +src/utilities/keytips/KeytipManager.test.tsx (511 MB heap size) +src/components/Autofill/Autofill.test.tsx (518 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx (531 MB heap size) +src/components/Icon/ImageIcon.test.tsx (543 MB heap size) +src/components/ProgressIndicator/ProgressIndicator.test.tsx (741 MB heap size) +src/utilities/ThemeProvider/ThemeProvider.test.tsx (600 MB heap size) +src/components/Overlay/Overlay.test.tsx (796 MB heap size) +src/components/Check/Check.test.tsx (843 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx (832 MB heap size) +src/utilities/contextualMenu/contextualMenuUtility.test.ts (710 MB heap size) +src/utilities/ThemeProvider/makeStyles.test.tsx (726 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx (741 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx (746 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx (758 MB heap size) +src/components/Tooltip/TooltipHost.test.tsx (775 MB heap size) +src/components/Fabric/Fabric.test.tsx (781 MB heap size) +src/components/DocumentCard/DocumentCardImage.test.tsx (792 MB heap size) +src/components/Persona/PersonaInitialsColor.test.ts (800 MB heap size) +src/components/KeytipData/useKeytipRef.test.ts (810 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx (823 MB heap size) +src/components/TextField/MaskedTextField/inputMask.test.ts (836 MB heap size) +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx (1016 MB heap size) +src/components/KeytipLayer/KeytipTree.test.tsx (877 MB heap size) +src/utilities/hooks/useResponsiveMode.test.tsx (888 MB heap size) +src/utilities/keytips/KeytipConfig.test.ts (897 MB heap size) +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx (910 MB heap size) +src/components/Text/Text.test.tsx (1129 MB heap size) +src/components/Separator/Separator.test.tsx (1152 MB heap size) +src/components/Pivot/Pivot.deprecated.test.tsx (1014 MB heap size) +src/components/ContextualMenu/ContextualMenuItem.test.tsx (1022 MB heap size) +src/components/DocumentCard/DocumentCard.test.tsx (1040 MB heap size) +src/components/Keytip/KeytipContent.test.tsx (1045 MB heap size) +src/components/ScrollablePane/ScrollablePane.test.tsx (1056 MB heap size) +src/utilities/keytips/IKeytipTransitionKey.test.ts (1065 MB heap size) +src/components/List/utils/scroll.test.ts (1074 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx (1083 MB heap size) +src/components/Stack/StackUtils.test.ts (1096 MB heap size) +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts (1103 MB heap size) +src/utilities/groupedList/GroupedListUtility.test.tsx (1112 MB heap size) +``` + +### without conformance + +``` +src/components/ComponentConformance.test.tsx (10.724 s, 339 MB heap size) +src/components/ColorPicker/ColorPicker.test.tsx (358 MB heap size) +src/components/ComboBox/ComboBox.test.tsx (354 MB heap size) +src/components/SearchBox/SearchBox.test.tsx (343 MB heap size) +src/components/Dropdown/Dropdown.test.tsx (367 MB heap size) +src/components/List/List.test.tsx (388 MB heap size) +src/utilities/ButtonGrid/ButtonGrid.test.tsx (400 MB heap size) +src/components/Modal/Modal.test.tsx (423 MB heap size) +src/components/Coachmark/Coachmark.test.tsx (440 MB heap size) +src/components/MessageBar/MessageBar.test.tsx (432 MB heap size) +src/components/TextField/TextField.test.tsx (445 MB heap size) +src/components/ActivityItem/ActivityItem.test.tsx (456 MB heap size) +src/components/CommandBar/CommandBar.test.tsx (475 MB heap size) +src/components/Pivot/Pivot.test.tsx (486 MB heap size) +src/components/pickers/BasePicker.test.tsx (509 MB heap size) +src/components/Button/Button.test.tsx (520 MB heap size) +src/components/Dialog/Dialog.test.tsx (542 MB heap size) +src/components/Separator/Separator.test.tsx (537 MB heap size) +src/components/Breadcrumb/Breadcrumb.test.tsx (563 MB heap size) +src/components/Facepile/Facepile.test.tsx (584 MB heap size) +src/utilities/selection/SelectionZone.test.tsx (587 MB heap size) +src/components/DetailsList/DetailsList.test.tsx (607 MB heap size) +src/components/ContextualMenu/ContextualMenu.test.tsx (639 MB heap size) +src/components/SpinButton/SpinButton.test.tsx (631 MB heap size) +src/components/Checkbox/Checkbox.test.tsx (643 MB heap size) +src/components/DatePicker/DatePicker.test.tsx (666 MB heap size) +src/components/HoverCard/HoverCard.test.tsx (671 MB heap size) +src/components/DetailsList/DetailsListV2.test.tsx (699 MB heap size) +src/components/SwatchColorPicker/SwatchColorPicker.test.tsx (707 MB heap size) +src/components/Slider/Slider.test.tsx (716 MB heap size) +src/components/ChoiceGroup/ChoiceGroup.test.tsx (730 MB heap size) +src/components/Divider/VerticalDivider.test.tsx (735 MB heap size) +src/components/TextField/MaskedTextField/MaskedTextField.test.tsx (752 MB heap size) +src/components/Popup/Popup.test.tsx (769 MB heap size) +src/components/pickers/Suggestions/Suggestions.test.tsx (778 MB heap size) +src/components/OverflowSet/OverflowSet.test.tsx (795 MB heap size) +src/components/GroupedList/GroupedList.test.tsx (804 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.deprecated.test.tsx (814 MB heap size) +src/components/Shimmer/Shimmer.test.tsx (830 MB heap size) +src/components/Panel/Panel.test.tsx (853 MB heap size) +src/components/Nav/Nav.test.tsx (859 MB heap size) +src/components/Callout/Callout.test.tsx (871 MB heap size) +src/components/Rating/Rating.test.tsx (890 MB heap size) +src/components/Tooltip/TooltipHost.test.tsx (894 MB heap size) +src/components/Announced/Announced.test.tsx (907 MB heap size) +src/components/Icon/Icon.test.tsx (918 MB heap size) +src/components/GroupedList/GroupedListV2.test.tsx (934 MB heap size) +src/components/Dialog/Dialog.deprecated.test.tsx (954 MB heap size) +src/components/Persona/Persona.test.tsx (960 MB heap size) +src/components/MarqueeSelection/MarqueeSelection.test.tsx (967 MB heap size) +src/components/Overlay/Overlay.test.tsx (977 MB heap size) +src/components/Stack/Stack.test.tsx (998 MB heap size) +src/components/pickers/PeoplePicker/PeoplePicker.test.tsx (1011 MB heap size) +src/components/ResizeGroup/ResizeGroup.test.tsx (1020 MB heap size) +src/components/WeeklyDayPicker/WeeklyDayPicker.test.tsx (1038 MB heap size) +src/components/Persona/PersonaPresence/PersonaPresence.test.tsx (1045 MB heap size) +src/components/Toggle/Toggle.test.tsx (1059 MB heap size) +src/components/SelectedItemsList/SelectedPeopleList/SelectedPeopleList.test.tsx (1077 MB heap size) +src/components/Link/Link.test.tsx (1087 MB heap size) +src/components/Calendar/Calendar.test.tsx (1097 MB heap size) +src/components/Text/Text.test.tsx (1109 MB heap size) +src/components/Check/Check.test.tsx (1121 MB heap size) +src/components/Spinner/Spinner.test.tsx (1133 MB heap size) +src/components/DetailsList/DetailsHeader.test.tsx (1159 MB heap size) +src/components/ExtendedPicker/BaseExtendedPicker.test.tsx (1180 MB heap size) +src/components/FocusTrapZone/FocusTrapZone.test.tsx (1175 MB heap size) +src/components/TeachingBubble/TeachingBubble.test.tsx (1191 MB heap size) +src/components/Label/Label.test.tsx (1201 MB heap size) +src/components/Sticky/Sticky.test.tsx (1208 MB heap size) +src/components/DetailsList/DetailsColumn.test.tsx (1229 MB heap size) +src/components/pickers/TagPicker/TagPicker.test.tsx (1242 MB heap size) +src/components/FloatingPicker/BaseFloatingPicker.test.tsx (1255 MB heap size) +src/components/CalendarDayGrid/CalendarDayGrid.test.tsx (1263 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionsControl.test.tsx (1277 MB heap size) +src/components/ProgressIndicator/ProgressIndicator.test.tsx (1289 MB heap size) +src/components/ColorPicker/ColorRectangle/ColorRectangle.test.tsx (1304 MB heap size) +src/components/CommandBar/CommandBar.deprecated.test.tsx (1326 MB heap size) +src/components/Tooltip/Tooltip.test.tsx (1327 MB heap size) +src/components/Image/Image.test.tsx (1340 MB heap size) +src/components/Persona/Persona.deprecated.test.tsx (1353 MB heap size) +src/components/TimePicker/TimePicker.test.tsx (1372 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.deprecated.test.tsx (1376 MB heap size) +src/components/Autofill/Autofill.test.tsx (1385 MB heap size) +src/components/SelectedItemsList/BaseSelectedItemsList.test.tsx (1398 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.deprecated.test.tsx (1410 MB heap size) +src/utilities/color/colors.test.ts (1418 MB heap size) +src/components/Toggle/Toggle.deprecated.test.tsx (1428 MB heap size) +src/components/Button/Button.deprecated.test.tsx (1443 MB heap size) +src/utilities/ThemeProvider/makeStyles.test.tsx (1453 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.test.tsx (1466 MB heap size) +src/components/FloatingPicker/Suggestions/SuggestionStore.test.tsx (1473 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.deprecated.test.tsx (1486 MB heap size) +src/components/Layer/Layer.test.tsx (1503 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuButton.deprecated.test.tsx (1510 MB heap size) +src/components/KeytipLayer/KeytipTree.test.tsx (1519 MB heap size) +src/components/ContextualMenu/ContextualMenu.deprecated.test.tsx (1539 MB heap size) +src/components/Icon/ImageIcon.test.tsx (1555 MB heap size) +src/components/DetailsList/ShimmeredDetailsList.test.tsx (1559 MB heap size) +src/components/Fabric/Fabric.test.tsx (1568 MB heap size) +src/components/KeytipLayer/KeytipLayer.test.tsx (1581 MB heap size) +src/components/ColorPicker/ColorSlider/ColorSlider.test.tsx (1598 MB heap size) +src/components/ChoiceGroup/ChoiceGroupOption/ChoiceGroupOption.test.tsx (1604 MB heap size) +src/components/DocumentCard/DocumentCardImage.test.tsx (1615 MB heap size) +src/components/TextField/MaskedTextField/inputMask.test.ts (1626 MB heap size) +src/utilities/hooks/useResponsiveMode.test.tsx (1633 MB heap size) +src/components/Dropdown/utilities/DropdownSizePosCache.test.ts (1642 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuAnchor.test.tsx (1656 MB heap size) +src/components/DocumentCard/DocumentCard.test.tsx (1673 MB heap size) +src/components/Pivot/Pivot.deprecated.test.tsx (1682 MB heap size) +src/components/Keytip/KeytipContent.test.tsx (1691 MB heap size) +src/components/ContextualMenu/ContextualMenuItem.test.tsx (1700 MB heap size) +src/components/ScrollablePane/ScrollablePane.test.tsx (1712 MB heap size) +src/utilities/ThemeProvider/ThemeProvider.test.tsx (1724 MB heap size) +src/components/DetailsList/DetailsRow.test.tsx (1740 MB heap size) +src/components/KeytipData/useKeytipRef.test.ts (1745 MB heap size) +src/components/Stack/StackItem/StackItem.test.tsx (1755 MB heap size) +src/components/ColorPicker/ColorPicker.deprecated.test.tsx (1769 MB heap size) +src/components/List/utils/scroll.test.ts (1776 MB heap size) +src/utilities/groupedList/GroupedListUtility.test.tsx (1785 MB heap size) +src/utilities/keytips/KeytipManager.test.tsx (1798 MB heap size) +src/utilities/keytips/KeytipConfig.test.ts (1804 MB heap size) +src/utilities/contextualMenu/contextualMenuUtility.test.ts (1814 MB heap size) +src/utilities/keytips/IKeytipTransitionKey.test.ts (1824 MB heap size) +src/utilities/positioning/positioning.test.ts (1834 MB heap size) +src/components/Stack/StackUtils.test.ts (1846 MB heap size) +src/components/Persona/PersonaInitialsColor.test.ts (1853 MB heap size) +src/components/TeachingBubble/TeachingBubble.deprecated.test.tsx (1872 MB heap size) +src/components/Icon/FontIcon.test.tsx (1878 MB heap size) +src/components/ContextualMenu/ContextualMenuItemWrapper/ContextualMenuSplitButton.test.tsx (1890 MB heap size) +src/components/KeytipData/useKeytipData.test.tsx (1899 MB heap size) +src/utilities/decorators/withResponsiveMode.test.tsx (1908 MB heap size) +src/components/pickers/TagPicker/TagItem.test.tsx (1926 MB heap size) +src/components/Persona/PersonaCoin/PersonaCoin.test.tsx (1941 MB heap size) +src/utilities/keytips/KeytipUtils.test.ts (1947 MB heap size) +``` + +### with conformance except TS Program diff --git a/docs/ci-test-pipeline-data.md b/docs/ci-test-pipeline-data.md new file mode 100644 index 0000000000000..3a301c37a350a --- /dev/null +++ b/docs/ci-test-pipeline-data.md @@ -0,0 +1,86 @@ +**Test:** + +- nx run-many --target=test --parallel=4 / 26m 9s +- πŸš… nx run-many --target=test --parallel=8 --maxWorkers=4 / 23m 34s +- nx run-many --target=test --parallel=8 --maxWorkers=2 / 25m 34s +- nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 / 29m 11s +- nx run-many --target=test --parallel=8 --maxWorkers=4 && v9 jest has maxWorkers=4 && ts-jest isolatedModules / 31m 56s + + - this doesn't make any sense, the test time should have been the same as the fastest or even faster (23m) + +- lage test / (constantly fails on ssr-test (TimeoutError: Navigation timeout of 10000 ms exceeded) + ) + - 27m 5s + - 33m 50s + +### react-components + +~~All packages use native jest so no perf bottlenecks caused by test execution. βœ…~~ + +πŸ”₯ v9 packages are not using maxWorkers which might cause OOM and other issues on CI !!!! + +- fixed by setting maxWorkers on CI + +### react + +- used `runInBand` on CI !!!!! (update: without that it will never finish because memory leaks, we will use maxThreadWorkers=4) + +| Run type | time | command | +| ------------------------------ | ---------- | ----------------------------------------------------------------------- | +| current | 263 s | `just test --runInBand --no-cache` | +| current (CI) | 15m 10.01s | part of `lage build test lint type-check` | +| without runInBand | 85 s | `just test --no-cache` | +| without runInBand (+ raw jest) | 82 s | `jest --no-cache` | +| without runInBand (CI) | ? | part of `lage build test lint type-check`. This will never finish on CI | + +**Tests contain memory leaks** + +> discovered on CI when pipeline was executed via nx: + +``` +worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +``` + +### react-northstar + +| Run type | time | command | +| --------------------------------------- | ----- | -------------------------------------------------------------------------- | +| current | 382 s | `gulp test --config ./jest.config.js --coverage --maxWorkers=2 --no-cache` | +| without codecov | 348 s | `gulp test --config ./jest.config.js --maxWorkers=2 --no-cache` | +| without codecov,maxWorkers | 232 s | `gulp test --config ./jest.config.js --no-cache` | +| without codecov,maxWorkers (+ raw jest) | 196 s | `jest --config ./jest.config.js --no-cache` | + +#### More data: + +**70% of the test scenarios are very slow** - triggering jest warnings: + +``` + PASS test/specs/components/Skeleton/SkeletonButton-test.tsx (10.063 s) + PASS test/specs/components/Skeleton/SkeletonAvatar-test.tsx (10.126 s) + PASS test/specs/components/Chat/ChatMessageReadStatus-test.tsx (9.917 s) + PASS test/specs/components/Carousel/CarouselNavigationItem-test.tsx (10.338 s) + PASS test/specs/components/Button/ButtonContent-test.tsx (9.267 s) + PASS test/specs/components/Attachment/AttachmentDescription-test.tsx (9.598 s) + PASS test/specs/components/Toolbar/ToolbarMenuItemIcon-test.ts (9.674 s) + PASS test/specs/components/Dropdown/DropdownItem-test.tsx (9.877 s) + PASS test/specs/components/Toolbar/ToolbarMenu-test.tsx (10.047 s) + PASS test/specs/components/Toolbar/ToolbarMenuDivider-test.ts (9.796 s) + PASS test/specs/components/Toolbar/ToolbarItemWrapper-test.tsx (9.426 s) + PASS test/specs/components/Breadcrumb/Breadcrumb-test.ts (11.22 s) + PASS test/specs/components/Breadcrumb/BreadcrumbDivider-test.ts (9.089 s) + PASS test/specs/components/SplitButton/SplitButtonToggle-test.tsx (9.46 s) + PASS test/specs/components/Alert/AlertDismissAction-test.tsx (10.006 s) + PASS test/specs/components/List/ListItemContentMedia-test.tsx (9.923 s) + PASS test/specs/components/Skeleton/SkeletonInput-test.tsx (9.283 s) + PASS test/specs/components/Skeleton/SkeletonShape-test.tsx (9.819 s) + PASS test/specs/components/Chat/ChatMessageContent-test.tsx (11.646 s) + PASS test/specs/components/Menu/MenuItemIndicator-test.tsx (11.176 s) +``` + +**Tests contain memory leaks** + +> discovered while executing via raw `jest` instead `gulp` + +``` +A worker process has failed to exit gracefully and has been force exited. This is likely caused by tests leaking due to improper teardown. Try running with --detectOpenHandles to find leaks. Active timers can also cause this, ensure that .unref() was called on them. +```