Skip to content

Commit

Permalink
add: list installed browsers
Browse files Browse the repository at this point in the history
Add new commands to list installed browsers.

Solves microsoft#34183

* Add `playwright ls` command to list installed browsers in `packages/playwright-core/src/cli/commands/ls.ts`.
* Add `--list` option to `npx playwright install` command in `packages/playwright-core/src/cli/commands/install.ts`.
* Register the new `ls` command in the CLI program in `packages/playwright-core/src/cli/program.ts`.
* Write tests for the `playwright ls` command in `packages/playwright-core/src/cli/commands/ls.test.ts`.
* Add documentation for the new `playwright ls` command and `--list` option in `docs/src/cli.md`.
* Update `.github/actions/run-test/action.yml` to use `npx playwright install --with-deps --list` to list installed browsers.
  • Loading branch information
resslr committed Jan 8, 2025
1 parent 7ee7e01 commit 018e23d
Show file tree
Hide file tree
Showing 6 changed files with 130 additions and 3 deletions.
4 changes: 2 additions & 2 deletions .github/actions/run-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ runs:
echo "::endgroup::"
shell: bash
- run: |
echo "::group::npx playwright install --with-deps"
npx playwright install --with-deps ${{ inputs.browsers-to-install }}
echo "::group::npx playwright install --with-deps --list"
npx playwright install --with-deps --list ${{ inputs.browsers-to-install }}
echo "::endgroup::"
shell: bash
- name: Run tests
Expand Down
64 changes: 64 additions & 0 deletions docs/src/cli.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Playwright CLI

## `playwright ls`

List installed browsers.

### Usage

```sh
npx playwright ls
```

### Description

The `playwright ls` command lists all installed browsers along with their versions and installation locations.

### Example

```sh
$ npx playwright ls
Browser: chromium
Version: 91.0.4472.124
Install location: /path/to/chromium

Browser: firefox
Version: 89.0
Install location: /path/to/firefox

Browser: webkit
Version: 14.2
Install location: /path/to/webkit
```

## `npx playwright install --list`

List installed browsers after installing them.

### Usage

```sh
npx playwright install --list
```

### Description

The `--list` option for the `npx playwright install` command lists all installed browsers along with their versions and installation locations after installing them.

### Example

```sh
$ npx playwright install --list
Installing browsers...
Browser: chromium
Version: 91.0.4472.124
Install location: /path/to/chromium

Browser: firefox
Version: 89.0
Install location: /path/to/firefox

Browser: webkit
Version: 14.2
Install location: /path/to/webkit
```
21 changes: 21 additions & 0 deletions packages/playwright-core/src/cli/commands/install.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { registry } from '../../server';
import { gracefullyProcessExitDoNotHang } from '../../utils';

async function listInstalledBrowsers() {
try {
const executables = registry.executables();
for (const executable of executables) {
if (executable.installType !== 'none') {
console.log(`Browser: ${executable.name}`);
console.log(` Version: ${executable.browserVersion}`);
console.log(` Install location: ${executable.directory}`);
console.log('');
}
}
} catch (e) {
console.log(`Failed to list installed browsers\n${e}`);
gracefullyProcessExitDoNotHang(1);
}
}

export { listInstalledBrowsers };
9 changes: 9 additions & 0 deletions packages/playwright-core/src/cli/commands/ls.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { execSync } from 'child_process';
import { expect, test } from '@playwright/test';

test('playwright ls command should list installed browsers', async () => {
const result = execSync('npx playwright ls').toString();
expect(result).toContain('Browser:');
expect(result).toContain('Version:');
expect(result).toContain('Install location:');
});
21 changes: 21 additions & 0 deletions packages/playwright-core/src/cli/commands/ls.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { registry } from '../../server';
import { gracefullyProcessExitDoNotHang } from '../../utils';

async function listInstalledBrowsers() {
try {
const executables = registry.executables();
for (const executable of executables) {
if (executable.installType !== 'none') {
console.log(`Browser: ${executable.name}`);
console.log(` Version: ${executable.browserVersion}`);
console.log(` Install location: ${executable.directory}`);
console.log('');
}
}
} catch (e) {
console.log(`Failed to list installed browsers\n${e}`);
gracefullyProcessExitDoNotHang(1);
}
}

export { listInstalledBrowsers };
14 changes: 13 additions & 1 deletion packages/playwright-core/src/cli/program.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { wrapInASCIIBox, isLikelyNpxGlobal, assert, gracefullyProcessExitDoNotHa
import type { Executable } from '../server';
import { registry, writeDockerVersion } from '../server';
import { isTargetClosedError } from '../client/errors';
import { listInstalledBrowsers } from './commands/ls';

const packageJSON = require('../../package.json');

Expand Down Expand Up @@ -133,7 +134,8 @@ program
.option('--force', 'force reinstall of stable browser channels')
.option('--only-shell', 'only install headless shell when installing chromium')
.option('--no-shell', 'do not install chromium headless shell')
.action(async function(args: string[], options: { withDeps?: boolean, force?: boolean, dryRun?: boolean, shell?: boolean, noShell?: boolean, onlyShell?: boolean }) {
.option('--list', 'list installed browsers')
.action(async function(args: string[], options: { withDeps?: boolean, force?: boolean, dryRun?: boolean, shell?: boolean, noShell?: boolean, onlyShell?: boolean, list?: boolean }) {
// For '--no-shell' option, commander sets `shell: false` instead.
if (options.shell === false)
options.noShell = true;
Expand Down Expand Up @@ -183,6 +185,9 @@ program
console.error(e);
});
}
if (options.list) {
await listInstalledBrowsers();
}
} catch (e) {
console.log(`Failed to install browsers\n${e}`);
gracefullyProcessExitDoNotHang(1);
Expand Down Expand Up @@ -338,6 +343,13 @@ Examples:
$ show-trace https://example.com/trace.zip`);

program
.command('ls')
.description('list installed browsers')
.action(async function() {
await listInstalledBrowsers();
});

type Options = {
browser: string;
channel?: string;
Expand Down

0 comments on commit 018e23d

Please sign in to comment.