diff --git a/.github/workflows/devtools_regression_tests.yml b/.github/workflows/devtools_regression_tests.yml new file mode 100644 index 0000000000000..0b751140d3b2d --- /dev/null +++ b/.github/workflows/devtools_regression_tests.yml @@ -0,0 +1,173 @@ +name: (DevTools) Regression Tests + +on: + pull_request: + branches: + - 'gh/poteto/**' # @nocommit + schedule: + - cron: 0 0 * * * + workflow_dispatch: + inputs: + prerelease_commit_sha: + required: false + +env: + TZ: /usr/share/zoneinfo/America/Los_Angeles + +jobs: + download_build: + if: inputs.prerelease_commit_sha == '' + name: Download base build + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18.20.1 + cache: yarn + cache-dependency-path: yarn.lock + - name: Restore cached node_modules + uses: actions/cache@v4 + id: node_modules + with: + path: "**/node_modules" + key: ${{ runner.arch }}-${{ runner.os }}-modules-${{ hashFiles('yarn.lock', 'scripts/release/yarn.lock') }} + - run: yarn install --frozen-lockfile + - run: yarn install --frozen-lockfile + working-directory: scripts/release + - name: Download react-devtools artifacts for base revision + run: | + git fetch origin main + GH_TOKEN=${{ github.token }} scripts/release/download-experimental-build-ghaction.js --commit=$(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 + + 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: 18.20.1 + cache: yarn + cache-dependency-path: yarn.lock + - name: Restore cached node_modules + uses: actions/cache@v4 + id: node_modules + with: + path: "**/node_modules" + key: ${{ runner.arch }}-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} + - run: yarn install --frozen-lockfile + - name: Restore archived build + uses: actions/download-artifact@v4 + with: + name: build + path: build + - run: ./scripts/circleci/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.tgz + # 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 + - name: Archive firefox extension + uses: actions/upload-artifact@v4 + with: + name: react-devtools-firefox-extension + path: build/devtools/firefox-extension.zip + + run_devtools_tests_for_versions: + name: Run DevTools tests for versions + needs: build_devtools_and_process_artifacts + runs-on: ubuntu-latest + strategy: + matrix: + version: + - 16.0 + - 16.5 # schedule package + - 16.8 # hooks + - 17.0 + - 18.0 + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18.20.1 + cache: yarn + cache-dependency-path: yarn.lock + - name: Restore cached node_modules + uses: actions/cache@v4 + id: node_modules + with: + path: "**/node_modules" + key: ${{ runner.arch }}-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} + - run: yarn install --frozen-lockfile + - name: Restore all archived build artifacts + uses: actions/download-artifact@v4 + - name: Display structure of build + run: ls -R build + - run: ./scripts/circleci/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=github + + run_devtools_e2e_tests_for_versions: + name: Run DevTools e2e tests for versions + needs: build_devtools_and_process_artifacts + runs-on: ubuntu-latest + strategy: + matrix: + version: + - 16.0 + - 16.5 # schedule package + - 16.8 # hooks + - 17.0 + - 18.0 + continue-on-error: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18.20.1 + cache: yarn + cache-dependency-path: yarn.lock + - name: Restore cached node_modules + uses: actions/cache@v4 + id: node_modules + with: + path: "**/node_modules" + key: ${{ runner.arch }}-${{ runner.os }}-modules-${{ hashFiles('yarn.lock') }} + - run: yarn install --frozen-lockfile + - name: Restore all archived build artifacts + uses: actions/download-artifact@v4 + - name: Display structure of build + run: ls -R build + - name: Playwright install deps + run: | + npx playwright install + sudo npx playwright install-deps + - run: ./scripts/circleci/download_devtools_regression_build.js ${{ matrix.version }} + - run: ./scripts/circleci/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/screenshots