sitespeed.io 23.5.2 → 23.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,17 @@
1
1
  # CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
2
2
 
3
+ ## 23.7.0 - 2022-03-31
4
+ ### Added
5
+ * Updated to Chrome/Chromedriver 100 and [Browsertime 15.4.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1540---2022-03-30).
6
+ * Updated the +1 container to use Lighthouse 9.5.0.
7
+ * Updated to [Axe-core 4.4.1](https://github.com/sitespeedio/sitespeed.io/pull/3615).
3
8
 
9
+ ## 23.6.1 - 2022-03-25
10
+ ### Fixed
11
+ * Fixing text formatting in the JSON from latest run and make sure we display the time with UTC[#3611](https://github.com/sitespeedio/sitespeed.io/pull/3611).
12
+ ## 23.6.0 - 2022-03-25
13
+ ### Added
14
+ * Various fixes to add more content to the JSON stored from the latest run, making it easier to show more meta data for a run in Grafana [#3607](https://github.com/sitespeedio/sitespeed.io/pull/3607), [#3609](https://github.com/sitespeedio/sitespeed.io/pull/3609) and [#3610](https://github.com/sitespeedio/sitespeed.io/pull/3610).
4
15
  ## 23.5.2 - 2022-03-22
5
16
  ### Fixed
6
17
  * Updated to latest NodeJS and Ubuntu updates in the Docker container with some security updates[#3306](https://github.com/sitespeedio/sitespeed.io/pull/3606). Also updated the slim container with latest NodeJS.
package/Dockerfile CHANGED
@@ -1,4 +1,4 @@
1
- FROM sitespeedio/webbrowsers:chrome-99.0-firefox-98.0-edge-99.0-b
1
+ FROM sitespeedio/webbrowsers:chrome-100.0-firefox-98.0-edge-99.0
2
2
 
3
3
  ARG TARGETPLATFORM=linux/amd64
4
4
 
package/lib/cli/cli.js CHANGED
@@ -970,7 +970,7 @@ module.exports.parseCommandLine = function parseCommandLine() {
970
970
  .option('browsertime.block', {
971
971
  alias: 'block',
972
972
  describe:
973
- 'Domain to block. Add multiple instances to add multiple domains that will be blocked. Only works in Chrome and Firefox.',
973
+ 'Domain or URL or URL pattern to block. If you use Chrome you can also use --blockDomainsExcept (that is more performant). Works in Chrome/Edge. For Firefox you can only block domains.',
974
974
  group: 'Browser'
975
975
  })
976
976
  .option('browsertime.basicAuth', {
@@ -1,13 +1,21 @@
1
1
  'use strict';
2
2
 
3
3
  const path = require('path');
4
+ const osName = require('os-name');
5
+ const getos = require('getos');
6
+ const { promisify } = require('util');
7
+ const getOS = promisify(getos);
8
+ const os = require('os');
9
+ const get = require('lodash.get');
4
10
  const graphiteUtil = require('../../support/tsdbUtil');
11
+ const helpers = require('../../support/helpers');
5
12
 
6
13
  module.exports = {
7
14
  open(context, options) {
8
15
  this.storageManager = context.storageManager;
9
16
  this.alias = {};
10
17
  this.options = options;
18
+ this.context = context;
11
19
  },
12
20
  async processMessage(message) {
13
21
  switch (message.type) {
@@ -17,6 +25,11 @@ module.exports = {
17
25
  break;
18
26
  }
19
27
 
28
+ case 'browsertime.browser': {
29
+ this.browserData = message.data;
30
+ break;
31
+ }
32
+
20
33
  case 'browsertime.config': {
21
34
  if (message.data.screenshot) {
22
35
  this.useScreenshots = message.data.screenshot;
@@ -29,6 +42,7 @@ module.exports = {
29
42
  // Only use the first one for now
30
43
  if (message.iteration === 1 && this.options.copyLatestFilesToBase) {
31
44
  const options = this.options;
45
+ const browserData = this.browserData;
32
46
  const baseDir = this.storageManager.getBaseDir();
33
47
  // Hack to get out of the date dir
34
48
  const newPath = path.resolve(baseDir, '..');
@@ -95,11 +109,14 @@ module.exports = {
95
109
  );
96
110
  }
97
111
 
112
+ const timestamp = this.context.timestamp.format(
113
+ 'YYYY-MM-DD HH:mm:ss Z'
114
+ );
98
115
  // Also store a JSON with data that we can use later
99
116
  const json = {
100
117
  url: message.url,
101
118
  alias: this.alias[message.url],
102
- timestamp: message.data.timestamp,
119
+ timestamp,
103
120
  iterations: options.browsertime.iterations,
104
121
  name: options.name
105
122
  };
@@ -122,6 +139,64 @@ module.exports = {
122
139
  json.android.androidVersion = message.data.android.androidVersion;
123
140
  }
124
141
 
142
+ json.browser = {};
143
+ json.browser.name = helpers.cap(get(browserData, 'browser.name'));
144
+ json.browser.version = get(browserData, 'browser.version', 'unknown');
145
+
146
+ json.friendlyHTML = `<b><a href="${message.url}">${
147
+ json.alias ? json.alias : message.url
148
+ }</a></b> ${helpers.plural(
149
+ options.browsertime.iterations,
150
+ 'iteration'
151
+ )} at <i>${json.timestamp}</i> using ${json.browser.name} ${
152
+ json.browser.version
153
+ }`;
154
+
155
+ if (options.mobile) {
156
+ json.friendlyHTML += ` (emulating mobile)`;
157
+ }
158
+
159
+ if (options.multi) {
160
+ json.friendlyHTML += ` as a multi page test`;
161
+ }
162
+
163
+ if (options.replay) {
164
+ json.friendlyHTML += ' using a replay proxy';
165
+ }
166
+
167
+ if (!options.mobile && !options.ios && !browserData.android) {
168
+ json.friendlyHTML += ' with viewport ' + options.viewPort;
169
+ }
170
+
171
+ if (browserData.android) {
172
+ json.friendlyHTML += ` on ${browserData.android.model} Android version ${browserData.android.androidVersion} [${browserData.android.id}].`;
173
+ } else if (message.data.ios) {
174
+ json.friendlyHTML += ` ${message.data.ios.deviceName} [${message.data.ios.deviceUDID}].`;
175
+ } else {
176
+ // We are testing on desktop
177
+ let osInfo = osName();
178
+ if (os.platform() === 'linux') {
179
+ const linux = await getOS();
180
+ osInfo = `${linux.dist} ${linux.release}`;
181
+ }
182
+ json.friendlyHTML += options.browsertime.docker
183
+ ? ' using Docker ' + osInfo
184
+ : ' on ' + osInfo;
185
+ }
186
+
187
+ // Hack to add a result URL
188
+ if (this.context.resultUrls.hasBaseUrl()) {
189
+ let resultURL =
190
+ this.context.resultUrls.absoluteSummaryPageUrl(
191
+ message.url,
192
+ this.alias[message.url]
193
+ ) + 'index.html';
194
+
195
+ json.friendlyHTML +=
196
+ ' [<b><a href="' + resultURL + '">result</a></b>].';
197
+ json.result = resultURL;
198
+ }
199
+
125
200
  const data = JSON.stringify(json, null, 0);
126
201
  return this.storageManager.writeDataToDir(
127
202
  data,
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "name": "sitespeed.io",
3
- "version": "23.5.2",
3
+ "version": "23.7.0",
4
4
  "lockfileVersion": 2,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "sitespeed.io",
9
- "version": "23.5.2",
9
+ "version": "23.7.0",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@google-cloud/storage": "5.8.3",
13
13
  "@tgwf/co2": "0.8.0",
14
14
  "aws-sdk": "2.882.0",
15
- "axe-core": "4.3.5",
16
- "browsertime": "15.3.0",
15
+ "axe-core": "4.4.1",
16
+ "browsertime": "15.4.0",
17
17
  "cli-color": "2.0.0",
18
18
  "coach-core": "7.1.0",
19
19
  "concurrent-queue": "7.0.2",
@@ -911,12 +911,12 @@
911
911
  "optional": true
912
912
  },
913
913
  "node_modules/@sitespeed.io/chromedriver": {
914
- "version": "99.0.4844-51",
915
- "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-99.0.4844-51.tgz",
916
- "integrity": "sha512-IRUKnrN/w2jfcFzhboarmSzqvlUxaK+ztfZRB7bZksWu6gdOP3O8Ci4cDuLUPIm1/vtIUFXn/7pXh4e/SY5Wcw==",
914
+ "version": "100.0.4896-20",
915
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-100.0.4896-20.tgz",
916
+ "integrity": "sha512-+x4CiRRBbbSm/Bcl4KXj7Zg/TFy0x7bAQTrS7ZkqU9KmgqhMYvPXjToY+zOgjdYggfu7pbelaNIjmK7zHlWQxg==",
917
917
  "hasInstallScript": true,
918
918
  "dependencies": {
919
- "node-downloader-helper": "1.0.19",
919
+ "node-downloader-helper": "2.1.0",
920
920
  "node-stream-zip": "1.15.0"
921
921
  }
922
922
  },
@@ -1333,9 +1333,9 @@
1333
1333
  "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
1334
1334
  },
1335
1335
  "node_modules/axe-core": {
1336
- "version": "4.3.5",
1337
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz",
1338
- "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==",
1336
+ "version": "4.4.1",
1337
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
1338
+ "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==",
1339
1339
  "engines": {
1340
1340
  "node": ">=4"
1341
1341
  }
@@ -1461,13 +1461,13 @@
1461
1461
  }
1462
1462
  },
1463
1463
  "node_modules/browsertime": {
1464
- "version": "15.3.0",
1465
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-15.3.0.tgz",
1466
- "integrity": "sha512-ReAADBxx7lNeqoacRP70fitGmxV0eUCJqfHXO4VTceHSw51BCsPlNhgUyGqjDNbQu0p0mHmSEDe2yavXOqZv4A==",
1464
+ "version": "15.4.0",
1465
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-15.4.0.tgz",
1466
+ "integrity": "sha512-fJZrGTPp4X7p2AOPQhG1UkBNUeNPzG8R71DTNYG4vVsaaVyi7AtMrIGE/XRgTE7adzKW3uADI7pjD7ZwdB54/Q==",
1467
1467
  "dependencies": {
1468
1468
  "@cypress/xvfb": "1.2.4",
1469
1469
  "@devicefarmer/adbkit": "2.11.3",
1470
- "@sitespeed.io/chromedriver": "99.0.4844-51",
1470
+ "@sitespeed.io/chromedriver": "100.0.4896-20",
1471
1471
  "@sitespeed.io/edgedriver": "99.0.1150-25",
1472
1472
  "@sitespeed.io/geckodriver": "0.30.0",
1473
1473
  "@sitespeed.io/throttle": "3.0.0",
@@ -5031,14 +5031,14 @@
5031
5031
  "optional": true
5032
5032
  },
5033
5033
  "node_modules/node-downloader-helper": {
5034
- "version": "1.0.19",
5035
- "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-1.0.19.tgz",
5036
- "integrity": "sha512-Bwp8WWDDP5ftg+FmAKU08a9+oiUTPoYzMvXgUqZZPQ7VMo1qKBzW3XdTXHeYnqjGLfkTZ2GPibgAWpApfpeS2g==",
5034
+ "version": "2.1.0",
5035
+ "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.0.tgz",
5036
+ "integrity": "sha512-MIUI6kEpSzujmys7AkUK+GzfPywrIeNhQIPe1pQgRxM7RYi4/31KZgC7NQOIjXPVQSXM1mVHcY9psvSQVRt1Kg==",
5037
5037
  "bin": {
5038
5038
  "ndh": "bin/ndh"
5039
5039
  },
5040
5040
  "engines": {
5041
- "node": ">=6.9"
5041
+ "node": ">=14.18"
5042
5042
  }
5043
5043
  },
5044
5044
  "node_modules/node-fetch": {
@@ -8170,11 +8170,11 @@
8170
8170
  }
8171
8171
  },
8172
8172
  "@sitespeed.io/chromedriver": {
8173
- "version": "99.0.4844-51",
8174
- "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-99.0.4844-51.tgz",
8175
- "integrity": "sha512-IRUKnrN/w2jfcFzhboarmSzqvlUxaK+ztfZRB7bZksWu6gdOP3O8Ci4cDuLUPIm1/vtIUFXn/7pXh4e/SY5Wcw==",
8173
+ "version": "100.0.4896-20",
8174
+ "resolved": "https://registry.npmjs.org/@sitespeed.io/chromedriver/-/chromedriver-100.0.4896-20.tgz",
8175
+ "integrity": "sha512-+x4CiRRBbbSm/Bcl4KXj7Zg/TFy0x7bAQTrS7ZkqU9KmgqhMYvPXjToY+zOgjdYggfu7pbelaNIjmK7zHlWQxg==",
8176
8176
  "requires": {
8177
- "node-downloader-helper": "1.0.19",
8177
+ "node-downloader-helper": "2.1.0",
8178
8178
  "node-stream-zip": "1.15.0"
8179
8179
  }
8180
8180
  },
@@ -8506,9 +8506,9 @@
8506
8506
  "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w=="
8507
8507
  },
8508
8508
  "axe-core": {
8509
- "version": "4.3.5",
8510
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz",
8511
- "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA=="
8509
+ "version": "4.4.1",
8510
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz",
8511
+ "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw=="
8512
8512
  },
8513
8513
  "babel-runtime": {
8514
8514
  "version": "6.26.0",
@@ -8616,13 +8616,13 @@
8616
8616
  }
8617
8617
  },
8618
8618
  "browsertime": {
8619
- "version": "15.3.0",
8620
- "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-15.3.0.tgz",
8621
- "integrity": "sha512-ReAADBxx7lNeqoacRP70fitGmxV0eUCJqfHXO4VTceHSw51BCsPlNhgUyGqjDNbQu0p0mHmSEDe2yavXOqZv4A==",
8619
+ "version": "15.4.0",
8620
+ "resolved": "https://registry.npmjs.org/browsertime/-/browsertime-15.4.0.tgz",
8621
+ "integrity": "sha512-fJZrGTPp4X7p2AOPQhG1UkBNUeNPzG8R71DTNYG4vVsaaVyi7AtMrIGE/XRgTE7adzKW3uADI7pjD7ZwdB54/Q==",
8622
8622
  "requires": {
8623
8623
  "@cypress/xvfb": "1.2.4",
8624
8624
  "@devicefarmer/adbkit": "2.11.3",
8625
- "@sitespeed.io/chromedriver": "99.0.4844-51",
8625
+ "@sitespeed.io/chromedriver": "100.0.4896-20",
8626
8626
  "@sitespeed.io/edgedriver": "99.0.1150-25",
8627
8627
  "@sitespeed.io/geckodriver": "0.30.0",
8628
8628
  "@sitespeed.io/throttle": "3.0.0",
@@ -11491,9 +11491,9 @@
11491
11491
  "optional": true
11492
11492
  },
11493
11493
  "node-downloader-helper": {
11494
- "version": "1.0.19",
11495
- "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-1.0.19.tgz",
11496
- "integrity": "sha512-Bwp8WWDDP5ftg+FmAKU08a9+oiUTPoYzMvXgUqZZPQ7VMo1qKBzW3XdTXHeYnqjGLfkTZ2GPibgAWpApfpeS2g=="
11494
+ "version": "2.1.0",
11495
+ "resolved": "https://registry.npmjs.org/node-downloader-helper/-/node-downloader-helper-2.1.0.tgz",
11496
+ "integrity": "sha512-MIUI6kEpSzujmys7AkUK+GzfPywrIeNhQIPe1pQgRxM7RYi4/31KZgC7NQOIjXPVQSXM1mVHcY9psvSQVRt1Kg=="
11497
11497
  },
11498
11498
  "node-fetch": {
11499
11499
  "version": "2.6.1",
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "sitespeed.io": "./bin/sitespeed.js",
5
5
  "sitespeed.io-wpr": "./bin/browsertimeWebPageReplay.js"
6
6
  },
7
- "version": "23.5.2",
7
+ "version": "23.7.0",
8
8
  "description": "Analyze the web performance of your site",
9
9
  "keywords": [
10
10
  "performance",
@@ -74,8 +74,8 @@
74
74
  "@google-cloud/storage": "5.8.3",
75
75
  "@tgwf/co2": "0.8.0",
76
76
  "aws-sdk": "2.882.0",
77
- "axe-core": "4.3.5",
78
- "browsertime": "15.3.0",
77
+ "axe-core": "4.4.1",
78
+ "browsertime": "15.4.0",
79
79
  "coach-core": "7.1.0",
80
80
  "cli-color": "2.0.0",
81
81
  "concurrent-queue": "7.0.2",