Skip to content

Bump browser versions in Docker #744

Bump browser versions in Docker

Bump browser versions in Docker #744

Workflow file for this run

name: Linux browsers Chrome
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
basic:
runs-on: ubuntu-22.04
steps:
- name: Harden Runner
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
with:
egress-policy: block
allowed-endpoints: >
accounts.google.com:443
android.clients.google.com:443
api.github.com:443
azure.archive.ubuntu.com:80
clients2.google.com:80
dl-ssl.google.com:443
dl.google.com:80
esm.ubuntu.com:443
files.pythonhosted.org:443
github.com:443
motd.ubuntu.com:443
msedgedriver.microsoft.com:443
mtalk.google.com:5228
nodejs.org:443
packages.microsoft.com:443
pypi.org:443
registry.npmjs.org:443
release-assets.githubusercontent.com:443
results-receiver.actions.githubusercontent.com:443
storage.googleapis.com:443
www.google.com:443
www.sitespeed.io:443
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Use Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: '24.x'
cache: 'npm'
- name: Install latest Chrome
run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get --only-upgrade install google-chrome-stable
google-chrome --version
- name: Install Browsertime
run: npm ci
- name: Install dependencies
run: |
sudo apt-get install net-tools -y
python -m pip install virtualenv
sudo modprobe ifb numifbs=1
- name: Start local HTTP server
run: (npm run start-server&)
- name: Test Chrome with CPU throttle and preURL
run: ./bin/browsertime.js -b chrome --skipHar -n 1 --preURL http://127.0.0.1:3000/simple/ -r header:value --chrome.CPUThrottlingRate 2 --chrome.cdp.performance --xvfb --chrome.enableChromeDriverLog --chrome.collectConsoleLog http://127.0.0.1:3000/dimple/
- name: Test pre/post scripts
run: ./bin/browsertime.js -b chrome test/data/navigationscript/measure.cjs -n 1 --preScript test/data/prepostscripts/preSample.cjs --postScript test/data/prepostscripts/postSample.cjs --xvfb
- name: Test Chrome with emulated mobile
run: ./bin/browsertime.js -b chrome --chrome.mobileEmulation.deviceName 'iPhone 12 Pro' http://127.0.0.1:3000/simple/ --xvfb
- name: Test Chrome with web driver nagivation
run: ./bin/browsertime.js -b chrome -n 1 http://127.0.0.1:3000/simple/ --webdriverPageload --xvfb
- name: Test navigate to the same URL twice
run: ./bin/browsertime.js -b chrome test/data/navigationscript/sameURLTwice.cjs -n 1 --pageCompleteCheckInactivity --timeToSettle 1000 --xvfb
- name: Test navigate to the same URL twice by clicking on a link
run: ./bin/browsertime.js -b chrome test/data/navigationscript/sameURLTwiceWithClick.cjs -n 1 --pageCompleteCheckInactivity --timeToSettle 1000 --xvfb
- name: Test using alias for one URL
run: ./bin/browsertime.js -b chrome http://127.0.0.1:3000/simple/ --urlAlias my_url --xvfb
- name: Test using alias for multiple URLs
run: ./bin/browsertime.js -b chrome http://127.0.0.1:3000/simple/ http://127.0.0.1:3000/dimple/ --urlAlias startPage --urlAlias documentation --xvfb
- name: Run test with pre-test functionality
run: ./bin/browsertime.js -b chrome --preWarmServer --xvfb http://127.0.0.1:3000/simple/
- name: Test Chrome CDP and trace commands
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/chrome.cjs
scripting:
runs-on: ubuntu-22.04
steps:
- name: Harden Runner
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
with:
egress-policy: block
allowed-endpoints: >
accounts.google.com:443
android.clients.google.com:443
api.github.com:443
azure.archive.ubuntu.com:80
clients2.google.com:80
dl-ssl.google.com:443
dl.google.com:80
esm.ubuntu.com:443
files.pythonhosted.org:443
github.com:443
motd.ubuntu.com:443
msedgedriver.microsoft.com:443
mtalk.google.com:5228
nodejs.org:443
packages.microsoft.com:443
pypi.org:443
registry.npmjs.org:443
release-assets.githubusercontent.com:443
results-receiver.actions.githubusercontent.com:443
storage.googleapis.com:443
www.google.com:443
www.sitespeed.io:443
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Use Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: '24.x'
cache: 'npm'
- name: Install latest Chrome
run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get --only-upgrade install google-chrome-stable
google-chrome --version
- name: Install Browsertime
run: npm ci
- name: Install dependencies
run: |
sudo apt-get install net-tools -y
python -m pip install virtualenv
sudo modprobe ifb numifbs=1
- name: Start local HTTP server
run: (npm run start-server&)
- name: Run test with screenshots
run: ./bin/browsertime.js -b chrome --screenshotLCP --screenshotLS --xvfb http://127.0.0.1:3000/simple/
- name: Run test with tcp dump
run: ./bin/browsertime.js -b chrome --xvfb http://127.0.0.1:3000/simple/ -n 1 --tcpdump
- name: Run test with scripting.mjs
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/module.mjs
- name: Run test with scripting.cjs
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/common.cjs
- name: Run test with scripting.js
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/common.js --cjs
- name: Run test with scripting.js
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/module.js
- name: Run test with scripting.mts
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/module.mts
- name: Run test with scripting.cts
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/common.cts
- name: Run test with scripting.ts
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/common.ts --cjs
- name: Run test with scripting.ts
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/scripting/module.ts
- name: Test unified click commands
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/clickBackAndForth.cjs
- name: Test unified misc commands
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/misc.cjs
- name: Test new convenience commands
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/newCommands.cjs
- name: Test Selenium Actions API
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/actions.cjs
- name: Test stopWatch commands
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/stopWatch.cjs
- name: Test measure with alias
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/measureAlias.cjs
- name: Test scroll commands
run: ./bin/browsertime.js -b chrome -n 1 --xvfb test/data/commandscripts/scrollToBottom.cjs
- name: Test extra profile run Chrome
run: ./bin/browsertime.js -b chrome http://127.0.0.1:3000/simple/ -n 1 --viewPort 1000x600 --xvfb --enableProfileRun
- name: Test Chrome JS/CSS coverage
run: |
./bin/browsertime.js -b chrome -n 1 --xvfb --skipHar --chrome.coverage --resultDir /tmp/coverage http://127.0.0.1:3000/simple/
echo "--- coverage block ---"
jq '.[0].coverage' /tmp/coverage/browsertime.json
jq -e '(.[0].coverage.js | type) == "array" and (.[0].coverage.js | length) > 0' /tmp/coverage/browsertime.json
jq -e '(.[0].coverage.css | type) == "array" and (.[0].coverage.css | length) > 0' /tmp/coverage/browsertime.json
jq -e '.[0].coverage.js[0] | has("totalBytes") and has("usedBytes") and has("unusedBytes") and has("unusedPercent") and has("files")' /tmp/coverage/browsertime.json
jq -e '.[0].coverage.css[0] | has("totalBytes") and has("usedBytes") and has("unusedBytes") and has("unusedPercent") and has("files")' /tmp/coverage/browsertime.json
- name: Test Chrome soft navigation detection
run: |
./bin/browsertime.js -b chrome -n 1 --xvfb --spa --resultDir /tmp/soft-nav test/data/commandscripts/softNavigation.cjs
echo "--- soft navigation entry ---"
jq '.[0].browserScripts[0].timings.softNavigations[0]' /tmp/soft-nav/browsertime.json
echo "--- HAR page ---"
jq '.log.pages[0] | {title, _url, _softNavigation}' /tmp/soft-nav/browsertime.har
jq -e '.[0].browserScripts[0].timings.softNavigations | length > 0' /tmp/soft-nav/browsertime.json
jq -e '.[0].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/page-2")' /tmp/soft-nav/browsertime.json
jq -e '.log.pages[0]._softNavigation == true' /tmp/soft-nav/browsertime.har
jq -e '.log.pages[0]._url | endswith("/spa/page-2")' /tmp/soft-nav/browsertime.har
- name: Test Chrome soft navigation without any request
run: |
./bin/browsertime.js -b chrome -n 1 --xvfb --spa --resultDir /tmp/soft-nav-no-request test/data/commandscripts/softNavigationNoRequest.cjs
echo "--- soft navigation entry ---"
jq '.[0].browserScripts[0].timings.softNavigations[0]' /tmp/soft-nav-no-request/browsertime.json
echo "--- HAR page ---"
jq '.log.pages[0] | {title, _url, _softNavigation}' /tmp/soft-nav-no-request/browsertime.har
jq -e '.[0].browserScripts[0].timings.softNavigations | length > 0' /tmp/soft-nav-no-request/browsertime.json
jq -e '.[0].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/page-3")' /tmp/soft-nav-no-request/browsertime.json
jq -e '.log.pages[0]._softNavigation == true' /tmp/soft-nav-no-request/browsertime.har
jq -e '.log.pages[0]._url | endswith("/spa/page-3")' /tmp/soft-nav-no-request/browsertime.har
- name: Test Chrome SPA user journey over multiple routes
run: |
./bin/browsertime.js -b chrome -n 1 --xvfb --spa --resultDir /tmp/spa-journey test/data/commandscripts/spaJourney.cjs
echo "--- measured pages ---"
jq '[.[] | {url: .info.url, alias: .info.alias}]' /tmp/spa-journey/browsertime.json
echo "--- HAR pages ---"
jq '.log.pages | map({id, _url, _softNavigation})' /tmp/spa-journey/browsertime.har
jq -e '. | length == 3' /tmp/spa-journey/browsertime.json
jq -e '.[0].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/products")' /tmp/spa-journey/browsertime.json
jq -e '.[1].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/about")' /tmp/spa-journey/browsertime.json
jq -e '.[2].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/gallery")' /tmp/spa-journey/browsertime.json
jq -e '.log.pages | length == 3' /tmp/spa-journey/browsertime.har
jq -e '[.log.pages[] | select(._softNavigation == true)] | length == 3' /tmp/spa-journey/browsertime.har
jq -e '(.log.pages[0].id) as $p | [.log.entries[] | select(.pageref == $p and (.request.url | contains("products.json")))] | length == 1' /tmp/spa-journey/browsertime.har
jq -e '(.log.pages[2].id) as $p | [.log.entries[] | select(.pageref == $p and (.request.url | contains("pirate.png")))] | length == 1' /tmp/spa-journey/browsertime.har
- name: Test Chrome SPA user journey mixing soft and hard navigations
run: |
./bin/browsertime.js -b chrome -n 1 --xvfb --spa --resultDir /tmp/spa-mixed test/data/commandscripts/spaMixedJourney.cjs
echo "--- measured pages ---"
jq '[.[] | {url: .info.url, alias: .info.alias}]' /tmp/spa-mixed/browsertime.json
echo "--- HAR pages ---"
jq '.log.pages | map({id, _url, _softNavigation})' /tmp/spa-mixed/browsertime.har
jq -e '. | length == 3' /tmp/spa-mixed/browsertime.json
jq -e '.[0].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/about")' /tmp/spa-mixed/browsertime.json
jq -e '.[1].info.url | endswith("/simple/")' /tmp/spa-mixed/browsertime.json
jq -e '.[1].browserScripts[0].timings.softNavigations == null' /tmp/spa-mixed/browsertime.json
jq -e '.[2].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/products")' /tmp/spa-mixed/browsertime.json
jq -e '.log.pages | length == 3' /tmp/spa-mixed/browsertime.har
jq -e '.log.pages[0]._softNavigation == true' /tmp/spa-mixed/browsertime.har
jq -e '.log.pages[1]._softNavigation == null' /tmp/spa-mixed/browsertime.har
jq -e '(.log.pages[1].id) as $p | [.log.entries[] | select(.pageref == $p)] | length > 0' /tmp/spa-mixed/browsertime.har
- name: Test Chrome SPA user journey without any requests
run: |
./bin/browsertime.js -b chrome -n 1 --xvfb --spa --resultDir /tmp/spa-no-request test/data/commandscripts/spaNoRequestJourney.cjs
echo "--- measured pages ---"
jq '[.[] | {url: .info.url, alias: .info.alias}]' /tmp/spa-no-request/browsertime.json
echo "--- HAR pages ---"
jq '.log.pages | map({id, _url, _softNavigation})' /tmp/spa-no-request/browsertime.har
jq -e '. | length == 2' /tmp/spa-no-request/browsertime.json
jq -e '.[0].browserScripts[0].timings.softNavigations | length == 1' /tmp/spa-no-request/browsertime.json
jq -e '.[1].browserScripts[0].timings.softNavigations | length == 1' /tmp/spa-no-request/browsertime.json
jq -e '.[0].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/about")' /tmp/spa-no-request/browsertime.json
jq -e '.[1].browserScripts[0].timings.softNavigations[0].name | endswith("/spa/")' /tmp/spa-no-request/browsertime.json
jq -e '[.log.pages[] | select(._softNavigation == true)] | length == 2' /tmp/spa-no-request/browsertime.har
jq -e '.log.entries | length == 0' /tmp/spa-no-request/browsertime.har
video:
runs-on: ubuntu-22.04
steps:
- name: Harden Runner
uses: step-security/harden-runner@9af89fc71515a100421586dfdb3dc9c984fbf411 # v2.19.4
with:
egress-policy: block
allowed-endpoints: >
accounts.google.com:443
android.clients.google.com:443
api.github.com:443
azure.archive.ubuntu.com:80
clients2.google.com:80
dl-ssl.google.com:443
dl.google.com:80
esm.ubuntu.com:443
files.pythonhosted.org:443
github.com:443
motd.ubuntu.com:443
msedgedriver.microsoft.com:443
mtalk.google.com:5228
nodejs.org:443
packages.microsoft.com:443
pypi.org:443
registry.npmjs.org:443
release-assets.githubusercontent.com:443
results-receiver.actions.githubusercontent.com:443
storage.googleapis.com:443
www.google.com:443
www.sitespeed.io:443
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Use Node.js
uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6
with:
node-version: '24.x'
cache: 'npm'
- name: Install latest Chrome
run: |
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
sudo apt-get update
sudo apt-get --only-upgrade install google-chrome-stable
google-chrome --version
- name: Install Browsertime
run: npm ci
- name: Install ffmpeg
uses: AnimMouse/setup-ffmpeg@ae28d57dabbb148eff63170b6bf7f2b60062cbae # v1.2.3
with:
version: '8.1'
- name: Set up Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
with:
python-version: '3.12'
cache: 'pip'
- name: Install dependencies
run: |
sudo apt-get install net-tools -y
python -m pip install --upgrade pip setuptools==70.0.0 pyssim OpenCV-Python Numpy virtualenv
sudo modprobe ifb numifbs=1
- name: Start local HTTP server
run: (npm run start-server&)
- name: Test multi pages with video and visual metrics
run: ./bin/browsertime.js -b chrome test/data/navigationscript/multi.cjs -n 3 --chrome.timeline --video --visualMetrics --visualElements --viewPort 1000x600 --xvfb
- name: Test video and visual metrics with noise tolerance
run: |
./bin/browsertime.js -b chrome -n 1 --video --visualMetrics --videoParams.noiseTolerance 0.05 --resultDir /tmp/noise-tolerance --xvfb http://127.0.0.1:3000/simple/
jq -e '.[0].visualMetrics[0].LastVisualChange' /tmp/noise-tolerance/browsertime.json
- name: Test navigation and page complete check inactivity
run: ./bin/browsertime.js -b chrome test/data/navigationscript/navigateAndStartInTwoSteps.cjs -n 1 --pageCompleteCheckInactivity --timeToSettle 1000 --xvfb
- name: Run test with check network idle in Chrome
run: ./bin/browsertime.js -b chrome --pageCompleteCheckNetworkIdle --xvfb http://127.0.0.1:3000/simple/