Commit graph

470 commits

Author SHA1 Message Date
sstidl
3ada090eef
Merge pull request #828 from librespeed/dependabot/github_actions/actions/stale-11
Some checks are pending
Docker / e2e (push) Waiting to run
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
chore(deps): bump actions/stale from 10 to 11
2026-08-03 07:27:52 +02:00
dependabot[bot]
4142a915a6
chore(deps): bump actions/stale from 10 to 11
Bumps [actions/stale](https://github.com/actions/stale) from 10 to 11.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v10...v11)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '11'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-03 05:08:08 +00:00
sstidl
1af6517eb9
Merge pull request #820 from EmanuelPeixoto/fix-upload-http-status
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
Fix upload-speed inflation on HTTP errors and document request body limits
2026-07-30 07:06:37 +02:00
EmanuelPeixoto
397308de03 fix upload race: use captured x in onload, remove upload.onload restart
- xhr.onload now owns the complete lifecycle: checks x.status on
  the captured local variable, restarts only on 2xx.
- xhr.upload.onload no longer calls testStream() to avoid race
  with xhr.onload overwriting xhr[i] before status is read.
- xhr.upload.onerror also uses the captured x for consistency.
2026-07-28 16:10:41 -03:00
sstidl
18e254ff49
Merge pull request #826 from librespeed/dependabot/npm_and_yarn/minimatch-3.1.5
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
chore(deps-dev): bump minimatch from 3.1.2 to 3.1.5
2026-07-28 07:31:18 +02:00
sstidl
aefa645520
Merge pull request #827 from librespeed/dependabot/npm_and_yarn/flatted-3.4.3
chore(deps-dev): bump flatted from 3.3.3 to 3.4.3
2026-07-28 07:30:57 +02:00
sstidl
5e7bdbfa31
Merge pull request #825 from librespeed/dependabot/npm_and_yarn/js-yaml-4.3.0
chore(deps-dev): bump js-yaml from 4.1.1 to 4.3.0
2026-07-28 07:30:27 +02:00
sstidl
9d07f726bb
Merge pull request #824 from librespeed/dependabot/npm_and_yarn/brace-expansion-1.1.16
chore(deps-dev): bump brace-expansion from 1.1.12 to 1.1.16
2026-07-28 07:29:39 +02:00
dependabot[bot]
36584defcc
chore(deps-dev): bump flatted from 3.3.3 to 3.4.3
Bumps [flatted](https://github.com/WebReflection/flatted) from 3.3.3 to 3.4.3.
- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.3...v3.4.3)

---
updated-dependencies:
- dependency-name: flatted
  dependency-version: 3.4.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-28 05:26:43 +00:00
dependabot[bot]
fd0529e793
chore(deps-dev): bump minimatch from 3.1.2 to 3.1.5
Bumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5.
- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)
- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)

---
updated-dependencies:
- dependency-name: minimatch
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-28 05:26:42 +00:00
dependabot[bot]
3f59cf07cf
chore(deps-dev): bump js-yaml from 4.1.1 to 4.3.0
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.3.0.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.1.1...4.3.0)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-28 05:26:40 +00:00
dependabot[bot]
081c8bfeb5
chore(deps-dev): bump brace-expansion from 1.1.12 to 1.1.16
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.16.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.16)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.16
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-28 05:26:40 +00:00
sstidl
f4acb0d82d
Merge pull request #779 from librespeed/chore/playwright-mode-test-plan
Chore/playwright mode test plan
2026-07-28 07:25:39 +02:00
Stefan Stidl
dbb4067f5e ci: run Docker workflow for master pull requests 2026-07-27 22:18:31 +02:00
EmanuelPeixoto
2afc380e19 fix upload: check HTTP status in xhr.onload, expand IIS docs
- speedtest_worker.js: moved HTTP status check from xhr.upload.onload
  (body sent, response may not be available) to xhr.onload
  (full HTTP transaction complete, xhr.status is reliable).
- doc.md: added full IIS web.config example with maxAllowedContentLength.
2026-07-23 17:50:51 -03:00
Stefan Stidl
16e8440dff chore(release): prepare v6.2.0
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
2026-07-22 20:23:45 +02:00
sstidl
be1c7f87a7
Merge pull request #798 from akirayamamoto/fix/php-post-max-size-upload-chunks
fix(docker): raise PHP post_max_size for default 20MB upload chunks
2026-07-22 20:17:51 +02:00
EmanuelPeixoto
1b3c0ac9c4 fix upload: check HTTP status in onload, document server body size limit
- speedtest_worker.js: xhr.upload.onload now checks xhr.status
  before restarting the upload stream. Non-2xx responses (e.g.
  HTTP 413 from undersized client_max_body_size) are treated as
  failures instead of inflating upload speed measurements.

