Normal PR (should kick CI) #1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Test | |
| on: | |
| push: | |
| branches: [master] | |
| pull_request: | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| name: Build | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1 | |
| with: | |
| node-version: 14 | |
| - uses: actions/cache@f4b3439a656ba812b8cb417d2d49f9c810103092 # v3.4.0 | |
| with: | |
| path: | | |
| node_modules | |
| packages/*/node_modules | |
| packages/core/.local-chromium | |
| key: > | |
| ${{ runner.os }}/node-14/ | |
| ${{ hashFiles('.github/.cache-key') }}/ | |
| ${{ hashFiles('**/yarn.lock') }} | |
| restore-keys: > | |
| ${{ runner.os }}/node-14/ | |
| ${{ hashFiles('.github/.cache-key') }}/ | |
| - run: yarn | |
| - run: yarn build | |
| - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
| with: | |
| name: dist | |
| path: packages/*/dist | |
| test: | |
| name: Test ${{ matrix.package }} | |
| needs: [build] | |
| strategy: | |
| matrix: | |
| os: [ubuntu-latest] | |
| node: [14] | |
| package: | |
| - '@percy/env' | |
| - '@percy/client' | |
| - '@percy/dom' | |
| - '@percy/logger' | |
| - '@percy/config' | |
| - '@percy/core' | |
| - '@percy/cli' | |
| - '@percy/cli-command' | |
| - '@percy/cli-exec' | |
| - '@percy/cli-snapshot' | |
| - '@percy/cli-upload' | |
| - '@percy/cli-build' | |
| - '@percy/cli-config' | |
| - '@percy/sdk-utils' | |
| - '@percy/webdriver-utils' | |
| - '@percy/monitoring' | |
| - '@percy/cli-doctor' | |
| runs-on: ${{ matrix.os }} | |
| # Collect failed node-test spec names so retries re-run only the specs that | |
| # flaked instead of the whole suite. Non-PERCY_ name so it doesn't trip | |
| # cli-doctor's env-audit tests. See PER-9011. | |
| env: | |
| CLI_TEST_FAILURES_FILE: ${{ github.workspace }}/.cli-test-failures.json | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| - uses: actions/cache@f4b3439a656ba812b8cb417d2d49f9c810103092 # v3.4.0 | |
| with: | |
| path: | | |
| node_modules | |
| packages/*/node_modules | |
| packages/core/.local-chromium | |
| key: > | |
| ${{ runner.os }}/node-${{ matrix.node }}/ | |
| ${{ hashFiles('.github/.cache-key') }}/ | |
| ${{ hashFiles('**/yarn.lock') }} | |
| restore-keys: > | |
| ${{ runner.os }}/node-${{ matrix.node }}/ | |
| ${{ hashFiles('.github/.cache-key') }}/ | |
| - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 | |
| with: | |
| name: dist | |
| path: packages | |
| - run: yarn | |
| - name: Install browser dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --fix-missing libgbm-dev | |
| if: ${{ matrix.os == 'ubuntu-latest' }} | |
| # First attempt runs the full suite WITH coverage (enforces the 100% | |
| # gate) and records any failed specs. | |
| - name: Run tests | |
| continue-on-error: true | |
| id: retry0 | |
| run: yarn workspace ${{ matrix.package }} test:coverage --colors | |
| # Retries re-run ONLY the specs that failed in the previous attempt, and | |
| # WITHOUT coverage (a subset can't hit the 100% threshold). If retry0 | |
| # failed with no recorded spec failures (e.g. a real coverage drop), the | |
| # runner preserves that failure instead of masking it. See PER-9011. | |
| - name: Run tests Retry (1/4) | |
| continue-on-error: true | |
| id: retry1 | |
| if: steps.retry0.outcome=='failure' | |
| env: | |
| CLI_TEST_ONLY_FAILED: '1' | |
| run: yarn workspace ${{ matrix.package }} test --colors | |
| - name: Run tests Retry (2/4) | |
| continue-on-error: true | |
| id: retry2 | |
| if: steps.retry1.outcome=='failure' | |
| env: | |
| CLI_TEST_ONLY_FAILED: '1' | |
| run: yarn workspace ${{ matrix.package }} test --colors | |
| - name: Run tests Retry (3/4) | |
| continue-on-error: true | |
| id: retry3 | |
| if: steps.retry2.outcome=='failure' | |
| env: | |
| CLI_TEST_ONLY_FAILED: '1' | |
| run: yarn workspace ${{ matrix.package }} test --colors | |
| - name: Run tests Retry (4/4) | |
| id: retry4 | |
| if: steps.retry3.outcome=='failure' | |
| env: | |
| CLI_TEST_ONLY_FAILED: '1' | |
| run: yarn workspace ${{ matrix.package }} test --colors | |
| # Keep "green via retry" honest: surface a warning whenever the first | |
| # attempt failed and a retry recovered it, so flakiness stays visible. | |
| - name: Flag flaky tests | |
| if: steps.retry0.outcome=='failure' | |
| run: echo "::warning title=Flaky tests::${{ matrix.package }} flaked on the first attempt and was recovered by a spec-level retry (tracked in PER-9011)." | |
| regression: | |
| name: Regression | |
| needs: [build] | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 15 | |
| steps: | |
| - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 | |
| with: | |
| fetch-depth: 50 | |
| - uses: actions/setup-node@3235b876344d2a9aa001b8d1453c930bba69e610 # v3.9.1 | |
| with: | |
| node-version: 14 | |
| - uses: actions/cache@f4b3439a656ba812b8cb417d2d49f9c810103092 # v3.4.0 | |
| with: | |
| path: | | |
| node_modules | |
| packages/*/node_modules | |
| packages/core/.local-chromium | |
| key: > | |
| ${{ runner.os }}/node-14/ | |
| ${{ hashFiles('.github/.cache-key') }}/ | |
| ${{ hashFiles('**/yarn.lock') }} | |
| restore-keys: > | |
| ${{ runner.os }}/node-14/ | |
| ${{ hashFiles('.github/.cache-key') }}/ | |
| - uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0 | |
| with: | |
| name: dist | |
| path: packages | |
| - run: yarn | |
| - name: Install browser dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y --fix-missing libgbm-dev | |
| - name: Set up @percy/cli | |
| run: | | |
| PERCY_PACKAGES=$(find packages -mindepth 1 -maxdepth 1 -type d | sed -e 's/packages/@percy/g' | tr '\n' ' ') | |
| yarn global:link | |
| yarn link `echo $PERCY_PACKAGES` | |
| npx percy --version | |
| - name: Run regression tests | |
| run: yarn test:regression | |
| env: | |
| PERCY_TOKEN: ${{ secrets.PERCY_REGRESSION_TOKEN }} |