diff --git a/.github/workflows/verify_accessibility_core.yml b/.github/workflows/verify_accessibility_core.yml new file mode 100644 index 0000000000000..3413bfec56bb6 --- /dev/null +++ b/.github/workflows/verify_accessibility_core.yml @@ -0,0 +1,29 @@ +name: Verify Accessibility Core features +on: + pull_request: + branches: [master] + paths: + - 'plugins/catalog/**' + - 'plugins/techdocs/**' + - 'plugins/scaffolder/**' + - 'plugins/search/**' + +jobs: + lhci: + name: Lighthouse + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Use Node.js 16.x + uses: actions/setup-node@v3 + with: + node-version: 16.x + - name: install dependencies + run: | + yarn install + - name: run Lighthouse CI + run: | + npm install -g @lhci/cli@0.11.x + lhci autorun + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.gitignore b/.gitignore index b7bfe7a84d160..f3c687d49c270 100644 --- a/.gitignore +++ b/.gitignore @@ -152,3 +152,7 @@ tsconfig.tmp.json # vscode database functionality support files *.session.sql + +# Lighthouse CI Reports +**/.lighthouseci/* +!**/.lighthouseci/scripts \ No newline at end of file diff --git a/.lighthouseci/scripts/guest-auth.js b/.lighthouseci/scripts/guest-auth.js new file mode 100644 index 0000000000000..7f686cbbc6483 --- /dev/null +++ b/.lighthouseci/scripts/guest-auth.js @@ -0,0 +1,11 @@ +'use strict'; + +module.exports = async (browser, context) => { + // launch browser for LHCI + const page = await browser.newPage(); + await page.goto('http://localhost:3000'); + await page.evaluate(() => { + localStorage.setItem('@backstage/core:SignInPage:provider', 'guest'); + }); + await page.goto('http://localhost:3000'); +}; diff --git a/lighthouserc.js b/lighthouserc.js new file mode 100644 index 0000000000000..5d7e0e8017698 --- /dev/null +++ b/lighthouserc.js @@ -0,0 +1,60 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +module.exports = { + ci: { + collect: { + url: [ + /** Software Catalog */ + 'http://localhost:3000/catalog', + 'http://localhost:3000/catalog-import', + 'http://localhost:3000/catalog/default/component/backstage', + /** TechDocs */ + 'http://localhost:3000/docs', + 'http://localhost:3000/docs/default/component/backstage', + /** Software Templates */ + 'http://localhost:3000/create', + 'http://localhost:3000/create/tasks', + 'http://localhost:3000/create/actions', + 'http://localhost:3000/create/edit', + 'http://localhost:3000/create/templates/default/react-ssr-template', + /** Search */ + 'http://localhost:3000/search', + ], + settings: { + onlyCategories: ['accessibility'], + // need to disable storage reset because of auth + disableStorageReset: true, + output: ['html', 'json'], + outputPath: './.lighthouseci/reports', + preset: 'desktop', + }, + startServerCommand: 'yarn dev', + startServerReadyTimeout: 600000, + numberOfRuns: 1, + puppeteerScript: './.lighthouseci/scripts/guest-auth.js', + startServerReadyPattern: 'Listening on :7007', + }, + assert: { + assertions: { + 'categories:performance': 'off', + 'categories:pwa': 'off', + 'categories:best-practices': 'off', + 'categories:seo': 'off', + 'categories:accessibility': ['error', { minScore: 0.85 }], + }, + }, + }, +};