diff --git a/.github/workflows/e2e-pte.yml b/.github/workflows/e2e-pte.yml new file mode 100644 index 000000000000..658519df3ff0 --- /dev/null +++ b/.github/workflows/e2e-pte.yml @@ -0,0 +1,100 @@ +name: End-to-End PTE collaboration tests +on: + # Build on pushes branches that have a PR (including drafts) + pull_request: + # Build on commits pushed to branches without a PR if it's in the allowlist + push: + branches: [next] +jobs: + playwright-test: + timeout-minutes: 30 + runs-on: ubuntu-latest + env: + TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} + TURBO_TEAM: ${{ vars.TURBO_TEAM }} + strategy: + fail-fast: false + matrix: + project: [chromium] + # Add more shards here if needed + shardIndex: [1, 2] + shardTotal: [2] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18 + + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v3 + env: + cache-name: cache-node-modules + with: + path: '**/node_modules' + key: ${{ runner.os }}-modules-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-modules-${{ env.cache-name }}- + ${{ runner.os }}-modules- + ${{ runner.os }}- + + - name: Install project dependencies + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile + + - name: Store Playwright's Version + run: | + PLAYWRIGHT_VERSION=$(npx playwright --version | sed 's/Version //') + echo "Playwright's Version: $PLAYWRIGHT_VERSION" + echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV + + - name: Cache Playwright Browsers for Playwright's Version + id: cache-playwright-browsers + uses: actions/cache@v3 + with: + path: ~/.cache/ms-playwright + key: playwright-browsers-${{ env.PLAYWRIGHT_VERSION }} + + - name: Install Playwright Browsers + if: steps.cache-playwright-browsers.outputs.cache-hit != 'true' + run: npx playwright install --with-deps + + - name: Run end-to-end tests + env: + # Missing in docs but in use + # here https://github.com/microsoft/playwright/blob/main/packages/playwright/src/reporters/blob.ts#L108 + PWTEST_BLOB_REPORT_NAME: ${{ matrix.project }} + run: cd packages/@sanity/portable-text-editor && yarn test:e2e --silent --shard=${{ matrix.shardIndex}}/${{ matrix.shardTotal }} + + - uses: actions/upload-artifact@v3 + if: always() + with: + name: playwright-report + path: blob-report + retention-days: 30 + merge-reports: + if: always() + needs: [playwright-test] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 18 + + - name: Cache node modules + id: cache-node-modules + uses: actions/cache@v3 + env: + cache-name: cache-node-modules + with: + path: '**/node_modules' + key: ${{ runner.os }}-modules-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-modules-${{ env.cache-name }}- + ${{ runner.os }}-modules- + ${{ runner.os }}- + + - name: Install project dependencies + if: steps.cache-node-modules.outputs.cache-hit != 'true' + run: yarn install --frozen-lockfile diff --git a/packages/@sanity/portable-text-editor/jest.config.cjs b/packages/@sanity/portable-text-editor/jest.config.cjs index 7f8d54348cc4..995f70793d91 100644 --- a/packages/@sanity/portable-text-editor/jest.config.cjs +++ b/packages/@sanity/portable-text-editor/jest.config.cjs @@ -7,4 +7,5 @@ module.exports = createJestConfig({ globalSetup: '/test/setup/globalSetup.ts', globalTeardown: '/test/setup/globalTeardown.ts', setupFilesAfterEnv: ['/test/setup/afterEnv.ts'], + testPathIgnorePatterns: process.env.PTE_E2E ? [] : ['test/__tests__'], }) diff --git a/packages/@sanity/portable-text-editor/package.json b/packages/@sanity/portable-text-editor/package.json index 661780fd35fd..6482ae3b4b9f 100644 --- a/packages/@sanity/portable-text-editor/package.json +++ b/packages/@sanity/portable-text-editor/package.json @@ -59,6 +59,7 @@ "prettier": "prettier --write './**/*.{ts,tsx,js,css,html}'", "dev": "cd ./test/ && ts-node serve", "test": "jest", + "test:e2e": "PTE_E2E=true jest test/__tests__", "test:watch": "jest --watch", "watch": "pkg-utils watch --tsconfig tsconfig.lib.json" },