mirror of
https://github.com/hanzoai/react.git
synced 2026-08-07 03:21:33 +00:00
> [!NOTE] > I had to invalidate `node_modules` cache keys on CI, because we are now using `react-devtools-facade` package and we need to create a symlink to it, otherwise Flow will fail. We use a hash value of `yarn.lock`, but it's not invalidated when a package inside yarn workspace is using another private package. --- This change introduces new `react-devtools-cdt-mcp` package, which is responsible for installing React tools for `chrome-devtools-mcp` server. It is using `react-devtools-facade` as a dependency: it doesn't own the implementation of these tools, it just relays Facade's tools to `chrome-devtools-mcp` format. When CDT MCP navigates to a fresh page, it emits unique `devtoolsdiscovery` method, that has `respondWith` method, which is the integration point between runtime libraries and MCP server. `react-devtools-cdt-mcp` is the owner for this integration. More details are available here - https://github.com/ChromeDevTools/chrome-devtools-mcp/blob/main/docs/third-party-developer-tools.md. Here is the list of tools that are being installed: - `react_get_component_tree` - `react_get_component_by_uid` - `react_find_components` - `react_get_component_source` - `react_get_owner_stack_trace` - `react_get_owner_stack` - `react_start_profiling` - `react_stop_profiling ` - `react_get_trace_overview` - `react_get_commit_report` --- Quick demo how to test the package with `chrome-devtools-mcp` CLI. Steps are also mentioned in `README` file: https://github.com/user-attachments/assets/af9fefce-03f0-4ebd-a94f-e9dd72b87f4d
198 lines
7.0 KiB
YAML
198 lines
7.0 KiB
YAML
name: (DevTools) Regression Tests
|
|
|
|
on:
|
|
schedule:
|
|
- cron: 0 0 * * *
|
|
workflow_dispatch:
|
|
inputs:
|
|
commit_sha:
|
|
required: false
|
|
type: string
|
|
|
|
permissions: {}
|
|
|
|
env:
|
|
TZ: /usr/share/zoneinfo/America/Los_Angeles
|
|
# https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout
|
|
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 1
|
|
|
|
jobs:
|
|
download_build:
|
|
name: Download base build
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
# We use github.token to download the build artifact from a previous runtime_build_and_test.yml run
|
|
actions: read
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: '.nvmrc'
|
|
- name: Cache node_modules
|
|
uses: actions/cache@v4
|
|
id: node_modules
|
|
with:
|
|
path: |
|
|
**/node_modules
|
|
key: runtime-release-node_modules-v6-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }}
|
|
- name: Ensure clean build directory
|
|
run: rm -rf build
|
|
- run: yarn install --frozen-lockfile
|
|
if: steps.node_modules.outputs.cache-hit != 'true'
|
|
- run: yarn --cwd scripts/release install --frozen-lockfile
|
|
if: steps.node_modules.outputs.cache-hit != 'true'
|
|
- name: Download react-devtools artifacts for base revision
|
|
run: |
|
|
git fetch origin main
|
|
GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build.js --commit=${{ inputs.commit_sha || '$(git rev-parse origin/main)' }}
|
|
- name: Display structure of build
|
|
run: ls -R build
|
|
- name: Archive build
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: build
|
|
path: build
|
|
if-no-files-found: error
|
|
|
|
build_devtools_and_process_artifacts:
|
|
name: Build DevTools and process artifacts
|
|
needs: download_build
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: '.nvmrc'
|
|
- name: Cache node_modules
|
|
uses: actions/cache@v4
|
|
id: node_modules
|
|
with:
|
|
path: |
|
|
**/node_modules
|
|
key: runtime-node_modules-v10-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
|
|
- name: Ensure clean build directory
|
|
run: rm -rf build
|
|
- run: yarn install --frozen-lockfile
|
|
if: steps.node_modules.outputs.cache-hit != 'true'
|
|
- name: Restore archived build
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: build
|
|
path: build
|
|
- run: ./scripts/ci/pack_and_store_devtools_artifacts.sh
|
|
env:
|
|
RELEASE_CHANNEL: experimental
|
|
- name: Display structure of build
|
|
run: ls -R build
|
|
- name: Archive devtools build
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: react-devtools
|
|
path: build/devtools
|
|
if-no-files-found: error
|
|
# Simplifies getting the extension for local testing
|
|
- name: Archive chrome extension
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: react-devtools-chrome-extension
|
|
path: build/devtools/chrome-extension.zip
|
|
if-no-files-found: error
|
|
- name: Archive firefox extension
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: react-devtools-firefox-extension
|
|
path: build/devtools/firefox-extension.zip
|
|
if-no-files-found: error
|
|
|
|
run_devtools_tests_for_versions:
|
|
name: Run DevTools tests for versions
|
|
needs: build_devtools_and_process_artifacts
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
version:
|
|
- "16.0"
|
|
- "16.5" # schedule package
|
|
- "16.8" # hooks
|
|
- "17.0"
|
|
- "18.0"
|
|
- "18.2" # compiler polyfill
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: '.nvmrc'
|
|
- name: Cache node_modules
|
|
uses: actions/cache@v4
|
|
id: node_modules
|
|
with:
|
|
path: |
|
|
**/node_modules
|
|
key: runtime-node_modules-v10-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
|
|
- run: yarn install --frozen-lockfile
|
|
if: steps.node_modules.outputs.cache-hit != 'true'
|
|
- name: Restore all archived build artifacts
|
|
uses: actions/download-artifact@v4
|
|
- name: Display structure of build
|
|
run: ls -R build
|
|
- run: ./scripts/ci/download_devtools_regression_build.js ${{ matrix.version }} --replaceBuild
|
|
- run: node ./scripts/jest/jest-cli.js --build --project devtools --release-channel=experimental --reactVersion ${{ matrix.version }} --ci
|
|
|
|
run_devtools_e2e_tests_for_versions:
|
|
name: Run DevTools e2e tests for versions
|
|
needs: build_devtools_and_process_artifacts
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
version:
|
|
- "16.0"
|
|
- "16.5" # schedule package
|
|
- "16.8" # hooks
|
|
- "17.0"
|
|
- "18.0"
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version-file: '.nvmrc'
|
|
- name: Cache node_modules
|
|
uses: actions/cache@v4
|
|
id: node_modules
|
|
with:
|
|
path: |
|
|
**/node_modules
|
|
key: runtime-node_modules-v10-${{ runner.arch }}-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
|
|
- run: yarn install --frozen-lockfile
|
|
if: steps.node_modules.outputs.cache-hit != 'true'
|
|
- name: Restore all archived build artifacts
|
|
uses: actions/download-artifact@v4
|
|
- name: Display structure of build
|
|
run: ls -R build
|
|
- name: Check Playwright version
|
|
id: playwright_version
|
|
run: echo "playwright_version=$(npm ls @playwright/test | grep @playwright | sed 's/.*@//' | head -1)" >> "$GITHUB_OUTPUT"
|
|
- name: Cache Playwright Browsers for version ${{ steps.playwright_version.outputs.playwright_version }}
|
|
id: cache_playwright_browsers
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-browsers-v6-${{ runner.arch }}-${{ runner.os }}-${{ steps.playwright_version.outputs.playwright_version }}
|
|
- run: npx playwright install --with-deps
|
|
if: steps.cache_playwright_browsers.outputs.cache-hit != 'true'
|
|
- run: npx playwright install-deps
|
|
if: steps.cache_playwright_browsers.outputs.cache-hit == 'true'
|
|
- run: ./scripts/ci/download_devtools_regression_build.js ${{ matrix.version }}
|
|
- run: ls -R build-regression
|
|
- run: ./scripts/ci/run_devtools_e2e_tests.js ${{ matrix.version }}
|
|
env:
|
|
RELEASE_CHANNEL: experimental
|
|
- name: Cleanup build regression folder
|
|
run: rm -r ./build-regression
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: screenshots
|
|
path: ./tmp/playwright-artifacts
|
|
if-no-files-found: warn
|