ci(docs-infra): increase wait for SW on all origins to avoid CI flakes (#29988)

In #29953, the wait period for SW on localhost was increased to avoid CI
flakes for the PWA score tests.

This commit expands the fix to non-localhost origins to avoid flakes in
the `aio_monitoring` job, when CircleCI VMs/network are slow.
(For reference, example failures: [289127], [289238])

[289127]: https://circleci.com/gh/angular/angular/289127
[289238]: https://circleci.com/gh/angular/angular/289238

PR Close #29988
This commit is contained in:
George Kalpakas 2019-04-19 12:46:23 +03:00 committed by Ben Lesh
parent 5650e3847b
commit 1f8325d6c4
1 changed files with 7 additions and 13 deletions

View File

@ -21,9 +21,9 @@ const logger = require('lighthouse-logger');
// Constants // Constants
const CHROME_LAUNCH_OPTS = {}; const CHROME_LAUNCH_OPTS = {};
const LIGHTHOUSE_FLAGS = {logLevel: 'info'}; const LIGHTHOUSE_FLAGS = {logLevel: 'info'};
const LONG_WAIT_FOR_SW_DELAY = 5000;
const SKIPPED_HTTPS_AUDITS = ['redirects-http']; const SKIPPED_HTTPS_AUDITS = ['redirects-http'];
const VIEWER_URL = 'https://googlechrome.github.io/lighthouse/viewer/'; const VIEWER_URL = 'https://googlechrome.github.io/lighthouse/viewer/';
const WAIT_FOR_SW_DELAY = 5000;
// Be less verbose on CI. // Be less verbose on CI.
if (process.env.CI) { if (process.env.CI) {
@ -37,8 +37,12 @@ _main(process.argv.slice(2));
async function _main(args) { async function _main(args) {
const {url, minScore, logFile} = parseInput(args); const {url, minScore, logFile} = parseInput(args);
const isOnHttp = /^http:/.test(url); const isOnHttp = /^http:/.test(url);
const isOnLocalhost = /\/\/localhost\b/.test(url); const config = {
const config = {extends: 'lighthouse:default'}; extends: 'lighthouse:default',
// Since the Angular ServiceWorker waits for the app to stabilize before registering,
// wait a few seconds after load to allow Lighthouse to reliably detect it.
passes: [{passName: 'defaultPass', pauseAfterLoadMs: WAIT_FOR_SW_DELAY}],
}
console.log(`Running PWA audit for '${url}'...`); console.log(`Running PWA audit for '${url}'...`);
@ -46,10 +50,6 @@ async function _main(args) {
// (Note: Browsers special-case localhost and run ServiceWorker even on HTTP.) // (Note: Browsers special-case localhost and run ServiceWorker even on HTTP.)
if (isOnHttp) skipHttpsAudits(config); if (isOnHttp) skipHttpsAudits(config);
// If testing on localhost, where the server has less optimizations (e.g. no file compression),
// wait longer for the ServiceWorker to be registered, so Lighthouse can reliably detect it.
if (isOnLocalhost) waitLongerForSw(config);
logger.setLevel(LIGHTHOUSE_FLAGS.logLevel); logger.setLevel(LIGHTHOUSE_FLAGS.logLevel);
try { try {
@ -133,9 +133,3 @@ function skipHttpsAudits(config) {
const settings = config.settings || (config.settings = {}); const settings = config.settings || (config.settings = {});
settings.skipAudits = SKIPPED_HTTPS_AUDITS; settings.skipAudits = SKIPPED_HTTPS_AUDITS;
} }
function waitLongerForSw(config) {
console.info(`Will wait longer for ServiceWorker (${LONG_WAIT_FOR_SW_DELAY}ms)...`);
const passes = config.passes || (config.passes = []);
passes.push({passName: 'defaultPass', pauseAfterLoadMs: LONG_WAIT_FOR_SW_DELAY});
}