Skip to content

Commit 120b316

Browse files
committed
feat(plugin-lighthouse): add logLevel to lighthouse runner flags
1 parent 22b96b6 commit 120b316

7 files changed

Lines changed: 46 additions & 25 deletions

File tree

code-pushup.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ const config: CoreConfig = {
8080

8181
await lighthousePlugin('https://codepushup.dev/', {
8282
chromeFlags: DEFAULT_FLAGS.concat(['--headless']),
83+
verbose: true,
8384
}),
8485
],
8586

packages/plugin-lighthouse/src/lib/normalize-flags.unit.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ describe('logUnsupportedFlagsInUse', () => {
4545
describe('normalizeFlags', () => {
4646
const normalizedDefaults = {
4747
verbose: false,
48-
quiet: false,
4948
saveAssets: false,
5049
// needed to pass CI on linux and windows (locally it works without headless too)
5150
chromeFlags: ['--headless=shell'],
@@ -54,6 +53,7 @@ describe('normalizeFlags', () => {
5453
view: false,
5554
channel: 'cli',
5655
// custom overwrites in favour of the plugin
56+
quiet: true,
5757
onlyAudits: [],
5858
skipAudits: [],
5959
onlyCategories: [],

packages/plugin-lighthouse/src/lib/runner/constants.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ export const DEFAULT_CLI_FLAGS = {
8888
// default values extracted from
8989
// https://github.com/GoogleChrome/lighthouse/blob/7d80178c37a1b600ea8f092fc0b098029799a659/cli/cli-flags.js#L80
9090
verbose: false,
91-
quiet: false,
9291
saveAssets: false,
9392
// needed to pass CI on linux and windows (locally it works without headless too)
9493
chromeFlags: ['--headless=shell'],
@@ -97,6 +96,8 @@ export const DEFAULT_CLI_FLAGS = {
9796
view: false,
9897
channel: 'cli',
9998
// custom overwrites in favour of the plugin
99+
// hide logs by default
100+
quiet: true,
100101
onlyAudits: [],
101102
skipAudits: [],
102103
onlyCategories: [],

packages/plugin-lighthouse/src/lib/runner/runner.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import { ensureDirectoryExists } from '@code-pushup/utils';
66
import { DEFAULT_CLI_FLAGS } from './constants';
77
import { LighthouseCliFlags } from './types';
88
import {
9+
determineAndSetLogLevel,
910
getConfig,
1011
normalizeAuditOutputs,
11-
setLogLevel,
1212
toAuditOutputs,
1313
} from './utils';
1414

@@ -24,7 +24,7 @@ export function createRunnerFunction(
2424
...parsedFlags
2525
}: Partial<LighthouseCliFlags> = flags;
2626

27-
setLogLevel(parsedFlags);
27+
const logLevel = determineAndSetLogLevel(parsedFlags);
2828

2929
const config = await getConfig({ configPath, preset });
3030
if (outputPath) {
@@ -33,6 +33,7 @@ export function createRunnerFunction(
3333

3434
const enrichedFlags = {
3535
...parsedFlags,
36+
logLevel,
3637
outputPath,
3738
};
3839

packages/plugin-lighthouse/src/lib/runner/runner.unit.test.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,22 @@ import { expect, vi } from 'vitest';
55
import { DEFAULT_CLI_FLAGS } from './constants';
66
import { createRunnerFunction } from './runner';
77
import { LighthouseCliFlags } from './types';
8-
import { getConfig, setLogLevel } from './utils';
8+
import { determineAndSetLogLevel, getConfig } from './utils';
99

1010
// used for createRunnerMocking
1111
vi.mock('./utils', async () => {
1212
// Import the actual 'lighthouse' module
1313
const actual = await vi.importActual('./utils');
1414

15+
const actualDetermineAndSetLogLevel = actual['determineAndSetLogLevel'] as (
16+
s: string,
17+
) => string;
1518
// Return the mocked module, merging the actual module with overridden parts
1619
return {
1720
...actual,
18-
setLogLevel: vi.fn(),
21+
determineAndSetLogLevel: vi
22+
.fn()
23+
.mockImplementation(actualDetermineAndSetLogLevel),
1924
getBudgets: vi.fn().mockImplementation((path: string) => [{ path }]),
2025
getConfig: vi.fn(),
2126
};
@@ -72,17 +77,17 @@ describe('createRunnerFunction', () => {
7277

7378
expect(runLighthouse).toHaveBeenCalledWith(
7479
'https://localhost:8080',
75-
DEFAULT_CLI_FLAGS,
80+
{ ...DEFAULT_CLI_FLAGS, logLevel: 'silent' },
7681
undefined,
7782
);
7883
});
7984

80-
it('should call setLogLevel with given verbose and quiet flags', async () => {
85+
it('should call determineAndSetLogLevel with given verbose and quiet flags', async () => {
8186
await createRunnerFunction('https://localhost:8080', {
8287
verbose: true,
8388
quiet: true,
8489
} as LighthouseCliFlags)(undefined);
85-
expect(setLogLevel).toHaveBeenCalledWith(
90+
expect(determineAndSetLogLevel).toHaveBeenCalledWith(
8691
expect.objectContaining({ verbose: true, quiet: true }),
8792
);
8893
});

packages/plugin-lighthouse/src/lib/runner/utils.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,21 +101,32 @@ export function logUnsupportedDetails(
101101
}
102102
}
103103

104-
export function setLogLevel({
104+
export type LighthouseLogLevel =
105+
| 'verbose'
106+
| 'error'
107+
| 'info'
108+
| 'silent'
109+
| 'warn'
110+
| undefined;
111+
export function determineAndSetLogLevel({
105112
verbose,
106113
quiet,
107114
}: {
108115
verbose?: boolean;
109116
quiet?: boolean;
110-
} = {}) {
117+
} = {}): LighthouseLogLevel {
118+
// eslint-disable-next-line functional/no-let
119+
let logLevel: LighthouseLogLevel = 'info';
111120
// set logging preferences
112121
if (verbose) {
113-
log.setLevel('verbose');
122+
logLevel = 'verbose';
114123
} else if (quiet) {
115-
log.setLevel('silent');
116-
} else {
117-
log.setLevel('info');
124+
logLevel = 'silent';
118125
}
126+
127+
log.setLevel(logLevel);
128+
129+
return logLevel;
119130
}
120131

121132
export type ConfigOptions = Partial<

packages/plugin-lighthouse/src/lib/runner/utils.unit.test.ts

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import { CoreConfig, auditOutputsSchema } from '@code-pushup/models';
1010
import { MEMFS_VOLUME, getLogMessages } from '@code-pushup/test-utils';
1111
import { ui } from '@code-pushup/utils';
1212
import {
13+
determineAndSetLogLevel,
1314
getConfig,
1415
logUnsupportedDetails,
15-
setLogLevel,
1616
toAuditOutputs,
1717
unsupportedDetailTypes,
1818
} from './utils';
@@ -415,7 +415,7 @@ describe('getConfig', () => {
415415
});
416416
});
417417

418-
describe('setLogLevel', () => {
418+
describe('determineAndSetLogLevel', () => {
419419
const debugLib = debug as { enabled: (flag: string) => boolean };
420420
beforeEach(() => {
421421
log.setLevel('info');
@@ -439,30 +439,32 @@ describe('setLogLevel', () => {
439439
* debug.enable('LH:*, -LH:*:verbose');
440440
*/
441441

442-
it('should set log level to info if no options are given', () => {
443-
setLogLevel();
442+
it('should set log level to info and return "info" as level if no options are given', () => {
443+
expect(determineAndSetLogLevel()).toBe('info');
444444
expect(log.isVerbose()).toBe(false);
445445
expect(debugLib.enabled('LH:*')).toBe(true);
446446
expect(debugLib.enabled('LH:*:verbose')).toBe(false);
447447
});
448448

449-
it('should set log level to verbose', () => {
450-
setLogLevel({ verbose: true });
449+
it('should set log level to verbose and return "verbose" as level', () => {
450+
expect(determineAndSetLogLevel({ verbose: true })).toBe('verbose');
451451
expect(log.isVerbose()).toBe(true);
452452
expect(debugLib.enabled('LH:*')).toBe(true);
453453
expect(debugLib.enabled('LH:*:verbose')).toBe(false);
454454
});
455455

456-
it('should set log level to quiet', () => {
457-
setLogLevel({ quiet: true });
456+
it('should set log level to quiet and return "silent" as level', () => {
457+
expect(determineAndSetLogLevel({ quiet: true })).toBe('silent');
458458
expect(log.isVerbose()).toBe(false);
459459
expect(debugLib.enabled('LH:*')).toBe(true);
460460
expect(debugLib.enabled('-LH:*')).toBe(true);
461461
expect(debugLib.enabled('LH:*:verbose')).toBe(false);
462462
});
463463

464-
it('should set log level to verbose if verbose and quiet are given', () => {
465-
setLogLevel({ verbose: true, quiet: true });
464+
it('should set log level to verbose if verbose and quiet are given and return "verbose" as level', () => {
465+
expect(determineAndSetLogLevel({ verbose: true, quiet: true })).toBe(
466+
'verbose',
467+
);
466468
expect(log.isVerbose()).toBe(true);
467469
expect(debugLib.enabled('LH:*')).toBe(true);
468470
expect(debugLib.enabled('LH:*:verbose')).toBe(false);

0 commit comments

Comments
 (0)