Skip to content

Commit 873a68d

Browse files
authored
use @puppeteer/browsers instead of travis-multirunner (webrtcHacks#1133)
* use @puppeteer/browsers instead of travis-multirunner which reduces the maintenance burden
1 parent 4eef120 commit 873a68d

File tree

7 files changed

+96
-67
lines changed

7 files changed

+96
-67
lines changed

.github/workflows/e2e-tests.yaml

+2-11
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,11 @@ jobs:
77
runs-on: ubuntu-latest
88
strategy:
99
matrix:
10-
browser: [chrome, firefox]
11-
version: [stable, beta]
10+
browser: [chrome]
11+
version: [stable, beta, dev]
1212
include:
13-
- browser: chrome
14-
version: unstable
15-
- browser: chrome
16-
version: stable
17-
disableunifiedplan: true
1813
- browser: firefox
1914
version: nightly
20-
- browser: firefox
21-
version: esr
2215
steps:
2316
- uses: actions/checkout@v3
2417
- uses: actions/setup-node@v3
@@ -28,7 +21,5 @@ jobs:
2821
env:
2922
BROWSER: ${{matrix.browser}}
3023
BVER: ${{matrix.version}}
31-
CHROME_BIN: browsers/bin/chrome-${{matrix.version}}
32-
FIREFOX_BIN: browsers/bin/firefox-${{matrix.version}}
3324
DISPLAY: :99.0
3425
run: npm run e2e-tests

Gruntfile.js

-6
Original file line numberDiff line numberDiff line change
@@ -50,18 +50,12 @@ module.exports = function(grunt) {
5050
expand: true
5151
}
5252
},
53-
shell: {
54-
downloadBrowser : {
55-
command: 'BROWSER=${BROWSER-chrome} BVER=${BVER-stable} ./node_modules/travis-multirunner/setup.sh'
56-
},
57-
},
5853
});
5954

6055
grunt.loadNpmTasks('grunt-eslint');
6156
grunt.loadNpmTasks('grunt-browserify');
6257
grunt.loadNpmTasks('grunt-babel');
6358
grunt.loadNpmTasks('grunt-contrib-copy');
64-
grunt.loadNpmTasks('grunt-shell');
6559

6660
grunt.registerTask('default', ['eslint', 'build']);
6761
grunt.registerTask('lint', ['eslint']);

package.json

+4-5
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@
2020
"postversion": "export GITTAG=\"echo $(git describe --abbrev=0 --tags | sed 's/^v//')\" && git push --force --set-upstream origin bumpVersion --follow-tags && git checkout gh-pages && git pull && cp out/adapter.js adapter.js && cp adapter.js adapter-`$GITTAG`.js && rm adapter-latest.js && ln -s adapter-`$GITTAG`.js adapter-latest.js && mkdir -p adapter-`$GITTAG`-variants && cp out/adapter.js adapter-`$GITTAG`-variants/ && cp out/adapter_*.js adapter-`$GITTAG`-variants/ && git add adapter.js adapter-latest.js adapter-`$GITTAG`.js adapter-`$GITTAG`-variants && git commit -m `$GITTAG` && git push --set-upstream origin gh-pages && git checkout main",
2121
"prepare": "grunt build",
2222
"prepublishonly": "npm test",
23-
"test": "grunt && mocha test/unit && grunt downloadBrowser && karma start test/karma.conf.js",
23+
"test": "grunt && mocha test/unit && karma start test/karma.conf.js",
2424
"lint-and-unit-tests": "grunt && mocha test/unit",
25-
"e2e-tests": "grunt && grunt downloadBrowser && karma start test/karma.conf.js"
25+
"e2e-tests": "grunt && karma start test/karma.conf.js"
2626
},
2727
"dependencies": {
2828
"sdp": "^3.2.0"
@@ -34,6 +34,7 @@
3434
"devDependencies": {
3535
"@babel/core": "^7.21.0",
3636
"@babel/preset-env": "^7.20.2",
37+
"@puppeteer/browsers": "^1.4.1",
3738
"babel-preset-env": "^1.7.0",
3839
"brfs": "^1.5.0",
3940
"chai": "^3.5.0",
@@ -44,7 +45,6 @@
4445
"grunt-contrib-clean": "^1.1.0",
4546
"grunt-contrib-copy": "^1.0.0",
4647
"grunt-eslint": "^24.0.0",
47-
"grunt-shell": "^2.1.0",
4848
"karma": "^6.4.1",
4949
"karma-browserify": "^8.1.0",
5050
"karma-chai": "^0.1.0",
@@ -56,7 +56,6 @@
5656
"karma-stability-reporter": "^3.0.1",
5757
"mocha": "^10.1.0",
5858
"sinon": "^2.2.0",
59-
"sinon-chai": "^2.14.0",
60-
"travis-multirunner": "^5.0.1"
59+
"sinon-chai": "^2.14.0"
6160
}
6261
}

test/.eslintrc

+4-1
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,8 @@
33
"node": true,
44
"es6": true
55
},
6-
"rules": {}
6+
"rules": {},
7+
"parserOptions": {
8+
"ecmaVersion": 2022
9+
}
710
}

test/karma.conf.js

+86-44
Original file line numberDiff line numberDiff line change
@@ -9,58 +9,100 @@
99
'use strict';
1010

1111
const os = require('os');
12+
const puppeteerBrowsers = require('@puppeteer/browsers');
1213

