Compare commits

...

324 Commits

Author SHA1 Message Date
Peter Hedenskog b2954898e8 new version 2026-01-11 15:29:51 +01:00
Peter Hedenskog 68bd39718a 39.3.1 2026-01-11 15:29:11 +01:00
Peter Hedenskog 105d62951f prepping new release 2026-01-11 15:28:29 +01:00
Peter Hedenskog d37d33789e
Browsertime 26.3.1 (#4579) 2026-01-11 15:28:04 +01:00
Peter Hedenskog 594ef2ec9b new bt 2026-01-11 15:15:20 +01:00
soulgalore 1a20ab56d3 version bump 2026-01-10 22:41:25 +01:00
soulgalore 8d29bf377b 39.3.0 2026-01-10 22:40:24 +01:00
soulgalore d07b588313 preparing new release 2026-01-10 22:39:15 +01:00
soulgalore 64cb98eb40 You can collect response bodies for Firefox again 2026-01-10 22:35:06 +01:00
Peter Hedenskog 2a2a33468a
Browsertime 26.3.0 (#4578) 2026-01-09 22:47:20 +01:00
soulgalore 5044ddf5a6 new bt 2026-01-09 22:35:09 +01:00
Michael Walter a2924a7819
Fixed typo in iteration detail page for the cpuConsumption metric (#4577)
Fixes #4435
2026-01-06 09:16:14 +01:00
Peter Hedenskog 2faf5df166 More Netlify fixes 2026-01-02 09:00:04 +01:00
Peter Hedenskog 56ce0e5e28 Back to the old version for netlify 2026-01-02 08:54:25 +01:00
Peter Hedenskog f8324c4322 Remove lockfile 2026-01-02 08:43:52 +01:00
Peter Hedenskog dba98cc0cd New version 2026-01-02 08:31:54 +01:00
Peter Hedenskog e73612e9f3 Update versions 2026-01-01 10:28:10 +01:00
Peter Hedenskog 2d06c39ceb New year 2026-01-01 10:25:11 +01:00
soulgalore 4bf4b5ed4d bump versions 2025-12-18 10:22:36 +01:00
soulgalore 90a5d33907 39.2.0 2025-12-18 10:21:40 +01:00
soulgalore 731f80c021 new release 2025-12-18 10:21:04 +01:00
Peter Hedenskog 6622a84f06
browsertime 26.2 (#4575) 2025-12-18 10:18:43 +01:00
soulgalore 10baacba6b new version 2025-12-18 09:59:41 +01:00
Peter Hedenskog dfe3cc020e bump 2025-12-17 15:59:45 +01:00
Peter Hedenskog d9dd50b57a 39.1.2 2025-12-17 15:58:57 +01:00
Peter Hedenskog f6c555e2e3 new release 2025-12-17 15:57:56 +01:00
Peter Hedenskog da483ff821
Add missing alias (#4574) 2025-12-17 15:56:28 +01:00
soulgalore 3711c21b76 bump 2025-12-15 15:26:30 +01:00
soulgalore 15aba2d47d 39.1.1 2025-12-15 15:25:47 +01:00
soulgalore 334b6c1cd2 new release 2025-12-15 15:25:26 +01:00
soulgalore cbe2665c1d bump 2025-12-15 15:23:26 +01:00
Peter Hedenskog 584648356d
Safer handling of broken URLs (#4573) 2025-12-15 15:06:07 +01:00
soulgalore 9d8b03de0c 39.1.0 2025-12-15 06:30:06 +01:00
Peter Hedenskog fbcda1903c new release 2025-12-15 06:28:29 +01:00
Peter Hedenskog 118946bdb0
Chrome 143, Edge 143 and Firefox 146 (#4572) 2025-12-15 06:27:09 +01:00
Peter Hedenskog 9398bec7af bump 2025-12-15 05:37:19 +01:00
Peter Hedenskog e04f0af4aa 39.0.0 2025-12-15 05:35:42 +01:00
Peter Hedenskog 83e6d22a6d New release 2025-12-15 05:34:42 +01:00
Peter Hedenskog 610b5bc06e Remove screenshotParams.png.compressionLevel 2025-12-11 19:20:42 +01:00
Peter Hedenskog 9344168746 bump 2025-12-11 19:07:47 +01:00
Peter Hedenskog 61768444cb
Use NodeJS 24 and Ubuntu 24.04 in the Docker container + related fixes (#4570) 2025-12-11 12:32:17 +01:00
Peter Hedenskog 2a3efa65f7 new version 2025-12-10 18:55:43 +01:00
soulgalore f5f455d0a0 new versions 2025-11-02 15:38:07 +01:00
soulgalore da65dbe47b 38.6.0 2025-11-02 15:37:10 +01:00
soulgalore ed1dd231a1 new release 2025-11-02 15:36:39 +01:00
Peter Hedenskog 29769959af
Browsertime 25.4.0 (#4566) 2025-11-02 15:34:12 +01:00
soulgalore fcf35fbfa0 new bt 2025-11-02 15:18:57 +01:00
Peter Hedenskog 4894c06607
Chrome 142 (#4565) 2025-10-30 07:21:40 +01:00
Guillermo González Lara 6c798c00e0
fix: corrects a typo in the README.md (#4564) 2025-10-28 07:36:52 +01:00
soulgalore 34d7f79a45 bump 2025-10-24 16:30:53 +02:00
soulgalore 50047fa132 38.5.2 2025-10-24 16:30:00 +02:00
soulgalore d3baa3d484 new release 2025-10-24 16:29:27 +02:00
Peter Hedenskog 2d15bdaf32
Browsertime 25.3.1 (#4562) 2025-10-24 16:14:18 +02:00
soulgalore 4ede64554d new bt 2025-10-24 15:54:43 +02:00
soulgalore 3350bb255e bump 2025-10-24 15:52:10 +02:00
soulgalore 8a87f6bea2 bump 2025-10-22 23:29:06 +02:00
soulgalore de17d25d1c bump 2025-10-21 20:53:21 +02:00
soulgalore 4d4f79040f 38.5.1 2025-10-21 20:51:43 +02:00
soulgalore 0093cb1e71 new release 2025-10-21 20:51:12 +02:00
soulgalore 12ff9830e0 new release 2025-10-18 13:07:06 +02:00
soulgalore 3c6b240e69 38.5.0 2025-10-18 13:06:14 +02:00
soulgalore 2794d84d5a new release 2025-10-18 13:05:49 +02:00
Peter Hedenskog 1eeb2804ad
Browsertime 25.3 (#4559) 2025-10-17 23:38:30 +02:00
soulgalore a10ae003c5 new bt 2025-10-17 23:23:26 +02:00
Peter Hedenskog b69b002596
Log 1.0.0 (#4558) 2025-10-16 21:34:32 +02:00
Peter Hedenskog 7377779d22 Bump version 2025-10-16 17:10:44 +02:00
Peter Hedenskog 434bc0b72f
ora 9.0 (#4557) 2025-10-16 05:21:39 +02:00
Peter Hedenskog 40e7b7e3c5
Update dependencies. (#4556) 2025-10-16 01:29:38 +02:00
Peter Hedenskog 0ad91e1911
Axe core 4.11.0 (#4555) 2025-10-15 21:48:26 +02:00
Peter Hedenskog 27d2f7e7b8
Firefox 144 (#4554) 2025-10-15 11:52:19 +02:00
soulgalore b5a82b43f7 bump 2025-10-14 08:39:43 +02:00
soulgalore 0d26511eb0 38.4.1 2025-10-14 08:38:54 +02:00
soulgalore e75f1f96bf new release 2025-10-14 08:38:34 +02:00
Peter Hedenskog dbcdc72bed Fix maxwidth size for Grafana annotations 2025-10-13 09:30:26 +02:00
Peter Hedenskog b1566ba3ce
Set max-width for images in desktop for Grafana (#4553) 2025-10-13 07:41:31 +02:00
soulgalore eb39540c6d Update to latest Grafana 12.2.0 2025-10-12 22:02:13 +02:00
soulgalore d0c775d047 new version 2025-10-12 17:07:50 +02:00
soulgalore 571a3773a8 38.4.0 2025-10-12 16:45:34 +02:00
soulgalore 3cd60c8946 new release 2025-10-12 16:45:08 +02:00
soulgalore f438c04aa6 new release 2025-10-12 16:44:46 +02:00
Peter Hedenskog d7ce5881a7
Browsertime 25.2.0 (#4552) 2025-10-12 16:20:01 +02:00
soulgalore 76b08df977 new bt 2025-10-12 16:01:01 +02:00
Peter Hedenskog b75ca9bc92 changelog: new chrome 2025-10-11 00:50:10 +02:00
Peter Hedenskog 6d0eff8991
Chrome/Edge 141 (#4551) 2025-10-10 11:53:22 +02:00
Peter Hedenskog 979cd0ce94 Update with relevant example 2025-09-22 14:25:30 +02:00
Peter Hedenskog f2a1b5b64f
FF 143, Edge 140 (#4550) 2025-09-17 23:07:57 +02:00
soulgalore 235aa54e90 new release 2025-09-07 08:33:32 +02:00
soulgalore 34b34bad42 38.3.0 2025-09-07 08:32:25 +02:00
soulgalore 479871bb69 new release 2025-09-07 08:31:53 +02:00
Peter Hedenskog 34251fec8e
Chrome 140 (#4549) 2025-09-07 08:29:18 +02:00
Peter Hedenskog 61997a1a0b Update contributing guide for AI 2025-09-05 16:37:57 +02:00
Peter Hedenskog 925c69c05c
Browsertime 25.1 (#4548) 2025-09-05 09:20:48 +02:00
Peter Hedenskog 6d1520444a new bt 2025-09-05 08:58:27 +02:00
soulgalore 63e75f63ae new version 2025-08-31 16:36:33 +02:00
soulgalore f2f9ffcb18 38.2.0 2025-08-31 16:34:55 +02:00
soulgalore dab09903d0 new release 2025-08-31 16:34:31 +02:00
Timo Tijhof b40196cf89
blog: Improve RSS feed (#4544)
* blog: Point rss discovery to canonical URL

Update discovery link to the current canonical URL
for where the blog RSS feed lives. The redirect
is kept for compatibility.

* blog: Fix broken self URL and improve title

* Fix 404 from https://www.sitespeed.io/feed/blog.xml to `https://www.sitespeed.io/feed.xml` which can confuse feed readers by updating their link but then losing the subscription to an error.
* Shorten title and start with "Sitespeed.io" so that it sorts well alongside many other blogs in a feed reader under the default suggested name.

---------

Co-authored-by: Peter Hedenskog <peter@soulgalore.com>
2025-08-21 07:52:15 +02:00
Peter Hedenskog b52f83e99b
Firefox 142 (#4545) 2025-08-20 10:31:00 +02:00
Peter Hedenskog 0de5401744
Chrome and Edge 139 (#4542) 2025-08-11 10:45:02 +02:00
Peter Hedenskog eb450201f2 38.1.2 2025-08-04 21:57:14 +02:00
Peter Hedenskog 627f393e55 new release 2025-08-04 21:56:48 +02:00
Peter Hedenskog 0a5e861ba2
Update to coach core 8.1.3 (#4541) 2025-08-04 21:48:04 +02:00
Peter Hedenskog f509f84c85 new release 2025-08-04 21:36:46 +02:00
soulgalore edd0d9ac3c new version 2025-08-01 07:32:04 +02:00
soulgalore 90507301b7 38.1.1 2025-08-01 07:31:14 +02:00
soulgalore 39c2b79dbd new release 2025-08-01 07:30:44 +02:00
Peter Hedenskog 1fd7f8b131
Coach core 8.1.2 (#4540) 2025-08-01 07:21:28 +02:00
soulgalore 039bba1a71 bump 2025-08-01 07:05:13 +02:00
soulgalore 014c437f7b bump versions 2025-07-28 20:21:17 +02:00
soulgalore 6ca37a64c3 38.1.0 2025-07-28 20:20:00 +02:00
soulgalore d6aa4f78fc new release 2025-07-28 20:19:31 +02:00
Peter Hedenskog fbbfe8528a
Firefox 141 (#4538) 2025-07-28 09:36:17 +02:00
Peter Hedenskog 50091f6da8
Fix form-data dependency (#4539) 2025-07-27 18:51:42 +02:00
soulgalore bad7a1a9eb Bump version 2025-07-16 15:58:48 +02:00
soulgalore 0789ecf45a 38.0.0 2025-07-16 15:58:05 +02:00
Peter Hedenskog c09992d760 prepare a new release 2025-07-16 15:43:10 +02:00
Peter Hedenskog d92804a648 remove portable settings 2025-07-16 15:22:38 +02:00
Peter Hedenskog 112aa324ec changelog: prepping the release 2025-07-16 15:11:20 +02:00
Peter Hedenskog 87c2d02b57
Browsertime 25 (#4536) 2025-07-16 15:09:00 +02:00
soulgalore 0b55010e8b new bt 2025-07-16 14:54:54 +02:00
Peter Hedenskog 1e195c05f6
Update dev dependencies (#4534) 2025-07-10 08:00:36 +02:00
Peter Hedenskog f270ec42a5
Update S3 client (#4533) 2025-07-09 07:15:06 +02:00
Peter Hedenskog 81e5ab8dff
Yargs 18 (#4531) 2025-07-09 06:54:19 +02:00
Peter Hedenskog a95160ec1a
Bump to NodeJS 20 (#4532) 2025-07-08 08:21:20 +02:00
soulgalore 8dcdb8a140 version bump 2025-06-30 11:33:39 +02:00
soulgalore 042ee0d53e 37.9.0 2025-06-30 11:32:32 +02:00
Peter Hedenskog ff8e182b97 new release 2025-06-30 11:31:32 +02:00
Peter Hedenskog 16cc376d1b
Bt 24.9.0 and Edge 138 (#4530) 2025-06-30 11:16:43 +02:00
Peter Hedenskog b7027a5de7 new bt 2025-06-30 10:51:56 +02:00
Peter Hedenskog bcd4bcfc22
Upgrade to Chrome 138 and Firefox 140 (#4528) 2025-06-25 05:43:28 +02:00
soulgalore bafe60ba7b bt 2025-06-22 15:26:55 +02:00
Peter Hedenskog 4959a247dc bump 2025-06-01 06:55:18 +02:00
Peter Hedenskog 659fab2ef6 37.8.0 2025-06-01 06:54:25 +02:00
Peter Hedenskog 98f500abd7
Browsertime 24.8.1 (#4525) 2025-06-01 06:54:00 +02:00
Peter Hedenskog bf57ce9db2 new release 2025-06-01 06:46:33 +02:00
Peter Hedenskog f41ee9bcd1 bump 2025-06-01 06:39:43 +02:00
Peter Hedenskog 07634de5a0
Browsertime 24.8 (#4524) 2025-05-30 17:34:30 +02:00
Peter Hedenskog 8901c0c1d8
Updated dependencies (#4523) 2025-05-30 17:23:39 +02:00
Peter Hedenskog 719e5f67ec bump 2025-05-30 17:17:28 +02:00
Emmanuel Ferdman 9e74015246
fix contributors reference (#4521)
Signed-off-by: Emmanuel Ferdman <emmanuelferdman@gmail.com>
2025-05-30 10:59:55 +02:00
Peter Hedenskog 6e02c16cdb
Edge 137 (#4522) 2025-05-30 09:24:36 +02:00
soulgalore 54b50b9e40 bump 2025-05-28 07:33:39 +02:00
soulgalore 44b44107e0 37.7.0 2025-05-28 07:32:30 +02:00
soulgalore 9d3c4bee85 changelog: new release 2025-05-28 07:31:39 +02:00
Peter Hedenskog 36a0e60eae
Chrome 137 and Firefox 139 (#4520) 2025-05-28 07:22:36 +02:00
Peter Hedenskog 5c8483a803
Skip 18, use 24 (#4519) 2025-05-26 07:08:49 +02:00
Peter Hedenskog 28706230a4
Swallow the sandbox error from Firefox (#4518) 2025-05-23 09:15:46 +02:00
soulgalore d09bdee115 bump 2025-05-13 19:09:34 +02:00
soulgalore ba2a8a6a42 37.6.0 2025-05-13 19:07:52 +02:00
soulgalore dbc4bace8b new release 2025-05-13 19:07:19 +02:00
Peter Hedenskog 200aa23a0f
Upgrade to latest Mac OS and Windows for tests (#4496) 2025-05-13 09:25:42 +02:00
Peter Hedenskog 00d8ac046c
Browsertime 24.7 and Edge 136 (#4514)
* browsertime 24.7 and Edge 136

* hepp
2025-05-13 08:34:01 +02:00
soulgalore dd80c197c0 new bt 2025-05-13 07:22:22 +02:00
soulgalore f47fdd3670 bump 2025-05-05 15:12:01 +02:00
soulgalore 92f6352c9b 37.5.1 2025-05-05 15:10:20 +02:00
soulgalore 9bdaff55b8 new release 2025-05-05 15:09:51 +02:00
Peter Hedenskog 90e53e8212
Browsertime 24.6.0 (#4511) 2025-05-05 08:52:28 +02:00
soulgalore 7c934de739 bt 2025-05-05 07:05:35 +02:00
Peter Hedenskog 79eda958bb
Chromium 136 (#4510) 2025-05-05 07:03:10 +02:00
soulgalore bbb8ee07ad bump 2025-04-30 07:03:09 +02:00
soulgalore eee9b31196 37.5.0 2025-04-30 07:02:18 +02:00
soulgalore 604acdbd32 new release 2025-04-30 07:01:50 +02:00
Peter Hedenskog d7ea54fca0
Firefox 138 and Chrome 136 (#4507) 2025-04-30 06:33:51 +02:00
Peter Hedenskog 57da37f561
New browsertime (#4506) 2025-04-30 06:17:03 +02:00
soulgalore e9af830bb8 new bt 2025-04-30 06:06:25 +02:00
soulgalore 5780d549eb new release 2025-04-19 13:20:55 +02:00
soulgalore 2f3a07a13d 37.4.2 2025-04-19 13:18:53 +02:00
soulgalore f7e8840aff changelog: new release 2025-04-19 13:17:45 +02:00
Peter Hedenskog cc146385d8
s3: make sure Expires always is a Date. (#4503)
https://github.com/sitespeedio/sitespeed.io/issues/4501
2025-04-18 21:45:24 +02:00
Peter Hedenskog bff97dcff8
Run test on latest (#4502) 2025-04-18 21:34:00 +02:00
Peter Hedenskog 24066f6152
Exclude closing script tags in HAR files (#4500) 2025-04-17 13:02:20 +02:00
Peter Hedenskog 78bfa20635 docs: link to GPSI key 2025-04-14 16:29:18 +02:00
soulgalore 2940fd461d bump 2025-04-10 19:04:13 +02:00
soulgalore 43384b89e1 37.4.1 2025-04-10 19:03:04 +02:00
soulgalore 4752828762 fix release 2025-04-10 19:02:22 +02:00
Peter Hedenskog 60f3646aef
Catch if one page is broken https://github.com/sitespeedio/sitespeed.io/issues/4124 (#4495) 2025-04-10 15:29:38 +02:00
soulgalore 2a9927b482 new release 2025-04-09 07:53:43 +02:00
soulgalore 6e9ca32873 37.4.0 2025-04-09 07:52:40 +02:00
soulgalore 2598654012 new release 2025-04-09 07:51:46 +02:00
Peter Hedenskog ee36f837f1
Edge 135 (#4494) 2025-04-07 15:05:18 +02:00
Peter Hedenskog eae71c82fa
Update Chrome and Firefox (#4493) 2025-04-02 09:56:13 +02:00
soulgalore 831c2fe48a bump versions 2025-03-21 12:53:58 +01:00
soulgalore c6f5509521 37.3.2 2025-03-21 12:53:07 +01:00
soulgalore dd03855b72 new release 2025-03-21 12:52:39 +01:00
Peter Hedenskog 79145d418c
Browsertime 24.5.2 (#4490) 2025-03-21 07:48:49 +01:00
Peter Hedenskog c806d3374b bt 2025-03-20 23:14:08 +01:00
Peter Hedenskog 30c76c572a
Use NodeJS 22 (#4489) 2025-03-20 14:25:27 +01:00
soulgalore 86c2e0cb2b bump 2025-03-20 07:49:11 +01:00
soulgalore d46b241cd7 37.3.1 2025-03-20 07:47:18 +01:00
Peter Hedenskog 626bdefddc changelog: new release 2025-03-20 07:40:40 +01:00
Peter Hedenskog b1a9d98095
Be safe when checking for InfluxDB (#4487) 2025-03-20 06:25:03 +01:00
Peter Hedenskog 759e65646a
new bt (#4484) 2025-03-18 21:07:05 +01:00
soulgalore dfd0db12dd new bt 2025-03-18 20:00:59 +01:00
Peter Hedenskog 4f0705250f
Updated CRUX dashboard with the new data (#4482) 2025-03-16 08:54:13 +01:00
soulgalore 19413f6f6d bump 2025-03-13 16:33:43 +01:00
soulgalore 7e4ddb5d8b 37.3.0 2025-03-13 16:32:51 +01:00
soulgalore 13afa9267b new release 2025-03-13 16:32:28 +01:00
Peter Hedenskog 4e5af5aff8
Browsertime 24.5.0 (#4480) 2025-03-13 16:26:56 +01:00
soulgalore 8e48f7104e new bt 2025-03-13 16:13:22 +01:00
soulgalore 23a9ea5f76 bump 2025-03-12 21:13:12 +01:00
soulgalore aebac68dfb 37.2.0 2025-03-12 21:12:07 +01:00
soulgalore 96b4f88756 New release 2025-03-12 21:11:36 +01:00
Peter Hedenskog 657e7eb434
Browsertime 24.4.0 (#4478) 2025-03-11 20:52:49 +01:00
soulgalore b45f19b498 new bt 2025-03-11 19:34:09 +01:00
soulgalore 93a25eab26 bump version 2025-03-11 13:55:37 +01:00
soulgalore f830eecfcc 37.1.2 2025-03-11 13:54:54 +01:00
soulgalore 1f7249dc54 new release 2025-03-11 13:54:28 +01:00
Peter Hedenskog dec8a89c82
Set the filename as HTML name instead of full path for scripting (#4477) 2025-03-11 09:06:32 +01:00
soulgalore dcc380ef9f bump 2025-03-10 11:46:22 +01:00
soulgalore 373d349c8f 37.1.1 2025-03-10 11:45:33 +01:00
soulgalore 1d89636ffa new release 2025-03-10 11:45:06 +01:00
soulgalore 5f83d4d647 bump 2025-03-10 11:43:13 +01:00
Peter Hedenskog b4fb56269d
Catch failure that happens if no URL works (#4474) 2025-03-10 11:16:26 +01:00
Peter Hedenskog 833e880214
Send browsertime errors as early as possible (and fix some missing data) (#4475) 2025-03-10 10:47:22 +01:00
soulgalore 85bddc9835 37.1.0 2025-03-08 16:37:21 +01:00
soulgalore 74248d91c2 new release 2025-03-08 16:36:38 +01:00
Peter Hedenskog e644fac99b
Simplify logic https://github.com/sitespeedio/sitespeed.io/issues/4471 (#4472)
* Simplify logic https://github.com/sitespeedio/sitespeed.io/issues/4471

* Swallow and log errors
2025-03-08 15:17:40 +01:00
Peter Hedenskog 1c6a02f67b Edge 134 2025-03-07 11:27:46 +01:00
Peter Hedenskog 51b7a158d9
Revert "Revert "Chrome 134, Firefox 136, Edge 133 (#4467)" (#4468)" (#4470)
This reverts commit 9766200b1b.
2025-03-07 09:10:34 +01:00
Peter Hedenskog 66d8fdef87 bump 2025-03-07 09:09:49 +01:00
Peter Hedenskog 97c34e370a 37.0.4 2025-03-07 09:09:01 +01:00
Peter Hedenskog 1416245a04 new release 2025-03-07 09:08:34 +01:00
Peter Hedenskog 2f9c23dfe1
Fix annotations message for InfluxDB (#4469) 2025-03-07 09:06:28 +01:00
Peter Hedenskog 9766200b1b
Revert "Chrome 134, Firefox 136, Edge 133 (#4467)" (#4468)
This reverts commit f9d489a738.
2025-03-07 08:53:53 +01:00
Peter Hedenskog f9d489a738
Chrome 134, Firefox 136, Edge 133 (#4467) 2025-03-06 06:31:10 +01:00
soulgalore 0f8f970bb4 bump 2025-03-06 05:56:00 +01:00
soulgalore d6fbe6e844 37.0.3 2025-03-06 05:55:22 +01:00
soulgalore 68e1c83fc4 new release 2025-03-06 05:54:58 +01:00
Peter Hedenskog dd87bdbf60
Another plugin help fix (#4466) 2025-03-06 05:52:57 +01:00
soulgalore 59cc0de083 bump 2025-03-05 21:09:22 +01:00
soulgalore 726deb63c6 37.0.2 2025-03-05 21:08:40 +01:00
soulgalore f1501abb9c new release 2025-03-05 21:08:05 +01:00
Peter Hedenskog e33e635f89
Smarter fix to get the help from the plugin (#4465) 2025-03-05 21:01:41 +01:00
soulgalore 0ce768d2a4 bump 2025-03-05 17:58:43 +01:00
soulgalore 203d4a3372 37.0.1 2025-03-05 17:57:57 +01:00
soulgalore f052a12449 new release 2025-03-05 17:57:34 +01:00
Peter Hedenskog 201fb8b62b
Fix loading plugin help (#4463) 2025-03-05 17:55:58 +01:00
soulgalore 9b8b40c570 bump 2025-03-05 16:37:36 +01:00
soulgalore 7a6ad58fe7 37.0.0 2025-03-05 16:36:27 +01:00
soulgalore d43e2f5f3e new release 2025-03-05 16:36:02 +01:00
Peter Hedenskog dbf9d2fdfd changelog: more info 2025-03-04 18:52:29 +01:00
Peter Hedenskog 70f87a7fa7
Include InfluxDB in the +1 container (#4460) 2025-03-04 07:36:16 +01:00
Peter Hedenskog 39ff8259dc Recommend using a configuration JSON file.
https://github.com/sitespeedio/sitespeed.io/issues/4458
2025-03-04 07:09:58 +01:00
Peter Hedenskog 28093a4268
Add support for --logLevel (#4459) 2025-03-03 20:28:34 +01:00
soulgalore 4e376b9798 bump 2025-03-03 19:02:19 +01:00
Peter Hedenskog d3058dfd64
Make sure sitespeed.io do not fail if a test fails. (#4457)
https://github.com/sitespeedio/sitespeed.io/issues/4453
https://github.com/sitespeedio/sitespeed.io/pull/4454
2025-03-03 18:00:28 +01:00
Peter Hedenskog c1920e615d Prepare for new release 2025-03-03 07:24:16 +01:00
Peter Hedenskog 617d7d2f1d
Also try to load cli options locally (#4455) 2025-03-02 18:47:07 +01:00
Peter Hedenskog 2cd75d772c
Add support for --help from globally installed plugins (as long as you include the plugin in add). (#4450)
* Add support for --help from globally installed plugins.

* Disable version and help from first parsing
2025-03-01 22:03:30 +01:00
Peter Hedenskog e78200da3e
Move InfluxDB to it own standalone plugin (#4451) 2025-02-28 15:22:28 +01:00
Peter Hedenskog b0a98cc973
Catch if plugins aren't found globally (#4452) 2025-02-28 04:24:17 +01:00
Peter Hedenskog 06fb437625
Replace the junit-report-builder package (#4448) 2025-02-26 15:05:44 +01:00
Peter Hedenskog 2cc6fdf820
Remove Tape dependencies. (#4447)
This remove the Tape dependency and change how we write Tap:
* Always write both success and failures.
* Skip the error trace since it do not add any extra information.
2025-02-26 14:49:31 +01:00
Peter Hedenskog c592349bc3 docs: remove webpagetest budget example 2025-02-24 14:30:23 +01:00
Peter Hedenskog c3d53d6482 Try to fix build on Docker.
https://github.com/actions/runner-images/issues/11471#issuecomment-2663514074
2025-02-18 07:29:53 +01:00
Peter Hedenskog 6403cefb82 docs: update 2025-02-18 05:42:31 +01:00
soulgalore 671305f470 Use 22.04 2025-02-17 22:42:16 +01:00
soulgalore f824c1fb2e bump 2025-02-17 22:41:27 +01:00
soulgalore b4fbaa83e4 36.4.1 2025-02-17 22:36:16 +01:00
soulgalore 3d99280237 new release 2025-02-17 22:35:35 +01:00
Peter Hedenskog 37a30ec0e0
Ubuntu latest (24.04) has problems building ARM Docker (#4439) 2025-02-17 22:04:34 +01:00
soulgalore eaac8d2d32 docs: update bt 2025-02-14 07:34:20 +01:00
soulgalore c32b32a419 bump 2025-02-14 07:19:05 +01:00
soulgalore 75be28bacd 36.4.0 2025-02-14 07:18:10 +01:00
soulgalore d8b9f0cd94 changelog: new release 2025-02-14 07:17:47 +01:00
Peter Hedenskog bd73ce386e
Include LCP resource type fraction in TSDB data (#4438) 2025-02-14 06:25:16 +01:00
Peter Hedenskog 8a9af743f1
Extra CRUX LCP information (#4437) 2025-02-14 05:55:06 +01:00
Peter Hedenskog 6056a1d3b4
crux: include crux histograms (#4436) 2025-02-13 22:24:35 +01:00
soulgalore 770b181e18 versions 2025-02-13 19:27:12 +01:00
soulgalore 6bb6a3d5d7 bump 2025-02-08 16:38:52 +01:00
soulgalore f00b4458bb 36.3.0 2025-02-08 16:37:52 +01:00
soulgalore 5942906bd2 new release 2025-02-08 16:37:23 +01:00
soulgalore c6723b259a bump 2025-02-08 16:33:09 +01:00
Peter Hedenskog c49e50a110
Log missing green domains as info (#4433) 2025-02-07 07:17:23 +01:00
Peter Hedenskog d57a491344
browsertime 24.2.0 (#4432) 2025-02-06 13:28:38 +01:00
soulgalore 90984b1712 bump 2025-02-05 15:18:33 +01:00
Peter Hedenskog 65e3751a9f
Guard against no pages in the HAR (#4430) 2025-02-05 10:04:54 +01:00
Peter Hedenskog 5abff0c5ae
Chrome 133 and Firefox 135 (#4431) 2025-02-05 10:04:25 +01:00
Peter Hedenskog 2edc0758aa bump 2025-02-03 09:20:22 +01:00
Peter Hedenskog 984d30b5a6 36.2.5 2025-02-03 09:19:37 +01:00
Peter Hedenskog f71c799fd3 changelog: new release 2025-02-03 09:19:17 +01:00
Peter Hedenskog 43a318885f
Fix Android API check (#4428) 2025-02-03 09:07:52 +01:00
Peter Hedenskog 180b893e06 new version 2025-02-02 18:41:03 +01:00
Peter Hedenskog 28e2b4792f 36.2.4 2025-02-02 18:39:49 +01:00
Peter Hedenskog db55bbb44c changelog: new release 2025-02-02 18:39:06 +01:00
Peter Hedenskog 8bb5faa79b changelog: better language 2025-02-02 18:37:22 +01:00
Peter Hedenskog 4c28da9288 changelog: api fix 2025-02-02 14:28:46 +01:00
Peter Hedenskog f48e9723a7
Fix: the API used android or android.enabled for Android configuration (#4427) 2025-02-02 14:24:31 +01:00
Peter Hedenskog 4e6cf72010 changelog: android fix 2025-02-02 14:07:05 +01:00
Peter Hedenskog be83456da4
Fix broken --android parsing. (#4422)
* Fix broken --android parsing.

After this --android will work but will not be showed as an alias.
The problem was that we had issues with the android configuration
object becoming an array instead of an object.
2025-02-02 14:04:16 +01:00
Peter Hedenskog f19fb295de changelog: windows fix 2025-02-02 09:59:11 +01:00
Peter Hedenskog e0d004beec
Fix the "new" breaking of loading of plugins on Windows GitHub actions. (#4426) 2025-02-02 09:55:49 +01:00
Peter Hedenskog 8af2110858
Make sure we try/catch everything and log the root cause (#4424) 2025-01-31 17:23:37 +01:00
soulgalore 3f15b9b942 bump 2025-01-30 14:45:04 +01:00
soulgalore 02c3e77634 bump 2025-01-30 14:41:37 +01:00
soulgalore a3846d2f1e 36.2.3 2025-01-30 14:40:04 +01:00
soulgalore 3dee3821ae new release 2025-01-30 14:39:34 +01:00
soulgalore 35e4975fdc new versions 2025-01-30 14:38:22 +01:00
Peter Hedenskog d9a0fbf4c8
Handle missing settings (#4420) 2025-01-29 18:35:24 +01:00
soulgalore 49ba02930d bump versions 2025-01-29 07:33:29 +01:00
soulgalore 4ae6d442ca 36.2.2 2025-01-29 07:32:29 +01:00
soulgalore e82f964d0c changelog: new release 2025-01-29 07:32:02 +01:00
Peter Hedenskog cc060b7e0c
new bt (#4419) 2025-01-29 07:29:11 +01:00
soulgalore ea2e4aa0e3 new bt 2025-01-29 07:22:37 +01:00
Peter Hedenskog 6ab121e00e
sitespeed.io log 0.2.6 (#4418) 2025-01-28 23:02:36 +01:00
Peter Hedenskog 27d5dcb724
Moar fixes for runtime settings (#4417) 2025-01-28 11:06:18 +01:00
soulgalore 74c2f6f59a bump 2025-01-28 07:56:41 +01:00
soulgalore 684161f25c 36.2.1 2025-01-28 07:55:48 +01:00
soulgalore ad71b5b139 new release 2025-01-28 07:55:26 +01:00
soulgalore c7b830b2f2 new versions 2025-01-28 07:54:13 +01:00
Peter Hedenskog b6e2a3d588
fix: broken settings check and show profile runs (#4416) 2025-01-28 07:53:20 +01:00
soulgalore 2d21d11b7c 36.2.0 2025-01-27 19:00:05 +01:00
soulgalore 4f8349b1bb changelog: new release 2025-01-27 16:30:30 +01:00
soulgalore 5169f16b39 new version 2025-01-27 16:18:03 +01:00
Peter Hedenskog fb6164619b
Show rooted and gnirehtet corrected (#4415) 2025-01-27 15:42:00 +01:00
Peter Hedenskog 4ca89b0c21
New bt and display more settings (#4414)
* New bt and display more settings

* fix
2025-01-27 10:23:57 +01:00
soulgalore 0367ab409a bump versions 2025-01-27 07:34:11 +01:00
soulgalore 5c94968e8a versions 2025-01-25 16:10:53 +01:00
soulgalore f3403cddfc 36.1.0 2025-01-25 06:17:16 +01:00
soulgalore 4f8108a96f new release 2025-01-25 06:16:43 +01:00
Peter Hedenskog 5b35a1e4f7
Display more LCP information (#4413) 2025-01-24 08:38:57 +01:00
Peter Hedenskog 5b31dec5a5
tune image size (#4411) 2025-01-24 08:19:50 +01:00
Peter Hedenskog 8f8247a01a
Display if gnirehtet is used (#4412) 2025-01-24 08:19:23 +01:00
soulgalore 9bc75c9f8a bumpe 2025-01-23 08:38:42 +01:00
113 changed files with 14553 additions and 11535 deletions

View File

@ -4,6 +4,34 @@ Sitespeed.io continues to evolve thanks to people who contributes, so please ple
## Making changes
If you want help out, that's great! Before taking the time to code something big, feel free to open an issue first proposing your idea to other contributors, that way you can get feedback on the idea before taking time to write precious code.
### AI-Assisted Contributions
When using AI tools like ChatGPT to assist with development, please a) disclose it in your commits and pull requests.
#### Commits
When writing a commit message for a change that was assisted by an AI, please add the `AI-assisted-by:` trailer to the commit message body.
**Example:**
```
Add Cumulative Layout Shift metric to the summary page
Add the Cumulative Layout Shift (CLS) introduced by Google on
the summary page. Show both median and p75.
AI-assisted-by: ChatGPT
```
#### Pull Requests
When creating a pull request that includes AI-assisted work, please mention it in the pull request description.
**Example:**
> This pull request implements Cumulative Layout Shift with assistance from ChatGPT.
## Add a defect
Please make sure you run the [latest version](https://www.npmjs.com/package/sitespeed.io) of sitespeed.io. Then check the [defect/bug list](https://github.com/sitespeedio/sitespeed.io/issues?labels=bug&page=1&state=open) to make sure that it hasn't been filed yet.

View File

@ -5,7 +5,7 @@ on:
- main
jobs:
docker:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
if: ${{ !contains(github.event.head_commit.message, 'docs:') }}
steps:
-

View File

@ -5,7 +5,7 @@ on:
- 'v*.*.*'
jobs:
docker:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04
steps:
-
name: Checkout
@ -13,6 +13,8 @@ jobs:
-
name: Set up QEMU
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:qemu-v7.0.0-28
-
name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

View File

@ -15,7 +15,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version: '22.x'
- name: Install sitespeed.io
run: npm ci
- name: Run tests with CruX

View File

@ -7,7 +7,7 @@ on:
jobs:
build:
name: Build
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
if: ${{ !contains(github.event.head_commit.message, 'docs:') }}
steps:
- name: Checkout code

View File

@ -15,7 +15,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version: '22.x'
- name: Install sitespeed.io
run: npm ci
- name: Install Chrome
@ -70,10 +70,6 @@ jobs:
run: bin/sitespeed.js http://127.0.0.1:3001/simple/ -n 1 --graphite.host 127.0.0.1 --xvfb
- name: Run test without a CLI
run: xvfb-run node test/runWithoutCli.js
- name: Run test with Influx 1.8
run: bin/sitespeed.js http://127.0.0.1:3001/simple/ -n 1 --influxdb.host 127.0.0.1 --xvfb --logToFile --resultBaseUrl https://result.sitespeed.io --influxdb.annotationScreenshot=true
- name: Run test with Influx 2.6.1
run: bin/sitespeed.js http://127.0.0.1:3001/simple/ -n 1 --influxdb.host 127.0.0.1 --influxdb.port 8087 --influxdb.version 2 --influxdb.organisation sitespeed --influxdb.token sitespeed --xvfb --resultBaseUrl https://result.sitespeed.io --influxdb.annotationScreenshot=true
- name: Run Chrome test with config
run: node bin/sitespeed.js --config test/exampleConfig.json http://127.0.0.1:3001/simple/ --xvfb
- name: Run Chrome test using compare plugin

View File

@ -8,14 +8,14 @@ on:
- main
jobs:
build:
runs-on: macos-latest
runs-on: macos-15
if: ${{ !contains(github.event.head_commit.message, 'docs:') }}
steps:
- uses: actions/checkout@v4
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version: '22.x'
- name: Install dependencies
run: |
sudo safaridriver --enable

View File

@ -12,7 +12,7 @@ jobs:
if: ${{ !contains(github.event.head_commit.message, 'docs:') }}
strategy:
matrix:
node-version: [18.x, 20.x, 22.x]
node-version: [20.x, 22.x, 24.x]
steps:
- uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}

View File

@ -15,7 +15,7 @@ jobs:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version: '22.x'
- name: Install sitespeed.io
run: npm ci
- name: Install Chrome

View File

@ -8,7 +8,7 @@ on:
- main
jobs:
build:
runs-on: windows-latest
runs-on: windows-2025
if: ${{ !contains(github.event.head_commit.message, 'docs:') }}
steps:
- uses: actions/checkout@v4

View File

@ -8,13 +8,13 @@ on:
- main
jobs:
build:
runs-on: windows-latest
runs-on: windows-2025
if: ${{ !contains(github.event.head_commit.message, 'docs:') }}
steps:
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
node-version: '22.x'
- name: Install sitespeed.io
run: npm install sitespeed.io -g
shell: bash

View File

@ -1,5 +1,275 @@
# CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
## 39.3.1 - 2026-01-11
### Fixed
* There where something broken in Browsertime 26.3.0 together with the new bidi-har 0.0.20 for Firefox so I reverted to 0.0.18 until its been fixed with Browsertime/bidi-har [#4579](https://github.com/sitespeedio/sitespeed.io/pull/4579).
## 39.3.0 - 2026-01-10
### Added
* Updated to Browsertime 26.3 with and updated version of bidi-har that makes it possible to get response bodies in the HAR file for Firefox [#4578](https://github.com/sitespeedio/sitespeed.io/pull/4578).
### Fixed
* Fixed typo in iteration detail page for the cpuConsumption metric, thank you [Michael Walter](https://github.com/byte55) for PR [#4577](https://github.com/sitespeedio/sitespeed.io/pull/4577).
## 39.2.0 - 2025-12-18
### Added
* Updated to Browsertime 26.2 with latest Chromedriver and Edgedriver and a small XVFB fix [#4575](https://github.com/sitespeedio/sitespeed.io/pull/4575).
## 39.1.2 - 2025-12-17
### Fixed
* Fix a bug introduced in 39.0.0 where alias was missing when creating some file structure [#4574](https://github.com/sitespeedio/sitespeed.io/pull/4574).
## 39.1.1 - 2025-12-16
### Fixed
* Safer handling for broken URLs. This logs the actual root cause [#4573](https://github.com/sitespeedio/sitespeed.io/pull/4573).
## 39.1.0 - 2025-12-15
### Added
* Upgrade the Docker container: Chrome and Edge 143, Firefox 146 [#4572](https://github.com/sitespeedio/sitespeed.io/pull/4572).
## 39.0.0 - 2025-12-15
### Breaking
* We removed support for setting the compression level for png screenshots, see the added section why.
### Added
* Upgrade to support NodeJS 24 without warnings, include NodeJS 24 in the Docker container, and base the Docker container on Ubuntu 24.04. To make this work I needed to upgrade the Jimp library and then we lost the settings for png screenshots `--browsertime.screenshotParams.png.compressionLevel` [#4570](https://github.com/sitespeedio/sitespeed.io/pull/4570).
## 38.6.0 - 2025-11-02
### Added
* Browsertime 25.4.0 [#4566](https://github.com/sitespeedio/sitespeed.io/pull/4566).
* Chrome 142 [#4565](https://github.com/sitespeedio/sitespeed.io/pull/4565).
## 38.5.2 - 2025-10-24
### Fixed
* Upgrade to [Browsetime 25.3.1](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2531---2025-10-24) [#4562](https://github.com/sitespeedio/sitespeed.io/pull/4562).
## 38.5.1 - 2025-10-21
### Fixed
* The +1 container has a updated configuration for the GPSI plugin to remove the PWA category. Thank you [ThimoCode](https://github.com/ThimoCode) for PR [#58](https://github.com/sitespeedio/plugin-gpsi/pull/58).
## 38.5.0 - 2025-10-18
### Added
* Updated the Docker container to use Firefox 144 [#4554](https://github.com/sitespeedio/sitespeed.io/pull/4554).
* Added Browsertime 25.3 [#4559](https://github.com/sitespeedio/sitespeed.io/pull/4559) with support for removing some headers in the HAR file (more info about that soon).
### Fixed
* Updated dev dependencies [#4556](https://github.com/sitespeedio/sitespeed.io/pull/4556).
* Updated to Axe-core 4.11.0 [#4555)](https://github.com/sitespeedio/sitespeed.io/pull/4555).
* Updated Ora dependency [#4557](https://github.com/sitespeedio/sitespeed.io/pull/4557).
* Updated the log dependency [#4558](https://github.com/sitespeedio/sitespeed.io/pull/4558). The new version remove the color for error logs.
## 38.4.1 - 2025-10-14
### Fixed
* Set max width 400 pixel of the screenshot showing in the Grafana annotation (Grafana changed how they render the annotation long time ago) [#4553](https://github.com/sitespeedio/sitespeed.io/pull/4553) and [the fix](https://github.com/sitespeedio/sitespeed.io/commit/dbcdc72bedd0a2be5c9031675783fe3f3b73f288).
## 38.4.0 - 2025-10-12
### Added
* Upgraded to Chrome/Edge 141 [#4551](https://github.com/sitespeedio/sitespeed.io/pull/4551).
* +1 container users will get Lighthouse 13.
* Browsertime 25.2 with latest Chrome/Edgedrivers [#4552](https://github.com/sitespeedio/sitespeed.io/pull/4552).
## 38.3.0 - 2025-09-07
### Added
* Upgraded to Chrome/Chromedriver 140 [#4549](https://github.com/sitespeedio/sitespeed.io/pull/4549) and [#4548](https://github.com/sitespeedio/sitespeed.io/pull/4548).
## 38.2.0 - 2025-08-31
### Added
* Upgraded to Firefox 142 [#4545](https://github.com/sitespeedio/sitespeed.io/pull/4545) and Chrome/Edge 139 in the Docker container [#4552](https://github.com/sitespeedio/sitespeed.io/pull/4542).
## 38.1.2 - 2025-08-04
### Fixed
* Upgraded to coach core 8.1.3 [#4551](https://github.com/sitespeedio/sitespeed.io/pull/4541) (there was a bug introduced in 8.1.2).
## 38.1.1 - 2025-08-01
### Fixed
* Upgraded to coach core 8.1.2 [#4540](https://github.com/sitespeedio/sitespeed.io/pull/4540).
## 38.1.0 - 2025-07-28
### Added
* Firefox 141 in the Docker container [#4538](https://github.com/sitespeedio/sitespeed.io/pull/4538).
### Fixed
* Bumped form-data dependency for security warnings [#4539](https://github.com/sitespeedio/sitespeed.io/pull/4539).
## 38.0.0 - 2025-06-30
### Breaking
* Support only NodeJS 20 or later for sitespeed.io [#4532](https://github.com/sitespeedio/sitespeed.io/pull/4532).
### Added
* Upgrade to Yargs 18 [#4531](https://github.com/sitespeedio/sitespeed.io/pull/4531).
### Fixed
* Update S3 client [#4533](https://github.com/sitespeedio/sitespeed.io/pull/4533).
* Update developer dependencies [#4534](https://github.com/sitespeedio/sitespeed.io/pull/4534).
* Updated to [Browsertime 25](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2500---2025-07-16) [#4536](https://github.com/sitespeedio/sitespeed.io/pull/4536) with NodeJS to 20 and a fix for Edgedriver download.
## 37.9.0 - 2025-06-30
### Added
* Updated Docker containers to include Chrome/Edge 138, Firefox 140. Edgedriver and Chromedriver 138. Browsertime 24.9.0. [#452](https://github.com/sitespeedio/sitespeed.io/pull/4528) and [#4530](https://github.com/sitespeedio/sitespeed.io/pull/4530).
## 37.8.0 - 2025-06-01
### Added
* Updated to Browsertime 24.8.0 and then 24.8.1 with Chromedriver 137, Edgedriver 137 and [a couple of fixes and new commands](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2480---2025-05-30) in [4524](https://github.com/sitespeedio/sitespeed.io/pull/4524) and [#4525](https://github.com/sitespeedio/sitespeed.io/pull/4525).
* Updated to Edge 137 in the Docker container [#4522](https://github.com/sitespeedio/sitespeed.io/pull/4522).
### Fixed
* Updated dependencies: node-scp, ora, dayjs, axe-core, @slack/webhook, @google-cloud/storage, @aws-sdk/client-s3 [#4523](https://github.com/sitespeedio/sitespeed.io/pull/4523).
## 37.7.0 - 2025-05-28
### Added
* Added Chrome 137 and Firefox 139 in the Docker container [#4520](https://github.com/sitespeedio/sitespeed.io/pull/4520).
## 37.6.0 - 2025-05-13
### Added
* Added Edge 136, Edgedriver and Chromedriver 136 by updating to [Browsertime 24.7.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#browsertime-changelog-we-do-semantic-versioning) in [#4514](https://github.com/sitespeedio/sitespeed.io/pull/4514).
## 37.5.1 - 2025-05-05
### Fixed
* Updated to [Browsertime 24.6.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2460---2025-05-05) that fixes a problem using --preURL and --pageCompleteCheckNetworkIdle.
## 37.5.0 - 2025-04-30
### Added
* Upgraded to Firefox 138 and Chrome 136 in the Docker container [#4507](https://github.com/sitespeedio/sitespeed.io/pull/4507).
### Fixed
* Updated to latest Browsertime with a fix for Firefox 138 [#4506](https://github.com/sitespeedio/sitespeed.io/pull/4506).
## 37.4.2 - 2025-04-19
### Fixed
* s3: If you add Expires to your object using the API, it was broken since the upgrade to v3. This fix change so we allways use a Date when setting Expires [#4503](https://github.com/sitespeedio/sitespeed.io/pull/4503).
* Make sure that HAR files included in the HTML excludes closing script tags in the body of an response [#4500](https://github.com/sitespeedio/sitespeed.io/pull/4500).
## 37.4.1 - 2025-04-10
### Fixed
* If testing one page fails, make sure that we still can genereate the HTML [#4495](https://github.com/sitespeedio/sitespeed.io/pull/4495).
## 37.4.0 - 2025-04-09
### Added
* Updated Docker container with Firefox 137, Chrome 135 and Edge 135 [#4494](https://github.com/sitespeedio/sitespeed.io/pull/4494).
## 37.3.2 - 2025-03-21
### Fixed
* Updated to Browsertime 24.5.2 with a fix for getting delta FCP (FCP-TTFB).
## 37.3.1 - 2025-03-20
### Fixed
* Updated to [Browsertime 24.5.1](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2451---2025-03-18) with a fix for using `--browsertime.userTimingBlockList`.
* Safer check for InfluxDB [#4487](https://github.com/sitespeedio/sitespeed.io/pull/4487) that fixes [#4485](https://github.com/sitespeedio/sitespeed.io/issues/4485).
## 37.3.0 - 2025-03-13
### Added
* Updated to [Browsertime 24.5.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2450---2025-03-13) that updates to Geckodriver 0.36.0 (for Firefox) and fixes a bug for running test on Safari on iOS (reported in [#4479](https://github.com/sitespeedio/sitespeed.io/issues/4479)) fixed in [#4480](https://github.com/sitespeedio/sitespeed.io/pull/4480).
## 37.2.0 - 2025-03-12
### Added
* Updated to [Browsertime 24.4.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2440---2025-03-11) [#4478](https://github.com/sitespeedio/sitespeed.io/pull/4478).
## 37.1.2 - 2025-03-11
### Fixed
* Show just the filename instead of the full path to the file in the HTML [#4477](https://github.com/sitespeedio/sitespeed.io/pull/4477).
## 37.1.1 - 2025-03-10
### Fixed
* Multiple fixes to better handle if a user journey scripting fails [#4474](https://github.com/sitespeedio/sitespeed.io/pull/4474) and [#4475](https://github.com/sitespeedio/sitespeed.io/pull/4475).
## 37.1.0 - 2025-03-08
### Fixed
* Simplified logic for uploading files to S3 since we have reports that it do not work 100% [#4472](https://github.com/sitespeedio/sitespeed.io/pull/4472).
### Added
* The Docker container now contains Chrome 134.0, Firefox 136 and Edge 134.0.
## 37.0.4 - 2025-03-07
### Fixed
* Sending annotations to Graphite failed because of InfluxDB check [#4469](https://github.com/sitespeedio/sitespeed.io/pull/4469).
## 37.0.3 - 2025-03-06
### Fixed
* Hopefully the last fix for getting --help to work with global plugins [#4466](https://github.com/sitespeedio/sitespeed.io/pull/4466).
## 37.0.2 - 2025-03-05
### Fixed
* Another fix for using --help and load plugins correctly [#4465](https://github.com/sitespeedio/sitespeed.io/pull/4465).
## 37.0.1 - 2025-03-05
### Fixed
* There was a bug in the InfluxDB plugin and loading the cli parameters failed [#4463](https://github.com/sitespeedio/sitespeed.io/pull/4463).
## 37.0.0 - 2025-03-05
### Breaking change
* If you are a InfluxDB user the InfluxDB functionality been moved to a standalone plugin [plugin-influxdb](https://github.com/sitespeedio/plugin-influxdb). This means if that sitespeed.io using NodeJS and the default Docker container will not include the InfluxDB plugin. The +1 container will still include the plugin but you need to add it with `--plugins.add @sitespeed.io/plugin-influxdb` for it to be able to run.
The InfluxDB plugin has never gotten the love it deserves, moving it out, it means that you easier can do your own modification and get the data the way that you need.
### Added
* Support for getting CLI options from plugins as long as you use `--help --plugins.add`. This is start to separate CLI options from the monsterous CLI file and instead have them in each plugin [#4450](https://github.com/sitespeedio/sitespeed.io/pull/4450), [#4452](https://github.com/sitespeedio/sitespeed.io/pull/4452) [#4455](https://github.com/sitespeedio/sitespeed.io/pull/4455).
* You can now set the exact minimum log level using `--logLevel`[#4459](https://github.com/sitespeedio/sitespeed.io/pull/4459).
### Fixed
* Replace the junit-report-builder package [#4448](https://github.com/sitespeedio/sitespeed.io/pull/4448).
* Remove Tape dependencies [#4447](https://github.com/sitespeedio/sitespeed.io/pull/4447).
* Catch if the browser fails to open a broken page [#4457](https://github.com/sitespeedio/sitespeed.io/pull/4457).
## 36.4.1 - 2025-02-17
### Fixed
* The Docker container for last release was never push. The reason is that our GitHub action that do the release automatically was upgraded to Ubuntu 24 and there its a problem building containers for ARM. With this release we use Ubuntu 22 instead.
## 36.4.0 - 2025-02-14
### Added
* Crux update: Get fractions for RTT [#4436](https://github.com/sitespeedio/sitespeed.io/pull/4436), that extra LCP information [#4437](https://github.com/sitespeedio/sitespeed.io/pull/4437) and make sure LCP resource type fraction is sent to TSDB [#4438](https://github.com/sitespeedio/sitespeed.io/pull/4438).
## 36.3.0 - 2025-02-08
### Added
* Chrome 133 and Firefox 135 in the Docker container [#4431](https://github.com/sitespeedio/sitespeed.io/pull/4431).
* Browsertime 24.2.0 with Chromedriver 133 [#4432](https://github.com/sitespeedio/sitespeed.io/pull/4432).
### Fixed
* Extra guard against missing HARs [#4430](https://github.com/sitespeedio/sitespeed.io/pull/4430).
* Log missing green domain info as info instead of error [#4433](https://github.com/sitespeedio/sitespeed.io/pull/4433).
## 36.2.5 - 2025-02-03
### Fixed
* The check for sending Android test through APIs was broken in 36.2.4, fixed in [#4428](https://github.com/sitespeedio/sitespeed.io/pull/4428).
## 36.2.4 - 2025-02-02
### Fixed
* The GitHub actions tests on Windows was broken. I think GitHub changed tere heir setup: Suddenly the path to plugins was broken. Rerunning old test that used to work, failed with the same code on our side. It's fixed by [#4426](https://github.com/sitespeedio/sitespeed.io/pull/4426).
* We have had issues with parsing Android configuration because of the `--android` flag to enable Android tests. The problem was that in some cases the internal configuration object become an Array (instead of an object) and that made some objects to do not work. The PR [#4422](https://github.com/sitespeedio/sitespeed.io/pull/4422) removes `--android` from the cli help, however it will still work as before.
* Fix so API calls also looks for `--android.enabled` to know if you want to test on Android [#4427](https://github.com/sitespeedio/sitespeed.io/pull/4427).
## 36.2.3 - 2025-01-30
### Fixed
* Even better handling of missing runtime settings [#4420](https://github.com/sitespeedio/sitespeed.io/pull/4420).
## 36.2.2 - 2025-01-29
### Fixed
* Updated Browsertime and sitespeedio/log to 0.2.6 that adds the old log.warn [#4419](https://github.com/sitespeedio/sitespeed.io/pull/4419) and [#4418](https://github.com/sitespeedio/sitespeed.io/pull/4418).
* More fixes for the runtime settings [#4417](https://github.com/sitespeedio/sitespeed.io/pull/4417).
## 36.2.1 - 2025-01-28
### Fixed
* Fixed broken checks on runtime settings [#4416](https://github.com/sitespeedio/sitespeed.io/pull/4416).
## 36.2.0 - 2025-01-27
### Added
* New Browsertime that expose configurations for the runtime settings page [#4414](https://github.com/sitespeedio/sitespeed.io/pull/4414).
* Show android rooted and gnirehtet in runtime settings [#4415](https://github.com/sitespeedio/sitespeed.io/pull/4415).
## 36.1.0 - 2025-01-25
### Added
* Display more LCP information: elementRenderDelay, ttfb, resourceLoadDelay, resourceLoadDuration [#4413](https://github.com/sitespeedio/sitespeed.io/pull/4413).
* In runtime settings: Show if gnirehtet is used [#4412](https://github.com/sitespeedio/sitespeed.io/pull/4412).
### Fixed
* Tune image size for result images [#4411](https://github.com/sitespeedio/sitespeed.io/pull/4411).
## 36.0.3 - 2025-01-23
### Fixed
* Fix for uploading files to GCS/S3 that was partly broken in 36.0.0 [#4410](https://github.com/sitespeedio/sitespeed.io/pull/4410).
@ -69,7 +339,7 @@ This release contains a couple of breaking changes. Please read the breaking sec
* Update dev dependencies [#4345](https://github.com/sitespeedio/sitespeed.io/pull/4345).
* Let analysisstorer know about webpagereplay so that correct information is displayed [#4349](https://github.com/sitespeedio/sitespeed.io/pull/4349).
* Pass on webpagereplay flag to browsertime [#4350](https://github.com/sitespeedio/sitespeed.io/pull/4350).
* Update to Browsertime 23.5.0 [#4351](https://github.com/sitespeedio/sitespeed.io/pull/4351)
* Update to Browsertime 23.5.0 [#4351](https://github.com/sitespeedio/sitespeed.io/pull/4351)
## 35.7.4 - 2024-12-20
### Fixed
@ -90,7 +360,7 @@ This release contains a couple of breaking changes. Please read the breaking sec
* Make sure Firefox displays power consumption in mWH [#4334](https://github.com/sitespeedio/sitespeed.io/pull/4334).
## 35.7.0 - 2024-11-30
### Added
### Added
* Firefox 133 in the Docker container [#4327](https://github.com/sitespeedio/sitespeed.io/pull/4327).
### Fixed
@ -128,7 +398,7 @@ Andy Davies](https://github.com/andydavies) and the cool [https://github.com/and
## 35.3.0 - 2024-10-20
### Added
* Update to Chrome 130 in the Docker container [#4299](https://github.com/sitespeedio/sitespeed.io/pull/4299).
* Update to Chrome 130 in the Docker container [#4299](https://github.com/sitespeedio/sitespeed.io/pull/4299).
* Updated to Browsertime [23.2.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2320---2024-10-20) that has a fix for installting Geckodriver on ARM containers [#4303](https://github.com/sitespeedio/sitespeed.io/pull/4303).
* Updated Chromium from 107 to 130 in the ARM Docker container. This was possible by using the Chromium built by Microsoft (M$) in Playwright [#4304](https://github.com/sitespeedio/sitespeed.io/pull/4304).
@ -335,7 +605,7 @@ From this release we release a new Docker container with the major version tag!
### Breaking
* Woho! There's now a way to deploy your own version of sitespeed.io online for your own testing using [onlinetest][https://github.com/sitespeedio/onlinetest]! It has a HTML GUI and an API that you can use using sitespeed.io command line. There's one server part (the frontend and the API) and a testrunner part. You can run desktop, emulated mobile and Android test. I do not host a global version but I worked hard to make it easy to host yourself. I still work on the documentation but feel free to start to try it out before all documentation is finished :) If you have quick question and need help, please use the [Slack channel](https://join.slack.com/t/sitespeedio/shared_invite/zt-296jzr7qs-d6DId2KpEnMPJSQ8_R~WFw). If you have more complicated problems, please feel free to create issues [here](https://github.com/sitespeedio/onlinetest/issues/new).
* With this release we remove all dependencies to WebPageTest [#4085](https://github.com/sitespeedio/sitespeed.io/pull/4085). You are only affected if you used the [plugin-webpagetest](https://github.com/sitespeedio/plugin-webpagetest) or the +webpagetest Docker container. If you still want to use WebPageTest with sitespeed.io you can build something on the archived [plugin-webpagetest](https://github.com/sitespeedio/plugin-webpagetest).
* The S3 plugin has been upgraded to @aws-sdk/client-s3 v3 [#4138](https://github.com/sitespeedio/sitespeed.io/pull/4138). If you are using the S3 plugin and not set region, that will now fail. The v2 version of the aws-sdk used us-east-1 region as default, but v3 has removed the default setting. If you didn't used to set region you can add `--s3.region us-east-1` and it will work as before. If you do not do that, the uploads to S3 will fail. With v3 your `endpoint` need to start with http/https.
@ -354,7 +624,7 @@ From this release we release a new Docker container with the major version tag!
## 33.6.1 - 2024-05-13
### Fixed
* The plus1 container was updated with the latest version of the gpsi-plugin, since the old version broke when GPSI was updated to Lighthouse 12.
* The plus1 container was updated with the latest version of the gpsi-plugin, since the old version broke when GPSI was updated to Lighthouse 12.
## 33.6.0 - 2024-04-17
### Added
@ -396,7 +666,7 @@ From this release we release a new Docker container with the major version tag!
## 33.2.0 - 2024-03-12
### Added
* Updated to Browsertime 21.5.0 in [#4103](https://github.com/sitespeedio/sitespeed.io/pull/4103) also included changes released in 21.4.0.
* Firefox:
* Firefox:
* Move injectJS functionality to Bidi [#2088](https://github.com/sitespeedio/browsertime/pull/2088). This makes it possible to inject JS in Firefox on mobile.
* Expose Bidi in commands [#2091](https://github.com/sitespeedio/browsertime/pull/2091). You can now use webdriver bidi direct in your commands.
* Fixed command action.clear() that actually didn't clear the command [#2095](https://github.com/sitespeedio/browsertime/pull/2095).
@ -410,7 +680,7 @@ From this release we release a new Docker container with the major version tag!
## 33.1.0 - 2024-02-21
### Added
* Firefox 123 and Chrome 122 in the Docker container [#4090](https://github.com/sitespeedio/sitespeed.io/pull/4090) and [#4089](https://github.com/sitespeedio/sitespeed.io/pull/4089).
* Chromedriver 122 and Edgedriver 121
* Chromedriver 122 and Edgedriver 121
* [Browsertime 21.3.0](https://github.com/sitespeedio/sitespeed.io/pull/4091).
## 33.0.0 - 2024-02-11
@ -475,8 +745,8 @@ The new version of Browsertime also adds code completion/IntelliSense support. R
* @param {import('browsertime').BrowsertimeContext} context
* @param {import('browsertime').BrowsertimeCommands} commands
*/
export default async function (context, commands) {
export default async function (context, commands) {
};
```
@ -516,7 +786,7 @@ export default async function (context, commands) {
### Fixed
* Moved functionality from co2 to sitespeed.io see [#4034](https://github.com/sitespeedio/sitespeed.io/pull/4034).
### Added
### Added
* Upgraded the Docker container to use Firefox 121 [#4033](https://github.com/sitespeedio/sitespeed.io/pull/4033).
* Updated to [Browsertime 19.3.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1931---2023-12-18) [#4031](https://github.com/sitespeedio/sitespeed.io/pull/4031).
@ -542,7 +812,7 @@ export default async function (context, commands) {
## 30.7.0 - 2023-11-30
### Added
* Show Axe individual issues on the page summary (not only on each individual run) [#4019](https://github.com/sitespeedio/sitespeed.io/pull/4019). Thank you [shaqb](https://github.com/shaqb) for pointing that out. The total number of issues is also sent to Graphite under *statistics.axe.violationIssues*.
* Show Axe individual issues on the page summary (not only on each individual run) [#4019](https://github.com/sitespeedio/sitespeed.io/pull/4019). Thank you [shaqb](https://github.com/shaqb) for pointing that out. The total number of issues is also sent to Graphite under *statistics.axe.violationIssues*.
## 30.6.0 - 2023-11-29
@ -615,7 +885,7 @@ export default async function (context, commands) {
* Updated Browsertime to 17.18.0:
* Updated to Chromedriver 119 [#2003](https://github.com/sitespeedio/browsertime/pull/2003). 119 works with both Chrome 118 and 119 so it fixes [#1197](https://github.com/sitespeedio/browsertime/issues/1997).
* Add support for network idle method to know when to end a test that uses network logs. Uses Bidi for Firefox and CDP for Chrome to listen on network events to know when to end a test. By default 5 seconds idle network time ends a tests (you could have network responses that hasn't arrived yet) [#1960](https://github.com/sitespeedio/browsertime/pull/1960). Potentially this can help SPA users or users where the page uses iframes. You can try it out by adding `--browsertime.pageCompleteCheckNetworkIdle true` to your command line. This is still some work in progress but feel free to try ut out.
* The resources script now collects number of resources served from the browser cashe for browser that supports that through the resource timing API [#1998](https://github.com/sitespeedio/browsertime/pull/1998)
* The resources script now collects number of resources served from the browser cashe for browser that supports that through the resource timing API [#1998](https://github.com/sitespeedio/browsertime/pull/1998)
* Make sure timer always is cleared. There was case of where we do a rase beteween a promise and a timeout where the timeout timer wasn't cleared/removed [#2005](https://github.com/sitespeedio/browsertime/pull/2005).
* Better way to get the url when you use GeckoProfiler.stop for Firefox, thank you [Nazım Can Altınova](https://github.com/canova) for PR [#1999](https://github.com/sitespeedio/browsertime/pull/1999)
@ -631,7 +901,7 @@ export default async function (context, commands) {
## 29.7.0 - 2023-09-27
### Added
* Updated Firefox to 118 in the Docker container [#3968](https://github.com/sitespeedio/sitespeed.io/pull/3968).
* Users of the +1 container will have Lighthouse version 11.1.0.
* Users of the +1 container will have Lighthouse version 11.1.0.
## 29.6.0 - 2023-09-22
### Added
@ -759,7 +1029,7 @@ The changes where done in [#3888](https://github.com/sitespeedio/sitespeed.io/pu
## 27.6.5 - 2023-05-26
### Fixed
* Bumped Browsertime with a fix for host-resolver-rules, thank you [Mikhail](https://github.com/atuchin-m) for PR [#1953](https://github.com/sitespeedio/browsertime/pull/1953).
* Hopefully fixed the broken manifest file for the Docker containers by updating the Docker build actions to latest versions and added provenance: false.
* Hopefully fixed the broken manifest file for the Docker containers by updating the Docker build actions to latest versions and added provenance: false.
## 27.6.4 - 2023-05-20
### Fixed
@ -793,7 +1063,7 @@ The changes where done in [#3888](https://github.com/sitespeedio/sitespeed.io/pu
* Another fix for storing result data as JSON.
## 27.5.0 - 2023-05-03
### Added
### Added
* Use Chrome 113 in the Docker container.
### Fixed
@ -828,7 +1098,7 @@ The changes where done in [#3888](https://github.com/sitespeedio/sitespeed.io/pu
* Increased the default wait time from 2 to 5 seconds when a element a clicked and the page complete check runs [#1931](https://github.com/sitespeedio/browsertime/pull/1931)
* Upgraded to Chromedriver 112 [#1932](https://github.com/sitespeedio/browsertime/pull/1932).
* If you use `--headless` Chrome will use the new headless switch [#1933](https://github.com/sitespeedio/browsertime/pull/1933).
* The plugin-lighthouse uses Lighthouse 10.1.0 and --headless=new
* The plugin-lighthouse uses Lighthouse 10.1.0 and --headless=new
## 27.0.0 - 2023-04-04
@ -840,7 +1110,7 @@ There's been many additions to Browsertime the last months and I'll update the C
The project was transitioned to a [pure ESM package](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) both Browsertime [#1859](https://github.com/sitespeedio/browsertime/pull/1859) and sitespeed.io [#3769](https://github.com/sitespeedio/sitespeed.io/pull/3769). That allow us to stay uptodate with dependencies. This is important for us and will make the project easier to maintain.
#### CLI users
If you are a command line user and use [scripting](https://www.sitespeed.io/documentation/sitespeed.io/scripting/), you will need to do a change to your scripts or add some extra configuration.
If you are a command line user and use [scripting](https://www.sitespeed.io/documentation/sitespeed.io/scripting/), you will need to do a change to your scripts or add some extra configuration.
**The quick fix**: Rename your *.js* scripting files to *.cjs* that way NodeJS will treat your file as a common JS file and everything will just work. For example if you have a file names `login.js` you can rename that to `login.cjs` and make sure you load that new file. Then sitespeed.io 27.0.0 will just work as before.
@ -860,14 +1130,14 @@ export default async function (context, commands) {
}
```
If you have more complicated scripts, follow the [ESM package guide](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).
If you have more complicated scripts, follow the [ESM package guide](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c).
Then rename your file to be named *.mjs. If your file is named `collect.js` change it to `collect.mjs`. This is the best fix and will work 100% of the time. That way NodeJS will know that you are using the ESM standard. You can read more in [how NodeJs choose to load files](https://nodejs.org/docs/latest-v18.x/api/packages.html#determining-module-system).
**Another quick fix alternative**: As a last alternative add `--browsertime.cjs` as a parameter to your test. That way the scripting file will be treated as a commonjs file. This is a hack, so to make sure it works, the user that runs Browsertime need to have write privileges to the folder where you have your scripting files. Browsertime will create a package.json file on the same levels as your script file. If you already have a package.json there, it will be overwritten.
#### Non cli users
#### Non cli users
Documentation coming soon.
Read [Sindre Sorhus Pure ESM package guide](https://gist.github.com/sindresorhus/a39789f98801d908bbc7ff3ecc99d99c) on how you can move your project.
@ -882,7 +1152,7 @@ If you run sitespeed.io direct using NodeJs (and not using Docker) you need to i
```python -m pip install --user OpenCV-Python Numpy```
If you still want to use ImageMagick you can do that by setting ```browsertime.visualMetricsPortable false```
If you still want to use ImageMagick you can do that by setting ```browsertime.visualMetricsPortable false```
### Fixed
@ -891,17 +1161,17 @@ If you still want to use ImageMagick you can do that by setting ```browsertime.v
### Added
* [A lot of things has happened](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md) in Browsertime:
* There's a new better way to get the HAR from Firefox using WebDriver BiDi network events. Thank you Julian Descottes and others at Mozilla that made this happen! With the new version we hope to see less overhead getting the HAR + it works on Firefox on Android #1918. You can turn it on with --browsertime.firefox.bidihar.
* Updated to Geckodriver 0.33
* Fixed the interaction to next paint error message that started to appear in latest Chrome
* Safer check for getting last meaningful paint
* Updated to Geckodriver 0.33
* Fixed the interaction to next paint error message that started to appear in latest Chrome
* Safer check for getting last meaningful paint
* Log the CPU benchmark metric to the console. This is useful (at least for me) when debugging instances with a lot of instability.
* In Chrome 111 some metrics become more instable when running on host with limited CPU. This change also exists in 112 beta. However we where missing out on a couple of command line magic to disable features in Chrome.
* On Linux you can use taskset to assing FFMPEG to specific CPUs using --videoParams.taskset "0,5,7,9-11" . It will start FFMPEG with taskset -c <CPUS> to pin FFMPG to specific CPU(s). Specify a numerical list of processors. The list may contain multiple items, separated by comma, and ranges. For example, "0,5,7,9-11". Use it together with isolcpus.
* If you use a rooted Samsung A51 you can now choose the CPU speed (min/middle/max) using --android.pinCPUSpeed min|middle|max
* Expose chrome-remote-interface client to scripting. This makes it so much easier to run whatever CDP command. Get the raw version `commands.cdp.getRawClient()`.
* Pin CPU freq to fastest for Samsung A51 (if you have a rooted device)
* Pin CPU freq to fastest for Samsung A51 (if you have a rooted device)
* Updated to Chrome 111, Firefox 111 and Edge 111 in the Docker container.
* The Lighthouse plugin has been updated to Lighthouse 10.
* The Lighthouse plugin has been updated to Lighthouse 10.
* Support for InfluxDb 2, thank you [Damien-Ar](https://github.com/Damien-Ar) for PR [#3711](https://github.com/sitespeedio/sitespeed.io/pull/3711) and [Roman Voitseshevsky](https://github.com/boitcex) for adding tests in [#3790](https://github.com/sitespeedio/sitespeed.io/pull/3790).
## 26.1.0 - 2022-10-21
### Added
@ -986,7 +1256,7 @@ https://github.com/sitespeedio/sitespeed.io/pull/3715).
* Updated Browsertime to 16.14.1 that adds a guard for null values in rsd (this fixes the warning logs happening in 25.8.0).
## 25.8.0 - 2022-08-26
### Added
* Updated to [Browsertime 16.14.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16140---2022-08-26). that collects relative standard deviation for metrics and the number of processes that runs on the server when you start a test.
* Updated to [Browsertime 16.14.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16140---2022-08-26). that collects relative standard deviation for metrics and the number of processes that runs on the server when you start a test.
## 25.7.3 - 2022-08-17
### Fixed
* Upgraded to [Browsertime 16.13.3](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#16133---2022-08-17) that fixes a bug when setting cookies when navigating in Chrome/Edge when using scripting.
@ -1010,7 +1280,7 @@ https://github.com/sitespeedio/sitespeed.io/pull/3715).
### Added
* Updated to Firefox 103 in the Docker container.
* The +1 container uses Lighthouse 9.6.4.
* Removed videojs and use plain video element to display the video [#3697](https://github.com/sitespeedio/sitespeed.io/pull/3697). This makes the result pages cleaner.
* Removed videojs and use plain video element to display the video [#3697](https://github.com/sitespeedio/sitespeed.io/pull/3697). This makes the result pages cleaner.
### Fixed
* Fixed error message when you run Axe and analysisstorer at the same time [#3703](https://github.com/sitespeedio/sitespeed.io/pull/3703).
@ -1056,7 +1326,7 @@ https://github.com/sitespeedio/sitespeed.io/pull/3715).
* Bug fix for adding custom CSS from plugins, than you [Josh Duncan](https://github.com/josh-lr) for PR [#3679](https://github.com/sitespeedio/sitespeed.io/pull/3679).
## 25.2.0 - 2022-06-22
### Added
### Added
* Updated the Docker container to use Chrome 103.
## 25.1.1 - 2022-06-20
@ -1067,7 +1337,7 @@ https://github.com/sitespeedio/sitespeed.io/pull/3715).
* Updated Browsertime to [16.9.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1690---2022-06-15) with the following changes:
* New `wait.byCondition` command. Thank you [Icecold777](https://github.com/Icecold777) for PR [#1803](https://github.com/sitespeedio/browsertime/pull/1803).
* Collect number of CPU longtasks before largest contentful paint [#1806](https://github.com/sitespeedio/browsertime/pull/1806).
* Instead of throwing errors and exit the tests if the page hasn't finished loading after 5 minutes, we now gracefully ends the test after 2 minutes (you can change that time with `--maxLoadTime`). That makes more sense than just throwing errors [#1810](https://github.com/sitespeedio/browsertime/pull/1810).
* Instead of throwing errors and exit the tests if the page hasn't finished loading after 5 minutes, we now gracefully ends the test after 2 minutes (you can change that time with `--maxLoadTime`). That makes more sense than just throwing errors [#1810](https://github.com/sitespeedio/browsertime/pull/1810).
## 25.0.0 - 2022-06-10
@ -1098,7 +1368,7 @@ In debug mode, the browser will pause after each iteration.
* Updated to [Browsertime 16.7.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1670---2022-05-20) from 16.4.0. With the latest versions we get:
* Use `--browsertime.videoParams.thumbsize` to set the max size of the filmstrip thumbnails.
* Interaction to next paint is collected for browsers that supports it (useful for your user journeys)
* The time when the last CPU long task happens is a new metric, thank you Andy Davies for that idea!
* The time when the last CPU long task happens is a new metric, thank you Andy Davies for that idea!
* You can now use groupAlias directly in a text file [#3655](https://github.com/sitespeedio/sitespeed.io/pull/3655). You can read how in the [updated documentation](https://www.sitespeed.io/documentation/sitespeed.io/configuration/#analyse-by-urls).
* Added an option for using the full Graphite namespace when latest screenshots/video is stored for a test [#3660](https://github.com/sitespeedio/sitespeed.io/pull/3660).
### Fixed
@ -1147,7 +1417,7 @@ In debug mode, the browser will pause after each iteration.
* Updated base Docker image to use Ubuntu 22.04 [#3636](https://github.com/sitespeedio/sitespeed.io/pull/3636).
### Fixed
* Updated dependencies: aws-sdk, cli-color, fs-extra, influx, junit-report-builder and tape [#3640](https://github.com/sitespeedio/sitespeed.io/pull/3640)
* Updated dependencies: aws-sdk, cli-color, fs-extra, influx, junit-report-builder and tape [#3640](https://github.com/sitespeedio/sitespeed.io/pull/3640)
### Tech
* Use Ava for unit testing [#3637](https://github.com/sitespeedio/sitespeed.io/pull/3637)
@ -1167,7 +1437,7 @@ In debug mode, the browser will pause after each iteration.
## 24.0.0 - 2022-04-06
### Changed
### Changed
* Upgraded to [Browsertime 16.0.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1600---2022-04-05) that changed how the DNS is flushed. You need to add `--flushDNS` to your conifguration to flush the DNS between runs.
### Added
@ -1199,7 +1469,7 @@ In debug mode, the browser will pause after each iteration.
* The -slim Docker container now uses Firefox 98.
* Updated Grafana to latest 8.4.3 in the Docker compose file.
* Updated [Graphite dashboards](https://github.com/sitespeedio/grafana-bootstrap-docker/tree/main/dashboards/graphite) to use Timeseries graphs instead of old "Graph".
* You can use `-o` or `--open` or `--view` to open the result page after you run sitespeed.io on Mac and Linux [#3569](https://github.com/sitespeedio/sitespeed.io/pull/3596).
* You can use `-o` or `--open` or `--view` to open the result page after you run sitespeed.io on Mac and Linux [#3569](https://github.com/sitespeedio/sitespeed.io/pull/3596).
* Open the result with `-o` on Linux using xdg-open [#3597](https://github.com/sitespeedio/sitespeed.io/pull/3597).
## 23.4.0 - 2022-03-09
@ -1222,7 +1492,7 @@ In debug mode, the browser will pause after each iteration.
## 23.1.0 - 2022-02-24
### Added
* Updated [Browsertime](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1510---2022-02-24) that collect timings from main document. The result includes a field named mainDocumentTimings and contains blocked, dns, connect, send, wait, receive, ssl as long as you get a HAR file from the browser.
* Updated [Browsertime](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1510---2022-02-24) that collect timings from main document. The result includes a field named mainDocumentTimings and contains blocked, dns, connect, send, wait, receive, ssl as long as you get a HAR file from the browser.
* Show Browsertime version in runtime settings [#3575](https://github.com/sitespeedio/sitespeed.io/pull/3575).
@ -1230,7 +1500,7 @@ In debug mode, the browser will pause after each iteration.
* Updated Chromedriver dependency that fixes installation on Mac M1 and some send keys issues.
## 23.0.1 - 2022-02-21
### Fixed
* Bumped to Browsertime 15.0.1 to make sure connectivity is set only once. In last release it was set in the beginning of the test and for eacch iteration. In practice that doesn't matter but it's very confusing if you check the logs.
* Bumped to Browsertime 15.0.1 to make sure connectivity is set only once. In last release it was set in the beginning of the test and for eacch iteration. In practice that doesn't matter but it's very confusing if you check the logs.
## 23.0.0 - 2022-02-21
### Breaking changes
@ -1264,7 +1534,7 @@ In debug mode, the browser will pause after each iteration.
* If you use the Lighthouse plugin there's breaking changes:
In the new version we drop support for the following:
* Running multiple runs with Lighthouse.
* Running multiple runs with Lighthouse.
* Using scripts to login the user (or whatever you need before you run your tests)
It's a couple of reasons why I remove those features:
* I been looking for a maintainer of the Lighthouse plugin for +1 year and I haven't found one. For me to be able to maintain it I want the plugin to be as simple as possible.
@ -1275,7 +1545,7 @@ With the new release we also break how you configure Lighthouse. People has had
- By configuration JSON file. `--lighthouse.config config.js`
- By Lightouse flags file. `--lighthouse.flags flag.json`
If you don't need to configure Lightouse you can use the default settings both for desktop and mobile. If you run without any settings, the plugin will use desktop settings. If you run with `--mobile`, `--android` or `--ios` the mobile settings will be used.
If you don't need to configure Lightouse you can use the default settings both for desktop and mobile. If you run without any settings, the plugin will use desktop settings. If you run with `--mobile`, `--android` or `--ios` the mobile settings will be used.
### Added
* Build Docker containers for both amd64 and arm64 to make containers work on Mac M1. The arm container contains Firefox and Chromium. Thank you [whichfinder](https://github.com/whichfinder) and [Radu Micu](https://github.com/radum) for the help! Fixed in PR [#3554](https://github.com/sitespeedio/sitespeed.io/pull/3554).
@ -1306,7 +1576,7 @@ If you don't need to configure Lightouse you can use the default settings both f
### Added
* Updated to a new build of WebPageReplay in the Docker container
* Updated the Ubuntu base image to latest version and latest NodeJS in the Docketr container.
* Upgraded Browsertime [#3528](https://github.com/sitespeedio/sitespeed.io/pull/3528):
* Upgraded Browsertime [#3528](https://github.com/sitespeedio/sitespeed.io/pull/3528):
* Add support for Humble as connectivity engine for mobile phone testing. Make sure to setup Humble on a Raspberry Pi 4 and the choose engine with --connectivity.engine humble and set the URL to your instance --connectivity.humble.url http://raspberrypi.local:3000. Added in #1691.
* Upgraded to Chrome 97 and Edge 97 in the Docker container.
* Upgraded to Chromedriver 97.
@ -1321,7 +1591,7 @@ If you don't need to configure Lightouse you can use the default settings both f
## 21.2.2 - 2021-12-23
### Fixed
* Fix the error introduced in 21.2.0 for "Include page summary URL in the result JSON"
[#3525](https://github.com/sitespeedio/sitespeed.io/pull/3525).
[#3525](https://github.com/sitespeedio/sitespeed.io/pull/3525).
## 21.2.1 - 2021-12-22
### Fixed
@ -1364,7 +1634,7 @@ If you don't need to configure Lightouse you can use the default settings both f
* Removed mentions aboout server push [#69](https://github.com/sitespeedio/coach-core/pull/69)
* Added more information on how to debug CPU advice [#71](https://github.com/sitespeedio/coach-core/pull/71).
* Updated to sustainable plugin core code to [co2 0.8.0](https://github.com/thegreenwebfoundation/co2.js/blob/main/CHANGELOG.md#080---2021-11-28). This include a biug fix to the 1byte model that will lower your co2 score [#3519](https://github.com/sitespeedio/sitespeed.io/pull/3519).
* Updated to sustainable plugin core code to [co2 0.8.0](https://github.com/thegreenwebfoundation/co2.js/blob/main/CHANGELOG.md#080---2021-11-28). This include a biug fix to the 1byte model that will lower your co2 score [#3519](https://github.com/sitespeedio/sitespeed.io/pull/3519).
### Added
* Updated to [Browsertime 14.12.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#14120---2021-11-30) that fixes the [FF 94 HAR issue](https://github.com/sitespeedio/browsertime/issues/1671).
@ -1427,7 +1697,7 @@ Note: Do your test fails with Firefox 94? See [Browsertime #1671](https://github
* Add support for using cookies when crawling, thank you [dammg](https://github.com/dammg) for PR [#3472](https://github.com/sitespeedio/sitespeed.io/pull/3472).
* [Browsertime 14.6.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1460---2021-10-13).
* [Use alias in your budget file](https://www.sitespeed.io/documentation/sitespeed.io/performance-budget/#override-per-url-or-alias) [#3479](https://github.com/sitespeedio/sitespeed.io/pull/3479).
* Support for using [User Timing API marks/measures in the budget file](https://www.sitespeed.io/documentation/sitespeed.io/performance-budget/#user-timing-api-metrics) [#3482](https://github.com/sitespeedio/sitespeed.io/pull/3482) and [#3483](https://github.com/sitespeedio/sitespeed.io/pull/3483).
* Support for using [User Timing API marks/measures in the budget file](https://www.sitespeed.io/documentation/sitespeed.io/performance-budget/#user-timing-api-metrics) [#3482](https://github.com/sitespeedio/sitespeed.io/pull/3482) and [#3483](https://github.com/sitespeedio/sitespeed.io/pull/3483).
* Support for [using custom metrics from scripting in your budget](https://www.sitespeed.io/documentation/sitespeed.io/performance-budget/#metrics-from-scripting) [#3484](https://github.com/sitespeedio/sitespeed.io/pull/3484) and [#3486](https://github.com/sitespeedio/sitespeed.io/pull/3486).
### Fixed
@ -1438,7 +1708,7 @@ Note: Do your test fails with Firefox 94? See [Browsertime #1671](https://github
* Use Firefox 93 in the Docker and the Docker slim container [#3471](https://github.com/sitespeedio/sitespeed.io/pull/3471).
## 20.0.0 - 2021-09-30
Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
### Breaking changes
* Before you update to the new version: If you save your metrics to Graphite, have you upgraded those metrics to the new format as introduced in sitespeed.io the **15/4-2021**? If not, please follow the [guide](https://www.sitespeed.io/documentation/sitespeed.io/graphite/#upgrade-to-use-the-test-slug-in-the-namespace) in the documentation. If you haven't done that and still upgrade to sitespeed.io 20 you need to make sure you add `--graphite.addSlugToKey false` to your test else the metrics will be reported under a new key structure. The change was done in [#3434](https://github.com/sitespeedio/sitespeed.io/pull/3434).
* Set [throttle](https://github.com/sitespeedio/throttle) as default connectivity engine if you use Mac or Linux [#3433](https://github.com/sitespeedio/sitespeed.io/pull/3433). This makes it much easier to enable throttling. Our Docker container is not affected by this change.
@ -1483,7 +1753,7 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
* Upgraded to [Browsertime 14.0.3](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1403---2021-08-31).
## 19.2.0 - 2021-08-27
### Added
* Upgraded to AXE core 4.3.2 [#3441](https://github.com/sitespeedio/sitespeed.io/pull/3441).
* Upgraded to AXE core 4.3.2 [#3441](https://github.com/sitespeedio/sitespeed.io/pull/3441).
* Added stddev/median/mean to the metrics side by side page [#3443](https://github.com/sitespeedio/sitespeed.io/pull/3443).
* Added a generic text that we miss out of many metrics for Safari at the moment [#3442](https://github.com/sitespeedio/sitespeed.io/pull/3442).
* Add option to add friendly name to junit test cases. Use `--budget.friendlyName` to set that. Thank you [Vishal](https://github.com/vishallanke) for the request. Done in PR [#3448](https://github.com/sitespeedio/sitespeed.io/pull/3448).
@ -1504,7 +1774,7 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
### Added
* Updated to Edge 92 and Edgedriver 92 in the Docker container.
* Updated to Firefox 92 beta in the Docker container to fix the [devtools slowness bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1712983) that was inroduced in Firefox 90.
* Updated to Firefox 92 beta in the Docker container to fix the [devtools slowness bug](https://bugzilla.mozilla.org/show_bug.cgi?id=1712983) that was inroduced in Firefox 90.
## 18.0.1 - 2021-07-29
### Fixed
@ -1548,7 +1818,7 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
* Keep selected tab open across runs. Thank you [Tanishq](https://github.com/amtanq) for PR [#3409](https://github.com/sitespeedio/sitespeed.io/pull/3409).
* Update Docker container to use NodeJS 14.7.1.
* Upgraded to [Browsertime 12.9.3](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1293---2021-06-24).
* Updated [Coach-core](https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#641---2021-06-23): Use all headers for Wappalyzer (before only the main document was used)
* Updated [Coach-core](https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#641---2021-06-23): Use all headers for Wappalyzer (before only the main document was used)
## 17.8.1 - 2021-06-10
### Fixed
@ -1559,7 +1829,7 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
### Added
* New [Browsertime 12.9.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1290---2021-06-04) that updates Cumulative Layout Shift to the [new defintion](https://web.dev/evolving-cls/).
### Fixed
### Fixed
* Guard if you try to run Safari simulator in Docker [#3405](https://github.com/sitespeedio/sitespeed.io/pull/3405)
## 17.7.0 - 2021-06-03
@ -1578,7 +1848,7 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
## 17.6.0 - 3
### Added
### Added
* Updated to [Browsertime 12.7.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1270---2021-05-26) that fixes the problem with the broken CPU throttling in Chrome.
* Chrome and Chromedriver 91. Edge 90 (Eddge 91 coming later this week) in the Docker container
@ -1590,7 +1860,7 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
* Updated dashboards to in the Docker setup.
### Fixed
* New Browsertime [12.6.1](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1261---2021-05-21) that fixes a bug when you use a equals sign in the value field in a cookie.
* New Browsertime [12.6.1](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1261---2021-05-21) that fixes a bug when you use a equals sign in the value field in a cookie.
* Updated dependencies with install warnings [#3387](https://github.com/sitespeedio/sitespeed.io/pull/3387),
## 17.4.0 - 2021-05-14
@ -1616,7 +1886,7 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
* [Fix test running without connectivity settings](https://github.com/sitespeedio/sitespeed.io/commit/3ac3c2ab6885689b6689c6f2974ae7c256be9faf).
## 17.2.0 - 2021-04-27
### Added
### Added
* Show runtime settings in the HTML [#3359](https://github.com/sitespeedio/sitespeed.io/pull/3359). This makes it easier to see what settings are used. We gonna iterate and add more settings later.
* Upgraded to [Browsertime 12.2.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1220---2021-04-27).
@ -1631,13 +1901,13 @@ Please read the [20.0 blog post](https://www.sitespeed.io/sitespeed.io-20.0/)!
## 17.0.1 - 2021-04-17
### Fixed
* Updated Browsertime to 12.0.1 that fixes the problem with Chrome/Chromedriver 90 that introduced longer time to close the browser than earlier versions, so when trying the next run, the previous browser is not closed, fixed by adding a 2 second sleep time when closing the browser.
## 17.0.0 - 2021-04-15
## 17.0.0 - 2021-04-15
Woohoo we shipped 17.0.0! There are many changes and you should read through the full changelog and focus on the new best practise section and breaking changes.
### New best practices
One of the new things in 17 is the support for one extra key in Graphite: the name of the test. Set a computer friendly name of your test by using `--slug`. Then use the slug in the graphite key by adding `--graphite.addSlugToKey` to your run. When you do that change, should also convert your graphite data and your dashboards. The plan is like this:
* In April 2021 you can convert your data and use the slug. You need to add `--graphite.addSlugToKey true` else you will get a log warning that you miss the slug for your test. All default dashboards in sitespeed.io will use the slug, so to use them you should add that new key and convert your data.
* In September 2021 `--graphite.addSlugToKey true` will be set to default, meaning if you haven't upgraded your Graphite data yet, you need to set `--graphite.addSlugToKey false` to be able to run as before.
* In November 2021 the CLI functionality will disappear and you need upgrade your Graphite metrics when you upgrade sitespeed.io.
* In November 2021 the CLI functionality will disappear and you need upgrade your Graphite metrics when you upgrade sitespeed.io.
You can read how to upgrade in the [documentation](https://www.sitespeed.io/documentation/sitespeed.io/graphite/#upgrade-to-use-the-test-slug-in-the-namespace).
@ -1679,9 +1949,9 @@ Lets continue with all the changes.
* New metrics: Delta between TTFB and First Contentful Paint, Largest Contentful paint and First visual change [#1528](https://github.com/sitespeedio/browsertime/pull/1528). You can use this if you have unstable TTFB and want to alert on front end metrics. Lets see when other also implement this :)
* Made it easier for people to get Google Web Vitals. We copy that data under the googleWebVitals namespace in the result JSON [#1521](https://github.com/sitespeedio/browsertime/pull/1521).
* Added TTFB as a single metric [#1522](https://github.com/sitespeedio/browsertime/pull/1522).
* New stop watch command [#1512](https://github.com/sitespeedio/browsertime/pull/1512). Measure time by:
```const timer = commands.stopWatch.get('my_timer');
timer.start();
* New stop watch command [#1512](https://github.com/sitespeedio/browsertime/pull/1512). Measure time by:
```const timer = commands.stopWatch.get('my_timer');
timer.start();
// Do something
// Stop the timer and add the result to the last tested URL
timer.stopAndAdd();
@ -1793,9 +2063,9 @@ There's a couple of new functionality that will have documentation in a week or
* New plugin to copy screenshots [#3243](https://github.com/sitespeedio/sitespeed.io/pull/3243) and videos [#3248](https://github.com/sitespeedio/sitespeed.io/pull/3248) as latest for that run.
* Upload latest screenshots/videos to S3 [#3246](https://github.com/sitespeedio/sitespeed.io/pull/3246).
### Fixed
* The HTML links to pages when using alias in a text file was broken as reported in [#3244](https://github.com/sitespeedio/sitespeed.io/issues/3244), fixed in PR [#3245](https://github.com/sitespeedio/sitespeed.io/pull/3245).
* The HTML links to pages when using alias in a text file was broken as reported in [#3244](https://github.com/sitespeedio/sitespeed.io/issues/3244), fixed in PR [#3245](https://github.com/sitespeedio/sitespeed.io/pull/3245).
## 16.2.1 - 2021-01-06
### Fixed
### Fixed
* The new `--graphite.annotationRetentionMinutes` formatted the annotation date wrong, fixed in [#3238](https://github.com/sitespeedio/sitespeed.io/pull/3238).
## 16.2.0 - 2021-01-06
### Fixed
@ -1850,7 +2120,7 @@ There's a couple of new functionality that will have documentation in a week or
* Fully use the third-party-web to know about third parties instead of home grown solution.
* Testing for JQuery removed the $ reference on the page [#22](https://github.com/sitespeedio/coach-core/pull/22).
* Updated to [Browsertime 11](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1100---2020-12-18):
* Record and keep the browser full screen (including URL bar) [#1435](https://github.com/sitespeedio/browsertime/pull/1435). All metrics should stay the same with this change but the video and the code will be easier :) When we implemented video a long time ago we wanted to cut out the URL bar but it made it harder to keep the video to look ok on different OS.
* Record and keep the browser full screen (including URL bar) [#1435](https://github.com/sitespeedio/browsertime/pull/1435). All metrics should stay the same with this change but the video and the code will be easier :) When we implemented video a long time ago we wanted to cut out the URL bar but it made it harder to keep the video to look ok on different OS.
* Say goodbye to RUM Speed Index [#1439](https://github.com/sitespeedio/browsertime/pull/1439).
* Domain name on disk now uses underscore instead of dots in the name [#1445](https://github.com/sitespeedio/browsertime/pull/1445).
* Click the Android power button at the start of each test (instead of the home button [#1447](https://github.com/sitespeedio/browsertime/pull/1447).
@ -1882,11 +2152,11 @@ There's a couple of new functionality that will have documentation in a week or
* Added latest Browsertime [10.9.0](https://github.com/sitespeedio/browsertime/releases/tag/v10.9.0) with fixes for Firefox.
## 15.8.0 - 2020-11-17
### Added
### Added
* Updated to Firefox 83 in the Docker container.
## 15.7.4 - 2020-11-16
### Fixed
* Upgraded Browsertime that reverted Geckodriver to 0.27.0 since there are problems starting Firefox on Android using 0.28.0.
* Upgraded Browsertime that reverted Geckodriver to 0.27.0 since there are problems starting Firefox on Android using 0.28.0.
## 15.7.3 - 2020-11-11
### Fixed
* Upgraded to Browsertime 10.6.5 with a new version of Geckodriver for Firefox.
@ -1931,9 +2201,9 @@ There's a couple of new functionality that will have documentation in a week or
### Fixed
* Updated to Browsertime 10.6.1.
* Fixed dependencies with security audits that could be automatically fixed.
## 15.6.0 - 2020-10-20
### Added
### Added
* Updated to Firefox 82 in the Docker container.
* Updated to [Browsertime 10.6.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#1060---2020-10-20).
@ -1986,7 +2256,7 @@ The new sitespeed.io 15.0 uses the brand new Browsertime 10! Browsertime mainly
## 14.4.0 - 2020-08-27
### Added
* Updated the Docker container to use Chrome 85 and Firefox 80. Updated the slim container to use Firefox 80.
* Updated the Docker container to use Chrome 85 and Firefox 80. Updated the slim container to use Firefox 80.
* Updated to Browsertime 9.4.0 that includes Chromedriver 85.
### Fixed
@ -1994,7 +2264,7 @@ The new sitespeed.io 15.0 uses the brand new Browsertime 10! Browsertime mainly
## 14.3.2 - 2020-08-24
### Fixed
* Upgraded to [Browsertime 9.3.1](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#931---2020-08-24) that fixes a bug so that correct mobile emulation settings is set on Chrome, updated Throttle to 2.0.1 and update a couple of other packages.
* Upgraded to [Browsertime 9.3.1](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#931---2020-08-24) that fixes a bug so that correct mobile emulation settings is set on Chrome, updated Throttle to 2.0.1 and update a couple of other packages.
## 14.3.1 - 2020-08-24
### Fixed
@ -2049,10 +2319,10 @@ There are five important new things in the new release:
### Breaking changes
* If you use the JSON directly from Browsertime, the screenshot data is now an array instead of a string since you can have multiple screenshots in one run. If you use sitespeed.io directly you will not be affected by the change.
* The experimental flag for perIteration metric for Graphite [#3069](https://github.com/sitespeedio/sitespeed.io/pull/3069) has been removed. If you want to send per iteration data to Graphite use ```--graphite.perIteration```.
* The experimental flag for perIteration metric for Graphite [#3069](https://github.com/sitespeedio/sitespeed.io/pull/3069) has been removed. If you want to send per iteration data to Graphite use ```--graphite.perIteration```.
### Added
* All dashboards for Graphite has been updated to use Grafana 7.0.0 with a new look and feel.
* All dashboards for Graphite has been updated to use Grafana 7.0.0 with a new look and feel.
* Show all screenshots for a run in a tab [#3045](https://github.com/sitespeedio/sitespeed.io/pull/3045).
* Updated to [Browsertime 9.0.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#900----2020-06-26).
* There's a Chrome User Experience Report plugin bundled in sitespeed.io! Get the CrUx data using ```--crux.key``` and get your key from Google.
@ -2085,7 +2355,7 @@ There are five important new things in the new release:
## 13.1.1 - 2020-05-29
### Fixed
* Exit with sitespeed.io exit code when you run WebPageReplay in the Docker container [#3017](https://github.com/sitespeedio/sitespeed.io/pull/3017).
* Exit with sitespeed.io exit code when you run WebPageReplay in the Docker container [#3017](https://github.com/sitespeedio/sitespeed.io/pull/3017).
## 13.1.0 - 2020-05-28
### Added
@ -2118,7 +2388,7 @@ There are five important new things in the new release:
* Better guards for missing WebPageTest first view data [#3002](https://github.com/sitespeedio/sitespeed.io/pull/3002)
* If you used the old budget format, limits and values wasn't written in the HTML and in the log [#3009](https://github.com/sitespeedio/sitespeed.io/pull/3009).
### Tech
### Tech
* Continous work to move out CLI options to respective plugin by [Erick Wilder](https://github.com/erickwilder), thank you!
## 12.11.0 - 2020-05-16
@ -2219,7 +2489,7 @@ Some time ago we got [a tweet](https://twitter.com/robnavrey/status/125806312524
* Send load time for LCP to Graphite/Influx so you can choose between render/start time and use max value in the HTML [#2940](https://github.com/sitespeedio/sitespeed.io/pull/2940).
## 12.2.3 - 2020-03-20
### Fixed
### Fixed
* Remove videoRecordingStart from the summary [#2935](https://github.com/sitespeedio/sitespeed.io/pull/2935).
* Show CPU geckorprofile link only when you run Firefox [#2931](https://github.com/sitespeedio/sitespeed.io/pull/2931).
* Upgraded to [Browsertime 8.3.0](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#830---2020-03-20).
@ -2345,7 +2615,7 @@ Read about Browsertime 8.0 and sitespeed.io 12.0 in [the blog post](https://www.
* Collect number of DOM elements as a part of the page info for each run [#1000](https://github.com/sitespeedio/browsertime/pull/1000).
* Configure how often to check for the pageCompleteCheck. Default is every 200 ms, and it happens after the load event end (using the default pageLoadStrategy). Set it with `--browsertime.pageCompleteCheckPollTimeout`(value in ms) [#998](https://github.com/sitespeedio/browsertime/pull/998).
* Added missing pageLoadStrategy option in the CLI. The option worked but no visible cli help for it [#1001](https://github.com/sitespeedio/browsertime/pull/1001).
* Do not load the Browsertime WebExtention for Chrome (it is not used anymore) and make it possible for Firefox to disable to use it with `--browsertime.firefox.disableBrowsertimeExtension`.
* Do not load the Browsertime WebExtention for Chrome (it is not used anymore) and make it possible for Firefox to disable to use it with `--browsertime.firefox.disableBrowsertimeExtension`.
* Added configurable settle time for the browser to rest after the browser is open and before the tests starts to run. Use `--browsertime.timeToSettle` in ms [#1003](https://github.com/sitespeedio/browsertime/pull/1003).
* Calculate FID instead of just report it [#1005](https://github.com/sitespeedio/browsertime/pull/1005)
* You can now run ADB shell directly from your user script [#1007](https://github.com/sitespeedio/browsertime/pull/1007). Use `commands.android.shell('')`.
@ -2367,7 +2637,7 @@ Read about Browsertime 8.0 and sitespeed.io 12.0 in [the blog post](https://www.
## 11.3.0 - 2019-11-22
### Added
* Added the sitespeed.io version and browser version in the title of the annotation tag of Graphite and Grafana [#2791](https://github.com/sitespeedio/sitespeed.io/pull/2791), [#2792](https://github.com/sitespeedio/sitespeed.io/pull/2792) and [#2793](https://github.com/sitespeedio/sitespeed.io/pull/2793).
* Updated to Browsertime 7.2.2:
* Updated to Browsertime 7.2.2:
* There was a bug introduced in 7.0.0 that made navigation fail on Safari [#997](https://github.com/sitespeedio/browsertime/pull/997).
* Get phone and Android version from the phone [#991](https://github.com/sitespeedio/browsertime/pull/991).
* Take care of the case when a page overwrites the document.URL [#992](https://github.com/sitespeedio/browsertime/pull/992).

View File

@ -1,4 +1,4 @@
FROM sitespeedio/webbrowsers:chrome-132.0-firefox-134.0-edge-132.0
FROM sitespeedio/webbrowsers:chrome-143.0-firefox-146.0-edge-143.0
ARG TARGETPLATFORM=linux/amd64
@ -29,7 +29,7 @@ WORKDIR /usr/src/app
COPY package.json /usr/src/app/
COPY npm-shrinkwrap.json /usr/src/app/
COPY tools/postinstall.js /usr/src/app/tools/postinstall.js
RUN npm install --production && npm cache clean --force
RUN npm install --production && npm cache clean --force
COPY ./bin/ /usr/src/app/bin/
COPY ./lib/ /usr/src/app/lib/

View File

@ -1,4 +1,4 @@
FROM node:22.13.0-bookworm-slim
FROM node:24.11.0-bookworm-slim
ARG TARGETPLATFORM=linux/amd64
@ -15,7 +15,7 @@ RUN echo "deb http://deb.debian.org/debian/ unstable main contrib non-free" >> /
apt-get install -y --no-install-recommends firefox tcpdump iproute2 ca-certificates sudo --no-install-recommends --no-install-suggests && \
# Cleanup
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
&& rm -rf /var/lib/apt/lists/* /tmp/*
&& rm -rf /var/lib/apt/lists/* /tmp/*
# Install sitespeed.io
RUN mkdir -p /usr/src/app

11
HELP.md
View File

@ -2,7 +2,7 @@
We want to make sitespeed.io one of the best web performance tool in the world and we hope you can help us!
## Developers
We love to have more people involved in improving sitespeed.io. We are constantly working on adding more documentation and trying to write more information in the issues so its easier to help out. If there's an [issue](https://github.com/sitespeedio/sitespeed.io/issues) that you want to take on, ping the the issue and we can help you get started. You can also [join our Slack channel](https://join.slack.com/t/sitespeedio/shared_invite/zt-296jzr7qs-d6DId2KpEnMPJSQ8_R~WFw) if you need help!
We love to have more people involved in improving sitespeed.io. We are constantly working on adding more documentation and trying to write more information in the issues so its easier to help out. If there's an [issue](https://github.com/sitespeedio/sitespeed.io/issues) that you want to take on, ping the the issue and we can help you get started. You can also [join our Slack channel](https://join.slack.com/t/sitespeedio/shared_invite/zt-296jzr7qs-d6DId2KpEnMPJSQ8_R~WFw) if you need help! You can start by reading the [developer documentation](https://www.sitespeed.io/documentation/sitespeed.io/developers/).
## Designers
As a designer there's a lot you can do: You can help us improve the HTML result pages. Maybe we should restructure the metrics ? Or could the header/footer look better? You could also have look at [https://www.sitespeed.io](https://www.sitespeed.io/) where we have all the documentation. You can pretty much help us with everything, no one in the core team got design skills :)
@ -10,13 +10,6 @@ As a designer there's a lot you can do: You can help us improve the HTML result
## Documentation
Documentation is fun and it is the core of making sitespeed.io easy to use. We got a [special documentation tag for issues](https://github.com/sitespeedio/sitespeed.io/issues?q=is%3Aissue+is%3Aopen+label%3Adocumentation) that you can use to find where we know we lack documentation. Fixing spelling mistakes is great. Or rewrite parts that you think is too complicated. You can find what you need to send a PR to the documentation [here](https://github.com/sitespeedio/sitespeed.io/tree/main/docs).
## Tests
We lack unit tests. You can read about [our testing pipeline](https://www.sitespeed.io/releasing-with-confidence/) that works good for us but more unit tests are always good. A good start is adding support for the code in the [support library](https://github.com/sitespeedio/sitespeed.io/tree/main/lib/support).
## Companies
Do you use sitespeed.io in your everyday work? Then we have a perfect proposition for you! Have a hack day with focus on sitespeed.io for your team and contribute back. Pick one the things in the **Help wanted** section or make your plugin Open Source and tell us about it. Or maybe there's a something you think is missing? Create it. Contribute back.
# Help wanted
You can help us:
* Help us improve the documentation. We love your feedback and help [https://github.com/sitespeedio/sitespeed.io/tree/main/docs](https://github.com/sitespeedio/sitespeed.io/tree/main/docs).
Do you use sitespeed.io in your everyday work? Then go to the [sponsor page](https://www.sitespeed.io/sponsor/).

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2012-2025 Peter Hedenskog
Copyright (c) 2012-2026 Peter Hedenskog
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -194,7 +194,7 @@ With these insights, you can make informed decisions about optimizations and tra
### Video Performance Analysis
For visual feedback, `sitespeed.io` can generate videos, making it easier to see how your site loads in real-time. Here's an sample video:
For visual feedback, `sitespeed.io` can generate videos, making it easier to see how your site loads in real-time. Here's a sample video:
![Video Analysis](https://raw.githubusercontent.com/sitespeedio/sitespeed.io/main/docs/img/barack.gif)

View File

@ -46,7 +46,10 @@ async function api(options) {
if (apiOptions.mobile) {
apiOptions.api.testType = 'emulatedMobile';
} else if (apiOptions.android) {
} else if (
apiOptions.android === true ||
(apiOptions.android && apiOptions.android.enabled === true)
) {
apiOptions.api.testType = 'android';
} else if (apiOptions.safari && apiOptions.safari.ios) {
apiOptions.api.testType = 'ios';

View File

@ -11,6 +11,7 @@ RUN npm --version
RUN npm install @sitespeed.io/plugin-lighthouse -g --production
RUN npm install @sitespeed.io/plugin-gpsi -g --production
RUN npm install @sitespeed.io/plugin-influxdb -g --production
VOLUME /sitespeed.io
WORKDIR /sitespeed.io

View File

@ -1,7 +1,7 @@
version: '3'
services:
grafana:
image: grafana/grafana:11.0.0
image: grafana/grafana:12.2.0
hostname: grafana
depends_on:
- graphite

View File

@ -1,31 +1,50 @@
#!/bin/bash
firefox --version
firefox --version 2>/dev/null
SITESPEEDIO=/usr/src/app/bin/sitespeed.js
MAX_OLD_SPACE_SIZE="${MAX_OLD_SPACE_SIZE:-2048}"
WORKDIR_UID=$(stat -c "%u" .)
WORKDIR_GID=$(stat -c "%g" .)
# write files owned by the user who runs the container
# if your volume is mounted at /sitespeed.io, use it as CWD
[[ -d /sitespeed.io && "$PWD" = "/" ]] && cd /sitespeed.io
# Create user with the same UID and GID as the owner of the working directory, which will be used
# to execute node. This is partly for security and partly so output files won't be owned by root.
groupadd --non-unique --gid $WORKDIR_GID sitespeedio
useradd --non-unique --uid $WORKDIR_UID --gid $WORKDIR_GID --home-dir /tmp sitespeedio
uid=$(stat -c '%u' . 2>/dev/null || echo 0)
gid=$(stat -c '%g' . 2>/dev/null || echo 0)
if [[ "$uid" -ne 0 && "$gid" -ne 0 ]]; then
if ! getent group "$gid" >/dev/null 2>&1; then
groupadd -g "$gid" sitespeedio-host 2>/dev/null || true
fi
if ! getent passwd "$uid" >/dev/null 2>&1; then
useradd -u "$uid" -g "$gid" -M -d /tmp -s /bin/bash sitespeedio-host 2>/dev/null || true
fi
fi
run_as_host() {
if [[ "$uid" -ne 0 && "$gid" -ne 0 ]]; then
HOME=/tmp chroot --skip-chdir --userspec="+${uid}:+${gid}" / "$@"
else
HOME=/tmp "$@"
fi
}
function execNode(){
run_as_host node "$@"
}
# Need to explictly override the HOME directory to prevent dconf errors like:
# (firefox:2003): dconf-CRITICAL **: 00:31:23.379: unable to create directory '/root/.cache/dconf': Permission denied. dconf will not work properly.
export HOME=/tmp
# Inspired by docker-selenium way of shutting down
function shutdown {
kill -s SIGTERM ${PID}
wait $PID
}
chroot --skip-chdir --userspec='sitespeedio:sitespeedio' / node --max-old-space-size=$MAX_OLD_SPACE_SIZE $SITESPEEDIO "$@" &
execNode --max-old-space-size=$MAX_OLD_SPACE_SIZE $SITESPEEDIO "$@" &
PID=$!

View File

@ -1,5 +1,30 @@
#!/bin/bash
#
set -e
# write files owned by the user who runs the container
# if your volume is mounted at /sitespeed.io, use it as CWD
[[ -d /sitespeed.io && "$PWD" = "/" ]] && cd /sitespeed.io
uid=$(stat -c '%u' . 2>/dev/null || echo 0)
gid=$(stat -c '%g' . 2>/dev/null || echo 0)
if [[ "$uid" -ne 0 && "$gid" -ne 0 ]]; then
if ! getent group "$gid" >/dev/null 2>&1; then
groupadd -g "$gid" sitespeedio-host 2>/dev/null || true
fi
if ! getent passwd "$uid" >/dev/null 2>&1; then
useradd -u "$uid" -g "$gid" -M -d /tmp -s /bin/bash sitespeedio-host 2>/dev/null || true
fi
fi
run_as_host() {
if [[ "$uid" -ne 0 && "$gid" -ne 0 ]]; then
HOME=/tmp chroot --skip-chdir --userspec="+${uid}:+${gid}" / "$@"
else
HOME=/tmp "$@"
fi
}
# All browsers do not exist in all architectures.
if [[ `which google-chrome` ]]; then
google-chrome --version
@ -8,7 +33,7 @@ elif [[ `which chromium-browser` ]]; then
fi
if [[ `which firefox` ]]; then
firefox --version
firefox --version 2>/dev/null
fi
if [[ `which microsoft-edge` ]]; then
@ -40,20 +65,12 @@ else
WPR_HTTPS_PORT=${WPR_HTTPS_PORT:-443}
fi
WORKDIR_UID=$(stat -c "%u" .)
WORKDIR_GID=$(stat -c "%g" .)
# Create user with the same UID and GID as the owner of the working directory, which will be used
# to execute node. This is partly for security and partly so output files won't be owned by root.
groupadd --non-unique --gid $WORKDIR_GID sitespeedio
useradd --non-unique --uid $WORKDIR_UID --gid $WORKDIR_GID --home-dir /tmp sitespeedio
# Need to explictly override the HOME directory to prevent dconf errors like:
# (firefox:2003): dconf-CRITICAL **: 00:31:23.379: unable to create directory '/root/.cache/dconf': Permission denied. dconf will not work properly.
export HOME=/tmp
function execNode(){
chroot --skip-chdir --userspec='sitespeedio:sitespeedio' / node "$@"
run_as_host node "$@"
}
# If we run Chrome on Android, we need to start the ADB server
@ -111,7 +128,7 @@ function runWebPageReplay() {
execNode --max-old-space-size=$MAX_OLD_SPACE_SIZE $SITESPEEDIO --browsertime.firefox.preference security.OCSP.enabled:0 --browsertime.firefox.acceptInsecureCerts true --browsertime.firefox.preference network.dns.forceResolve:127.0.0.1 --browsertime.chrome.webPageReplayHostResolver --browsertime.chrome.webPageReplayHTTPPort $WPR_HTTP_PORT --browsertime.chrome.webPageReplayHTTPSPort $WPR_HTTPS_PORT --browsertime.connectivity.engine throttle --browsertime.connectivity.throttle.localhost --replay --browsertime.connectivity.profile custom --browsertime.connectivity.rtt $LATENCY "$@" &
PID=$!
trap shutdown SIGTERM SIGINT
wait $PID
EXIT_STATUS=$?

View File

@ -1,3 +1,3 @@
source "https://rubygems.org"
gem 'github-pages', group: :jekyll_plugins
ruby '3.0.0'
ruby '~> 3.0.0'

View File

@ -2,4 +2,4 @@
* * *
Join the effort to make Sitespeed.io even better! Whether you're a developer, writer, or UX expert, there are many ways you can contribute to the improvement of our tool. Check out our [help section](https://github.com/sitespeedio/sitespeed.io/blob/main/HELP.md) and [full issue list](https://github.com/sitespeedio/sitespeed.io/issues) for opportunities to get involved. And a big thank you to [all those]((https://github.com/sitespeedio/sitespeed.io/blob/main/CONTRIBUTORS.md)) who have already made contributions through pull requests or ideas. Your support is greatly appreciated.
Join the effort to make Sitespeed.io even better! Whether you're a developer, writer, or UX expert, there are many ways you can contribute to the improvement of our tool. Check out our [help section](https://github.com/sitespeedio/sitespeed.io/blob/main/HELP.md) and [full issue list](https://github.com/sitespeedio/sitespeed.io/issues) for opportunities to get involved. And a big thank you to [all those](https://github.com/sitespeedio/sitespeed.io/blob/main/CONTRIBUTORS.md) who have already made contributions through pull requests or ideas. Your support is greatly appreciated.

View File

@ -1 +1 @@
24.0.1
26.3.1

View File

@ -1 +1 @@
8.1.1
8.1.3

View File

@ -1 +1 @@
1.0.1
1.7.1

View File

@ -1 +1 @@
36.0.2
39.3.1

View File

@ -1 +1 @@
1.0.3
1.2.0

View File

@ -41,7 +41,7 @@ layout: compress
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="{{site.baseurl}}/img/ico/sitespeed.io-72.png">
<link rel="apple-touch-icon-precomposed" href="{{site.baseurl}}/img/ico/sitespeed.io-57.png">
<link rel="shortcut icon" href="{{site.baseurl}}/img/ico/sitespeed.io.ico">
<link type="application/atom+xml" href="https://www.sitespeed.io/feed/index.xml" rel="alternate" />
<link type="application/atom+xml" href="https://www.sitespeed.io/feed/blog.xml" rel="alternate" />
<style>
{% include css/default.css %}

View File

@ -54,6 +54,8 @@ android
--android.pretestPowerPress, --androidPretestPowerPress Press the power button on the phone before a test starts. [boolean] [default: false]
--android.pretestPressHomeButton, --androidPretestPressHomeButton Press the home button on the phone before a test starts. [boolean] [default: false]
--android.verifyNetwork, --androidVerifyNetwork Before a test start, verify that the device has a Internet connection by pinging 8.8.8.8 (or a configurable domain with --androidPingAddress) [boolean] [default: false]
--android.simpleperf, --androidSimpleperf Path to the Simpleperf profiler from the Android NDK. [string]
--android.perfettoTrace, --androidPerfettoTrace Collect a perfetto trace with the given configuration. [default: false]
--android.gnirehtet, --gnirehtet Start gnirehtet and reverse tethering the traffic from your Android phone. [boolean] [default: false]
firefox
@ -66,7 +68,7 @@ firefox
--firefox.developer Use Firefox Developer. Works on OS X. For Linux you need to set the binary path. [boolean]
--firefox.preference Extra command line arguments to pass Firefox preferences by the format key:value To add multiple preferences, repeat --firefox.preference once per argument.
--firefox.args Extra command line arguments to pass to the Firefox process (e.g. --MOZ_LOG). To add multiple arguments to Firefox, repeat --firefox.args once per argument.
--firefox.includeResponseBodies Include response bodies in HAR [choices: "none", "all", "html"] [default: "none"]
--firefox.includeResponseBodies Include response bodies in HAR [choices: "none", "all"] [default: "none"]
--firefox.appconstants Include Firefox AppConstants information in the results [boolean] [default: false]
--firefox.acceptInsecureCerts Accept insecure certs [boolean]
--firefox.windowRecorder Use the internal compositor-based Firefox window recorder to emit PNG files for each frame that is a meaningful change. The PNG output will further be merged into a variable frame rate video for analysis. Use this instead of ffmpeg to record a video (you still need the --video flag). [boolean] [default: false]
@ -79,7 +81,7 @@ firefox
--firefox.geckoProfilerParams.interval Sampling interval in ms. Defaults to 1 on desktop, and 4 on android. [number]
--firefox.geckoProfilerParams.bufferSize Buffer size in elements. Default is ~90MB. [number] [default: 13107200]
--firefox.perfStats Collect gecko performance statistics as measured internally by the firefox browser. See https://searchfox.org/mozilla-central/source/tools/performance/PerfStats.h#24-33 [boolean] [default: false]
--firefox.perfStatsParams.mask Mask to decide which features to enable [number] [default: 4294967295]
--firefox.perfStatsParams.features Comma-separated list of PerfStats features to enable. If not provided, all features will be enabled. [string]
--firefox.collectMozLog Collect the MOZ HTTP log (by default). See --firefox.setMozLog if you need to specify the logs you wish to gather. [boolean]
--firefox.powerConsumption Enable power consumption collection (in Wh). To get the consumption you also need to set firefox.geckoProfilerParams.features to include power. [boolean] [default: false]
--firefox.setMozLog Use in conjunction with firefox.collectMozLog to set MOZ_LOG to something specific. Without this, the HTTP logs will be collected by default [default: "timestamp,nsHttp:5,cache2:5,nsSocketTransport:5,nsHostResolver:5"]
@ -111,7 +113,7 @@ video
--videoParams.threads Number of threads to use for video recording. Default is determined by ffmpeg. [default: 0]
edge
--edge.edgedriverPath Path to custom msedgedriver version (need to match your Egde version).
--edge.edgedriverPath Path to custom msedgedriver version (need to match your Edge version).
--edge.binaryPath Path to custom Edge binary
safari
@ -124,13 +126,12 @@ safari
--safari.useSimulator If the value of useSimulator is true, safaridriver will only use iOS Simulator hosts. If the value of safari:useSimulator is false, safaridriver will not use iOS Simulator hosts. NOTE: An Xcode installation is required in order to run WebDriver tests on iOS Simulator hosts. [boolean] [default: false]
Screenshot
--screenshot Save one screenshot per iteration. [boolean] [default: false]
--screenshotLCP Save one screenshot per iteration that shows the largest contentful paint element (if the browser supports LCP). [boolean] [default: false]
--screenshotLS Save one screenshot per iteration that shows the layout shift elements (if the browser supports layout shift). [boolean] [default: false]
--screenshotParams.type Set the file type of the screenshot [choices: "png", "jpg"] [default: "jpg"]
--screenshotParams.png.compressionLevel zlib compression level [default: 6]
--screenshotParams.jpg.quality Quality of the JPEG screenshot. 1-100 [default: 80]
--screenshotParams.maxSize The max size of the screenshot (width and height). [default: 2000]
--screenshot Save one screenshot per iteration. [boolean] [default: false]
--screenshotLCP Save one screenshot per iteration that shows the largest contentful paint element (if the browser supports LCP). [boolean] [default: false]
--screenshotLS Save one screenshot per iteration that shows the layout shift elements (if the browser supports layout shift). [boolean] [default: false]
--screenshotParams.type Set the file type of the screenshot [choices: "png", "jpg"] [default: "jpg"]
--screenshotParams.jpg.quality Quality of the JPEG screenshot. 1-100 [default: 80]
--screenshotParams.maxSize The max size of the screenshot (width and height). [default: 2000]
PageLoad
--pageCompleteCheck Supply a JavaScript (inline or JavaScript file) that decides when the browser is finished loading the page and can start to collect metrics. The JavaScript snippet is repeatedly queried to see if page has completed loading (indicated by the script returning true). Use it to fetch timings happening after the loadEventEnd. By default the tests ends 2 seconds after loadEventEnd. Also checkout --pageCompleteCheckInactivity and --pageCompleteCheckPollTimeout
@ -177,7 +178,6 @@ Options:
--visualElements, --visuaElements Collect Visual Metrics from elements. Works only with --visualMetrics turned on. By default you will get visual metrics from the largest image within the view port and the largest h1. You can also configure to pickup your own defined elements with --scriptInput.visualElements [boolean]
--visualMetricsPerceptual Collect Perceptual Speed Index when you run --visualMetrics. [boolean]
--visualMetricsContentful Collect Contentful Speed Index when you run --visualMetrics. [boolean]
--visualMetricsPortable Use the portable visual-metrics processing script (no ImageMagick dependencies). [boolean] [default: true]
--visualMetricsKeyColor Collect Key Color frame metrics when you run --visualMetrics. Each --visualMetricsKeyColor supplied must have 8 arguments: key name, red channel (0-255) low and high, green channel (0-255) low and high, blue channel (0-255) low and high, fraction (0.0-1.0) of pixels that must match each channel. [array]
--scriptInput.visualElements Include specific elements in visual elements. Give the element a name and select it with document.body.querySelector. Use like this: --scriptInput.visualElements name:domSelector see https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors. Add multiple instances to measure multiple elements. Visual Metrics will use these elements and calculate when they are visible and fully rendered.
--scriptInput.longTask, --minLongTaskLength Set the minimum length of a task to be categorised as a CPU Long Task. It can never be smaller than 50. The value is in ms and only works in Chromium browsers at the moment. [number] [default: 50]
@ -200,11 +200,13 @@ Options:
--script Add custom Javascript to run after the page has finished loading to collect metrics. If a single js file is specified, it will be included in the category named "custom" in the output json. Pass a folder to include all .js scripts in the folder, and have the folder name be the category. Note that --script can be passed multiple times.
--userAgent Override user agent
--appendToUserAgent Append a String to the user agent. Works in Chrome/Edge and Firefox.
--logLevel Manually set the min log level [string] [choices: "trace", "verbose", "debug", "info", "warning", "error"]
-q, --silent Only output info in the logs, not to the console. Enter twice to suppress summary line. [count]
-o, --output Specify file name for Browsertime data (ex: 'browsertime'). Unless specified, file will be named browsertime.json
--har Specify file name for .har file (ex: 'browsertime'). Unless specified, file will be named browsertime.har
--skipHar Pass --skipHar to not collect a HAR file. [boolean]
--gzipHar Pass --gzipHar to gzip the HAR file [boolean]
--cleanSensitiveHeaders Pass --cleanSensitiveHeaders to remove sensitive headers in the HAR file [boolean]
--config Path to JSON config file. You can also use a .browsertime.json file that will automatically be found by Browsertime using find-up.
--viewPort Size of browser window WIDTHxHEIGHT or "maximize". Note that "maximize" is ignored for xvfb.
--resultDir Set result directory for the files produced by Browsertime

View File

@ -1,6 +1,6 @@
---
layout: default
title: Documentation Browsertime 24
title: Documentation Browsertime 26
description: Read about all you can do with Browsertime.
keywords: tools, documentation, web performance
nav: documentation
@ -9,7 +9,7 @@ image: https://www.sitespeed.io/img/sitespeed-2.0-twitter.png
twitterdescription: Documentation for Browsertime.
---
# Documentation v24
# Documentation v26
<img src="{{site.baseurl}}/img/logos/browsertime.png" class="pull-right img-big" alt="Browsertime logo" width="200" height="175">

View File

@ -21,7 +21,7 @@ Browser
--browsertime.pageCompleteCheckStartWait, --pageCompleteCheckStartWait The time in ms to wait for running the page complete check for the first time. Use this when you have a pageLoadStrategy set to none [number] [default: 500]
--browsertime.pageCompleteCheckNetworkIdle, --pageCompleteCheckNetworkIdle Use the network log instead of running JavaScript to decide when to end the test. This will wait for 5 seconds of no network activity before it ends the test. This can be used with Chrome/Edge and Firefox. [boolean] [default: false]
--browsertime.pageLoadStrategy, --pageLoadStrategy Set the strategy to waiting for document readiness after a navigation event. After the strategy is ready, your pageCompleteCheck will start running. This only work for Firefox and Chrome and please check which value each browser implements. [string] [choices: "eager", "none", "normal"] [default: "none"]
--browsertime.script, --script Add custom Javascript that collect metrics and run after the page has finished loading. Note that --script can be passed multiple times if you want to collect multiple metrics. The metrics will automatically be pushed to the summary/detailed summary and each individual page + sent to Graphite/InfluxDB.
--browsertime.script, --script Add custom Javascript that collect metrics and run after the page has finished loading. Note that --script can be passed multiple times if you want to collect multiple metrics. The metrics will automatically be pushed to the summary/detailed summary and each individual page + sent to Graphite
--browsertime.injectJs, --injectJs Inject JavaScript into the current page at document_start. More info: https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/contentScripts
--browsertime.selenium.url Configure the path to the Selenium server when fetching timings using browsers. If not configured the supplied NodeJS/Selenium version is used.
--browsertime.viewPort, --viewPort The browser view port size WidthxHeight like 400x300 [default: "1366x708"]
@ -35,7 +35,7 @@ Browser
--browsertime.visualMetricsPerceptual, --visualMetricsPerceptual Collect Perceptual Speed Index when you run --visualMetrics. [boolean]
--browsertime.visualMetricsContentful, --visualMetricsContentful Collect Contentful Speed Index when you run --visualMetrics. [boolean]
--browsertime.visualElements, --visualElements Collect Visual Metrics from elements. Works only with --visualMetrics turned on. By default you will get visual metrics from the largest image within the view port and the largest h1. You can also configure to pickup your own defined elements with --scriptInput.visualElements [boolean]
--browsertime.scriptInput.visualElements, --scriptInput.visualElements Include specific elements in visual elements. Give the element a name and select it with document.body.querySelector. Use like this: --scriptInput.visualElements name:domSelector . Add multiple instances to measure multiple elements. Visual Metrics will use these elements and calculate when they are visible and fully rendered.
--browsertime.scriptInput.visualElements, --scriptInput.visualElements Include specific elements in visual elements. Give the element a name and select it with document.body.querySelector. Use like this: --scriptInput.visualElements name:domSelector . If you want to measure multiple elements, use a configuration file with an array for the input. Visual Metrics will use these elements and calculate when they are visible and fully rendered.
--browsertime.scriptInput.longTask, --minLongTaskLength Set the minimum length of a task to be categorised as a CPU Long Task. It can never be smaller than 50. The value is in ms and you make Browsertime collect long tasks using --chrome.collectLongTasks or --cpu. [number] [default: 50]
--browsertime.video, --video Record a video and store the video. Set it to false to remove the video that is created by turning on visualMetrics. To remove fully turn off video recordings, make sure to set video and visualMetrics to false. Requires FFMpeg to be installed. [boolean]
--browsertime.videoParams.framerate, --videoParams.framerate, --fps Frames per second in the video [default: 30]
@ -70,7 +70,7 @@ Filmstrip
--filmstrip.showAll Show all screenshots in the filmstrip, independent if they have changed or not. [boolean] [default: false]
Firefox
--browsertime.firefox.includeResponseBodies, --firefox.includeResponseBodies Warning: This do not work at the moment, see https://github.com/sitespeedio/sitespeed.io/issues/4295 [choices: "none", "all", "html"] [default: "none"]
--browsertime.firefox.includeResponseBodies, --firefox.includeResponseBodies Collect response bodies in the HAR [choices: "none", "all"] [default: "none"]
--browsertime.firefox.nightly, --firefox.nightly Use Firefox Nightly. Works on OS X. For Linux you need to set the binary path. [boolean]
--browsertime.firefox.beta, --firefox.beta Use Firefox Beta. Works on OS X. For Linux you need to set the binary path. [boolean]
--browsertime.firefox.developer, --firefox.developer Use Firefox Developer. Works on OS X. For Linux you need to set the binary path. [boolean]
@ -183,21 +183,6 @@ Graphite
--graphite.bulkSize Break up number of metrics to send with each request. [number]
--graphite.messages Define which messages to send to Graphite. By default we do not send data per run, but you can change that by adding run as one of the options [default: ["pageSummary","summary"]]
InfluxDB
--influxdb.protocol The protocol used to store connect to the InfluxDB host. [default: "http"]
--influxdb.host The InfluxDB host used to store captured metrics.
--influxdb.port The InfluxDB port used to store captured metrics. [default: 8086]
--influxdb.username The InfluxDB username for your InfluxDB instance (only for InfluxDB v1)
--influxdb.password The InfluxDB password for your InfluxDB instance (only for InfluxDB v1).
--influxdb.organisation The InfluxDB organisation for your InfluxDB instance (only for InfluxDB v2)
--influxdb.token The InfluxDB token for your InfluxDB instance (only for InfluxDB v2)
--influxdb.version The InfluxDB version of your InfluxDB instance. [default: 1]
--influxdb.database The database name used to store captured metrics. [default: "sitespeed"]
--influxdb.tags A comma separated list of tags and values added to each metric [default: "category=default"]
--influxdb.includeQueryParams Whether to include query parameters from the URL in the InfluxDB keys or not [boolean] [default: false]
--influxdb.groupSeparator Choose which character that will separate a group/domain. Default is underscore, set it to a dot if you wanna keep the original domain name. [default: "_"]
--influxdb.annotationScreenshot Include screenshot (from Browsertime) in the annotation. You need to specify a --resultBaseURL for this to work. [boolean] [default: false]
Plugins
--plugins.list List all configured plugins in the log. [boolean]
--plugins.add Extra plugins that you want to run. Relative or absolute path to the plugin. Specify multiple plugin names separated by comma, or repeat the --plugins.add option
@ -212,11 +197,10 @@ Budget
--budget.removeWorkingResult, --budget.removePassingResult Remove the result of URLs that pass the budget. You can use this if you many URL and only care about the ones that fails your budget. All videos/HTML for the working URLs will be removed if you pass this on. [boolean]
Screenshot
--browsertime.screenshot Set to false to disable screenshots [boolean] [default: true]
--browsertime.screenshotParams.type, --screenshot.type Set the file type of the screenshot [choices: "png", "jpg"] [default: "png"]
--browsertime.screenshotParams.png.compressionLevel, --screenshot.png.compressionLevel zlib compression level [default: 6]
--browsertime.screenshotParams.jpg.quality, --screenshot.jpg.quality Quality of the JPEG screenshot. 1-100 [default: 80]
--browsertime.screenshotParams.maxSize, --screenshot.maxSize The max size of the screenshot (width and height). [default: 2000]
--browsertime.screenshot Set to false to disable screenshots [boolean] [default: true]
--browsertime.screenshotParams.type, --screenshot.type Set the file type of the screenshot [choices: "png", "jpg"] [default: "png"]
--browsertime.screenshotParams.jpg.quality, --screenshot.jpg.quality Quality of the JPEG screenshot. 1-100 [default: 80]
--browsertime.screenshotParams.maxSize, --screenshot.maxSize The max size of the screenshot (width and height). [default: 2000]
Metrics
--metrics.list List all possible metrics in the data folder (metrics.txt). [boolean] [default: false]
@ -321,12 +305,11 @@ Options:
-v, --verbose Verbose mode prints progress messages to the console. Enter up to three times (-vvv) to increase the level of detail. [count]
--browsertime.xvfb, --xvfb Start xvfb before the browser is started [boolean] [default: false]
--browsertime.xvfbParams.display, --xvfbParams.display The display used for xvfb [default: 99]
--browsertime.visualMetricsPortable Use the portable visual-metrics processing script (no ImageMagick dependencies). [boolean] [default: true]
--browsertime.enableProfileRun, --enableProfileRun Make one extra run that collects the profiling trace log (no other metrics is collected). For Chrome it will collect the timeline trace, for Firefox it will get the Geckoprofiler trace. This means you do not need to get the trace for all runs and can skip the overhead it produces. You should not run this together with --cpu since that will get a trace for every iteration. [boolean]
--browsertime.enableVideoRun, --enableVideoRun Make one extra run that collects video and visual metrics. This means you can do your runs with --visualMetrics true --video false --enableVideoRun true to collect visual metrics from all runs and save a video from the profile/video run. If you run it together with --enableProfileRun it will also collect profiling race. [boolean]
--browsertime.cjs, --cjs Load scripting files that ends with .js as common js. Default (false) loads files as esmodules. [boolean] [default: false]
--browsertime.tcpdump, --tcpdump Collect a tcpdump for each tested URL. The user that runs sitespeed.io should have sudo rights for tcpdump to work. [boolean] [default: false]
--browsertime.android, --android Short key to use Android. Will automatically use com.android.chrome for Chrome and stable Firefox. If you want to use another Chrome version, use --chrome.android.package [boolean] [default: false]
--browsertime.android.enabled, --android.enabled Short key to use Android. Will automatically use com.android.chrome for Chrome and stable Firefox. If you want to use another Chrome version, use --chrome.android.package [boolean] [default: false]
--browsertime.iqr Use IQR, or Inter Quartile Range filtering filters data based on the spread of the data. See https://en.wikipedia.org/wiki/Interquartile_range. In some cases, IQR filtering may not filter out anything. This can happen if the acceptable range is wider than the bounds of your dataset. [boolean] [default: false]
--browsertime.preWarmServer, --preWarmServer Do pre test requests to the URL(s) that you want to test that is not measured. Do that to make sure your web server is ready to serve. The pre test requests is done with another browser instance that is closed after pre testing is done. [boolean] [default: false]
--browsertime.preWarmServerWaitTime The wait time before you start the real testing after your pre-cache request. [number] [default: 5000]
@ -339,12 +322,13 @@ Options:
--outputFolder The folder where the result will be stored. If you do not set it, the result will be stored in "DOMAIN_OR_FILENAME_OR_SLUG/TIMESTAMP" [string]
--copyLatestFilesToBase Copy the latest screenshots to the root folder (so you can include it in Grafana). Do not work together it --outputFolder. [boolean] [default: false]
--firstParty A regex running against each request and categorize it as first vs third party URL. (ex: ".*sitespeed.*"). If you do not set a regular expression parts of the domain from the tested URL will be used: ".*domain.*"
--urlAlias Use an alias for the URL (if you feed URLs from a file you can instead have the alias in the file). You need to pass on the same amount of alias as URLs. The alias is used as the name of the URL on the HTML report and in Graphite/InfluxDB. Pass on multiple --urlAlias for multiple alias/URLs. This will override alias in a file. [string]
--groupAlias Use an alias for the group/domain. You need to pass on the same amount of alias as URLs. The alias is used as the name of the group in Graphite/InfluxDB. Pass on multiple --groupAlias for multiple alias/groups. This do not work for scripting at the moment. [string]
--urlAlias Use an alias for the URL (if you feed URLs from a file you can instead have the alias in the file). You need to pass on the same amount of alias as URLs. The alias is used as the name of the URL on the HTML report and in Graphite. Pass on multiple --urlAlias for multiple alias/URLs. This will override alias in a file. [string]
--groupAlias Use an alias for the group/domain. You need to pass on the same amount of alias as URLs. The alias is used as the name of the group in Graphite. Pass on multiple --groupAlias for multiple alias/groups. This do not work for scripting at the moment. [string]
--utc Use Coordinated Universal Time for timestamps [boolean] [default: false]
--useHash If your site uses # for URLs and # give you unique URLs you need to turn on useHash. By default is it turned off, meaning URLs with hash and without hash are treated as the same URL [boolean] [default: false]
--multi Test multiple URLs within the same browser session (same cache etc). Only works with Browsertime. Use this if you want to test multiple pages (use journey) or want to test multiple pages with scripts. You can mix URLs and scripts (the order will matter): login.js https://www.sitespeed.io/ logout.js - More details: https://www.sitespeed.io/documentation/sitespeed.io/scripting/ [boolean] [default: false]
--name Give your test a name.
--logLevel Manually set the min log level [string] [choices: "trace", "verbose", "debug", "info", "warning", "error"]
-o, --open, --view Open your test result in your default browser (Mac OS or Linux with xdg-open).
--slug Give your test a slug. The slug is used when you send the metrics to your data storage to identify the test and the folder of the tests. The max length of the slug is 200 characters and it can only contain a-z A-Z 0-9 and -_ characters.
--config Path to JSON config file

View File

@ -219,7 +219,7 @@ docker run --rm -v "$(pwd):/sitespeed.io" sitespeedio/sitespeed.io:{% include ve
The CLI will always override the JSON config.
You can also extend another JSON config file. The path needs to be absolute.
You can also extend another JSON config file. The path needs to be absolute. We recommend that you use a configuration file because that makes things easier.
~~~json
{
@ -239,7 +239,7 @@ You can also extend another JSON config file. The path needs to be absolute.
}
~~~
If you have a parameter that you want to repeat, for example setting multiple request headers, the field needs to be an JSON array.
If you have a parameter that you want to repeat, for example setting multiple request headers, the field needs to be an JSON array.
~~~json
{

View File

@ -20,6 +20,8 @@ You can run it with:
docker run --shm-size=1g --rm -v "$(pwd):/sitespeed.io" sitespeedio/sitespeed.io:{% include version/sitespeed.io.txt %}-plus1 https://www.sitespeed.io/ --plugins.remove @sitespeed.io/plugin-lighthouse
```
You would also need to add the `--gpsi.key YOUR_GPSI_KEY` to sitespeed.io. The GPSI key is provided by Google and you can get it [here](https://cloud.google.com/docs/authentication/api-keys).
The container also includes Lighthouse. We automatically release a new version of the container per release by adding *-plus1* to the tag. If you use Graphite/InfluxDb the score from Lighthouse and GPSI will be automatically stored.
The plugin will send a request to the Google Page Speed Servers and parse the result. The result will look something like this:

View File

@ -1,6 +1,6 @@
---
layout: default
title: Documentation sitespeed.io 31.x
title: Documentation sitespeed.io 39.x
description: Read about all you can do with sitespeed.io.
keywords: tools, documentation, web performance
nav: documentation
@ -9,7 +9,7 @@ image: https://www.sitespeed.io/img/sitespeed-2.0-twitter.png
twitterdescription: Documentation for sitespeed.io.
---
# Documentation v34
# Documentation v39
<img src="{{site.baseurl}}/img/logos/sitespeed.io.png" class="pull-right img-big" alt="sitespeed.io logo" width="200" height="214">
@ -18,7 +18,7 @@ Sitespeed.io is the complete toolbox to test the web performance of your web sit
## Start
* [Introduction](introduction/) - start here if you are new to the project or web performance testing.
* [Installation](installation/) - install using npm, yarn or run our Docker containers.
* [Browsers](browsers/) - collect timings using real browsers. We support Firefox, Chrome, Chrome on Android and limited support for Safari on OS X and iOS.
* [Browsers](browsers/) - collect timings using real browsers. We support Firefox, Chrome, Chrome on Android and limited support for Safari on OS X and iOS.
* [Compare plugin](compare/) - use Mann Whitney U or Wilcox statistical methods to know if you have a regression.
* [Configuration](configuration/) - there's a lot of things you can do with sitespeed.io, lets checkout how!
* [Connectivity](connectivity/) - set the connectivity to emulate real users network conditions.

View File

@ -176,24 +176,6 @@ Here is an example of a fully configured budget file.
}
~~~
If you use WebPageTest you can configure:
~~~json
{
"budget": {
"webpagetest": {
"SpeedIndex": 1000,
"lastVisualChange": 2000,
"render": 800,
"visualComplete": 2000,
"visualComplete95": 2000,
"TTFB": 150,
"fullyLoaded": 3000
}
}
}
~~~
If you use Lighthouse you can configure:
~~~json

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -632,6 +632,29 @@ function addHrefToSidebarTitle() {
});
}
function highlightActiveLinkInSidebar() {
const list = document.location.href.split('/');
const targetURL = decodeURI(list[list.length - 1]);
let element = document.querySelector(`.sidebar a[href*='${targetURL}']`);
if (!element) {
try {
element = document.querySelector(
`.sidebar a[href*='${targetURL.split('#')[0]}']`
);
} catch (e) {
console.error(e);
return;
}
}
if (!element) return;
element.parentElement.classList.add('active');
element.scrollIntoView();
}
function onDomContentLoaded() {
var themeButton = document.querySelectorAll('.theme-toggle');
@ -676,6 +699,7 @@ function onDomContentLoaded() {
initTooltip();
fixTable();
addHrefToSidebarTitle();
highlightActiveLinkInSidebar();
}
// eslint-disable-next-line no-undef

File diff suppressed because one or more lines are too long

View File

@ -10,7 +10,7 @@ body {
a,
a:active {
color: #00bbff;
color: #0bf;
}
hr {
@ -43,6 +43,8 @@ h6 {
background: #252525;
}
.with-arrow {
fill: #999;
}
@ -51,6 +53,10 @@ h6 {
background: #292929;
}
.sidebar-section-children.active {
background: #444;
}
.sidebar-section-children a:hover {
background: #2c2c2c;
}
@ -86,8 +92,8 @@ h6 {
}
.navbar-item a:active {
color: #aaa;
background-color: #222;
color: #aaa;
}
.navbar-item:hover {
@ -105,8 +111,8 @@ h6 {
.toc-link {
color: #777;
transition: color 0.3s;
font-size: 0.875rem;
transition: color 0.3s;
}
.toc-link.is-active-link {
@ -193,7 +199,6 @@ samp {
color: #eee;
}
/* stylelint-enable */
table .name,
.params .name,
@ -396,12 +401,12 @@ blockquote {
background: #222;
}
/* scroll bar */
::-webkit-scrollbar-track {
background: #333;
.child-tutorial {
border-color: #555;
color: #f3f3f3;
}
::-webkit-scrollbar-thumb {
background: #555;
outline: 0.06125rem solid #555;
.child-tutorial:hover {
background: #222;
}

View File

@ -1,20 +1,25 @@
.light ::selection {
background: #ffce76;
color: #1d1919;
background: #ffce76;
color: #1d1919;
}
/* stylelint-disable-next-line selector-no-qualifying-type,rule-empty-line-before */
body.light {
background-color: #fff;
color: #111;
background-color: #fff;
color: #111;
}
.light a,
.light a:active {
color: #007bff;
color: #007bff;
}
.light hr {
color: #f7f7f7;
color: #f7f7f7;
}
.light h1,
@ -23,231 +28,293 @@ body.light {
.light h4,
.light h5,
.light h6 {
color: #111;
color: #111;
}
.light .sidebar {
background-color: #f7f7f7;
color: #222;
background-color: #f7f7f7;
color: #222;
}
.light .sidebar-title {
color: #222;
color: #222;
}
.light .sidebar-section-title {
color: #222;
color: #222;
}
.light .sidebar-section-title:hover {
background: #eee;
.light .sidebar-section-title:hover,
.light .sidebar-section-title.active {
background: #eee;
}
.light .with-arrow {
fill: #111;
fill: #111;
}
.light .sidebar-section-children-container {
background: #eee;
background: #eee;
}
.light .sidebar-section-children.active {
background: #ccc;
}
.light .sidebar-section-children a:hover {
background: #e0e0e0;
background: #e0e0e0;
}
.light .sidebar-section-children a {
color: #111;
color: #111;
}
.light .navbar-container {
background: #fff;
background: #fff;
}
.light .icon-button svg,
.light .navbar-item a {
color: #222;
fill: #222;
color: #222;
fill: #222;
}
.light .tippy-box {
background: #eee;
color: #111;
background: #eee;
color: #111;
}
.light .tippy-arrow {
color: #f1f1f1;
color: #f1f1f1;
}
/* stylelint-disable-next-line selector-max-compound-selectors,rule-empty-line-before */
.light .font-size-tooltip .icon-button svg {
fill: #111;
fill: #111;
}
/* stylelint-disable-next-line selector-max-compound-selectors, rule-empty-line-before */
.light .font-size-tooltip .icon-button.disabled svg {
fill: #999;
fill: #999;
}
.light .icon-button:hover {
background: #ddd;
background: #ddd;
}
.light .icon-button:active {
background: #ccc;
background: #ccc;
}
.light .navbar-item a:active {
color: #333;
background-color: #eee;
background-color: #eee;
color: #333;
}
.light .navbar-item:hover {
background: #f7f7f7;
background: #f7f7f7;
}
.light .footer {
background: #f7f7f7;
color: #111;
background: #f7f7f7;
color: #111;
}
.light .footer a {
color: #111;
color: #111;
}
.light .toc-link {
color: #999;
transition: color 0.3s;
font-size: 0.875rem;
color: #999;
font-size: 0.875rem;
transition: color 0.3s;
}
.light .toc-link.is-active-link {
color: #111;
color: #111;
}
.light .has-anchor .link-anchor {
color: #ddd;
color: #ddd;
}
.light .has-anchor .link-anchor:hover {
color: #ccc;
color: #ccc;
}
.light .signature-attributes {
color: #aaa;
color: #aaa;
}
.light .ancestors {
color: #999;
color: #999;
}
.light .ancestors a {
color: #999 !important;
color: #999 !important;
}
.light .important {
color: #ee1313;
color: #ee1313;
}
.light .type-signature {
color: #00918e;
color: #00918e;
}
.light .name,
.light .name a {
color: #293a80;
color: #293a80;
}
.light .details {
background: #f9f9f9;
color: #101010;
background: #f9f9f9;
color: #101010;
}
.light .member-item-container strong,
.light .method-member-container strong {
color: #000;
color: #000;
}
.light .prettyprint {
background: #f7f7f7;
background: #f7f7f7;
}
.light .pre-div {
background: #f7f7f7;
background: #f7f7f7;
}
.light .hljs .hljs-ln-numbers {
color: #aaa;
color: #aaa;
}
.light .hljs .selected {
background: #ccc;
background: #ccc;
}
/* stylelint-disable-next-line selector-no-qualifying-type,rule-empty-line-before */
.light table.hljs-ln td {
background: none;
background: none;
}
/* stylelint-disable-next-line selector-max-compound-selectors,rule-empty-line-before */
.light .hljs .selected .hljs-ln-numbers {
color: #444;
color: #444;
}
.light .pre-top-bar-container {
background-color: #eee;
background-color: #eee;
}
.light .prettyprint code {
background-color: #f7f7f7;
background-color: #f7f7f7;
}
.light table .name,
.light .params .name,
.light .props .name,
.light .name code {
color: #4d4e53;
color: #4d4e53;
}
.light table td,
.light .params td {
background: #f7f7f7;
background: #f7f7f7;
}
/* stylelint-disable-next-line selector-max-compound-selectors,rule-empty-line-before */
.light table thead th,
.light .params thead th,
.light .props thead th {
background-color: #eee;
color: #111;
background-color: #eee;
color: #111;
}
/* stylelint-disable */
.light table .params thead tr,
.light .params .params thead tr,
.light .props .props thead tr {
background-color: #eee;
color: #111;
background-color: #eee;
color: #111;
}
.light .disabled {
color: #454545;
color: #454545;
}
.light .code-lang-name {
color: #ff0000;
color: #ff0000;
}
.light .tooltip {
background: #ffce76;
color: #000;
background: #ffce76;
color: #000;
}
/* Code */
.light .hljs-comment,
.light .hljs-quote {
color: #a0a1a7;
color: #a0a1a7;
}
.light .hljs-doctag,
.light .hljs-keyword,
.light .hljs-formula {
color: #a626a4;
color: #a626a4;
}
.light .hljs-section,
@ -255,11 +322,13 @@ body.light {
.light .hljs-selector-tag,
.light .hljs-deletion,
.light .hljs-subst {
color: #e45649;
color: #e45649;
}
.light .hljs-literal {
color: #0184bb;
color: #0184bb;
}
.light .hljs-string,
@ -267,7 +336,8 @@ body.light {
.light .hljs-addition,
.light .hljs-attribute,
.light .hljs-meta .hljs-string {
color: #50a14f;
color: #50a14f;
}
.light .hljs-attr,
@ -278,7 +348,8 @@ body.light {
.light .hljs-selector-attr,
.light .hljs-selector-pseudo,
.light .hljs-number {
color: #986801;
color: #986801;
}
.light .hljs-symbol,
@ -287,102 +358,125 @@ body.light {
.light .hljs-meta,
.light .hljs-selector-id,
.light .hljs-title {
color: #4078f2;
color: #4078f2;
}
.light .hljs-built_in,
.light .hljs-title.class_,
.light .hljs-class .hljs-title {
color: #c18401;
color: #c18401;
}
.light .hljs-emphasis {
font-style: italic;
font-style: italic;
}
.light .hljs-strong {
font-weight: bold;
font-weight: bold;
}
.light .hljs-link {
text-decoration: underline;
text-decoration: underline;
}
/* Code Ends */
.light blockquote {
background: #eee;
color: #111;
background: #eee;
color: #111;
}
.light code {
background: #ddd;
color: #000;
background: #ddd;
color: #000;
}
.light .search-container {
background: rgba(0, 0, 0, 0.1);
background: rgba(0, 0, 0, 0.1);
}
.light .search-close-button svg {
fill: #f00;
fill: #f00;
}
.light .search-container .wrapper {
background: #eee;
background: #eee;
}
.light .search-result-c {
color: #aaa;
color: #aaa;
}
.light .search-box-c svg {
fill: #333;
fill: #333;
}
.light .search-input {
background: #f7f7f7;
color: #111;
background: #f7f7f7;
color: #111;
}
.light .search-result-item {
background: #f7f7f7;
background: #f7f7f7;
}
.light .search-result-item:hover {
background: #e9e9e9;
background: #e9e9e9;
}
.light .search-result-item:active {
background: #f7f7f7;
background: #f7f7f7;
}
.light .search-result-item-title {
color: #111;
color: #111;
}
.light .search-result-item-p {
color: #aaa;
color: #aaa;
}
.light .mobile-menu-icon-container .icon-button {
background: #e5e5e5;
background: #e5e5e5;
}
.light .mobile-sidebar-container {
background: #fff;
background: #fff;
}
.light .mobile-sidebar-wrapper {
background: #f7f7f7;
background: #f7f7f7;
}
/* scroll bar */
.light ::-webkit-scrollbar-track {
background: #ddd;
.light .child-tutorial {
border-color: #aaa;
color: #222;
}
.light ::-webkit-scrollbar-thumb {
background: #aaa;
outline: 0.06125rem solid #aaa;
.light .child-tutorial:hover {
background: #ccc;
}

View File

@ -0,0 +1,30 @@
::-webkit-scrollbar {
height: 0.3125rem;
width: 0.3125rem;
}
::-webkit-scrollbar-thumb,
::-webkit-scrollbar-track {
border-radius: 1rem;
}
::-webkit-scrollbar-track {
background: #333;
}
::-webkit-scrollbar-thumb {
background: #555;
outline: 0.06125rem solid #555;
}
.light ::-webkit-scrollbar-track {
background: #ddd;
}
.light ::-webkit-scrollbar-thumb {
background: #aaa;
outline: 0.06125rem solid #aaa;
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -3,10 +3,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>The sitespeed.io blog</title>
<title>Sitespeed.io Blog</title>
<description>The latest news from the sitespeed.io world.</description>
<link>https://www.sitespeed.io</link>
<atom:link href="{{ site.url }}/feed.xml" rel="self" type="application/rss+xml" />
<atom:link href="{{ site.url }}/feed/blog.xml" rel="self" type="application/rss+xml" />
{% for post in site.posts limit:10 %}
<item>
<title>{{ post.title | xml_escape }}</title>

View File

@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>browsertime-release-feed</id>
<title>browsertime release feed</title>
<updated>2025-01-21T13:45:07.823Z</updated>
<updated>2026-01-09T21:34:42.934Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
@ -17,45 +17,20 @@
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[browsertime 24.0.1]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.1</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.1"/>
<updated>2025-01-21T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>If Jimp is missing when storing an image, log and write the file as PNG <a href="https://github.com/sitespeedio/browsertime/pull/2257">#2257</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 24.0.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.0"/>
<updated>2025-01-20T00:00:00.000Z</updated>
<title type="html"><![CDATA[browsertime 26.3.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.3.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.3.0"/>
<updated>2026-01-09T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Edgedriver 132 <a href="https://github.com/sitespeedio/browsertime/pull/2254">#2236</a>.</li>
</ul>
<ul>
<li>Chromedriver 132 <a href="https://github.com/sitespeedio/browsertime/pull/2253">#2236</a>.</li>
</ul>
<ul>
<li>Chrome and Edge 132, Firefox 134 in the Docker container + NodeJS 22 <a href="https://github.com/sitespeedio/browsertime/pull/2255">#2255</a>.</li>
<li>Get response bodies in the HAR for Firefox. Thank you <a href="https://github.com/juliandescottes">Julian Descottes</a> and the rest of the Mozilla team that made this possible in bidi-har-export. Added in <a href="https://github.com/sitespeedio/browsertime/pull/2359">#2359</a>. The Firefox HAR has missed this functionality since we did the switch to bidi-har.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Replace dependencies with local implementation:</li>
<li>Restructure server timings so the timing name does not get lost for InfluxDB/Graphite. Thank you <a href="https://github.com/TimOldenburg">Tim Oldenburg</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/2358">#2358</a>.</li>
</ul>
<ul>
<li>Fix Docker file ENV to follow the new standard <a href="https://github.com/sitespeedio/browsertime/pull/2239">#2239</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Moved usb-power-profiling to be an optional package <a href="https://github.com/sitespeedio/browsertime/pull/2249">#2249</a>.</li>
<li>Add Simpleperf app_profiler options and use <code>--android.simpleperf</code>. Thank you <a href="https://github.com/animalan">Abhishek Nimalan</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/2352">#2352</a></li>
</ul>
]]></summary>
<author>
@ -64,32 +39,20 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.5.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.5.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.5.0"/>
<updated>2024-12-23T00:00:00.000Z</updated>
<title type="html"><![CDATA[browsertime 26.2.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.2.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.2.0"/>
<updated>2025-12-18T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Added <code>--userTimingBlockList</code> <a href="https://github.com/sitespeedio/browsertime/pull/2227">#2227</a>.</li>
<li>Updated Chromedriver and Edgedriver to 143 <a href="https://github.com/sitespeedio/browsertime/pull/2354">#2354</a> and<a href="https://github.com/sitespeedio/browsertime/pull/2355">#2355</a>.</li>
</ul>
<ul>
<li>Updated webdriver to 4.39.0 <a href="https://github.com/sitespeedio/browsertime/pull/2356">#2356</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Updated to webdriver 4.28 <a href="https://github.com/sitespeedio/browsertime/pull/2226">#2226</a>.</li>
</ul>
<ul>
<li>Updated dev dependencies <a href="https://github.com/sitespeedio/browsertime/pull/2228">#2228</a>.</li>
</ul>
<ul>
<li>Fix so the check for gnirehtet always use --android.gnirehtet to fix problems setting it in sitespeed.io <a href="https://github.com/sitespeedio/browsertime/pull/2229">#2229</a>.</li>
</ul>
<ul>
<li>Update to execa 9.5.2 <a href="https://github.com/sitespeedio/browsertime/pull/2231">#2231</a>.</li>
</ul>
<ul>
<li>Update to adbkit 3.3.8 <a href="https://github.com/sitespeedio/browsertime/pull/2232">#2232</a>.</li>
</ul>
<ul>
<li>Fix so you cannot use gnirehtet with webpagereplay <a href="https://github.com/sitespeedio/browsertime/pull/2230">#2230</a>.</li>
<li>Try to tune the XVFB handling to make it safer that xvfb is always stopped <a href="https://github.com/sitespeedio/browsertime/pull/2353">#2353</a>.</li>
</ul>
]]></summary>
<author>
@ -98,95 +61,20 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.4.5]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.5</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.5"/>
<updated>2024-12-20T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Change bottom margin from 10 to 14 pixel when recording a video on mobile, se bug <a href="https://github.com/sitespeedio/browsertime/issues/2224">#2224</a> and PR <a href="https://github.com/sitespeedio/browsertime/pull/2225">#2225</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.4.4]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.4</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.4"/>
<updated>2024-12-18T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>A more robust gnirehtet check when you run your Android test <a href="https://github.com/sitespeedio/browsertime/pull/2223">#2223</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.4.3]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.3</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.3"/>
<updated>2024-12-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Update to USB power profiling 1.5.0 <a href="https://github.com/sitespeedio/browsertime/pull/2221">#2221</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.4.2]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.2</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.2"/>
<updated>2024-12-10T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Improve how we compute the power consumption numbers from the Firefox Profiler output PR by <a href="https://github.com/canova">Nazım Can Altınova</a> <a href="https://github.com/sitespeedio/browsertime/pull/2220">#2220</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.4.1]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.1</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.1"/>
<updated>2024-11-23T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Cleanup of the extra timings that is added to the timeline for Chrome <a href="https://github.com/sitespeedio/browsertime/pull/2218">#2218</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.4.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.0"/>
<updated>2024-11-22T00:00:00.000Z</updated>
<title type="html"><![CDATA[browsertime 26.1.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.1.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.1.0"/>
<updated>2025-12-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Collect more information about the largest contentful paint <a href="https://github.com/sitespeedio/browsertime/pull/2206">#2206</a></li>
<li>Firefox 146 in the Docker container <a href="https://github.com/sitespeedio/browsertime/pull/2351">#2351</a>.</li>
</ul>
<ul>
<li>Add extra timings and new custom timeline to the Chrome timeline <a href="https://github.com/sitespeedio/browsertime/pull/2217">#2217</a>. Inspired by [</li>
<li>Chrome 143 in the Docker container <a href="https://github.com/sitespeedio/browsertime/pull/2350">#2350</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>More configuration tuning for Firefox <a href="https://github.com/sitespeedio/browsertime/pull/2216">#2216</a>.</li>
<li>Make sure the user in the Docker container has the correct user rights <a href="https://github.com/sitespeedio/browsertime/pull/2349">#2349</a>.</li>
</ul>
]]></summary>
<author>
@ -195,19 +83,125 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 23.3.3]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.3.3</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.3.3"/>
<updated>2024-11-22T00:00:00.000Z</updated>
<title type="html"><![CDATA[browsertime 26.0.1]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.1</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.1"/>
<updated>2025-12-10T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Disable search suggestion requests for Firefox <a href="https://github.com/sitespeedio/browsertime/pull/2215">#2215</a></li>
<li>Remove extra console.log entry :)</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 26.0.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.0"/>
<updated>2025-12-10T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Upgrade to support NodeJS 24 without warnings, include NodeJS 24 in the Docker container, and base the Docker container on Ubuntu 24.04. To make this work I needed to upgrade the Jimp library and then we lost the settings for png screenshots <code>--screenshotParams.png.compressionLevel</code> <a href="https://github.com/sitespeedio/browsertime/pull/2342">#2342</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 25.4.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.4.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.4.0"/>
<updated>2025-11-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Chrome and Chromedriver 142 <a href="https://github.com/sitespeedio/browsertime/pull/2335">#2335</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 25.3.1]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.1</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.1"/>
<updated>2025-10-24T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Better handling of closing XVFB <a href="https://github.com/sitespeedio/browsertime/pull/2332">#2332</a>.</li>
</ul>
<ul>
<li>Fix for including HTTP requests in the Firefox profile <a href="https://github.com/sitespeedio/browsertime/pull/2214">#2214</a>.</li>
<li>Firefox: Disable quicksuggest <a href="https://github.com/sitespeedio/browsertime/pull/2333">#2333</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 25.3.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.0"/>
<updated>2025-10-17T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Make it possible to strip cookie and auth headers in the HAR file for Firefox <a href="https://github.com/sitespeedio/browsertime/pull/2329">#2329</a> and Chrome <a href="https://github.com/sitespeedio/browsertime/pull/2330">#2330</a>. Use <code>--cleanSensitiveHeaders</code> to remove a <a href="https://github.com/sitespeedio/browsertime/blob/main/lib/support/har/index.js#L11-L24">couple of headers</a>.</li>
</ul>
<ul>
<li>Fix when running --enableProfileRun and get visual metrics. It used to generate an error log, this fixes that <a href="https://github.com/sitespeedio/browsertime/pull/2213">#2213</a>.</li>
<li>Firefox 144 <a href="https://github.com/sitespeedio/browsertime/pull/2331">#2331</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Updated developer dependencies <a href="https://github.com/sitespeedio/browsertime/pull/2326">#2326</a> and <a href="https://github.com/sitespeedio/browsertime/pull/2327">#2327</a>.</li>
</ul>
<ul>
<li>Updated log dependency <a href="https://github.com/sitespeedio/b23272327rowsertime/pull/2328">#2328</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 25.2.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.2.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.2.0"/>
<updated>2025-10-12T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome/Chromedriver/Edge/Edgedriver 141, Firefox 143 <a href="https://github.com/sitespeedio/browsertime/pull/2325">#2325</a> and <a href="https://github.com/sitespeedio/browsertime/pull/2323">#2323</a>.</li>
</ul>
<ul>
<li>Updated webdriver and bidi-har <a href="https://github.com/sitespeedio/browsertime/pull/2322">#2322</a>.</li>
</ul>
<ul>
<li>Added simpleperf and perfetto support for Android, thank you <a href="https://github.com/animalan">Abhishek Nimalan</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/2315">#2315</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[browsertime 25.1.0]]></title>
<id>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.1.0</id>
<link href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.1.0"/>
<updated>2025-09-05T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome/Chromedriver 140, Firefox 142 <a href="https://github.com/sitespeedio/browsertime/pull/2318">#2318</a>.</li>
</ul>
<ul>
<li>Selenium webdriver 4.35.0 <a href="https://github.com/sitespeedio/browsertime/pull/2317">#2317</a>.</li>
</ul>
]]></summary>
<author>

View File

@ -4,7 +4,7 @@
<title>browsertime release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of browsertime</description>
<lastBuildDate>Tue, 21 Jan 2025 13:45:07 GMT</lastBuildDate>
<lastBuildDate>Fri, 09 Jan 2026 21:34:42 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
@ -17,170 +17,164 @@
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/browsertime.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[browsertime 24.0.1]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.1</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.1</guid>
<pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>If Jimp is missing when storing an image, log and write the file as PNG <a href="https://github.com/sitespeedio/browsertime/pull/2257">#2257</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 24.0.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#24.0.0</guid>
<pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate>
<title><![CDATA[browsertime 26.3.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.3.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.3.0</guid>
<pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Edgedriver 132 <a href="https://github.com/sitespeedio/browsertime/pull/2254">#2236</a>.</li>
</ul>
<ul>
<li>Chromedriver 132 <a href="https://github.com/sitespeedio/browsertime/pull/2253">#2236</a>.</li>
</ul>
<ul>
<li>Chrome and Edge 132, Firefox 134 in the Docker container + NodeJS 22 <a href="https://github.com/sitespeedio/browsertime/pull/2255">#2255</a>.</li>
<li>Get response bodies in the HAR for Firefox. Thank you <a href="https://github.com/juliandescottes">Julian Descottes</a> and the rest of the Mozilla team that made this possible in bidi-har-export. Added in <a href="https://github.com/sitespeedio/browsertime/pull/2359">#2359</a>. The Firefox HAR has missed this functionality since we did the switch to bidi-har.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Replace dependencies with local implementation:</li>
<li>Restructure server timings so the timing name does not get lost for InfluxDB/Graphite. Thank you <a href="https://github.com/TimOldenburg">Tim Oldenburg</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/2358">#2358</a>.</li>
</ul>
<ul>
<li>Fix Docker file ENV to follow the new standard <a href="https://github.com/sitespeedio/browsertime/pull/2239">#2239</a>.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Moved usb-power-profiling to be an optional package <a href="https://github.com/sitespeedio/browsertime/pull/2249">#2249</a>.</li>
<li>Add Simpleperf app_profiler options and use <code>--android.simpleperf</code>. Thank you <a href="https://github.com/animalan">Abhishek Nimalan</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/2352">#2352</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.5.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.5.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.5.0</guid>
<pubDate>Mon, 23 Dec 2024 00:00:00 GMT</pubDate>
<title><![CDATA[browsertime 26.2.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.2.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.2.0</guid>
<pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Added <code>--userTimingBlockList</code> <a href="https://github.com/sitespeedio/browsertime/pull/2227">#2227</a>.</li>
<li>Updated Chromedriver and Edgedriver to 143 <a href="https://github.com/sitespeedio/browsertime/pull/2354">#2354</a> and<a href="https://github.com/sitespeedio/browsertime/pull/2355">#2355</a>.</li>
</ul>
<ul>
<li>Updated webdriver to 4.39.0 <a href="https://github.com/sitespeedio/browsertime/pull/2356">#2356</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Updated to webdriver 4.28 <a href="https://github.com/sitespeedio/browsertime/pull/2226">#2226</a>.</li>
</ul>
<ul>
<li>Updated dev dependencies <a href="https://github.com/sitespeedio/browsertime/pull/2228">#2228</a>.</li>
</ul>
<ul>
<li>Fix so the check for gnirehtet always use --android.gnirehtet to fix problems setting it in sitespeed.io <a href="https://github.com/sitespeedio/browsertime/pull/2229">#2229</a>.</li>
</ul>
<ul>
<li>Update to execa 9.5.2 <a href="https://github.com/sitespeedio/browsertime/pull/2231">#2231</a>.</li>
</ul>
<ul>
<li>Update to adbkit 3.3.8 <a href="https://github.com/sitespeedio/browsertime/pull/2232">#2232</a>.</li>
</ul>
<ul>
<li>Fix so you cannot use gnirehtet with webpagereplay <a href="https://github.com/sitespeedio/browsertime/pull/2230">#2230</a>.</li>
<li>Try to tune the XVFB handling to make it safer that xvfb is always stopped <a href="https://github.com/sitespeedio/browsertime/pull/2353">#2353</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.4.5]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.5</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.5</guid>
<pubDate>Fri, 20 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Change bottom margin from 10 to 14 pixel when recording a video on mobile, se bug <a href="https://github.com/sitespeedio/browsertime/issues/2224">#2224</a> and PR <a href="https://github.com/sitespeedio/browsertime/pull/2225">#2225</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.4.4]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.4</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.4</guid>
<pubDate>Wed, 18 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>A more robust gnirehtet check when you run your Android test <a href="https://github.com/sitespeedio/browsertime/pull/2223">#2223</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.4.3]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.3</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.3</guid>
<pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Update to USB power profiling 1.5.0 <a href="https://github.com/sitespeedio/browsertime/pull/2221">#2221</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.4.2]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.2</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.2</guid>
<pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Improve how we compute the power consumption numbers from the Firefox Profiler output PR by <a href="https://github.com/canova">Nazım Can Altınova</a> <a href="https://github.com/sitespeedio/browsertime/pull/2220">#2220</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.4.1]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.1</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.1</guid>
<pubDate>Sat, 23 Nov 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Cleanup of the extra timings that is added to the timeline for Chrome <a href="https://github.com/sitespeedio/browsertime/pull/2218">#2218</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.4.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.4.0</guid>
<pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate>
<title><![CDATA[browsertime 26.1.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.1.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.1.0</guid>
<pubDate>Thu, 11 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Collect more information about the largest contentful paint <a href="https://github.com/sitespeedio/browsertime/pull/2206">#2206</a></li>
<li>Firefox 146 in the Docker container <a href="https://github.com/sitespeedio/browsertime/pull/2351">#2351</a>.</li>
</ul>
<ul>
<li>Add extra timings and new custom timeline to the Chrome timeline <a href="https://github.com/sitespeedio/browsertime/pull/2217">#2217</a>. Inspired by [</li>
<li>Chrome 143 in the Docker container <a href="https://github.com/sitespeedio/browsertime/pull/2350">#2350</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>More configuration tuning for Firefox <a href="https://github.com/sitespeedio/browsertime/pull/2216">#2216</a>.</li>
<li>Make sure the user in the Docker container has the correct user rights <a href="https://github.com/sitespeedio/browsertime/pull/2349">#2349</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 23.3.3]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.3.3</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#23.3.3</guid>
<pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate>
<title><![CDATA[browsertime 26.0.1]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.1</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.1</guid>
<pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Disable search suggestion requests for Firefox <a href="https://github.com/sitespeedio/browsertime/pull/2215">#2215</a></li>
<li>Remove extra console.log entry :)</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 26.0.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#26.0.0</guid>
<pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Upgrade to support NodeJS 24 without warnings, include NodeJS 24 in the Docker container, and base the Docker container on Ubuntu 24.04. To make this work I needed to upgrade the Jimp library and then we lost the settings for png screenshots <code>--screenshotParams.png.compressionLevel</code> <a href="https://github.com/sitespeedio/browsertime/pull/2342">#2342</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 25.4.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.4.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.4.0</guid>
<pubDate>Sun, 02 Nov 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Chrome and Chromedriver 142 <a href="https://github.com/sitespeedio/browsertime/pull/2335">#2335</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 25.3.1]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.1</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.1</guid>
<pubDate>Fri, 24 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Better handling of closing XVFB <a href="https://github.com/sitespeedio/browsertime/pull/2332">#2332</a>.</li>
</ul>
<ul>
<li>Fix for including HTTP requests in the Firefox profile <a href="https://github.com/sitespeedio/browsertime/pull/2214">#2214</a>.</li>
<li>Firefox: Disable quicksuggest <a href="https://github.com/sitespeedio/browsertime/pull/2333">#2333</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 25.3.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.3.0</guid>
<pubDate>Fri, 17 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Make it possible to strip cookie and auth headers in the HAR file for Firefox <a href="https://github.com/sitespeedio/browsertime/pull/2329">#2329</a> and Chrome <a href="https://github.com/sitespeedio/browsertime/pull/2330">#2330</a>. Use <code>--cleanSensitiveHeaders</code> to remove a <a href="https://github.com/sitespeedio/browsertime/blob/main/lib/support/har/index.js#L11-L24">couple of headers</a>.</li>
</ul>
<ul>
<li>Fix when running --enableProfileRun and get visual metrics. It used to generate an error log, this fixes that <a href="https://github.com/sitespeedio/browsertime/pull/2213">#2213</a>.</li>
<li>Firefox 144 <a href="https://github.com/sitespeedio/browsertime/pull/2331">#2331</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Updated developer dependencies <a href="https://github.com/sitespeedio/browsertime/pull/2326">#2326</a> and <a href="https://github.com/sitespeedio/browsertime/pull/2327">#2327</a>.</li>
</ul>
<ul>
<li>Updated log dependency <a href="https://github.com/sitespeedio/b23272327rowsertime/pull/2328">#2328</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 25.2.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.2.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.2.0</guid>
<pubDate>Sun, 12 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome/Chromedriver/Edge/Edgedriver 141, Firefox 143 <a href="https://github.com/sitespeedio/browsertime/pull/2325">#2325</a> and <a href="https://github.com/sitespeedio/browsertime/pull/2323">#2323</a>.</li>
</ul>
<ul>
<li>Updated webdriver and bidi-har <a href="https://github.com/sitespeedio/browsertime/pull/2322">#2322</a>.</li>
</ul>
<ul>
<li>Added simpleperf and perfetto support for Android, thank you <a href="https://github.com/animalan">Abhishek Nimalan</a> for PR <a href="https://github.com/sitespeedio/browsertime/pull/2315">#2315</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[browsertime 25.1.0]]></title>
<link>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.1.0</link>
<guid>https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#25.1.0</guid>
<pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to Chrome/Chromedriver 140, Firefox 142 <a href="https://github.com/sitespeedio/browsertime/pull/2318">#2318</a>.</li>
</ul>
<ul>
<li>Selenium webdriver 4.35.0 <a href="https://github.com/sitespeedio/browsertime/pull/2317">#2317</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/browsertime.png" length="0" type="image/png"/>

View File

@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>coach-core-release-feed</id>
<title>coach-core release feed</title>
<updated>2024-12-28T07:23:52.922Z</updated>
<updated>2025-08-31T14:30:33.326Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
@ -16,6 +16,27 @@
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[coach-core 8.1.2]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#8.1.2</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#8.1.2"/>
<updated>2025-08-01T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Don&#39;t check svg images in avoidScalingImages check, thank you <a href="https://github.com/M-arcus">Marcus Müller</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/129">#129</a>.</li>
</ul>
<ul>
<li>Add zstd to encoding check, thank you <a href="https://github.com/M-arcus">Marcus Müller</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/128">#128</a>.</li>
</ul>
<ul>
<li>Make sure we use wappalyzer that is MIT <a href="https://github.com/sitespeedio/coach-core/pull/133">#133</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 8.1.1]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#8.1.1</id>
@ -176,21 +197,6 @@
<ul>
<li>Upgraded to PageXray 4.4.2 and Third Party Web 0.17.1.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[coach-core 7.1.1]]></title>
<id>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1</id>
<link href="https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1"/>
<updated>2022-04-13T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to PageXray 4.4.1 and Third Party Web 0.15.0.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>

View File

@ -4,7 +4,7 @@
<title>coach-core release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of coach-core</description>
<lastBuildDate>Sat, 28 Dec 2024 07:23:52 GMT</lastBuildDate>
<lastBuildDate>Sun, 31 Aug 2025 14:30:33 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
@ -16,6 +16,24 @@
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/coach-core.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[coach-core 8.1.2]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#8.1.2</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#8.1.2</guid>
<pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Don&#39;t check svg images in avoidScalingImages check, thank you <a href="https://github.com/M-arcus">Marcus Müller</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/129">#129</a>.</li>
</ul>
<ul>
<li>Add zstd to encoding check, thank you <a href="https://github.com/M-arcus">Marcus Müller</a> for PR <a href="https://github.com/sitespeedio/coach-core/pull/128">#128</a>.</li>
</ul>
<ul>
<li>Make sure we use wappalyzer that is MIT <a href="https://github.com/sitespeedio/coach-core/pull/133">#133</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 8.1.1]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#8.1.1</link>
@ -152,18 +170,6 @@
<ul>
<li>Upgraded to PageXray 4.4.2 and Third Party Web 0.17.1.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[coach-core 7.1.1]]></title>
<link>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1</link>
<guid>https://github.com/sitespeedio/coach-core/blob/main/CHANGELOG.md#7.1.1</guid>
<pubDate>Wed, 13 Apr 2022 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgraded to PageXray 4.4.1 and Third Party Web 0.15.0.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/coach.png" length="0" type="image/png"/>
</item>

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>server-release-feed</id>
<title>server release feed</title>
<updated>2024-12-27T07:52:02.793Z</updated>
<updated>2025-10-22T22:03:43.179Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
@ -16,13 +16,13 @@
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[server 1.0.1]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.1</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.1"/>
<updated>2024-12-06T00:00:00.000Z</updated>
<title type="html"><![CDATA[server 1.7.1]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.1</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.1"/>
<updated>2025-10-23T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fixed the release flow so the Docker containers get the correct tag.</li>
<li>Fix for the search qyuery parameter <a href="https://github.com/sitespeedio/onlinetest/pull/162">#162</a>.</li>
</ul>
]]></summary>
<author>
@ -31,13 +31,16 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 1.0.0]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.0</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.0"/>
<updated>2024-12-06T00:00:00.000Z</updated>
<title type="html"><![CDATA[server 1.7.0]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.0</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.0"/>
<updated>2025-10-22T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>A new Docker setup <a href="https://github.com/sitespeedio/onlinetest/pull/95">#95</a></li>
<li>Updated dependencies (too many PRs).</li>
</ul>
<ul>
<li>Update to NodeJS 22 <a href="https://github.com/sitespeedio/onlinetest/pull/155">#155</a></li>
</ul>
]]></summary>
<author>
@ -46,19 +49,13 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.4.5]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.5</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.5"/>
<updated>2024-09-24T00:00:00.000Z</updated>
<title type="html"><![CDATA[server 1.6.5]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.5</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.5"/>
<updated>2025-03-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Express 5.0.0 <a href="https://github.com/sitespeedio/onlinetest/pull/86">#86</a>.</li>
</ul>
<ul>
<li>Update body parser <a href="https://github.com/sitespeedio/onlinetest/pull/88">#88</a>.</li>
</ul>
<ul>
<li>Bull 4.16.3 <a href="https://github.com/sitespeedio/onlinetest/pull/87">#87</a></li>
<li>And another fix for script names <a href="https://github.com/sitespeedio/onlinetest/pull/146">#146</a>.</li>
</ul>
]]></summary>
<author>
@ -67,16 +64,13 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.4.2]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.2</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.2"/>
<updated>2024-09-09T00:00:00.000Z</updated>
<title type="html"><![CDATA[server 1.6.4]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.4</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.4"/>
<updated>2025-03-10T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Device id was broken in the front end <a href="https://github.com/sitespeedio/onlinetest/pull/80">#80</a> and <a href="https://github.com/sitespeedio/onlinetest/pull/81">#81</a>.</li>
</ul>
<ul>
<li>The internal configuration was broken in the way that removing/adding testrunners failed removing correct configurations <a href="https://github.com/sitespeedio/onlinetest/pull/84">#84</a>. This fix also needs <a href="https://github.com/sitespeedio/onlinetest/pull/83">#83</a> in the testrunners.</li>
<li>Another fix for showing the script name <a href="https://github.com/sitespeedio/onlinetest/pull/145">#145</a>.</li>
</ul>
]]></summary>
<author>
@ -85,13 +79,13 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.4.1]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.1</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.1"/>
<updated>2024-08-23T00:00:00.000Z</updated>
<title type="html"><![CDATA[server 1.6.3]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3"/>
<updated>2025-03-10T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix bug so you can choose emulated mobile in GUI <a href="https://github.com/sitespeedio/onlinetest/pull/76">#76</a>.</li>
<li>Show only the script name and not the full path <a href="https://github.com/sitespeedio/onlinetest/pull/144">#144</a>.</li>
</ul>
]]></summary>
<author>
@ -100,100 +94,65 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.4.0]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.0</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.0"/>
<updated>2024-08-02T00:00:00.000Z</updated>
<title type="html"><![CDATA[server 1.6.3]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3"/>
<updated>2025-02-13T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>There was a bug that when you tried to change the URL after you edited a test with a script, you couldn&#39;t change the URL <a href="https://github.com/sitespeedio/onlinetest/pull/142">#142</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 1.6.2]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.2</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.2"/>
<updated>2025-02-12T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Another label fix.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 1.6.1]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.1</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.1"/>
<updated>2025-02-12T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Guard against empty labels when changing labels <a href="https://github.com/sitespeedio/onlinetest/pull/141">#141</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 1.6.0]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.0</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.0"/>
<updated>2025-02-12T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Merged slug/label column in search result <a href="https://github.com/sitespeedio/onlinetest/pull/68">#68</a></li>
<li>Add functionality to: edit/add alias to a finished test, rerun a test with the exact same configuration and change the URL of a test and rerun with the same configuration <a href="https://github.com/sitespeedio/onlinetest/pull/137">#137</a>.</li>
</ul>
<ul>
<li>Make it possible to choose container that runs the test, using the API <a href="https://github.com/sitespeedio/onlinetest/pull/69/">#69</a></li>
<li>You can now configure which favicons that is used <a href="https://github.com/sitespeedio/onlinetest/pull/140">#140</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.3.2]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.2</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.2"/>
<updated>2024-07-15T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<h3>Fixed</h3>
<ul>
<li>Upgrade to Bull 4.15.1 <a href="https://github.com/sitespeedio/onlinetest/pull/57">#57</a>.</li>
</ul>
<ul>
<li>Default to max 50 finished jobs in the queue <a href="https://github.com/sitespeedio/onlinetest/pull/58">#58</a>.</li>
</ul>
<ul>
<li>Update dev dependencies like ESLint 9 <a href="https://github.com/sitespeedio/onlinetest/pull/62">#62</a>.</li>
</ul>
<ul>
<li>Update DayJS 1.11.11 <a href="https://github.com/sitespeedio/onlinetest/pull/63">#63</a></li>
</ul>
<ul>
<li>Make sure all uncaught errors are caught <a href="https://github.com/sitespeedio/onlinetest/pull/64">#64</a></li>
</ul>
<ul>
<li>Add a keydb configuration file <a href="https://github.com/sitespeedio/onlinetest/pull/56">#56</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.3.1]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.1</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.1"/>
<updated>2024-06-29T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>If the queue system is down when you add a new test, make sure the status of the test in the database is failed <a href="https://github.com/sitespeedio/onlinetest/pull/50">#50</a>.</li>
</ul>
<ul>
<li>If the queue is not up when you access the start page, make sure that at least after X seconds you get a error page <a href="https://github.com/sitespeedio/onlinetest/pull/53">#53</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.3.0]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.0</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.0"/>
<updated>2024-06-28T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>search: Make label configurable in search result <a href="https://github.com/sitespeedio/onlinetest/pull/46">#46</a>.</li>
</ul>
<ul>
<li>search: Make run date readable <a href="https://github.com/sitespeedio/onlinetest/pull/45">#45</a>.</li>
</ul>
<ul>
<li>Show version number in footer and API <a href="https://github.com/sitespeedio/onlinetest/pull/44">#44</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[server 0.2.1]]></title>
<id>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.2.1</id>
<link href="https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.2.1"/>
<updated>2024-06-27T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Search: Fix for searching for test type <a href="https://github.com/sitespeedio/onlinetest/pull/42">#42</a>.</li>
<li>Update to latest sitespeed.io/log <a href="https://github.com/sitespeedio/onlinetest/pull/138">#138</a>.</li>
</ul>
]]></summary>
<author>

View File

@ -4,7 +4,7 @@
<title>server release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of server</description>
<lastBuildDate>Fri, 27 Dec 2024 07:52:02 GMT</lastBuildDate>
<lastBuildDate>Wed, 22 Oct 2025 22:03:43 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
@ -12,148 +12,111 @@
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/server.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[server 1.0.1]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.1</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.1</guid>
<pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
<title><![CDATA[server 1.7.1]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.1</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.1</guid>
<pubDate>Thu, 23 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fixed the release flow so the Docker containers get the correct tag.</li>
<li>Fix for the search qyuery parameter <a href="https://github.com/sitespeedio/onlinetest/pull/162">#162</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 1.0.0]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.0</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.0.0</guid>
<pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
<title><![CDATA[server 1.7.0]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.0</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.7.0</guid>
<pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>A new Docker setup <a href="https://github.com/sitespeedio/onlinetest/pull/95">#95</a></li>
<li>Updated dependencies (too many PRs).</li>
</ul>
<ul>
<li>Update to NodeJS 22 <a href="https://github.com/sitespeedio/onlinetest/pull/155">#155</a></li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.4.5]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.5</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.5</guid>
<pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate>
<title><![CDATA[server 1.6.5]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.5</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.5</guid>
<pubDate>Tue, 11 Mar 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Express 5.0.0 <a href="https://github.com/sitespeedio/onlinetest/pull/86">#86</a>.</li>
</ul>
<ul>
<li>Update body parser <a href="https://github.com/sitespeedio/onlinetest/pull/88">#88</a>.</li>
</ul>
<ul>
<li>Bull 4.16.3 <a href="https://github.com/sitespeedio/onlinetest/pull/87">#87</a></li>
<li>And another fix for script names <a href="https://github.com/sitespeedio/onlinetest/pull/146">#146</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.4.2]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.2</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.2</guid>
<pubDate>Mon, 09 Sep 2024 00:00:00 GMT</pubDate>
<title><![CDATA[server 1.6.4]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.4</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.4</guid>
<pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Device id was broken in the front end <a href="https://github.com/sitespeedio/onlinetest/pull/80">#80</a> and <a href="https://github.com/sitespeedio/onlinetest/pull/81">#81</a>.</li>
</ul>
<ul>
<li>The internal configuration was broken in the way that removing/adding testrunners failed removing correct configurations <a href="https://github.com/sitespeedio/onlinetest/pull/84">#84</a>. This fix also needs <a href="https://github.com/sitespeedio/onlinetest/pull/83">#83</a> in the testrunners.</li>
<li>Another fix for showing the script name <a href="https://github.com/sitespeedio/onlinetest/pull/145">#145</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.4.1]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.1</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.1</guid>
<pubDate>Fri, 23 Aug 2024 00:00:00 GMT</pubDate>
<title><![CDATA[server 1.6.3]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3</guid>
<pubDate>Mon, 10 Mar 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix bug so you can choose emulated mobile in GUI <a href="https://github.com/sitespeedio/onlinetest/pull/76">#76</a>.</li>
<li>Show only the script name and not the full path <a href="https://github.com/sitespeedio/onlinetest/pull/144">#144</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.4.0]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.0</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.4.0</guid>
<pubDate>Fri, 02 Aug 2024 00:00:00 GMT</pubDate>
<title><![CDATA[server 1.6.3]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.3</guid>
<pubDate>Thu, 13 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>There was a bug that when you tried to change the URL after you edited a test with a script, you couldn&#39;t change the URL <a href="https://github.com/sitespeedio/onlinetest/pull/142">#142</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 1.6.2]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.2</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.2</guid>
<pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Another label fix.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 1.6.1]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.1</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.1</guid>
<pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Guard against empty labels when changing labels <a href="https://github.com/sitespeedio/onlinetest/pull/141">#141</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 1.6.0]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.0</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#1.6.0</guid>
<pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Merged slug/label column in search result <a href="https://github.com/sitespeedio/onlinetest/pull/68">#68</a></li>
<li>Add functionality to: edit/add alias to a finished test, rerun a test with the exact same configuration and change the URL of a test and rerun with the same configuration <a href="https://github.com/sitespeedio/onlinetest/pull/137">#137</a>.</li>
</ul>
<ul>
<li>Make it possible to choose container that runs the test, using the API <a href="https://github.com/sitespeedio/onlinetest/pull/69/">#69</a></li>
<li>You can now configure which favicons that is used <a href="https://github.com/sitespeedio/onlinetest/pull/140">#140</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.3.2]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.2</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.2</guid>
<pubDate>Mon, 15 Jul 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<h3>Fixed</h3>
<ul>
<li>Upgrade to Bull 4.15.1 <a href="https://github.com/sitespeedio/onlinetest/pull/57">#57</a>.</li>
</ul>
<ul>
<li>Default to max 50 finished jobs in the queue <a href="https://github.com/sitespeedio/onlinetest/pull/58">#58</a>.</li>
</ul>
<ul>
<li>Update dev dependencies like ESLint 9 <a href="https://github.com/sitespeedio/onlinetest/pull/62">#62</a>.</li>
</ul>
<ul>
<li>Update DayJS 1.11.11 <a href="https://github.com/sitespeedio/onlinetest/pull/63">#63</a></li>
</ul>
<ul>
<li>Make sure all uncaught errors are caught <a href="https://github.com/sitespeedio/onlinetest/pull/64">#64</a></li>
</ul>
<ul>
<li>Add a keydb configuration file <a href="https://github.com/sitespeedio/onlinetest/pull/56">#56</a></li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.3.1]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.1</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.1</guid>
<pubDate>Sat, 29 Jun 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>If the queue system is down when you add a new test, make sure the status of the test in the database is failed <a href="https://github.com/sitespeedio/onlinetest/pull/50">#50</a>.</li>
</ul>
<ul>
<li>If the queue is not up when you access the start page, make sure that at least after X seconds you get a error page <a href="https://github.com/sitespeedio/onlinetest/pull/53">#53</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.3.0]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.0</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.3.0</guid>
<pubDate>Fri, 28 Jun 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>search: Make label configurable in search result <a href="https://github.com/sitespeedio/onlinetest/pull/46">#46</a>.</li>
</ul>
<ul>
<li>search: Make run date readable <a href="https://github.com/sitespeedio/onlinetest/pull/45">#45</a>.</li>
</ul>
<ul>
<li>Show version number in footer and API <a href="https://github.com/sitespeedio/onlinetest/pull/44">#44</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[server 0.2.1]]></title>
<link>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.2.1</link>
<guid>https://github.com/sitespeedio/server/blob/main/CHANGELOG.md#0.2.1</guid>
<pubDate>Thu, 27 Jun 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Search: Fix for searching for test type <a href="https://github.com/sitespeedio/onlinetest/pull/42">#42</a>.</li>
<li>Update to latest sitespeed.io/log <a href="https://github.com/sitespeedio/onlinetest/pull/138">#138</a>.</li>
</ul>
]]></description>
</item>

View File

@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>sitespeed.io-release-feed</id>
<title>sitespeed.io release feed</title>
<updated>2025-01-21T15:13:50.086Z</updated>
<updated>2026-01-10T21:40:43.526Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
@ -17,83 +17,17 @@
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[sitespeed.io 36.0.2]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.2</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.2"/>
<updated>2025-01-21T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated Browsertime with a fix if the Jimp dependency is missing.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 36.0.1]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.1</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.1"/>
<updated>2025-01-21T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Disable the CPU/enableProfileRun check introduced in 36.0.0, that affected too many users <a href="https://github.com/sitespeedio/sitespeed.io/pull/4408">#4408</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 36.0.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.0"/>
<updated>2025-01-21T00:00:00.000Z</updated>
<title type="html"><![CDATA[sitespeed.io 39.3.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.3.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.3.0"/>
<updated>2026-01-10T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Update to Coach-core 8.1.1 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4363">#4363</a></li>
</ul>
<ul>
<li>Use the offical Slack plugin instead of node-slack <a href="https://github.com/sitespeedio/sitespeed.io/pull/4360">#4360</a>.</li>
</ul>
<ul>
<li>Firefox 134, Chrome 132 and NodeJS 22 in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/4395">#4395</a>, <a href="https://github.com/sitespeedio/sitespeed.io/pull/4396">#4396</a> and <a href="https://github.com/sitespeedio/sitespeed.io/pull/4405">#4405</a></li>
</ul>
<ul>
<li>Let the Docker container output the CPU architecture for easier error reporting <a href="https://github.com/sitespeedio/sitespeed.io/pull/4404">#4404</a>.</li>
<li>Updated to Browsertime 26.3 with and updated version of bidi-har that makes it possible to get response bodies in the HAR file for Firefox <a href="https://github.com/sitespeedio/sitespeed.io/pull/4578">#4578</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Replace dependencies with local code:</li>
</ul>
<ul>
<li>Fix cli command: Use <code>--summaryDetail</code> (not summary-detail) <a href="https://github.com/sitespeedio/sitespeed.io/pull/4376">#4376</a>.</li>
</ul>
<ul>
<li>Remove connectivity output from text since it was broken <a href="https://github.com/sitespeedio/sitespeed.io/pull/4375">#4375</a>.</li>
</ul>
<ul>
<li>Upgrade to co2.js 0.16.4 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4353">#4353</a>.</li>
</ul>
<ul>
<li>Make sure co2 data is only read once at startup <a href="https://github.com/sitespeedio/sitespeed.io/pull/4352">#4352</a>.</li>
</ul>
<ul>
<li>Making the slim container a little smaller <a href="https://github.com/sitespeedio/sitespeed.io/pull/4355">#4355</a>.</li>
</ul>
<ul>
<li>Ugrade to google-cloud/storage-7.14.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4361">#4361</a>.</li>
</ul>
<ul>
<li>Upgrade to AWS client 3.717.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4368">#4368</a></li>
</ul>
<ul>
<li>Removed the webdriver manager in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/4390">4390</a>. We don&#39;t use it but on MacOS Selenium still uses it to find the driver for Safari so we can only remove it in Docker.</li>
</ul>
<ul>
<li>Fix Wilcoxon NaN values when running the compare plugin <a href="https://github.com/sitespeedio/sitespeed.io/pull/4402">#4402</a>.</li>
<li>Fixed typo in iteration detail page for the cpuConsumption metric, thank you <a href="https://github.com/byte55">Michael Walter</a> for PR <a href="https://github.com/sitespeedio/sitespeed.io/pull/4577">#4577</a>.</li>
</ul>
]]></summary>
<author>
@ -102,128 +36,152 @@
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 35.7.5]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.5</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.5"/>
<updated>2024-12-23T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Update to faststat 0.0.7 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4347">#4347</a>.</li>
</ul>
<ul>
<li>Update dev dependencies <a href="https://github.com/sitespeedio/sitespeed.io/pull/4345">#4345</a>.</li>
</ul>
<ul>
<li>Let analysisstorer know about webpagereplay so that correct information is displayed <a href="https://github.com/sitespeedio/sitespeed.io/pull/4349">#4349</a>.</li>
</ul>
<ul>
<li>Pass on webpagereplay flag to browsertime <a href="https://github.com/sitespeedio/sitespeed.io/pull/4350">#4350</a>.</li>
</ul>
<ul>
<li>Update to Browsertime 23.5.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4351">#4351</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 35.7.4]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.4</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.4"/>
<updated>2024-12-20T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to Browsertime 23.4.5 that have a fix for visual metrics running videos from mobile <a href="https://github.com/sitespeedio/sitespeed.io/pull/4343">#4343</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 35.7.3]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.3</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.3"/>
<updated>2024-12-18T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Add validation for dataset lengths for the Wilcoxon test. Thank you <a href="https://github.com/Amerousful">Pavel Bairov</a> for PR <a href="https://github.com/sitespeedio/sitespeed.io/pull/4341">4341</a>.</li>
</ul>
<ul>
<li>Updated to Browsertime 23.4.4 that has a more robust check for gnirehtet configuration <a href="https://github.com/sitespeedio/sitespeed.io/pull/4342">#4342</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 35.7.2]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.2</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.2"/>
<updated>2024-12-14T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Added extra logs if the compare plugin fails when using Python so we easily can see the input parameters.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 35.7.1]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.1</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.1"/>
<updated>2024-12-11T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to Browsertime 23.4.3 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4336">#4336</a>.</li>
</ul>
<ul>
<li>Make sure Firefox displays power consumption in mWH <a href="https://github.com/sitespeedio/sitespeed.io/pull/4334">#4334</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 35.7.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.0"/>
<updated>2024-11-30T00:00:00.000Z</updated>
<title type="html"><![CDATA[sitespeed.io 39.2.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.2.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.2.0"/>
<updated>2025-12-18T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Firefox 133 in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/4327">#4327</a>.</li>
<li>Updated to Browsertime 26.2 with latest Chromedriver and Edgedriver and a small XVFB fix <a href="https://github.com/sitespeedio/sitespeed.io/pull/4575">#4575</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 39.1.2]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.2</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.2"/>
<updated>2025-12-17T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix a bug introduced in 39.0.0 where alias was missing when creating some file structure <a href="https://github.com/sitespeedio/sitespeed.io/pull/4574">#4574</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 39.1.1]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.1</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.1"/>
<updated>2025-12-16T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Safer handling for broken URLs. This logs the actual root cause <a href="https://github.com/sitespeedio/sitespeed.io/pull/4573">#4573</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 39.1.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.0"/>
<updated>2025-12-15T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Upgrade the Docker container: Chrome and Edge 143, Firefox 146 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4572">#4572</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 39.0.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.0.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.0.0"/>
<updated>2025-12-15T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Upgrade to support NodeJS 24 without warnings, include NodeJS 24 in the Docker container, and base the Docker container on Ubuntu 24.04. To make this work I needed to upgrade the Jimp library and then we lost the settings for png screenshots <code>--browsertime.screenshotParams.png.compressionLevel</code> <a href="https://github.com/sitespeedio/sitespeed.io/pull/4570">#4570</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 38.6.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.6.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.6.0"/>
<updated>2025-11-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Browsertime 25.4.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4566">#4566</a>.</li>
</ul>
<ul>
<li>Chrome 142 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4565">#4565</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 38.5.2]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.2</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.2"/>
<updated>2025-10-24T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgrade to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2531---2025-10-24">Browsetime 25.3.1</a> <a href="https://github.com/sitespeedio/sitespeed.io/pull/4562">#4562</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 38.5.1]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.1</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.1"/>
<updated>2025-10-21T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>The +1 container has a updated configuration for the GPSI plugin to remove the PWA category. Thank you <a href="https://github.com/ThimoCode">ThimoCode</a> for PR <a href="https://github.com/sitespeedio/plugin-gpsi/pull/58">#58</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 38.5.0]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.0</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.0"/>
<updated>2025-10-18T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated the Docker container to use Firefox 144 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4554">#4554</a>.</li>
</ul>
<ul>
<li>Added Browsertime 25.3 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4559">#4559</a> with support for removing some headers in the HAR file (more info about that soon).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Axe Core 4.10.2 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4328">#3328</a></li>
<li>Updated dev dependencies <a href="https://github.com/sitespeedio/sitespeed.io/pull/4556">#4556</a>.</li>
</ul>
<ul>
<li>Fix security warnings in the Docker container.</li>
<li>Updated to Axe-core 4.11.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4555">#4555)</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[sitespeed.io 35.6.1]]></title>
<id>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.6.1</id>
<link href="https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.6.1"/>
<updated>2024-11-23T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure the compare plugin can handle if your run Firefox with CPU options <a href="https://github.com/sitespeedio/sitespeed.io/pull/4324">#4324</a>.</li>
<li>Updated Ora dependency <a href="https://github.com/sitespeedio/sitespeed.io/pull/4557">#4557</a>.</li>
</ul>
<ul>
<li>Updated the log dependency <a href="https://github.com/sitespeedio/sitespeed.io/pull/4558">#4558</a>. The new version remove the color for error logs.</li>
</ul>
]]></summary>
<author>

View File

@ -4,7 +4,7 @@
<title>sitespeed.io release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of sitespeed.io</description>
<lastBuildDate>Tue, 21 Jan 2025 15:13:50 GMT</lastBuildDate>
<lastBuildDate>Sat, 10 Jan 2026 21:40:43 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
@ -17,186 +17,144 @@
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/rss.xml" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[sitespeed.io 36.0.2]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.2</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.2</guid>
<pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated Browsertime with a fix if the Jimp dependency is missing.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 36.0.1]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.1</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.1</guid>
<pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Disable the CPU/enableProfileRun check introduced in 36.0.0, that affected too many users <a href="https://github.com/sitespeedio/sitespeed.io/pull/4408">#4408</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 36.0.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#36.0.0</guid>
<pubDate>Tue, 21 Jan 2025 00:00:00 GMT</pubDate>
<title><![CDATA[sitespeed.io 39.3.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.3.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.3.0</guid>
<pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Update to Coach-core 8.1.1 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4363">#4363</a></li>
</ul>
<ul>
<li>Use the offical Slack plugin instead of node-slack <a href="https://github.com/sitespeedio/sitespeed.io/pull/4360">#4360</a>.</li>
</ul>
<ul>
<li>Firefox 134, Chrome 132 and NodeJS 22 in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/4395">#4395</a>, <a href="https://github.com/sitespeedio/sitespeed.io/pull/4396">#4396</a> and <a href="https://github.com/sitespeedio/sitespeed.io/pull/4405">#4405</a></li>
</ul>
<ul>
<li>Let the Docker container output the CPU architecture for easier error reporting <a href="https://github.com/sitespeedio/sitespeed.io/pull/4404">#4404</a>.</li>
<li>Updated to Browsertime 26.3 with and updated version of bidi-har that makes it possible to get response bodies in the HAR file for Firefox <a href="https://github.com/sitespeedio/sitespeed.io/pull/4578">#4578</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Replace dependencies with local code:</li>
</ul>
<ul>
<li>Fix cli command: Use <code>--summaryDetail</code> (not summary-detail) <a href="https://github.com/sitespeedio/sitespeed.io/pull/4376">#4376</a>.</li>
</ul>
<ul>
<li>Remove connectivity output from text since it was broken <a href="https://github.com/sitespeedio/sitespeed.io/pull/4375">#4375</a>.</li>
</ul>
<ul>
<li>Upgrade to co2.js 0.16.4 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4353">#4353</a>.</li>
</ul>
<ul>
<li>Make sure co2 data is only read once at startup <a href="https://github.com/sitespeedio/sitespeed.io/pull/4352">#4352</a>.</li>
</ul>
<ul>
<li>Making the slim container a little smaller <a href="https://github.com/sitespeedio/sitespeed.io/pull/4355">#4355</a>.</li>
</ul>
<ul>
<li>Ugrade to google-cloud/storage-7.14.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4361">#4361</a>.</li>
</ul>
<ul>
<li>Upgrade to AWS client 3.717.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4368">#4368</a></li>
</ul>
<ul>
<li>Removed the webdriver manager in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/4390">4390</a>. We don&#39;t use it but on MacOS Selenium still uses it to find the driver for Safari so we can only remove it in Docker.</li>
</ul>
<ul>
<li>Fix Wilcoxon NaN values when running the compare plugin <a href="https://github.com/sitespeedio/sitespeed.io/pull/4402">#4402</a>.</li>
<li>Fixed typo in iteration detail page for the cpuConsumption metric, thank you <a href="https://github.com/byte55">Michael Walter</a> for PR <a href="https://github.com/sitespeedio/sitespeed.io/pull/4577">#4577</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 35.7.5]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.5</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.5</guid>
<pubDate>Mon, 23 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Update to faststat 0.0.7 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4347">#4347</a>.</li>
</ul>
<ul>
<li>Update dev dependencies <a href="https://github.com/sitespeedio/sitespeed.io/pull/4345">#4345</a>.</li>
</ul>
<ul>
<li>Let analysisstorer know about webpagereplay so that correct information is displayed <a href="https://github.com/sitespeedio/sitespeed.io/pull/4349">#4349</a>.</li>
</ul>
<ul>
<li>Pass on webpagereplay flag to browsertime <a href="https://github.com/sitespeedio/sitespeed.io/pull/4350">#4350</a>.</li>
</ul>
<ul>
<li>Update to Browsertime 23.5.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4351">#4351</a></li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 35.7.4]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.4</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.4</guid>
<pubDate>Fri, 20 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to Browsertime 23.4.5 that have a fix for visual metrics running videos from mobile <a href="https://github.com/sitespeedio/sitespeed.io/pull/4343">#4343</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 35.7.3]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.3</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.3</guid>
<pubDate>Wed, 18 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Add validation for dataset lengths for the Wilcoxon test. Thank you <a href="https://github.com/Amerousful">Pavel Bairov</a> for PR <a href="https://github.com/sitespeedio/sitespeed.io/pull/4341">4341</a>.</li>
</ul>
<ul>
<li>Updated to Browsertime 23.4.4 that has a more robust check for gnirehtet configuration <a href="https://github.com/sitespeedio/sitespeed.io/pull/4342">#4342</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 35.7.2]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.2</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.2</guid>
<pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Added extra logs if the compare plugin fails when using Python so we easily can see the input parameters.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 35.7.1]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.1</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.1</guid>
<pubDate>Wed, 11 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Updated to Browsertime 23.4.3 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4336">#4336</a>.</li>
</ul>
<ul>
<li>Make sure Firefox displays power consumption in mWH <a href="https://github.com/sitespeedio/sitespeed.io/pull/4334">#4334</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 35.7.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.7.0</guid>
<pubDate>Sat, 30 Nov 2024 00:00:00 GMT</pubDate>
<title><![CDATA[sitespeed.io 39.2.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.2.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.2.0</guid>
<pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Firefox 133 in the Docker container <a href="https://github.com/sitespeedio/sitespeed.io/pull/4327">#4327</a>.</li>
<li>Updated to Browsertime 26.2 with latest Chromedriver and Edgedriver and a small XVFB fix <a href="https://github.com/sitespeedio/sitespeed.io/pull/4575">#4575</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 39.1.2]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.2</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.2</guid>
<pubDate>Wed, 17 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix a bug introduced in 39.0.0 where alias was missing when creating some file structure <a href="https://github.com/sitespeedio/sitespeed.io/pull/4574">#4574</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 39.1.1]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.1</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.1</guid>
<pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Safer handling for broken URLs. This logs the actual root cause <a href="https://github.com/sitespeedio/sitespeed.io/pull/4573">#4573</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 39.1.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.1.0</guid>
<pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Upgrade the Docker container: Chrome and Edge 143, Firefox 146 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4572">#4572</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 39.0.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.0.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#39.0.0</guid>
<pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Upgrade to support NodeJS 24 without warnings, include NodeJS 24 in the Docker container, and base the Docker container on Ubuntu 24.04. To make this work I needed to upgrade the Jimp library and then we lost the settings for png screenshots <code>--browsertime.screenshotParams.png.compressionLevel</code> <a href="https://github.com/sitespeedio/sitespeed.io/pull/4570">#4570</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 38.6.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.6.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.6.0</guid>
<pubDate>Sun, 02 Nov 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Browsertime 25.4.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4566">#4566</a>.</li>
</ul>
<ul>
<li>Chrome 142 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4565">#4565</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 38.5.2]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.2</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.2</guid>
<pubDate>Fri, 24 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Upgrade to <a href="https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2531---2025-10-24">Browsetime 25.3.1</a> <a href="https://github.com/sitespeedio/sitespeed.io/pull/4562">#4562</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 38.5.1]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.1</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.1</guid>
<pubDate>Tue, 21 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>The +1 container has a updated configuration for the GPSI plugin to remove the PWA category. Thank you <a href="https://github.com/ThimoCode">ThimoCode</a> for PR <a href="https://github.com/sitespeedio/plugin-gpsi/pull/58">#58</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 38.5.0]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.0</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#38.5.0</guid>
<pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated the Docker container to use Firefox 144 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4554">#4554</a>.</li>
</ul>
<ul>
<li>Added Browsertime 25.3 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4559">#4559</a> with support for removing some headers in the HAR file (more info about that soon).</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Axe Core 4.10.2 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4328">#3328</a></li>
<li>Updated dev dependencies <a href="https://github.com/sitespeedio/sitespeed.io/pull/4556">#4556</a>.</li>
</ul>
<ul>
<li>Fix security warnings in the Docker container.</li>
<li>Updated to Axe-core 4.11.0 <a href="https://github.com/sitespeedio/sitespeed.io/pull/4555">#4555)</a>.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>
</item>
<item>
<title><![CDATA[sitespeed.io 35.6.1]]></title>
<link>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.6.1</link>
<guid>https://github.com/sitespeedio/sitespeed.io/blob/main/CHANGELOG.md#35.6.1</guid>
<pubDate>Sat, 23 Nov 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure the compare plugin can handle if your run Firefox with CPU options <a href="https://github.com/sitespeedio/sitespeed.io/pull/4324">#4324</a>.</li>
<li>Updated Ora dependency <a href="https://github.com/sitespeedio/sitespeed.io/pull/4557">#4557</a>.</li>
</ul>
<ul>
<li>Updated the log dependency <a href="https://github.com/sitespeedio/sitespeed.io/pull/4558">#4558</a>. The new version remove the color for error logs.</li>
</ul>
]]></description>
<enclosure url="https://www.sitespeed.io/img/logos/sitespeed.io.png" length="0" type="image/png"/>

View File

@ -2,7 +2,7 @@
<feed xmlns="http://www.w3.org/2005/Atom">
<id>testrunner-release-feed</id>
<title>testrunner release feed</title>
<updated>2024-12-27T07:52:02.795Z</updated>
<updated>2025-10-22T21:28:22.870Z</updated>
<generator>https://github.com/jpmonette/feed</generator>
<author>
<name>Peter Hedenskog</name>
@ -15,6 +15,125 @@
<icon>http://www.sitespeed.io/favicon.ico</icon>
<rights>All rights reserved 2022, Peter Hedenskog and team</rights>
<category term="Web Performance"/>
<entry>
<title type="html"><![CDATA[testrunner 1.2.1]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.1</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.1"/>
<updated>2025-10-31T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Tests running in the Docker container has the wrong path to the scripting file <a href="https://github.com/sitespeedio/onlinetest/pull/167">#167</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.2.0]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.0</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.0"/>
<updated>2025-10-22T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Update to sitespeed.io 38 <a href="https://github.com/sitespeedio/onlinetest/pull/158">#158</a></li>
</ul>
<ul>
<li>Update to NodeJS 22 <a href="https://github.com/sitespeedio/onlinetest/pull/155">#155</a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Updated dependencies (too many PRs).</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.1.0]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.1.0</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.1.0"/>
<updated>2025-02-12T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to sitespeed.io 36 as default version <a href="https://github.com/sitespeedio/onlinetest/pull/134">#134</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Use latest version of sitespeed.io/logs <a href="https://github.com/sitespeedio/onlinetest/pull/138">#138</a>.</li>
</ul>
<ul>
<li>Safer trap for WPR processes when running NodeJS Testrunner <a href="https://github.com/sitespeedio/onlinetest/pull/139">#139</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.0.7]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.7</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.7"/>
<updated>2025-02-04T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix to make sure WPR always is killed whatever happens <a href="https://github.com/sitespeedio/onlinetest/pull/131">#131</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.0.6]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.6</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.6"/>
<updated>2025-01-31T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Disable verbose logging from GUI <a href="https://github.com/sitespeedio/onlinetest/pull/130">#130</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.0.5]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.5</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.5"/>
<updated>2025-01-30T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure failing tests with a result is accessible <a href="https://github.com/sitespeedio/onlinetest/pull/126">#126</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.0.4]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.4</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.4"/>
<updated>2025-01-25T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Replace Intel log with @sitespeed.io/log <a href="https://github.com/sitespeedio/onlinetest/pull/117">#117</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.0.3]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.3</id>
@ -54,117 +173,6 @@
<ul>
<li>Fixed the release flow so the Docker containers get the correct tag.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 1.0.0]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.0</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.0"/>
<updated>2024-12-06T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>A new Docker setup <a href="https://github.com/sitespeedio/onlinetest/pull/95">#95</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 0.5.6]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.6</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.6"/>
<updated>2024-09-24T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Bull 4.16.3 <a href="https://github.com/sitespeedio/onlinetest/pull/87">#87</a></li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 0.5.3]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.3</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.3"/>
<updated>2024-08-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Correctly set the hostname in the configuration file <a href="https://github.com/sitespeedio/onlinetest/pull/83">#83</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 0.5.2]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.2</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.2"/>
<updated>2024-08-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix a bug setting the baseline for compare plugin <a href="https://github.com/sitespeedio/onlinetest/pull/71">#71</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 0.5.1]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.1</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.1"/>
<updated>2024-08-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Correct version in package.json</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 0.5.0]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.0</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.0"/>
<updated>2024-08-02T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Added</h3>
<ul>
<li>When running compare plugin tests using Docker, set the baseline directory automatically <a href="https://github.com/sitespeedio/onlinetest/pull/70">#70</a></li>
</ul>
<ul>
<li><ul>
<li>Make it possible to choose container that runs the test, using the API <a href="https://github.com/sitespeedio/onlinetest/pull/69/">#69</a></li>
</ul>
</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>
<uri>https://www.sitespeed.io</uri>
</author>
</entry>
<entry>
<title type="html"><![CDATA[testrunner 0.4.1]]></title>
<id>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.4.1</id>
<link href="https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.4.1"/>
<updated>2024-07-30T00:00:00.000Z</updated>
<summary type="html"><![CDATA[<h3>Fixed</h3>
<ul>
<li>Log testrunner version on startup <a href="https://github.com/sitespeedio/onlinetest/pull/67">#67</a>.</li>
</ul>
]]></summary>
<author>
<name>Sitespeed.io</name>

View File

@ -4,13 +4,104 @@
<title>testrunner release feed</title>
<link>https://www.sitespeed.io</link>
<description>New releases and changelog feed of testrunner</description>
<lastBuildDate>Fri, 27 Dec 2024 07:52:02 GMT</lastBuildDate>
<lastBuildDate>Wed, 22 Oct 2025 21:28:22 GMT</lastBuildDate>
<docs>https://validator.w3.org/feed/docs/rss2.html</docs>
<generator>https://github.com/jpmonette/feed</generator>
<language>en</language>
<copyright>All rights reserved 2022, Peter Hedenskog and team</copyright>
<category>Web Performance</category>
<atom:link href="https://www.sitespeed.io/feed/testrunner.rss" rel="self" type="application/rss+xml"/>
<item>
<title><![CDATA[testrunner 1.2.1]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.1</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.1</guid>
<pubDate>Fri, 31 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Tests running in the Docker container has the wrong path to the scripting file <a href="https://github.com/sitespeedio/onlinetest/pull/167">#167</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.2.0]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.0</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.2.0</guid>
<pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Update to sitespeed.io 38 <a href="https://github.com/sitespeedio/onlinetest/pull/158">#158</a></li>
</ul>
<ul>
<li>Update to NodeJS 22 <a href="https://github.com/sitespeedio/onlinetest/pull/155">#155</a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Updated dependencies (too many PRs).</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.1.0]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.1.0</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.1.0</guid>
<pubDate>Wed, 12 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>Updated to sitespeed.io 36 as default version <a href="https://github.com/sitespeedio/onlinetest/pull/134">#134</a>.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Use latest version of sitespeed.io/logs <a href="https://github.com/sitespeedio/onlinetest/pull/138">#138</a>.</li>
</ul>
<ul>
<li>Safer trap for WPR processes when running NodeJS Testrunner <a href="https://github.com/sitespeedio/onlinetest/pull/139">#139</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.0.7]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.7</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.7</guid>
<pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix to make sure WPR always is killed whatever happens <a href="https://github.com/sitespeedio/onlinetest/pull/131">#131</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.0.6]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.6</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.6</guid>
<pubDate>Fri, 31 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Disable verbose logging from GUI <a href="https://github.com/sitespeedio/onlinetest/pull/130">#130</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.0.5]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.5</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.5</guid>
<pubDate>Thu, 30 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Make sure failing tests with a result is accessible <a href="https://github.com/sitespeedio/onlinetest/pull/126">#126</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.0.4]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.4</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.4</guid>
<pubDate>Sat, 25 Jan 2025 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Replace Intel log with @sitespeed.io/log <a href="https://github.com/sitespeedio/onlinetest/pull/117">#117</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.0.3]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.3</link>
@ -42,89 +133,6 @@
<ul>
<li>Fixed the release flow so the Docker containers get the correct tag.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 1.0.0]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.0</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#1.0.0</guid>
<pubDate>Fri, 06 Dec 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>A new Docker setup <a href="https://github.com/sitespeedio/onlinetest/pull/95">#95</a></li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 0.5.6]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.6</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.6</guid>
<pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Bull 4.16.3 <a href="https://github.com/sitespeedio/onlinetest/pull/87">#87</a></li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 0.5.3]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.3</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.3</guid>
<pubDate>Fri, 02 Aug 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Correctly set the hostname in the configuration file <a href="https://github.com/sitespeedio/onlinetest/pull/83">#83</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 0.5.2]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.2</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.2</guid>
<pubDate>Fri, 02 Aug 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Fix a bug setting the baseline for compare plugin <a href="https://github.com/sitespeedio/onlinetest/pull/71">#71</a>.</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 0.5.1]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.1</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.1</guid>
<pubDate>Fri, 02 Aug 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Correct version in package.json</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 0.5.0]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.0</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.5.0</guid>
<pubDate>Fri, 02 Aug 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Added</h3>
<ul>
<li>When running compare plugin tests using Docker, set the baseline directory automatically <a href="https://github.com/sitespeedio/onlinetest/pull/70">#70</a></li>
</ul>
<ul>
<li><ul>
<li>Make it possible to choose container that runs the test, using the API <a href="https://github.com/sitespeedio/onlinetest/pull/69/">#69</a></li>
</ul>
</li>
</ul>
]]></description>
</item>
<item>
<title><![CDATA[testrunner 0.4.1]]></title>
<link>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.4.1</link>
<guid>https://github.com/sitespeedio/testrunner/blob/main/CHANGELOG.md#0.4.1</guid>
<pubDate>Tue, 30 Jul 2024 00:00:00 GMT</pubDate>
<description><![CDATA[<h3>Fixed</h3>
<ul>
<li>Log testrunner version on startup <a href="https://github.com/sitespeedio/onlinetest/pull/67">#67</a>.</li>
</ul>
]]></description>
</item>
</channel>

View File

@ -1,18 +1,7 @@
import prettier from 'eslint-plugin-prettier';
import unicorn from 'eslint-plugin-unicorn';
import globals from 'globals';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
import js from '@eslint/js';
import { FlatCompat } from '@eslint/eslintrc';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const compat = new FlatCompat({
baseDirectory: __dirname,
recommendedConfig: js.configs.recommended,
allConfig: js.configs.all
});
export default [
{
@ -28,11 +17,11 @@ export default [
'test/prepostscripts/*'
]
},
...compat.extends('eslint:recommended', 'plugin:unicorn/recommended'),
js.configs.recommended,
unicorn.configs.recommended,
{
plugins: {
prettier,
unicorn
prettier
},
languageOptions: {

View File

@ -18,6 +18,7 @@ import { config as slackConfig } from '../plugins/slack/index.js';
import { config as htmlConfig } from '../plugins/html/index.js';
import { messageTypes as matrixMessageTypes } from '../plugins/matrix/index.js';
import { findUpSync } from '../support/fileUtil.js';
import { registerPluginOptions } from './pluginOptions.js';
const metricList = Object.keys(friendlynames);
const require = createRequire(import.meta.url);
@ -25,6 +26,17 @@ const version = require('../../package.json').version;
const configFiles = ['.sitespeed.io.json'];
const addedPlugins = yargs(hideBin(process.argv))
.option('plugins.add', { type: 'array' })
.help(false)
.version(false)
.parse();
const globalPluginsToAdd = addedPlugins.plugins?.add || [];
function fixAndroidArgs(args) {
return args.map(arg => (arg === '--android' ? '--android.enabled' : arg));
}
if (process.argv.includes('--config')) {
const index = process.argv.indexOf('--config');
configFiles.unshift(process.argv[index + 1]);
@ -52,7 +64,7 @@ try {
function validateInput(argv) {
// Check NodeJS major version
const fullVersion = process.versions.node;
const minVersion = 14;
const minVersion = 20;
const majorVersion = fullVersion.split('.')[0];
if (majorVersion < minVersion) {
return (
@ -214,12 +226,9 @@ function validateInput(argv) {
}
export async function parseCommandLine() {
let argvFix = process.argv.map(arg =>
arg === '--android' ? '--android.enabled' : arg
);
let yargsInstance = yargs(hideBin(argvFix));
let parsed = yargsInstance
const fixedArgs = fixAndroidArgs(hideBin(process.argv));
const yargsInstance = yargs(fixedArgs);
yargsInstance
.parserConfiguration({
'camel-case-expansion': false,
'deep-merge-config': true
@ -420,7 +429,7 @@ export async function parseCommandLine() {
})
.option('browsertime.script', {
describe:
'Add custom Javascript that collect metrics and run after the page has finished loading. Note that --script can be passed multiple times if you want to collect multiple metrics. The metrics will automatically be pushed to the summary/detailed summary and each individual page + sent to Graphite/InfluxDB.',
'Add custom Javascript that collect metrics and run after the page has finished loading. Note that --script can be passed multiple times if you want to collect multiple metrics. The metrics will automatically be pushed to the summary/detailed summary and each individual page + sent to Graphite',
alias: ['script'],
group: 'Browser'
})
@ -496,12 +505,6 @@ export async function parseCommandLine() {
describe: 'Collect Contentful Speed Index when you run --visualMetrics.',
group: 'Browser'
})
.option('browsertime.visualMetricsPortable', {
type: 'boolean',
default: true,
describe:
'Use the portable visual-metrics processing script (no ImageMagick dependencies).'
})
.option('browsertime.visualElements', {
type: 'boolean',
alias: ['visualElements'],
@ -512,7 +515,7 @@ export async function parseCommandLine() {
.option('browsertime.scriptInput.visualElements', {
alias: ['scriptInput.visualElements'],
describe:
'Include specific elements in visual elements. Give the element a name and select it with document.body.querySelector. Use like this: --scriptInput.visualElements name:domSelector . Add multiple instances to measure multiple elements. Visual Metrics will use these elements and calculate when they are visible and fully rendered.',
'Include specific elements in visual elements. Give the element a name and select it with document.body.querySelector. Use like this: --scriptInput.visualElements name:domSelector . If you want to measure multiple elements, use a configuration file with an array for the input. Visual Metrics will use these elements and calculate when they are visible and fully rendered.',
group: 'Browser'
})
.option('browsertime.scriptInput.longTask', {
@ -648,10 +651,9 @@ export async function parseCommandLine() {
})
.option('browsertime.firefox.includeResponseBodies', {
alias: 'firefox.includeResponseBodies',
describe:
'Warning: This do not work at the moment, see https://github.com/sitespeedio/sitespeed.io/issues/4295',
describe: 'Collect response bodies in the HAR',
default: 'none',
choices: ['none', 'all', 'html'],
choices: ['none', 'all'],
group: 'Firefox'
})
.option('browsertime.firefox.nightly', {
@ -860,8 +862,8 @@ export async function parseCommandLine() {
'Process name of the Activity hosting the WebView. If not given, the process name is assumed to be the same as chrome.android.package.',
group: 'Chrome'
})
.option('browsertime.android', {
alias: 'android',
.option('browsertime.android.enabled', {
alias: ['android.enabled'],
type: 'boolean',
default: false,
describe:
@ -1159,7 +1161,6 @@ export async function parseCommandLine() {
describe: 'Ignore robots.txt rules of the crawled domain.',
group: 'Crawler'
})
.option('scp.host', {
describe: 'The host.',
group: 'scp'
@ -1346,80 +1347,6 @@ export async function parseCommandLine() {
'Define which messages to send to Graphite. By default we do not send data per run, but you can change that by adding run as one of the options',
group: 'Graphite'
})
.option('influxdb.protocol', {
describe: 'The protocol used to store connect to the InfluxDB host.',
default: 'http',
group: 'InfluxDB'
})
.option('influxdb.host', {
describe: 'The InfluxDB host used to store captured metrics.',
group: 'InfluxDB'
})
.option('influxdb.port', {
default: 8086,
describe: 'The InfluxDB port used to store captured metrics.',
group: 'InfluxDB'
})
.option('influxdb.username', {
describe:
'The InfluxDB username for your InfluxDB instance (only for InfluxDB v1)',
group: 'InfluxDB'
})
.option('influxdb.password', {
describe:
'The InfluxDB password for your InfluxDB instance (only for InfluxDB v1).',
group: 'InfluxDB'
})
.option('influxdb.organisation', {
describe:
'The InfluxDB organisation for your InfluxDB instance (only for InfluxDB v2)',
group: 'InfluxDB'
})
.option('influxdb.token', {
describe:
'The InfluxDB token for your InfluxDB instance (only for InfluxDB v2)',
group: 'InfluxDB'
})
.option('influxdb.version', {
default: 1,
describe: 'The InfluxDB version of your InfluxDB instance.',
type: 'integer',
group: 'InfluxDB'
})
.option('influxdb.database', {
default: 'sitespeed',
describe: 'The database name used to store captured metrics.',
group: 'InfluxDB'
})
.option('influxdb.tags', {
default: 'category=default',
describe:
'A comma separated list of tags and values added to each metric',
group: 'InfluxDB'
})
.option('influxdb.includeQueryParams', {
default: false,
describe:
'Whether to include query parameters from the URL in the InfluxDB keys or not',
type: 'boolean',
group: 'InfluxDB'
})
.option('influxdb.groupSeparator', {
default: '_',
describe:
'Choose which character that will separate a group/domain. Default is underscore, set it to a dot if you wanna keep the original domain name.',
group: 'InfluxDB'
})
.option('influxdb.annotationScreenshot', {
default: false,
type: 'boolean',
describe:
'Include screenshot (from Browsertime) in the annotation. You need to specify a --resultBaseURL for this to work.',
group: 'InfluxDB'
});
parsed
/** Plugins */
.option('plugins.list', {
describe: 'List all configured plugins in the log.',
@ -1508,12 +1435,6 @@ export async function parseCommandLine() {
default: browsertimeConfig.screenshotParams.type,
group: 'Screenshot'
})
.option('browsertime.screenshotParams.png.compressionLevel', {
alias: 'screenshot.png.compressionLevel',
describe: 'zlib compression level',
default: browsertimeConfig.screenshotParams.png.compressionLevel,
group: 'Screenshot'
})
.option('browsertime.screenshotParams.jpg.quality', {
alias: 'screenshot.jpg.quality',
describe: 'Quality of the JPEG screenshot. 1-100',
@ -1525,13 +1446,7 @@ export async function parseCommandLine() {
describe: 'The max size of the screenshot (width and height).',
default: browsertimeConfig.screenshotParams.maxSize,
group: 'Screenshot'
});
/**
InfluxDB cli option
*/
parsed
// Metrics
})
.option('metrics.list', {
describe: 'List all possible metrics in the data folder (metrics.txt).',
type: 'boolean',
@ -1876,9 +1791,7 @@ export async function parseCommandLine() {
describe:
'Instead of using the local copy of the hosting database, you can use the latest version through the Green Web Foundation API. This means sitespeed.io will make HTTP GET to the the hosting info.',
group: 'Sustainable'
});
parsed
})
.option('api.key', {
describe: 'The API key to use.',
group: 'API'
@ -1929,9 +1842,7 @@ export async function parseCommandLine() {
.option('api.json', {
describe: 'Output the result as JSON.',
group: 'API'
});
parsed
})
.option('compare.id', {
type: 'string',
describe:
@ -1992,8 +1903,7 @@ export async function parseCommandLine() {
'Selects the method for calculating the Mann-Whitney U test. auto automatically selects between exact and asymptotic based on sample size, exact uses the exact distribution of U, and symptotic uses a normal approximation.',
default: 'auto',
group: 'compare'
});
parsed
})
.option('mobile', {
describe:
'Access pages as mobile a fake mobile device. Set UA and width/height. For Chrome it will use device Moto G4.',
@ -2027,12 +1937,12 @@ export async function parseCommandLine() {
})
.option('urlAlias', {
describe:
'Use an alias for the URL (if you feed URLs from a file you can instead have the alias in the file). You need to pass on the same amount of alias as URLs. The alias is used as the name of the URL on the HTML report and in Graphite/InfluxDB. Pass on multiple --urlAlias for multiple alias/URLs. This will override alias in a file.',
'Use an alias for the URL (if you feed URLs from a file you can instead have the alias in the file). You need to pass on the same amount of alias as URLs. The alias is used as the name of the URL on the HTML report and in Graphite. Pass on multiple --urlAlias for multiple alias/URLs. This will override alias in a file.',
type: 'string'
})
.option('groupAlias', {
describe:
'Use an alias for the group/domain. You need to pass on the same amount of alias as URLs. The alias is used as the name of the group in Graphite/InfluxDB. Pass on multiple --groupAlias for multiple alias/groups. This do not work for scripting at the moment.',
'Use an alias for the group/domain. You need to pass on the same amount of alias as URLs. The alias is used as the name of the group in Graphite. Pass on multiple --groupAlias for multiple alias/groups. This do not work for scripting at the moment.',
type: 'string'
})
.option('utc', {
@ -2055,6 +1965,11 @@ export async function parseCommandLine() {
.option('name', {
describe: 'Give your test a name.'
})
.option('logLevel', {
type: 'string',
choices: ['trace', 'verbose', 'debug', 'info', 'warning', 'error'],
describe: 'Manually set the min log level'
})
.option('open', {
alias: ['o', 'view'],
describe:
@ -2123,8 +2038,12 @@ export async function parseCommandLine() {
}
return plugins;
}
})
// .describe('browser', 'Specify browser')
});
// .describe('browser', 'Specify browser')
await registerPluginOptions(yargsInstance, globalPluginsToAdd);
let parsed = yargsInstance
.wrap(yargsInstance.terminalWidth())
// .check(validateInput)
.epilog(
@ -2194,7 +2113,7 @@ export async function parseCommandLine() {
if (argv.ios) {
set(argv, 'safari.ios', true);
} else if (argv.android && argv.browser === 'chrome') {
} else if (argv.android.enabled === true && argv.browser === 'chrome') {
// Default to Chrome Android.
set(
argv,
@ -2269,7 +2188,9 @@ export async function parseCommandLine() {
);
}
let urlsMetaData = getAliases(argv._, argv.urlAlias, argv.groupAlias);
let urlsMetaData = argv.multi
? {}
: getAliases(argv._, argv.urlAlias, argv.groupAlias);
// Copy the alias so it is also used by Browsertime
if (argv.urlAlias) {
// Browsertime has it own way of handling alias

42
lib/cli/pluginOptions.js Normal file
View File

@ -0,0 +1,42 @@
import { importGlobalSilent } from 'import-global';
/**
* Dynamically load and register CLI options from plugins.
*
* @param {import('yargs').Argv} yargsInstance - The yargs instance to extend.
* @param {string[]} plugins - Array of plugin module names.
* @returns {Promise<void>}
*/
export async function registerPluginOptions(yargsInstance, plugins) {
for (const pluginName of plugins) {
try {
// Dynamically import the plugin
let plugin = await importGlobalSilent(pluginName);
// If the plugin exports a function to get CLI options, merge them
if (
plugin &&
plugin.default &&
typeof plugin.default.getCliOptions === 'function'
) {
const options = plugin.default.getCliOptions();
yargsInstance.options(options);
} else {
try {
const plugin = await import(pluginName);
if (
plugin &&
plugin.default &&
typeof plugin.default.getCliOptions === 'function'
) {
const options = plugin.default.getCliOptions();
yargsInstance.options(options);
}
} catch {
// Swallow this silent
}
}
} catch {
// Swallow this silent
}
}
}

View File

@ -2,6 +2,7 @@ import { configureLog } from '@sitespeed.io/log';
export function configure(options = {}) {
configureLog({
level: options.logLevel ?? undefined,
verbose: options.verbose ?? 0,
silent: options.silent ?? false
});

View File

@ -1,10 +1,12 @@
import path from 'node:path';
import { readdir as _readdir } from 'node:fs';
import { promisify } from 'node:util';
import { fileURLToPath, pathToFileURL } from 'node:url';
import { importGlobalSilent } from 'import-global';
const readdir = promisify(_readdir);
const __dirname = path.dirname(import.meta.url);
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const defaultPlugins = new Set([
'browsertime',
@ -49,7 +51,7 @@ export async function parsePluginNames(options) {
return pluginNames;
};
const files = await readdir(new URL(pluginsDir));
const files = await readdir(pluginsDir);
const builtins = files.map(name => path.basename(name, '.js'));
// eslint-disable-next-line unicorn/no-array-callback-reference
@ -60,9 +62,9 @@ export async function loadPlugins(pluginNames, options, context, queue) {
const plugins = [];
for (let name of pluginNames) {
try {
let { default: plugin } = await import(
path.join(pluginsDir, name, 'index.js')
);
const pluginPath = path.join(pluginsDir, name, 'index.js');
const pluginUrl = pathToFileURL(pluginPath).href;
let { default: plugin } = await import(pluginUrl);
let p = new plugin(options, context, queue);
plugins.push(p);
} catch (error_) {
@ -79,12 +81,18 @@ export async function loadPlugins(pluginNames, options, context, queue) {
plugins.push(p);
} catch (error) {
// try global
let { default: plugin } = await importGlobalSilent(name);
if (plugin) {
let p = new plugin(options, context, queue);
plugins.push(p);
} else {
console.error("Couldn't load plugin %s: %s", name, error_);
try {
const plugin = await importGlobalSilent(name);
if (plugin) {
let p = new plugin.default(options, context, queue);
plugins.push(p);
} else {
console.error("Couldn't load plugin %s: %s", name, error_);
// if it fails here, let it fail hard
throw error;
}
} catch {
console.error("Couldn't find/load plugin %s", name);
// if it fails here, let it fail hard
throw error;
}

View File

@ -1,15 +1,15 @@
import { parse, format } from 'node:url';
import path from 'node:path';
import { resultUrls } from './resultUrls.js';
import { storageManager } from './storageManager.js';
function getDomainOrFileName(input) {
let domainOrFile = input;
domainOrFile = domainOrFile.startsWith('http')
? parse(domainOrFile).hostname
: path.basename(domainOrFile).replaceAll('.', '_');
return domainOrFile;
if (input.startsWith('http')) {
const url = new URL(input);
return url.hostname;
}
return path.basename(input).replaceAll('.', '_');
}
export function resultsStorage(input, timestamp, options) {
@ -34,10 +34,19 @@ export function resultsStorage(input, timestamp, options) {
storagePathPrefix = path.join(...resultsSubFolders);
if (resultBaseURL) {
const url = parse(resultBaseURL);
resultsSubFolders.unshift(url.pathname.slice(1));
url.pathname = resultsSubFolders.join('/');
resultUrl = format(url);
const url = new URL(resultBaseURL);
const basePath = url.pathname.slice(1); // drop leading '/'
if (basePath) {
resultsSubFolders.unshift(basePath);
}
const newPath = resultsSubFolders.join('/');
// Ensure leading slash for pathname
url.pathname = newPath.startsWith('/') ? newPath : `/${newPath}`;
resultUrl = url.toString();
}
return {

View File

@ -1,51 +1,77 @@
import { parse } from 'node:url';
import { createHash } from 'node:crypto';
import path from 'node:path';
import { getLogger } from '@sitespeed.io/log';
import { isEmpty } from '../../support/util.js';
const log = getLogger('sitespeedio.file');
function toSafeKey(key) {
// U+2013 : EN DASH as used on https://en.wikipedia.org/wiki/201920_coronavirus_pandemic
return key.replaceAll(/[ %&()+,./:?|~]|%7C/g, '-');
function isHttpLikeUrl(s) {
if (typeof s !== 'string' || s.length === 0) return false;
if (s.startsWith('//')) return true;
return /^https?:\/\//iu.test(s);
}
export function pathToFolder(url, options, alias) {
const useHash = options.useHash;
const parsedUrl = parse(decodeURIComponent(url));
function toSafeKey(key) {
return key.replaceAll(/[ %&()+,./:?|~]|%7C/gu, '-');
}
const pathSegments = [];
function md5Hex8(s) {
return createHash('md5').update(s).digest('hex').slice(0, 8);
}
function normalizeFsPath(input) {
let n = path.normalize(input);
if (n.startsWith(`.${path.sep}`)) n = n.slice(2);
return n;
}
export function pathToFolder(input, options, alias) {
if (options.useSameDir) return '';
let hostname = '';
let pathname = '';
let search = '';
let hash = '';
const isUrl = isHttpLikeUrl(input);
if (isUrl) {
const raw = input.startsWith('//') ? `http:${input}` : input;
const u = new URL(raw);
hostname = u.hostname;
pathname = u.pathname; // '/'-separated
search = u.search; // includes '?'
hash = u.hash; // includes '#'
} else {
hostname = 'file';
const fsNormalized = normalizeFsPath(input);
pathname = `${path.sep}${fsNormalized}`;
}
const pathSegments = ['pages', hostname.split('.').join('_')];
const urlSegments = [];
pathSegments.push('pages', parsedUrl.hostname.split('.').join('_'));
if (options.urlMetaData && options.urlMetaData[url]) {
pathSegments.push(options.urlMetaData[url]);
if (options.urlMetaData && options.urlMetaData[input]) {
pathSegments.push(options.urlMetaData[input]);
} else if (alias) {
pathSegments.push(alias);
} else {
if (!isEmpty(parsedUrl.pathname)) {
urlSegments.push(...parsedUrl.pathname.split('/').filter(Boolean));
const parts = isUrl
? pathname.split('/').filter(Boolean)
: pathname.split(/[\\/]/u).filter(Boolean);
if (!isEmpty(parts)) urlSegments.push(...parts);
if (isUrl) {
if (options.useHash && !isEmpty(hash))
urlSegments.push(`hash-${md5Hex8(hash)}`);
if (!isEmpty(search)) urlSegments.push(`query-${md5Hex8(search)}`);
}
if (useHash && !isEmpty(parsedUrl.hash)) {
const md5 = createHash('md5'),
hash = md5.update(parsedUrl.hash).digest('hex').slice(0, 8);
urlSegments.push('hash-' + hash);
}
if (!isEmpty(parsedUrl.search)) {
const md5 = createHash('md5'),
hash = md5.update(parsedUrl.search).digest('hex').slice(0, 8);
urlSegments.push('query-' + hash);
}
// This is used from sitespeed.io to match URLs on Graphite
if (options.storeURLsAsFlatPageOnDisk) {
const folder = toSafeKey(urlSegments.join('_').concat('_'));
const folder = toSafeKey(`${urlSegments.join('_')}_`);
if (folder.length > 255) {
log.info(
`The URL ${url} hit the 255 character limit used when stored on disk, you may want to give your URL an alias to make sure it will not collide with other URLs.`
`The URL ${input} hit the 255 character limit used when stored on disk, you may want to give your URL an alias to make sure it will not collide with other URLs.`
);
pathSegments.push(folder.slice(0, 254));
} else {
@ -58,11 +84,9 @@ export function pathToFolder(url, options, alias) {
// pathSegments.push('data');
for (const [index, segment] of pathSegments.entries()) {
if (segment) {
pathSegments[index] = segment.replaceAll(/[^\w.\u0621-\u064A-]/gi, '-');
}
for (const [i, seg] of pathSegments.entries()) {
if (seg) pathSegments[i] = seg.replaceAll(/[^\w.\u0621-\u064A-]/giu, '-');
}
return pathSegments.join('/').concat('/');
return `${path.join(...pathSegments)}${path.sep}`;
}

View File

@ -1,4 +1,3 @@
import { parse } from 'node:url';
import { messageMaker } from '../support/messageMaker.js';
const make = messageMaker('url-reader').make;
@ -15,7 +14,7 @@ export function findUrls(queue, options) {
options.urlsMetaData[url] &&
options.urlsMetaData[url].groupAlias
? options.urlsMetaData[url].groupAlias
: parse(url).hostname
: new URL(url).hostname
}
)
);

View File

@ -1,8 +1,9 @@
import { parse } from 'node:url';
// eslint-disable-next-line unicorn/no-named-default
import { default as _merge } from 'lodash.merge';
import { getLogger } from '@sitespeed.io/log';
import { configureLogging } from 'browsertime';
const log = getLogger('plugin.browsertime');
import dayjs from 'dayjs';
@ -88,13 +89,13 @@ export default class BrowsertimePlugin extends SitespeedioPlugin {
'browsertime.run'
);
this.axeAggregatorTotal = new AxeAggregator(this.options);
configureLogging(options);
}
async processMessage(message) {
const { configureLogging } = await import('browsertime');
configureLogging(this.options);
const options = this.options;
switch (message.type) {
// When sistespeed.io starts, a setup messages is posted on the queue
// When sitespeed.io starts, a setup messages is posted on the queue
// and all plugins can tell other plugins that they are alive and are ready
// to receive configuration
case 'sitespeedio.setup': {
@ -104,12 +105,18 @@ export default class BrowsertimePlugin extends SitespeedioPlugin {
if (this.options.urlMetaData) {
for (let url of Object.keys(this.options.urlMetaData)) {
const alias = this.options.urlMetaData[url];
const group = parse(url).hostname;
this.allAlias[alias] = url;
super.sendMessage('browsertime.alias', alias, {
url,
group
});
try {
const group = new URL(url).hostname;
this.allAlias[alias] = url;
super.sendMessage('browsertime.alias', alias, {
url,
group
});
} catch (error) {
log.error(
'Could not get group for URL:' + url + ' with error' + error
);
}
}
}
@ -183,11 +190,11 @@ export default class BrowsertimePlugin extends SitespeedioPlugin {
// https://github.com/sitespeedio/sitespeed.io/issues/2341
for (const element of result) {
// Browsertime supports alias for URLS in a script
const alias = element.info.alias;
const alias = element.info?.alias;
if (alias) {
if (this.scriptOrMultiple) {
url = element.info.url;
group = parse(url).hostname;
group = new URL(url).hostname;
}
this.allAlias[url] = alias;
super.sendMessage('browsertime.alias', alias, {
@ -205,14 +212,32 @@ export default class BrowsertimePlugin extends SitespeedioPlugin {
resultIndex++
) {
axeAggregatorPerURL = new AxeAggregator(this.options);
// Send errors from Browsertime as early as possible
// Check for errors. Browsertime errors is an array of all iterations
// [[],[],[]] where one iteration can have multiple errors
for (let errorsForOneIteration of result[resultIndex].errors) {
if (Array.isArray(errorsForOneIteration)) {
for (let error of errorsForOneIteration) {
super.sendMessage('error', error, _merge({ url }));
}
} else {
super.sendMessage(
'error',
`${errorsForOneIteration} ${result[resultIndex].failureMessages}`,
_merge({ url })
);
}
}
// If we use scripts or multiple, use the URL from the tested page
// so that we can handle click on links etc
// see https://github.com/sitespeedio/sitespeed.io/issues/2260
// we could change the plugins but since they do not work with
// multiple/scripting lets do it like this for now
if (this.scriptOrMultiple) {
url = result[resultIndex].info.url;
group = parse(url).hostname;
url = result[resultIndex].info?.url;
if (url) {
group = new URL(url).hostname;
}
}
let runIndex = 0;
for (let browserScriptsData of result[resultIndex].browserScripts) {
@ -595,14 +620,6 @@ export default class BrowsertimePlugin extends SitespeedioPlugin {
group
});
}
// Check for errors. Browsertime errors is an array of all iterations
// [[],[],[]] where one iteration can have multiple errors
for (let errorsForOneIteration of result[resultIndex].errors) {
for (let error of errorsForOneIteration) {
super.sendMessage('error', error, _merge({ url }));
}
}
}
break;
} catch (error) {

View File

@ -1,69 +1,95 @@
import path from 'node:path';
import { parse } from 'node:url';
import jrp from 'junit-report-builder';
import fs from 'node:fs';
import merge from 'lodash.merge';
import { getLogger } from '@sitespeed.io/log';
const log = getLogger('sitespeedio.plugin.budget');
import merge from 'lodash.merge';
/**
* Escapes XML special characters.
*
* @param {string} str - The text to escape.
* @returns {string} The escaped text.
*/
function xmlEscape(str) {
return String(str)
.replaceAll('&', '&amp;')
.replaceAll('<', '&lt;')
.replaceAll('>', '&gt;')
.replaceAll('"', '&quot;')
.replaceAll("'", '&apos;');
}
/**
* Wraps a string in a CDATA block.
*
* @param {string} str - The string to wrap.
* @returns {string} The CDATA-wrapped string.
*/
function cdata(str) {
return `<![CDATA[${str}]]>`;
}
/**
* Writes a JUnit XML report mimicking the original output.
*
* @param {object} results - Object containing `failing` and `working` results.
* @param {string} dir - Directory where `junit.xml` will be written.
* @param {object} options - Options (expects `options.budget.friendlyName`).
*/
export function writeJunit(results, dir, options) {
// lets have one suite per URL
const urls = Object.keys(merge({}, results.failing, results.working));
const failing = results.failing || {};
const working = results.working || {};
const urls = Object.keys(merge({}, failing, working));
let totalTests = 0;
let totalFailures = 0;
let suitesXml = '';
for (const url of urls) {
// The URL can be an alias
let name = url;
if (url.startsWith('http')) {
const parsedUrl = parse(url);
name = url.startsWith('http') ? url : url;
parsedUrl.hostname.replaceAll('.', '_') +
'.' +
parsedUrl.path.replaceAll('.', '_').replaceAll('/', '_');
}
const suiteName = `${options.budget.friendlyName || 'sitespeed.io'}.${url}`;
let suiteTests = 0;
let suiteFailures = 0;
let testCasesXml = '';
const suite = jrp
.testSuite()
.name(options.budget.friendlyName || 'sitespeed.io' + '.' + name);
if (results.failing[url]) {
for (const result of results.failing[url]) {
suite
.testCase()
.className(name)
.name(result.type + '.' + result.metric)
.failure(
result.metric + ' is ' + result.friendlyValue ||
result.value +
' and limit ' +
result.limitType +
' ' +
result.friendlyLimit ||
result.limit + ' ' + url
);
if (failing[url]) {
for (const result of failing[url]) {
suiteTests++;
totalTests++;
suiteFailures++;
totalFailures++;
const testCaseName = `${result.type}.${result.metric}`;
const failureMessage = `${result.metric} is ${result.friendlyValue || result.value}`;
testCasesXml += ` <testcase classname="${xmlEscape(url)}" name="${xmlEscape(testCaseName)}">\n`;
testCasesXml += ` <failure message="${xmlEscape(failureMessage)}"/>\n`;
testCasesXml += ` </testcase>\n`;
}
}
if (results.working[url]) {
for (const result of results.working[url]) {
suite
.testCase()
.className(name)
.name(result.type + '.' + result.metric)
.standardOutput(
result.metric + ' is ' + result.friendlyValue ||
result.value +
' and limit ' +
result.limitType +
' ' +
result.friendlyLimit ||
result.limit + ' ' + url
);
if (working[url]) {
for (const result of working[url]) {
suiteTests++;
totalTests++;
const testCaseName = `${result.type}.${result.metric}`;
const systemOutMessage = `${result.metric} is ${result.friendlyValue || result.value}`;
testCasesXml += ` <testcase classname="${xmlEscape(url)}" name="${xmlEscape(testCaseName)}">\n`;
testCasesXml += ` <system-out>${cdata(systemOutMessage)}</system-out>\n`;
testCasesXml += ` </testcase>\n`;
}
}
suitesXml += ` <testsuite name="${xmlEscape(suiteName)}" tests="${suiteTests}" failures="${suiteFailures}" errors="0" skipped="0">\n`;
suitesXml += testCasesXml;
suitesXml += ` </testsuite>\n`;
}
const xml =
`<?xml version="1.0" encoding="UTF-8"?>\n` +
`<testsuites tests="${totalTests}" failures="${totalFailures}" errors="0" skipped="0">\n` +
suitesXml +
`</testsuites>\n`;
const file = path.join(dir, 'junit.xml');
log.info('Write junit budget to %s', path.resolve(file));
jrp.writeTo(file);
fs.writeFileSync(file, xml);
}

View File

@ -1,36 +1,44 @@
import path from 'node:path';
import fs from 'node:fs';
import { EOL } from 'node:os';
import tap from 'tape';
import { getLogger } from '@sitespeed.io/log';
const log = getLogger('sitespeedio.plugin.budget');
export function writeTap(results, dir) {
const file = path.join(dir, 'budget.tap');
log.info('Write budget to %s', path.resolve(file));
const tapOutput = fs.createWriteStream(file);
tap.createStream().pipe(tapOutput);
const lines = [];
lines.push('TAP version 13');
let testCount = 0;
// Iterate over each result group (e.g. "passing" and "failing")
for (const resultType of Object.keys(results)) {
const urls = Object.keys(results.failing);
const group = results[resultType];
if (!group) {
continue;
}
const urls = Object.keys(group);
for (const url of urls) {
for (const result of results.failing[url]) {
tap(result.type + '.' + result.metric + ' ' + url, function (t) {
let extra = '';
if (resultType === 'failing') {
extra =
' limit ' + result.limitType + ' ' + result.friendlyLimit ||
result.limit + EOL;
}
t.ok(
resultType === 'failing' ? false : true,
result.type + '.' + result.metric + ' ' + result.friendlyValue ||
result.value + ' ' + extra + ' ' + url
);
t.end();
});
for (const result of group[url]) {
testCount += 1;
const testTitle = `${result.type}.${result.metric} ${url}`;
let extra = '';
if (resultType === 'failing') {
extra = ` limit ${result.limitType} ${result.friendlyLimit || result.limit}`;
}
const valueDisplay = result.friendlyValue || result.value;
lines.push(`# ${testTitle}`);
const status = resultType === 'failing' ? 'not ok' : 'ok';
lines.push(
`${status} ${testCount} ${testTitle} ${valueDisplay}${extra ? ` ${extra}` : ''}`
);
}
}
}
lines.push(`1..${testCount}`);
fs.writeFileSync(file, lines.join(EOL) + EOL);
}

View File

@ -23,7 +23,8 @@ const DEFAULT_METRICS_PAGESUMMARY = [
'loadingExperience.*.INTERACTION_TO_NEXT_PAINT_MS.*',
'loadingExperience.*.ROUND_TRIP_TIME_MS.*',
'loadingExperience.*.NAVIGATION_TYPES_FRACTIONS.*',
'loadingExperience.*.FORM_FACTORS_FRACTIONS.*'
'loadingExperience.*.FORM_FACTORS_FRACTIONS.*',
'loadingExperience.*.LCP_RESOURCE_TYPES_FRACTIONS.*'
];
const DEFAULT_METRICS_SUMMARY = [
'originLoadingExperience.*.FIRST_CONTENTFUL_PAINT_MS.*',
@ -33,7 +34,8 @@ const DEFAULT_METRICS_SUMMARY = [
'originLoadingExperience.*.INTERACTION_TO_NEXT_PAINT_MS.*',
'originLoadingExperience.*.ROUND_TRIP_TIME_MS.*',
'originLoadingExperience.*.NAVIGATION_TYPES_FRACTIONS.*',
'originLoadingExperience.*.FORM_FACTORS_FRACTIONS.*'
'originLoadingExperience.*.FORM_FACTORS_FRACTIONS.*',
'originLoadingExperience.*.LCP_RESOURCE_TYPES_FRACTIONS.*'
];
function wait(ms) {

View File

@ -11,7 +11,7 @@ mixin sizeCell(title, size)
td.number(data-title=title, data-value= size)= h.size.format(size)
- const crux = pageInfo.data.crux.pageSummary;
- const metrics = {round_trip_time: 'Round trip time', experimental_time_to_first_byte: 'Time to first byte (TTFB)', first_contentful_paint:'First Contentful Paint (FCP)', largest_contentful_paint: 'Largest Contentful Paint (LCP)', cumulative_layout_shift: 'Cumulative Layout Shift (CLS)', interaction_to_next_paint: 'Interaction to next paint (INP)'};
- const metrics = {round_trip_time: 'Round Trip Time (RTT)', experimental_time_to_first_byte: 'Time To First Byte (TTFB)', first_contentful_paint:'First Contentful Paint (FCP)', largest_contentful_paint: 'Largest Contentful Paint (LCP)', cumulative_layout_shift: 'Cumulative Layout Shift (CLS)', interaction_to_next_paint: 'Interaction to Next Paint (INP)'};
- const experiences = ['loadingExperience','originLoadingExperience'];
if experiences
@ -106,6 +106,46 @@ if experiences
td Prerender
td #{Number(crux[experience][formFactor].NAVIGATION_TYPES_FRACTIONS.prerender *100).toFixed(2)}%
if crux[experience][formFactor].LCP_RESOURCE_TYPES_FRACTIONS
h4 Largest Contentful Paint resource type
table
thead
tr
th Element type
th Value
tbody
tr
td Text
td #{Number(crux[experience][formFactor].LCP_RESOURCE_TYPES_FRACTIONS.text *100).toFixed(2)}%
tr
td Image
td #{Number(crux[experience][formFactor].LCP_RESOURCE_TYPES_FRACTIONS.image *100).toFixed(2)}%
h4 Largest Contentful Paint image extra information
table
thead
tr
th Metric
th 75 p
tbody
tr
td Largest Contentful Paint
td #{h.time.ms(crux[experience][formFactor].LARGEST_CONTENTFUL_PAINT_MS.p75)}
if crux[experience][formFactor].LCP_IMAGE_RESOURCE_LOAD_DURATION_MS
tr
td Image load duration
td #{h.time.ms(crux[experience][formFactor].LCP_IMAGE_RESOURCE_LOAD_DURATION_MS.p75)}
if crux[experience][formFactor].LCP_IMAGE_RESOURCE_LOAD_DELAY_MS
tr
td Image load delay
td #{h.time.ms(crux[experience][formFactor].LCP_IMAGE_RESOURCE_LOAD_DELAY_MS.p75)}
if crux[experience][formFactor].LCP_IMAGE_ELEMENT_RENDER_DELAY_MS
tr
td Image render delay
td #{h.time.ms(crux[experience][formFactor].LCP_IMAGE_ELEMENT_RENDER_DELAY_MS.p75)}
if crux[experience][formFactor].LCP_IMAGE_TTFB_MS
tr
td Image TTFB
td #{h.time.ms(crux[experience][formFactor].LCP_IMAGE_TTFB_MS.p75)}
h4 Distribution
- let cruxus = `${experience}.${formFactor}.data.record.metrics`;
- let FCPs = [Number(get(crux, `${cruxus}.first_contentful_paint.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_contentful_paint.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.first_contentful_paint.histogram[2].density`, 0)*100).toFixed(2)];
@ -118,6 +158,8 @@ if experiences
- let ITNPs = [Number(get(crux, `${cruxus}.interaction_to_next_paint.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.interaction_to_next_paint.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.interaction_to_next_paint.histogram[2].density`, 0)*100).toFixed(2)];
- let RTTs = [Number(get(crux, `${cruxus}.round_trip_time.histogram[0].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.round_trip_time.histogram[1].density`, 0) * 100).toFixed(2), Number(get(crux, `${cruxus}.round_trip_time.histogram[2].density`, 0)*100).toFixed(2)];
script(type='text/javascript').
document.addEventListener("DOMContentLoaded", function() {
@ -143,33 +185,35 @@ if experiences
drawPie('#chartCLS#{experience + formFactor}', [#{CLSs}], ['Good: #{CLSs[0]}%', 'Need improvement: #{CLSs[1]}%', 'Poor: #{CLSs[2]}%']);
drawPie('#chartTTFB#{experience + formFactor}', [#{TTFBs}], ['Good: #{TTFBs[0]}%', 'Need improvement: #{TTFBs[1]}%', 'Poor: #{TTFBs[2]}%']);
drawPie('#chartITNP#{experience + formFactor}', [#{ITNPs}], ['Good: #{ITNPs[0]}%', 'Need improvement: #{ITNPs[1]}%', 'Poor: #{ITNPs[2]}%']);
drawPie('#chartRTT#{experience + formFactor}', [#{RTTs}], ['Low: #{RTTs[0]}%', 'Medium: #{RTTs[1]}%', 'High: #{RTTs[2]}%']);
});
.responsive
table
tr
th #{metrics['round_trip_time']}
th #{metrics['experimental_time_to_first_byte']}
th #{metrics['first_contentful_paint']}
tr
td(data-title=metrics['round_trip_time'])
.ct-chart(id='chartRTT' + experience + formFactor)
td(data-title=metrics['experimental_time_to_first_byte'])
.ct-chart(id='chartTTFB' + experience + formFactor)
tr
th #{metrics['first_contentful_paint']}
th #{metrics['largest_contentful_paint']}
tr
td(data-title=metrics['first_contentful_paint'])
.ct-chart(id='chartFCP' + experience + formFactor)
tr
th #{metrics['largest_contentful_paint']}
th #{metrics['cumulative_layout_shift']}
tr
td(data-title=metrics['largest_contentful_paint'])
.ct-chart(id='chartLCP' + experience + formFactor)
td(data-title=metrics['cumulative_layout_shift'])
.ct-chart(id='chartCLS' + experience + formFactor)
tr
th #{metrics['interaction_to_next_paint']}
th
th #{metrics['cumulative_layout_shift']}
tr
td(data-title=metrics['interaction_to_next_paint'])
.ct-chart(id='chartITNP' + experience + formFactor)
td
.ct-chart(id='chartITNP' + experience + formFactor)
td(data-title=metrics['cumulative_layout_shift'])
.ct-chart(id='chartCLS' + experience + formFactor)
else
p No data availible in the Chrome User Experience report.

View File

@ -65,7 +65,48 @@ export function repackage(cruxResult) {
if (cruxResult.record.metrics.round_trip_time) {
result.ROUND_TRIP_TIME_MS = {
p75: cruxResult.record.metrics.round_trip_time.percentiles.p75
p75: cruxResult.record.metrics.round_trip_time.percentiles.p75,
low: cruxResult.record.metrics.round_trip_time.histogram[0].density,
medium: cruxResult.record.metrics.round_trip_time.histogram[1].density,
high: cruxResult.record.metrics.round_trip_time.histogram[2].density
};
}
if (
cruxResult.record.metrics
.largest_contentful_paint_image_resource_load_duration
) {
result.LCP_IMAGE_RESOURCE_LOAD_DURATION_MS = {
p75: cruxResult.record.metrics
.largest_contentful_paint_image_resource_load_duration.percentiles.p75
};
}
if (
cruxResult.record.metrics.largest_contentful_paint_image_resource_load_delay
) {
result.LCP_IMAGE_RESOURCE_LOAD_DELAY_MS = {
p75: cruxResult.record.metrics
.largest_contentful_paint_image_resource_load_delay.percentiles.p75
};
}
if (
cruxResult.record.metrics
.largest_contentful_paint_image_element_render_delay
) {
result.LCP_IMAGE_ELEMENT_RENDER_DELAY_MS = {
p75: cruxResult.record.metrics
.largest_contentful_paint_image_element_render_delay.percentiles.p75
};
}
if (
cruxResult.record.metrics.largest_contentful_paint_image_time_to_first_byte
) {
result.LCP_IMAGE_TTFB_MS = {
p75: cruxResult.record.metrics
.largest_contentful_paint_image_time_to_first_byte.percentiles.p75
};
}
@ -80,6 +121,19 @@ export function repackage(cruxResult) {
};
}
if (
cruxResult.record.metrics.largest_contentful_paint_resource_type &&
cruxResult.record.metrics.largest_contentful_paint_resource_type.fractions
) {
result.LCP_RESOURCE_TYPES_FRACTIONS = {
text: cruxResult.record.metrics.largest_contentful_paint_resource_type
.fractions.text,
image:
cruxResult.record.metrics.largest_contentful_paint_resource_type
.fractions.image
};
}
if (
cruxResult.record.metrics.navigation_types &&
cruxResult.record.metrics.navigation_types.fractions

View File

@ -1,5 +1,3 @@
import { parse } from 'node:url';
import { Stats } from 'fast-stats';
import { getLogger } from '@sitespeed.io/log';
@ -18,7 +16,7 @@ const timingNames = [
];
function parseDomainName(url) {
return parse(url).hostname;
return new URL(url).hostname;
}
function getDomain(domainName) {
@ -80,40 +78,45 @@ export class DomainsAggregator {
if (this.groups[mainDomain] === undefined) {
this.groups[mainDomain] = {};
}
const firstPageId = har.log.pages[0].id;
for (const entry of har.log.entries) {
if (entry.pageref !== firstPageId) {
// Only pick the first request out of multiple runs.
continue;
}
if (har.log.pages.length > 0) {
const firstPageId = har.log.pages[0].id;
const domainName = parseDomainName(entry.request.url),
domain = this.domains[domainName] || getDomain(domainName),
groupDomain =
this.groups[mainDomain][domainName] || getDomain(domainName),
totalTime = entry.time;
domain.requestCount++;
groupDomain.requestCount++;
if (isValidTiming(totalTime)) {
domain.totalTime.push(totalTime);
groupDomain.totalTime.push(totalTime);
} else {
log.debug('Missing time from har entry for url: ' + entry.request.url);
}
for (const name of timingNames) {
const timing = entry.timings[name];
if (isValidTiming(timing)) {
domain[name].push(timing);
groupDomain[name].push(timing);
for (const entry of har.log.entries) {
if (entry.pageref !== firstPageId) {
// Only pick the first request out of multiple runs.
continue;
}
const domainName = parseDomainName(entry.request.url),
domain = this.domains[domainName] || getDomain(domainName),
groupDomain =
this.groups[mainDomain][domainName] || getDomain(domainName),
totalTime = entry.time;
domain.requestCount++;
groupDomain.requestCount++;
if (isValidTiming(totalTime)) {
domain.totalTime.push(totalTime);
groupDomain.totalTime.push(totalTime);
} else {
log.debug(
'Missing time from har entry for url: ' + entry.request.url
);
}
for (const name of timingNames) {
const timing = entry.timings[name];
if (isValidTiming(timing)) {
domain[name].push(timing);
groupDomain[name].push(timing);
}
}
this.domains[domainName] = domain;
this.groups[mainDomain][domainName] = groupDomain;
}
this.domains[domainName] = domain;
this.groups[mainDomain][domainName] = groupDomain;
}
}
summarize() {

View File

@ -41,9 +41,7 @@ export function send(
options,
group,
url,
tsdbType === 'graphite'
? options.graphite.includeQueryParams
: options.influxdb.includeQueryParams,
options.graphite.includeQueryParams,
alias
).split('.');

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 809 B

View File

@ -217,12 +217,22 @@ export class HTMLBuilder {
// In the future we can fix so we just pickup the setup messages
usingBrowsertime = pageInfo.data.browsertime;
// if we don't use Browsertime, we don't get the browser version
browser = usingBrowsertime
? {
name: pageInfo.data.browsertime.pageSummary.info.browser.name,
version: pageInfo.data.browsertime.pageSummary.info.browser.version,
userAgent:
pageInfo.data.browsertime.pageSummary.info.browser.userAgent
pageInfo.data.browsertime.pageSummary.info.browser.userAgent,
args: pageInfo.data.browsertime.pageSummary.info.browser.args,
traceCategories:
pageInfo.data.browsertime.pageSummary.info.browser
.traceCategories,
preference:
pageInfo.data.browsertime.pageSummary.info.browser.preference,
geckoProfilerFeatures:
pageInfo.data.browsertime.pageSummary.info.browser
.geckProfilerFeatures
}
: {
name: '',

View File

@ -30,6 +30,7 @@ export function renderTemplate(templateName, locals) {
return getTemplate(templateName)(locals);
} catch (error) {
log.error('Could not generate %s, %s', templateName, error.message);
return `Could not generate ${templateName} error: ${error.message}`;
}
}
export function addTemplate(templateName, templateString) {

View File

@ -60,6 +60,26 @@ block content
tr
td Number of runs
td #{get(options, 'browsertime.iterations')}
if get(browser, 'traceCategories') !== undefined
tr
td Trace categories
td #{get(browser, 'traceCategories')}
if get(options, 'browsertime.enableProfileRun') !== undefined
tr
td Enabled profile run
td Yes
if get(browser, 'preference') !== undefined
tr
td browser.preference
td #{get(browser, 'preference')}
if get(browser, 'args') !== undefined
tr
td browser.args
td #{get(browser, 'args')}
if get(browser, 'geckoProfilerFeatures') !== undefined
tr
td Gecko Profiler Features
td #{get(browser, 'geckoProfilerFeatures')}
tr
td OS
td #{android ? 'Android' : (ios ? 'iOS' : (options.browsertime.docker ? 'Docker using ' + os: os)) }
@ -80,6 +100,12 @@ block content
tr
td Wifi
td #{android.wifi}
tr
td Using gnirehtet
td #{get(options, 'browsertime.android.gnirehtet', 'No')}
tr
td Rooted phone
td #{get(options, 'browsertime.android.rooted', 'No')}
if android.batteryTemperature
tr
td Battery temperature

View File

@ -66,7 +66,7 @@ block content
tr
td Memory
td #{h.size.format(memory)}
- cpuPower = get(d, 'browsertime.run.cpuConsumption')
- cpuConsumption = get(d, 'browsertime.run.cpuConsumption')
if cpuConsumption
tr
td Firefox CPU power consumption

View File

@ -21,7 +21,22 @@ if timings.largestContentfulPaint
td
b Render time
td #{h.time.ms(timings.largestContentfulPaint.renderTime)}
tr
td
b Element render delay
td #{h.time.ms(timings.largestContentfulPaint.elementRenderDelay)}
tr
td
b TTFB
td #{h.time.ms(timings.largestContentfulPaint.ttfb)}
tr
td
b Resource delay
td #{h.time.ms(timings.largestContentfulPaint.resourceLoadDelay)}
tr
td
b Resource load duration
td #{h.time.ms(timings.largestContentfulPaint.resourceLoadDuration)}
if renderBlocking && renderBlocking.recalculateStyle.beforeLCP
tr
td

View File

@ -3,7 +3,7 @@
//- specific run (the median run) in summaryPageHAR.
//- Inline script tags breaks the output
- dahar = h.get(pageInfo.data, 'browsertime.run.har', summaryPageHAR)
- dahar = JSON.stringify(dahar.log).split('</script>').join('&lt;/script&gt;')
- dahar = JSON.stringify(dahar.log).split('</script>').join('&lt;/script&gt;').split('<script>').join('&lt;script&gt;')
script(src= assetsPath + 'js/perf-cascade.min.js')
script(type='text/javascript').

View File

@ -1,262 +0,0 @@
import merge from 'lodash.merge';
import { flattenMessageData } from '../../support/flattenMessage.js';
import {
getConnectivity,
getURLAndGroup,
toSafeKey
} from '../../support/tsdbUtil.js';
function getAdditionalTags(key, type) {
let tags = {};
const keyArray = key.split('.');
if (/(^contentTypes)/.test(key)) {
// contentTypes.favicon.requests.mean
// contentTypes.favicon.requests
// contentTypes.css.transferSize
tags.contentType = keyArray[1];
} else if (/(^pageTimings|^visualMetrics)/.test(key)) {
// pageTimings.serverResponseTime.max
// visualMetrics.SpeedIndex.median
tags.timings = keyArray[0];
} else
switch (type) {
case 'browsertime.pageSummary': {
// statistics.timings.pageTimings.backEndTime.median
// statistics.timings.userTimings.marks.logoTime.median
// statistics.visualMetrics.SpeedIndex.median
tags[keyArray[0]] = keyArray[1];
if (keyArray.length >= 5) {
tags[keyArray[2]] = keyArray[3];
}
if (key.includes('cpu.categories')) {
tags.cpu = 'category';
} else if (key.includes('cpu.events')) {
tags.cpu = 'event';
} else if (key.includes('cpu.longTasks')) {
tags.cpu = 'longTask';
}
break;
}
case 'browsertime.summary': {
// firstPaint.median
// userTimings.marks.logoTime.median
if (key.includes('userTimings')) {
tags[keyArray[0]] = keyArray[1];
}
break;
}
case 'axe.pageSummary': {
tags.axeType = keyArray[0];
break;
}
case 'coach.pageSummary': {
// advice.score
// advice.performance.score
if (keyArray.length > 2) {
tags.advice = keyArray[1];
}
// set the actual advice name
// advice.performance.adviceList.cacheHeaders.score
if (keyArray.length > 4) {
tags.adviceName = keyArray[3];
}
break;
}
case 'coach.summary': {
// score.max
// performance.score.median
if (keyArray.length === 3) {
tags.advice = keyArray[0];
}
break;
}
case 'pagexray.summary': {
// firstParty.requests.min pagexray.summary
// requests.median
// responseCodes.307.max pagexray.summary
// requests.min pagexray.summary
if (key.includes('responseCodes')) {
tags.responseCodes = 'response';
}
if (key.includes('firstParty') || key.includes('thirdParty')) {
tags.party = keyArray[0];
}
break;
}
case 'pagexray.pageSummary': {
// thirdParty.contentTypes.json.requests pagexray.pageSummary
// thirdParty.requests pagexray.pageSummary
// firstParty.cookieStats.max pagexray.pageSummary
// responseCodes.200 pagexray.pageSummary
// expireStats.max pagexray.pageSummary
// totalDomains pagexray.pageSummary
if (key.includes('firstParty') || key.includes('thirdParty')) {
tags.party = keyArray[0];
}
if (key.includes('responseCodes')) {
tags.responseCodes = 'response';
}
if (key.includes('contentTypes')) {
tags.contentType = keyArray[2];
}
break;
}
case 'thirdparty.pageSummary': {
tags.thirdPartyCategory = keyArray[1];
tags.thirdPartyType = keyArray[2];
break;
}
case 'lighthouse.pageSummary': {
// categories.seo.score
// categories.performance.score
if (key.includes('score')) {
tags.audit = keyArray[1];
}
if (key.includes('audits')) {
tags.audit = keyArray[1];
}
break;
}
case 'crux.pageSummary': {
tags.experience = keyArray[0];
tags.formFactor = keyArray[1];
tags.metric = keyArray[2];
break;
}
case 'gpsi.pageSummary': {
if (key.includes('googleWebVitals')) {
tags.testType = 'googleWebVitals';
} else if (key.includes('score')) {
tags.testType = 'score';
} else if (key.includes('loadingExperience')) {
tags.experience = keyArray[0];
tags.metric = keyArray[1];
tags.testType = 'crux';
}
break;
}
default:
// console.log('Missed added tags to ' + key + ' ' + type);
}
return tags;
}
function getFieldAndSeriesName(key) {
const functions = [
'min',
'p10',
'median',
'mean',
'avg',
'max',
'p90',
'p99',
'mdev',
'stddev',
'rsd'
];
const keyArray = key.split('.');
const end = keyArray.pop();
if (functions.includes(end)) {
return { field: end, seriesName: keyArray.pop() };
}
return { field: 'value', seriesName: end };
}
export class InfluxDBDataGenerator {
constructor(includeQueryParameters, options) {
this.includeQueryParams = !!includeQueryParameters;
this.options = options;
this.defaultTags = {};
for (let row of options.influxdb.tags.split(',')) {
const keyAndValue = row.split('=');
this.defaultTags[keyAndValue[0]] = keyAndValue[1];
}
}
dataFromMessage(message, time, alias) {
function getTagsFromMessage(
message,
includeQueryParameters,
options,
defaultTags
) {
const tags = merge({}, defaultTags);
let typeParts = message.type.split('.');
tags.origin = typeParts[0];
typeParts.push(typeParts.shift());
tags.summaryType = typeParts[0];
// always have browser and connectivity in Browsertime and related tools
if (
/(^pagexray|^coach|^browsertime|^thirdparty|^axe|^sustainable)/.test(
message.type
)
) {
// if we have a friendly name for your connectivity, use that!
let connectivity = getConnectivity(options);
tags.connectivity = connectivity;
tags.browser = options.browser;
} else if (/(^gpsi)/.test(message.type)) {
tags.strategy = options.mobile ? 'mobile' : 'desktop';
}
// if we get a URL type, add the URL
if (message.url) {
const urlAndGroup = getURLAndGroup(
options,
message.group,
message.url,
includeQueryParameters,
alias
).split('.');
tags.page = urlAndGroup[1];
tags.group = urlAndGroup[0];
} else if (message.group) {
// add the group of the summary message
tags.group = toSafeKey(message.group, options.influxdb.groupSeparator);
}
if (options.slug) {
tags.testName = options.slug;
}
return tags;
}
return Object.entries(flattenMessageData(message)).reduce(
(entries, [key, value]) => {
const fieldAndSeriesName = getFieldAndSeriesName(key);
let tags = getTagsFromMessage(
message,
this.includeQueryParams,
this.options,
this.defaultTags
);
tags = { ...getAdditionalTags(key, message.type), ...tags };
const point = {
time: time.valueOf(),
[fieldAndSeriesName.field]: value
};
entries.push({
tags,
seriesName: fieldAndSeriesName.seriesName,
point
});
return entries;
},
[]
);
}
}

View File

@ -1,176 +0,0 @@
import { getLogger } from '@sitespeed.io/log';
import dayjs from 'dayjs';
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
import { InfluxDBSender as Sender } from './sender.js';
import { InfluxDB2Sender as SenderV2 } from './senderV2.js';
import { sendV1 } from './send-annotation.js';
import { sendV2 } from './send-annotationV2.js';
import { InfluxDBDataGenerator as DataGenerator } from './data-generator.js';
import { throwIfMissing, isEmpty } from '../../support/util.js';
const log = getLogger('sitespeedio.plugin.influxdb');
export default class InfluxDBPlugin extends SitespeedioPlugin {
constructor(options, context, queue) {
super({ name: 'influxdb', options, context, queue });
}
open(context, options) {
throwIfMissing(options.influxdb, ['host', 'database'], 'influxdb');
this.filterRegistry = context.filterRegistry;
log.debug(
'Setup InfluxDB host %s and database %s',
options.influxdb.host,
options.influxdb.database
);
const options_ = options.influxdb;
this.options = options;
this.sender =
options_.version == 1 ? new Sender(options_) : new SenderV2(options_);
this.timestamp = context.timestamp;
this.resultUrls = context.resultUrls;
this.dataGenerator = new DataGenerator(
options_.includeQueryParams,
options
);
this.messageTypesToFireAnnotations = [];
this.receivedTypesThatFireAnnotations = {};
this.make = context.messageMaker('influxdb').make;
this.sendAnnotation = true;
this.alias = {};
}
processMessage(message, queue) {
const filterRegistry = this.filterRegistry;
// First catch if we are running Browsertime and/or WebPageTest
switch (message.type) {
case 'browsertime.setup': {
this.messageTypesToFireAnnotations.push('browsertime.pageSummary');
this.usingBrowsertime = true;
break;
}
case 'browsertime.config': {
if (message.data.screenshot) {
this.useScreenshots = message.data.screenshot;
this.screenshotType = message.data.screenshotType;
}
break;
}
case 'sitespeedio.setup': {
// Let other plugins know that the InfluxDB plugin is alive
queue.postMessage(this.make('influxdb.setup'));
break;
}
case 'grafana.setup': {
this.sendAnnotation = false;
break;
}
// No default
}
if (message.type === 'browsertime.alias') {
this.alias[message.url] = message.data;
}
if (
!(
message.type.endsWith('.summary') ||
message.type.endsWith('.pageSummary')
)
) {
return;
}
if (this.messageTypesToFireAnnotations.includes(message.type)) {
this.receivedTypesThatFireAnnotations[message.url]
? this.receivedTypesThatFireAnnotations[message.url]++
: (this.receivedTypesThatFireAnnotations[message.url] = 1);
}
// Let us skip this for a while and concentrate on the real deal
if (
/(^largestassets|^slowestassets|^aggregateassets|^domains)/.test(
message.type
)
)
return;
// we only sends individual groups to Influx, not the
// total of all groups (you can calculate that yourself)
if (message.group === 'total') {
return;
}
message = filterRegistry.filterMessage(message);
if (isEmpty(message.data)) return;
let data = this.dataGenerator.dataFromMessage(
message,
message.type === 'browsertime.pageSummary'
? dayjs(message.runTime)
: this.timestamp,
this.alias
);
if (data.length > 0) {
log.debug('Send the following data to InfluxDB: %:2j', data);
return this.sender.send(data).then(() => {
// Make sure we only send the annotation once per URL:
// If we run browsertime, always send on browsertime.pageSummary
// If we run WebPageTest standalone, send on webPageTestSummary
// when we configured a base url
if (
this.receivedTypesThatFireAnnotations[message.url] ===
this.messageTypesToFireAnnotations.length &&
this.resultUrls.hasBaseUrl() &&
this.sendAnnotation
) {
const absolutePagePath = this.resultUrls.absoluteSummaryPagePath(
message.url,
this.alias[message.url]
);
this.receivedTypesThatFireAnnotations[message.url] = 0;
return this.options.influxdb.version == 2
? sendV2(
message.url,
message.group,
absolutePagePath,
this.useScreenshots,
this.screenshotType,
// Browsertime pass on when the first run was done for that URL
message.runTime,
this.alias,
this.usingBrowsertime,
this.options
)
: sendV1(
message.url,
message.group,
absolutePagePath,
this.useScreenshots,
this.screenshotType,
// Browsertime pass on when the first run was done for that URL
message.runTime,
this.alias,
this.usingBrowsertime,
this.options
);
}
});
} else {
return Promise.reject(
new Error(
'No data to send to influxdb for message:\n' +
JSON.stringify(message, undefined, 2)
)
);
}
}
}

View File

@ -1,111 +0,0 @@
import http from 'node:http';
import https from 'node:https';
import { stringify } from 'node:querystring';
import { getLogger } from '@sitespeed.io/log';
import dayjs from 'dayjs';
import { getConnectivity, getURLAndGroup } from '../../support/tsdbUtil.js';
import {
getAnnotationMessage,
getTagsAsString
} from '../../support/annotationsHelper.js';
const log = getLogger('sitespeedio.plugin.influxdb');
export function sendV1(
url,
group,
absolutePagePath,
screenShotsEnabledInBrowsertime,
screenshotType,
runTime,
alias,
usingBrowsertime,
options
) {
// The tags make it possible for the dashboard to use the
// templates to choose which annotations that will be showed.
// That's why we need to send tags that matches the template
// variables in Grafana.
const connectivity = getConnectivity(options);
const browser = options.browser;
const urlAndGroup = getURLAndGroup(
options,
group,
url,
options.influxdb.includeQueryParams,
alias
).split('.');
let tags = [connectivity, browser, urlAndGroup[0], urlAndGroup[1]];
if (options.slug) {
tags.push(options.slug);
}
const message = getAnnotationMessage(
absolutePagePath,
screenShotsEnabledInBrowsertime,
screenshotType,
undefined,
usingBrowsertime,
options
);
const timestamp = runTime
? Math.round(dayjs(runTime) / 1000)
: Math.round(dayjs() / 1000);
// if we have a category, let us send that category too
if (options.influxdb.tags) {
for (let row of options.influxdb.tags.split(',')) {
const keyAndValue = row.split('=');
tags.push(keyAndValue[1]);
}
}
const influxDBTags = getTagsAsString(tags);
const postData = `events title="Sitespeed.io",text="${message}",tags=${influxDBTags} ${timestamp}`;
const postOptions = {
hostname: options.influxdb.host,
port: options.influxdb.port,
path: '/write?db=' + options.influxdb.database + '&precision=s',
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData)
}
};
if (options.influxdb.username) {
postOptions.path =
postOptions.path +
'&' +
stringify({
u: options.influxdb.username,
p: options.influxdb.password
});
}
return new Promise((resolve, reject) => {
log.debug('Send annotation to Influx: %j', postData);
// not perfect but maybe work for us
const library = options.influxdb.protocol === 'https' ? https : http;
const request = library.request(postOptions, res => {
if (res.statusCode === 204) {
res.setEncoding('utf8');
log.debug('Sent annotation to InfluxDB');
resolve();
} else {
const e = new Error(
`Got ${res.statusCode} from InfluxDB when sending annotation ${res.statusMessage}`
);
log.warn(e.message);
reject(e);
}
});
request.on('error', error => {
log.error('Got error from InfluxDB when sending annotation', error);
reject(error);
});
request.write(postData);
request.end();
});
}

View File

@ -1,106 +0,0 @@
import http from 'node:http';
import https from 'node:https';
import { getLogger } from '@sitespeed.io/log';
import dayjs from 'dayjs';
import { getConnectivity, getURLAndGroup } from '../../support/tsdbUtil.js';
import {
getAnnotationMessage,
getTagsAsString
} from '../../support/annotationsHelper.js';
const log = getLogger('sitespeedio.plugin.influxdb');
export function sendV2(
url,
group,
absolutePagePath,
screenShotsEnabledInBrowsertime,
screenshotType,
runTime,
alias,
usingBrowsertime,
options
) {
// The tags make it possible for the dashboard to use the
// templates to choose which annotations that will be showed.
// That's why we need to send tags that matches the template
// variables in Grafana.
const connectivity = getConnectivity(options);
const browser = options.browser;
const urlAndGroup = getURLAndGroup(
options,
group,
url,
options.influxdb.includeQueryParams,
alias
).split('.');
let tags = [
`connectivity=${connectivity}`,
`browser=${browser}`,
`group=${urlAndGroup[0]}`,
`page=${urlAndGroup[1]}`
];
if (options.slug) {
tags.push(`slug=${options.slug}`);
}
const message = getAnnotationMessage(
absolutePagePath,
screenShotsEnabledInBrowsertime,
screenshotType,
undefined,
usingBrowsertime,
options
);
const timestamp = runTime
? Math.round(dayjs(runTime) / 1000)
: Math.round(dayjs() / 1000);
// if we have a category, let us send that category too
if (options.influxdb.tags) {
for (const tag of options.influxdb.tags.split(',')) {
tags.push(tag);
}
}
const influxDBTags = tags.join(',');
const grafanaTags = getTagsAsString(tags.map(pair => pair.split('=')[1]));
const postData = `annotations,${influxDBTags} title="Sitespeed.io",text="${message}",tags=${grafanaTags} ${timestamp}`;
const postOptions = {
hostname: options.influxdb.host,
port: options.influxdb.port,
path: `/api/v2/write?org=${options.influxdb.organisation}&bucket=${options.influxdb.database}&precision=s`,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': Buffer.byteLength(postData),
Authorization: `Token ${options.influxdb.token}`
}
};
return new Promise((resolve, reject) => {
log.debug('Send annotation to Influx: %j', postData);
// not perfect but maybe work for us
const library = options.influxdb.protocol === 'https' ? https : http;
const request = library.request(postOptions, res => {
if (res.statusCode === 204) {
res.setEncoding('utf8');
log.debug('Sent annotation to InfluxDB');
resolve();
} else {
const e = new Error(
`Got ${res.statusCode} from InfluxDB when sending annotation ${res.statusMessage}`
);
log.warn(e.message);
reject(e);
}
});
request.on('error', error => {
log.error('Got error from InfluxDB when sending annotation', error);
reject(error);
});
request.write(postData);
request.end();
});
}

View File

@ -1,26 +0,0 @@
import { InfluxDB } from 'influx';
export class InfluxDBSender {
constructor({ protocol, host, port, database, username, password }) {
this.client = new InfluxDB({
protocol,
host,
port,
database,
username,
password
});
}
send(data) {
const points = [];
for (let point of data) {
points.push({
tags: point.tags,
measurement: point.seriesName,
fields: point.point
});
}
return this.client.writePoints(points);
}
}

View File

@ -1,38 +0,0 @@
import { InfluxDB, Point, HttpError } from '@influxdata/influxdb-client';
export class InfluxDB2Sender {
constructor({ protocol, host, port, database, organisation, token }) {
this.client = new InfluxDB({
url: `${protocol}://${host}:${port}`,
token
}).getWriteApi(organisation, database);
this.database = database;
}
send(data) {
const points = [];
for (let point of data) {
const influxPoint = new Point(point.seriesName);
for (const key of Object.keys(point.tags)) {
influxPoint.tag(key, point.tags[key]);
}
for (const key of Object.keys(point.point)) {
if (key === 'time') {
influxPoint.timestamp(new Date(point.point[key]));
} else {
influxPoint.floatField(key, point.point[key]);
}
}
points.push(influxPoint);
}
this.client.writePoints(points);
return this.client.flush().catch(error => {
if (error instanceof HttpError && error.statusCode === 401) {
throw new Error(
`The InfluxDB database: ${this.database} doesn't exist.`
);
}
throw new Error('Writing to influx failed');
});
}
}

View File

@ -1,4 +1,3 @@
import { parse } from 'node:url';
import { getLogger } from '@sitespeed.io/log';
import coach from 'coach-core';
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
@ -102,7 +101,7 @@ export default class PageXrayPlugin extends SitespeedioPlugin {
const sentURL = {};
for (let summary of pageSummary) {
// The group can be different so take it per url
const myGroup = parse(summary.url).hostname;
const myGroup = new URL(summary.url).hostname;
if (sentURL[summary.url]) {
sentURL[summary.url] += 1;
} else {
@ -128,15 +127,17 @@ export default class PageXrayPlugin extends SitespeedioPlugin {
);
}
} else {
pageSummary[0].statistics = this.pageXrayAggregator.summarizePerUrl(
message.url
);
queue.postMessage(
make('pagexray.pageSummary', pageSummary[0], {
url: message.url,
group // TODO get the group from the URL?
})
);
// Check that we actually have one tested page
if (pageSummary.length > 0) {
pageSummary[0].statistics =
this.pageXrayAggregator.summarizePerUrl(message.url);
queue.postMessage(
make('pagexray.pageSummary', pageSummary[0], {
url: message.url,
group // TODO get the group from the URL?
})
);
}
let iteration = 1;
for (let summary of pageSummary) {
queue.postMessage(

View File

@ -140,7 +140,8 @@ export class PageXrayAggregator {
}
}
summarizePerUrl(url) {
return this.summarizePerObject(this.urls[url]);
// If we do not have a tested working page there's nothing to summarize
return this.urls[url] ? this.summarizePerObject(this.urls[url]) : {};
}
summarize() {
if (Object.keys(this.stats).length === 0) {

View File

@ -12,19 +12,35 @@ import { runWithConcurrencyLimit } from './limit.js';
const log = getLogger('sitespeedio.plugin.s3');
const normalizeExpires = maybeSeconds => {
if (typeof maybeSeconds === 'number' && Number.isFinite(maybeSeconds)) {
const seconds = Number.parseInt(maybeSeconds, 10);
const expires = new Date(Date.now() + seconds * 1000);
log.info('Setting s3.expires to ' + expires);
return expires;
}
return maybeSeconds;
};
async function uploadFile(file, s3Client, s3Options, prefix, baseDir) {
const stream = await fsPromises.readFile(file);
const contentType = getContentType(file);
const subPath = path.relative(baseDir, file);
const parameters = {
const baseParams = {
Bucket: s3Options.bucketname,
Key: path.join(s3Options.path || prefix, subPath),
Body: stream,
ContentType: contentType,
ACL: s3Options.acl,
...s3Options.params
ACL: s3Options.acl
};
const userParams = { ...s3Options.params };
if ('Expires' in userParams) {
userParams.Expires = normalizeExpires(userParams.Expires);
}
const parameters = { ...baseParams, ...userParams };
try {
await s3Client.send(new PutObjectCommand(parameters));
log.debug(`Uploaded ${file} to S3 bucket ${s3Options.bucketname}`);

Some files were not shown because too many files have changed in this diff Show More