- doc.md: added explicit nginx/Apache/IIS configuration examples
  for client_max_body_size / LimitRequestBody to prevent HTTP 413
  errors on the 20MB upload test blobs.
2026-07-22 14:51:45 -03:00
sstidl
7e10d1eb96
Merge pull request #818 from sstidl/feat/add-pwa-manifest
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
feat: add installable PWA metadata
2026-07-20 22:56:57 +02:00
Stefan Stidl
e7d4fecccf fix: include PWA assets in npm package 2026-07-20 22:50:30 +02:00
Stefan Stidl
3b25d9e33a feat: add installable PWA metadata 2026-07-20 22:35:16 +02:00
sstidl
48aaa4da57
Merge pull request #809 from shaked-shlomo/fix/doc-typos
Some checks are pending
Docker / e2e (push) Waiting to run
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Blocked by required conditions
Fix typos in documentation and a code comment
2026-07-20 11:44:45 +02:00
sstidl
481b50f79b
Merge pull request #812 from librespeed/dependabot/github_actions/actions/checkout-7
chore(deps): bump actions/checkout from 6 to 7
2026-07-20 11:43:23 +02:00
sstidl
602aae8ce0
Merge pull request #817 from librespeed/dependabot/github_actions/actions/setup-node-7
chore(deps): bump actions/setup-node from 6 to 7
2026-07-20 11:42:45 +02:00
dependabot[bot]
0ae3211e44
chore(deps): bump actions/setup-node from 6 to 7
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-20 05:08:46 +00:00
dependabot[bot]
b0100ec3c1
chore(deps): bump actions/checkout from 6 to 7
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-22 05:07:36 +00:00
sstidl
a293ac4cb9
Merge pull request #811 from librespeed/dependabot/docker/alpine-3.24
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
chore(deps): bump alpine from 3.23 to 3.24
2026-06-15 13:21:39 +02:00
dependabot[bot]
b765d5993a
chore(deps): bump alpine from 3.23 to 3.24
Bumps alpine from 3.23 to 3.24.

---
updated-dependencies:
- dependency-name: alpine
  dependency-version: '3.24'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-15 05:08:26 +00:00
Akira Yamamoto
265c42d4bf docs: trim Docker PHP ini comments
Drop the Debian COPY comment (it only restated the code) and the
version-fragility framing in the Alpine comment.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 22:27:23 +10:00
Akira Yamamoto
914a29de7a docker: simplify Alpine PHP ini install 2026-06-09 18:25:14 +10:00
Akira Yamamoto
a30872a4e8 docs: shorten PHP upload limit comment 2026-06-09 18:19:10 +10:00
Akira Yamamoto
0feb8b5042 docs: update Alpine PHP ini comment 2026-06-09 18:11:52 +10:00
Akira Yamamoto
db4a5f8d5a docker: drop runtime PHP scan-dir discovery for env var + apk path glob
The previous build-time discovery via PHP_CONFIG_FILE_SCAN_DIR worked
but invoked a PHP binary just to learn a path that's already a stable
contract of each base image:

* php:8-apache exports PHP_INI_DIR=/usr/local/etc/php as part of the
  docker-library image template, stable across PHP majors. Reference
  it directly in the COPY destination — no RUN, no validation needed.

* Alpine's apk php-apache2 always installs mod_php's conf.d at
  /etc/phpXX/conf.d (currently /etc/php84). The FROM php:8-alpine
  image also ships its own PHP at /usr/local/etc/php/conf.d, but
  mod_php doesn't read from there. Glob /etc/php*/conf.d to track
  the apk-installed PHP major automatically; explicit error if the
  glob matches nothing.

Net effect: Debian goes from a 5-line RUN block to a 1-line COPY.
Alpine keeps a small RUN block but no longer invokes a PHP binary,
so it doesn't matter which of the two PHP installs `php` resolves
to via $PATH.

Verified: both variants build, install the override at the right
conf.d, mod_php reports post_max_size=32M, and a 20 MB POST to
/backend/empty.php returns HTTP 200 / 0 bytes with no warnings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-09 18:06:14 +10:00
Akira Yamamoto
3b3cddeb41 fix(docker): raise PHP post_max_size for default 20MB upload chunks
speedtest_worker.js uploads in 20 MB chunks by default
(xhr_ul_blob_megabytes: 20) but the official Docker images inherit
PHP's stock post_max_size = 8M / upload_max_filesize = 2M, so every
upload chunk:

