diff --git a/package-lock.json b/package-lock.json index e7f5b32407..35a3ab3c4e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3973,10 +3973,10 @@ } }, "node_modules/@percy/sdk-utils": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.24.0.tgz", - "integrity": "sha512-kfYxX0rHP5N2Da6HyfjRCVaeNahAO9XV5WD4SKWKKjdKVkV/Z5/XjVgSKlTBLSYxnWDzYJJ4UHZV43Mw+facMA==", - "dev": true, + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@percy/sdk-utils/-/sdk-utils-1.25.0.tgz", + "integrity": "sha512-jv4/jb3Neh4IgHUOuuB11XbC0Ho7dLH9plRM1JcBwxaoaTeGL9Ftau3OC126320K37yRTO4KZ+sW3jxQk/Ghsw==", + "devOptional": true, "engines": { "node": ">=14" } @@ -27653,6 +27653,14 @@ "engines": { "node": "^18.12.0", "npm": "^8.1.0 || ^9.1.0" + }, + "peerDependencies": { + "@percy/sdk-utils": ">=1.25" + }, + "peerDependenciesMeta": { + "@percy/sdk-utils": { + "optional": true + } } } } diff --git a/packages/govuk-frontend-review/percy.config.js b/packages/govuk-frontend-review/percy.config.js index 00b212409d..dc2bd2aef4 100644 --- a/packages/govuk-frontend-review/percy.config.js +++ b/packages/govuk-frontend-review/percy.config.js @@ -7,7 +7,6 @@ const { executablePath } = require('puppeteer') */ module.exports = { discovery: { - concurrency: 1, launchOptions: { executable: executablePath() } diff --git a/shared/tasks/browser.mjs b/shared/tasks/browser.mjs index 8ce26c7416..f363d2fe2b 100644 --- a/shared/tasks/browser.mjs +++ b/shared/tasks/browser.mjs @@ -1,4 +1,5 @@ import percySnapshot from '@percy/puppeteer' +import { waitForPercyIdle } from '@percy/sdk-utils' import { download } from 'govuk-frontend-helpers/jest/browser/download.mjs' import { goToComponent, goToExample } from 'govuk-frontend-helpers/puppeteer' import { filterPath, getComponentFiles, getComponentNames } from 'govuk-frontend-lib/files' @@ -27,31 +28,21 @@ export async function screenshots () { const componentNames = await getComponentNames() const exampleNames = ['text-alignment', 'typography'] - // Screenshot stack - const input = [] - - // Add components to screenshot - input.push(...componentNames.map((screenshotName) => - /** @type {const} */ ([screenshotComponent, screenshotName]))) - - // Add examples to screenshot - input.push(...exampleNames.map((screenshotName) => - /** @type {const} */ ([screenshotExample, screenshotName]))) - - // Batch 4x concurrent screenshots - while (input.length) { - const batch = input.splice(0, 4) - - // Take screenshots - const screenshotTasks = batch.map(async ([screenshotFn, screenshotName]) => - screenshotFn(await browser.newPage(), screenshotName)) + // Screenshot components + for (const componentName of componentNames) { + await screenshotComponent(await browser.newPage(), componentName) + } - // Wait until batch finishes - await Promise.all(screenshotTasks) + // Screenshot examples + for (const exampleName of exampleNames) { + await screenshotExample(await browser.newPage(), exampleName) } // Close browser - return browser.close() + await browser.close() + + // Wait for Percy to finish + return waitForPercyIdle() } /** diff --git a/shared/tasks/package.json b/shared/tasks/package.json index 4a159c3358..53d6b50f77 100644 --- a/shared/tasks/package.json +++ b/shared/tasks/package.json @@ -29,5 +29,13 @@ "sass-embedded": "^1.62.0", "slash": "^5.1.0", "yargs-parser": "^21.1.1" + }, + "peerDependencies": { + "@percy/sdk-utils": ">=1.25" + }, + "peerDependenciesMeta": { + "@percy/sdk-utils": { + "optional": true + } } }