13-
let browsers;
14-
if (process.env.BROWSER) {
15-
if (process.env.BROWSER === 'safari') {
16-
browsers = ['Safari'];
17-
} else if (process.env.BROWSER === 'Electron') {
18-
browsers = ['electron'];
19-
} else {
20-
browsers = [process.env.BROWSER];
21-
}
22-
} else if (os.platform() === 'darwin') {
23-
browsers = ['chrome', 'firefox', 'Safari'];
24-
} else if (os.platform() === 'win32') {
25-
browsers = ['chrome', 'firefox'];
26-
} else {
27-
browsers = ['chrome', 'firefox'];
14+
async function determineFirefoxVersion(version) {
15+
const rawVersions = await fetch('https://product-details.mozilla.org/1.0/firefox_versions.json');
16+
const versions = await rawVersions.json();
17+
return versions.FIREFOX_NIGHTLY;
18+
// TODO: support stable, beta, nightly, esr.
19+
// This has issues with the assumptions browsers makes about download urls
20+
// (or Firefox about directory structure and where it includes the platform)
21+
// This base url coems close:
22+
// 'https://archive.mozilla.org/pub/firefox/releases/' + buildId + '/' + platform + '/en-US/';
2823
}
2924

30-
let reporters = ['mocha'];
31-
if (process.env.CI) {
32-
// stability must be the last reporter as it munges the
33-
// exit code and always returns 0.
34-
reporters.push('stability');
25+
async function download(browser, version, cacheDir, platform) {
26+
if (browser === 'firefox') {
27+
// TODO: see above, resolve stable, beta, nightly, esr
28+
const buildId = await determineFirefoxVersion(version);
29+
await puppeteerBrowsers.install({
30+
browser,
31+
buildId,
32+
cacheDir,
33+
platform,
34+
});
35+
return buildId;
36+
}
37+
const buildId = await puppeteerBrowsers
38+
.resolveBuildId(browser, platform, version);
39+
await puppeteerBrowsers.install({
40+
browser,
41+
buildId,
42+
cacheDir,
43+
platform
44+
});
45+
return buildId;
3546
}
3647

37-
// uses Safari Technology Preview.
38-
if (os.platform() === 'darwin' && process.env.BVER === 'unstable' &&
39-
!process.env.SAFARI_BIN) {
40-
process.env.SAFARI_BIN = '/Applications/Safari Technology Preview.app' +
41-
'/Contents/MacOS/Safari Technology Preview';
42-
}
48+
module.exports = async(config) => {
49+
const cacheDir = process.cwd() + '/browsers';
50+
const platform = puppeteerBrowsers.detectBrowserPlatform();
4351

44-
if (!process.env.FIREFOX_BIN) {
45-
process.env.FIREFOX_BIN = process.cwd() + '/browsers/bin/firefox-'
46-
+ (process.env.BVER || 'stable');
47-
}
48-
if (!process.env.CHROME_BIN) {
49-
process.env.CHROME_BIN = process.cwd() + '/browsers/bin/chrome-'
50-
+ (process.env.BVER || 'stable');
51-
}
52+
let browsers;
53+
if (process.env.BROWSER) {
54+
if (process.env.BROWSER === 'safari') {
55+
browsers = ['Safari'];
56+
} else if (process.env.BROWSER === 'Electron') {
57+
browsers = ['electron'];
58+
} else {
59+
browsers = [process.env.BROWSER];
60+
}
61+
} else if (os.platform() === 'darwin') {
62+
browsers = ['chrome', 'firefox', 'Safari'];
63+
} else if (os.platform() === 'win32') {
64+
browsers = ['chrome', 'firefox'];
65+
} else {
66+
browsers = ['chrome', 'firefox'];
67+
}
5268

53-
let chromeFlags = [
54-
'--use-fake-device-for-media-stream',
55-
'--use-fake-ui-for-media-stream',
56-
'--no-sandbox',
57-
'--headless', '--disable-gpu', '--remote-debugging-port=9222'
58-
];
59-
if (process.env.CHROMEEXPERIMENT !== 'false') {
60-
chromeFlags.push('--enable-experimental-web-platform-features');
61-
}
69+
let reporters = ['mocha'];
70+
if (process.env.CI) {
71+
// stability must be the last reporter as it munges the
72+
// exit code and always returns 0.
73+
reporters.push('stability');
74+
}
75+
76+
// uses Safari Technology Preview.
77+
if (browsers.includes('Safari') && os.platform() === 'darwin' &&
78+
process.env.BVER === 'unstable' && !process.env.SAFARI_BIN) {
79+
process.env.SAFARI_BIN = '/Applications/Safari Technology Preview.app' +
80+
'/Contents/MacOS/Safari Technology Preview';
81+
}
82+
83+
if (browsers.includes('firefox') && !process.env.FIREFOX_BIN) {
84+
const buildId = await download('firefox', process.env.BVER || 'stable',
85+
cacheDir, platform);
86+
process.env.FIREFOX_BIN = puppeteerBrowsers
87+
.computeExecutablePath({browser: 'firefox', buildId, cacheDir, platform});
88+
}
89+
if (browsers.includes('chrome') && !process.env.CHROME_BIN) {
90+
const buildId = await download('chrome', process.env.BVER || 'stable',
91+
cacheDir, platform);
92+
process.env.CHROME_BIN = puppeteerBrowsers
93+
.computeExecutablePath({browser: 'chrome', buildId, cacheDir, platform});
94+
}
95+
96+
let chromeFlags = [
97+
'--use-fake-device-for-media-stream',
98+
'--use-fake-ui-for-media-stream',
99+
'--no-sandbox',
100+
'--headless', '--disable-gpu', '--remote-debugging-port=9222'
101+
];
102+
if (process.env.CHROMEEXPERIMENT !== 'false') {
103+
chromeFlags.push('--enable-experimental-web-platform-features');
104+
}
62105

63-
module.exports = function(config) {
64106
config.set({
65107
basePath: '..',
66108
frameworks: ['browserify', 'mocha', 'chai'],

0 commit comments

Comments
 (0)