* triggers a "POST Content-Length ... exceeds the limit" warning
  (leaked into the response body of /backend/empty.php on the Debian
  variant where display_errors is on; suppressed but still emitted on
  Alpine where it's off);
* causes empty.php's subsequent header() calls to fail with "Cannot
  modify header information - headers already sent", leaving the
  response without proper status, cache, or CORS directives.

Ship a small docker/librespeed-php.ini with post_max_size = 32M,
upload_max_filesize = 32M, memory_limit = 256M and COPY it into the
right conf.d for each base image (/usr/local/etc/php/conf.d on
Debian, /etc/php84/conf.d on Alpine). 99- prefix follows the
NN-name.ini packaging convention so this loads after distro defaults
but never silently shadows operator overrides.

Verified post-fix on both variants: a 20 MB POST to /backend/empty.php
returns HTTP 200 / 0 bytes with no warning leakage.
2026-06-09 18:06:14 +10:00
Shaked Shlomo
b4eeb5c260 Fix typos in documentation and a code comment
- doc.md: 'Ifyou' -> 'If you'; remove duplicate word in 'my the network adapter'
- speedtest.js: 'nonexistant' -> 'nonexistent' (comment)
- doc_docker.md: 'shoud' -> 'should'

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-01 17:16:34 +03:00
sstidl
23b7780056
Merge pull request #805 from librespeed/internet-stability
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
add internet stability test
2026-05-27 22:54:47 +02:00
Stefan Stidl
320b908864 Add stability feature Playwright coverage, fix Server selection start race
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
2026-05-16 20:02:21 +02:00
Stefan Stidl
48263c47e8 remove duplicated lines from rebase 2026-05-16 19:10:39 +02:00
Stefan Stidl
8ba87a92bc Merge branch 'internet-stability' of https://github.com/librespeed/speedtest into internet-stability 2026-05-16 19:06:45 +02:00
Stefan Stidl
89e14e9a38 Update README for stability test 2026-05-16 18:48:13 +02:00
Stefan Stidl
7a995280a2 Fix stability test server list and timeouts 2026-05-16 18:48:13 +02:00
Stefan Stidl
fd883ba67f fix: clarify stability failed requests metric 2026-05-16 18:47:09 +02:00
Tom Hudson
5278912ed4 Fix code review issues: server loading, subdir nav, chart perf
- Load server list dynamically from servers.json for Docker frontend/dual modes
- Copy servers.json to web root in entrypoint.sh for frontend/dual modes
- Change back link from href="/" to href="./" for subdirectory installs
- Use binary search for visible chart data range (O(log n) vs O(n))
- Add 200ms minimum interval between pings to limit sample rate

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 18:47:09 +02:00
Tom Hudson
7839a4331c Add internet stability test feature
Add a prolonged ping-based stability test with real-time canvas chart,
stats (avg/min/max/jitter/packet loss), stability rating, external ping
targets, CSV export, and Docker support. Link from main page to stability test.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-16 18:47:08 +02:00
valer23
5cd7ce2efa perf: avoid O(n²) indexOf lookup in classic UI server loop
Some checks failed
Docker / e2e (push) Has been cancelled
Docker / build (./Dockerfile, , ghcr.io/${{ github.repository }}) (push) Has been cancelled
Docker / build (./Dockerfile.alpine, -alpine, ghcr.io/${{ github.repository }}) (push) Has been cancelled
Build an array of {idx, server} pairs before sorting so the original
SPEEDTEST_SERVERS index is carried through, eliminating the per-option
indexOf call.
2026-05-16 18:30:54 +02:00
valer23
69fa7a4edb fix: handle parenthetical qualifiers and multi-comma server names
Parse server names more robustly for sorting:
- "City, Country, Provider" → use second part as country
- "City, Country (1) (Hetzner)" → strip parentheticals from country
- "Frankfurt, Germany (FRA01)" → country is "Germany" not "Germany (FRA01)"
2026-05-16 18:30:54 +02:00
valer23
42d700cf08 fix: avoid mutating original server array and add null guard
Address code review findings:
- Sort a shallow copy instead of mutating the caller's array
- Add null guard on server.name to handle malformed entries
- Use original SPEEDTEST_SERVERS index for classic UI option values
2026-05-16 18:30:54 +02:00
valer23
4ec3a755fa feat: sort server list by country name instead of city name
Sort the server dropdown by country first, then by city within the same
country. This makes it easier to find servers in a specific country when
the list is long. Applies to both modern and classic UIs.
2026-05-16 18:30:54 +02:00
sstidl
c11ee9f68a
Merge pull request #800 from akirayamamoto/experiment/alpine-base-no-php
Drop FROM php:8-alpine in favor of FROM alpine:3.23 (~55% smaller image)
2026-05-16 17:57:30 +02:00
sstidl
7b5c33455d
Merge branch 'master' into experiment/alpine-base-no-php 2026-05-16 17:56:02 +02:00