From 5a5b4bb93ccbf1fda940609838bf9ff087fd9cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Greg=20Berg=C3=A9?= Date: Fri, 8 Mar 2024 10:41:30 +0100 Subject: [PATCH] Replace Puppeteer by Playwright (#224) * Replace Puppeteer by Playwright * Remove the limit of workers on ci * Various fixes after review * Document things --- .github/actions/setup-playwright/action.yml | 35 ++++++++++ .github/workflows/ci.yaml | 35 ++++------ .gitignore | 4 ++ .prettierignore | 2 +- README.md | 9 ++- bun.lockb | Bin 468380 -> 457190 bytes tests/visual-testing.ts => e2e/pages.spec.ts | 69 ++++++------------- package.json | 8 ++- playwright.config.ts | 23 +++++++ tests/pagespeed-testing.ts | 1 + tests/utils.ts | 9 ++- 11 files changed, 117 insertions(+), 78 deletions(-) create mode 100644 .github/actions/setup-playwright/action.yml rename tests/visual-testing.ts => e2e/pages.spec.ts (79%) create mode 100644 playwright.config.ts diff --git a/.github/actions/setup-playwright/action.yml b/.github/actions/setup-playwright/action.yml new file mode 100644 index 000000000..5796e8d63 --- /dev/null +++ b/.github/actions/setup-playwright/action.yml @@ -0,0 +1,35 @@ +name: 'Setup Playwright' +description: 'Install Playwright and dependencies' +runs: + using: 'composite' + steps: + # Run npm ci and get Playwright version + - name: 🏗 Prepare Playwright env + shell: bash + run: | + PLAYWRIGHT_VERSION=$(npm ls --json @playwright/test | jq --raw-output '.dependencies["@playwright/test"].version') + echo "PLAYWRIGHT_VERSION=$PLAYWRIGHT_VERSION" >> $GITHUB_ENV + + # Cache browser binaries, cache key is based on Playwright version and OS + - name: 🧰 Cache Playwright browser binaries + uses: actions/cache@v3 + id: playwright-cache + with: + path: '~/.cache/ms-playwright' + key: '${{ runner.os }}-playwright-${{ env.PLAYWRIGHT_VERSION }}' + restore-keys: | + ${{ runner.os }}-playwright- + + # Install browser binaries & OS dependencies if cache missed + - name: 🏗 Install Playwright browser binaries & OS dependencies + if: steps.playwright-cache.outputs.cache-hit != 'true' + shell: bash + run: | + bun x playwright install --with-deps chromium + + # Install only the OS dependencies if cache hit + - name: 🏗 Install Playwright OS dependencies + if: steps.playwright-cache.outputs.cache-hit == 'true' + shell: bash + run: | + bun x playwright install-deps diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 65bf4f73e..a94f5d9b0 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,7 +12,7 @@ jobs: deployment_url: ${{ steps.cloudflare.outputs.url }} steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup bun uses: oven-sh/setup-bun@v1 - name: Install dependencies @@ -72,39 +72,32 @@ jobs: needs: deploy steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup bun uses: oven-sh/setup-bun@v1 - name: Install dependencies run: bun install --frozen-lockfile - - name: Run visual tests - run: bun ./tests/visual-testing.ts $DEPLOYMENT_URL - env: - DEPLOYMENT_URL: ${{needs.deploy.outputs.deployment_url}} - - name: Upload to Argos - run: bun x argos upload --token $ARGOS_TOKEN ./screenshots + - name: Setup Playwright + uses: ./.github/actions/setup-playwright + - name: Run Playwright tests + run: bun e2e env: + BASE_URL: ${{needs.deploy.outputs.deployment_url}} ARGOS_TOKEN: ${{ secrets.ARGOS_TOKEN }} - - name: Upload failed tests as artifacts - uses: actions/upload-artifact@v3 - if: ${{ failure() }} - with: - name: error-screenshots - path: screenshots/errors/ pagespeed-testing: runs-on: ubuntu-latest name: PageSpeed Testing needs: deploy steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup bun uses: oven-sh/setup-bun@v1 - name: Install dependencies run: bun install --frozen-lockfile env: PUPPETEER_SKIP_DOWNLOAD: 1 - - name: Run visual tests + - name: Run pagespeed tests run: bun ./tests/pagespeed-testing.ts $DEPLOYMENT_URL env: DEPLOYMENT_URL: ${{needs.deploy.outputs.deployment_url}} @@ -114,7 +107,7 @@ jobs: name: Format steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup bun uses: oven-sh/setup-bun@v1 - name: Install dependencies @@ -127,7 +120,7 @@ jobs: name: Lint steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup bun uses: oven-sh/setup-bun@v1 - name: Install dependencies @@ -140,20 +133,20 @@ jobs: name: Test steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup bun uses: oven-sh/setup-bun@v1 - name: Install dependencies run: bun install --frozen-lockfile env: PUPPETEER_SKIP_DOWNLOAD: 1 - - run: bun test + - run: bun unit typecheck: runs-on: ubuntu-latest name: Typecheck steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup bun uses: oven-sh/setup-bun@v1 - name: Install dependencies diff --git a/.gitignore b/.gitignore index f870a8504..22db9a4fb 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,7 @@ screenshots/ # Sentry Config File .sentryclirc +/test-results/ +/playwright-report/ +/blob-report/ +/playwright/.cache/ diff --git a/.prettierignore b/.prettierignore index a680367ef..d0d878e40 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1 @@ -.next +.next \ No newline at end of file diff --git a/README.md b/README.md index 5217d229f..8be0fd903 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Next.js application to render GitBook published content. ## Development -#### Start the local server +### Start the local server Clone the repository and use [Bun](https://bun.sh/) to install dependencies and run the local development server. @@ -20,12 +20,15 @@ bun dev Then open the space in your web browser, using `http://localhost:3000//` (example: `http://localhost:3000/docs.gitbook.com`). -#### Other development commands +### Other development commands - `bun format`: format the code - `bun lint`: lint the code -#### CI and testing +### Testing and CI + +- Run unit tests with `bun unit`. +- Run E2E tests with `bun e2e` (be sure to have your dev server running locally). All pull-requests will be tested against both visual and performances testing to prevent regressions. diff --git a/bun.lockb b/bun.lockb index 1325759e04a84006749a6cbb9d67f44e7fa4e5dc..5e833de58aef9331c1134b06d3936b9e0760da8a 100755 GIT binary patch delta 78352 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 diff --git a/tests/visual-testing.ts b/e2e/pages.spec.ts similarity index 79% rename from tests/visual-testing.ts rename to e2e/pages.spec.ts index b016f9ef9..c0d0fc4ff 100644 --- a/tests/visual-testing.ts +++ b/e2e/pages.spec.ts @@ -1,18 +1,18 @@ -import fs from 'node:fs/promises'; -import rison from 'rison'; -import puppeteer, { Page } from 'puppeteer'; -import { argosScreenshot } from '@argos-ci/puppeteer'; -import { getContentTestURL, getTargetURL } from './utils'; +import { argosScreenshot } from '@argos-ci/playwright'; import { CustomizationHeaderPreset, CustomizationLocale, CustomizationSettings, } from '@gitbook/api'; +import { test, Page } from '@playwright/test'; +import rison from 'rison'; + +import { getContentTestURL } from '../tests/utils'; interface Test { name: string; url: string; - wait?: (page: Page) => Promise; + run?: (page: Page) => Promise; } interface TestsCase { @@ -44,12 +44,12 @@ const testCases: TestsCase[] = [ { name: 'Search Results', url: '?q=gitbook', - wait: (page) => page.waitForSelector('[data-test="search-results"]'), + run: (page) => page.waitForSelector('[data-test="search-results"]'), }, { name: 'AI Search', url: '?q=What+is+GitBook%3F&ask=true', - wait: (page) => page.waitForSelector('[data-test="search-ask-answer"]'), + run: (page) => page.waitForSelector('[data-test="search-ask-answer"]'), }, { name: 'Not found', @@ -293,50 +293,23 @@ const testCases: TestsCase[] = [ }, ]; -console.log(`Starting visual testing with ${getTargetURL()}...`); - -const browser = await puppeteer.launch({ - headless: 'new', -}); - for (const testCase of testCases) { - for (const test of testCase.tests) { - const page = await browser.newPage(); - const contentUrl = new URL(test.url, testCase.baseUrl); - const url = getContentTestURL(contentUrl.toString()); - const start = Date.now(); - - console.log(`Testing ${testCase.name} - ${test.name} (${url})...`); - - const screenshotName = `${testCase.name} - ${test.name}.png`; - - try { - await page.goto(url, { waitUntil: test.wait ? 'load' : 'networkidle2' }); - - if (test.wait) { - await test.wait(page); - } - } catch (error) { - await fs.mkdir('screenshots/errors', { - recursive: true, + test.describe(testCase.name, () => { + for (const testEntry of testCase.tests) { + test(testEntry.name, async ({ page, baseURL }) => { + const contentUrl = new URL(testEntry.url, testCase.baseUrl); + const url = getContentTestURL(contentUrl.toString(), baseURL); + await page.goto(url); + if (testEntry.run) { + await testEntry.run(page); + } + await argosScreenshot(page, `${testCase.name} - ${testEntry.name}`, { + viewports: ['macbook-13', 'iphone-x', 'ipad-2'], + }); }); - - await page.screenshot({ path: `screenshots/errors/${screenshotName}` }); - console.log(`❌ Failed in ${((Date.now() - start) / 1000).toFixed(2)}s`); - throw error; } - - await argosScreenshot(page, screenshotName, { - viewports: ['macbook-13', 'iphone-x', 'ipad-2'], - }); - console.log(`✅ Done in ${((Date.now() - start) / 1000).toFixed(2)}s`); - console.log(''); - await page.close(); - } + }); } -await browser.close(); - -console.log('All done!'); /** * Create a URL with customization settings. diff --git a/package.json b/package.json index a62372f93..d654a27a6 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,9 @@ "lint": "next lint", "format": "prettier ./ --ignore-unknown --write", "format:check": "prettier ./ --ignore-unknown --list-different", - "typecheck": "tsc --noEmit" + "typecheck": "tsc --noEmit", + "unit": "bun test {src,packages}/**/*.test.ts", + "e2e": "playwright test" }, "workspaces": [ "packages/*" @@ -61,9 +63,10 @@ }, "devDependencies": { "@argos-ci/cli": "^1.0.4", - "@argos-ci/puppeteer": "^1.2.1", + "@argos-ci/playwright": "^1.9.3", "@cloudflare/next-on-pages": "^1.9.0", "@cloudflare/workers-types": "^4.20231218.0", + "@playwright/test": "^1.42.1", "@types/js-cookie": "^3.0.6", "@types/js-yaml": "^4.0.9", "@types/jsontoxml": "^1.0.5", @@ -83,7 +86,6 @@ "postcss": "^8", "prettier": "^3.0.3", "psi": "^4.1.0", - "puppeteer": "^21.6.1", "tailwindcss": "^3.4.0", "typescript": "^5" } diff --git a/playwright.config.ts b/playwright.config.ts new file mode 100644 index 000000000..2e7bddf00 --- /dev/null +++ b/playwright.config.ts @@ -0,0 +1,23 @@ +import { defineConfig, devices } from '@playwright/test'; + +export default defineConfig({ + testDir: './e2e', + fullyParallel: true, + forbidOnly: !!process.env.CI, + retries: process.env.CI ? 2 : 0, + reporter: [ + process.env.CI ? ['dot'] : ['list'], + ['@argos-ci/playwright/reporter', { uploadToArgos: !!process.env.CI }], + ], + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + ], + use: { + baseURL: process.env.BASE_URL || 'http://localhost:3000', + trace: 'on-first-retry', + screenshot: 'only-on-failure', + }, +}); diff --git a/tests/pagespeed-testing.ts b/tests/pagespeed-testing.ts index e30f86559..c88a04053 100644 --- a/tests/pagespeed-testing.ts +++ b/tests/pagespeed-testing.ts @@ -1,4 +1,5 @@ import psi from 'psi'; + import { getContentTestURL, getTargetURL } from './utils'; interface Test { diff --git a/tests/utils.ts b/tests/utils.ts index dd877e944..20e2e13b6 100644 --- a/tests/utils.ts +++ b/tests/utils.ts @@ -11,11 +11,16 @@ export function getTargetURL() { return targetUrl; } +export function getContentPathName(input: string): string { + const contentUrl = new URL(input); + return `${contentUrl.host}${contentUrl.pathname}`; +} + /** * Get the URL to load for a content */ -export function getContentTestURL(input: string): string { - const url = new URL(getTargetURL()); +export function getContentTestURL(input: string, baseUrl: string = getTargetURL()): string { + const url = new URL(baseUrl); const contentUrl = new URL(input); url.pathname = `${contentUrl.host}${contentUrl.pathname}`;