From 89082d2a540f683b47347b3b47f88b004fc31de9 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Tue, 19 Aug 2025 15:10:25 -0700 Subject: [PATCH 01/13] initial bun support --- .gitignore | 1 + browsers/bun.json | 637 +++++++++++++++++++++++ scripts/update-browser-releases/bun.ts | 323 ++++++++++++ scripts/update-browser-releases/index.ts | 16 +- 4 files changed, 976 insertions(+), 1 deletion(-) create mode 100644 browsers/bun.json create mode 100644 scripts/update-browser-releases/bun.ts diff --git a/.gitignore b/.gitignore index 678f4bcd8b5159..c1f10fb43b3cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ coverage.lcov coverage/ types/types.d.ts .DS_Store +.cache \ No newline at end of file diff --git a/browsers/bun.json b/browsers/bun.json new file mode 100644 index 00000000000000..38ab36b8039b34 --- /dev/null +++ b/browsers/bun.json @@ -0,0 +1,637 @@ +{ + "browsers": { + "bun": { + "name": "Bun", + "type": "server", + "accepts_flags": true, + "accepts_webextensions": false, + "releases": { + "1.0.0": { + "release_date": "2023-09-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.0", + "status": "retired", + "engine": "WebKit" + }, + "1.0.1": { + "release_date": "2023-09-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.1", + "status": "retired", + "engine": "WebKit" + }, + "1.0.2": { + "release_date": "2023-09-15", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.2", + "status": "retired", + "engine": "WebKit" + }, + "1.0.3": { + "release_date": "2023-09-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.3", + "status": "retired", + "engine": "WebKit" + }, + "1.0.4": { + "release_date": "2023-10-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.4", + "status": "retired", + "engine": "WebKit" + }, + "1.0.5": { + "release_date": "2023-10-11", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.5", + "status": "retired", + "engine": "WebKit" + }, + "1.0.6": { + "release_date": "2023-10-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.6", + "status": "retired", + "engine": "WebKit" + }, + "1.0.7": { + "release_date": "2023-10-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.7", + "status": "retired", + "engine": "WebKit" + }, + "1.0.8": { + "release_date": "2023-11-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.8", + "status": "retired", + "engine": "WebKit" + }, + "1.0.9": { + "release_date": "2023-11-05", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.9", + "status": "retired", + "engine": "WebKit" + }, + "1.0.10": { + "release_date": "2023-11-07", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.10", + "status": "retired", + "engine": "WebKit" + }, + "1.0.11": { + "release_date": "2023-11-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.11", + "status": "retired", + "engine": "WebKit" + }, + "1.0.12": { + "release_date": "2023-11-16", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.12", + "status": "retired", + "engine": "WebKit" + }, + "1.0.13": { + "release_date": "2023-11-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.13", + "status": "retired", + "engine": "WebKit" + }, + "1.0.14": { + "release_date": "2023-11-23", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.14", + "status": "retired", + "engine": "WebKit" + }, + "1.0.15": { + "release_date": "2023-12-02", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.15", + "status": "retired", + "engine": "WebKit" + }, + "1.0.16": { + "release_date": "2023-12-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.16", + "status": "retired", + "engine": "WebKit" + }, + "1.0.17": { + "release_date": "2023-12-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.17", + "status": "retired", + "engine": "WebKit" + }, + "1.0.18": { + "release_date": "2023-12-14", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.18", + "status": "retired", + "engine": "WebKit" + }, + "1.0.19": { + "release_date": "2023-12-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.19", + "status": "retired", + "engine": "WebKit" + }, + "1.0.20": { + "release_date": "2023-12-24", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.20", + "status": "retired", + "engine": "WebKit" + }, + "1.0.21": { + "release_date": "2024-01-02", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.21", + "status": "retired", + "engine": "WebKit" + }, + "1.0.22": { + "release_date": "2024-01-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.22", + "status": "retired", + "engine": "WebKit" + }, + "1.0.23": { + "release_date": "2024-01-16", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.23", + "status": "retired", + "engine": "WebKit" + }, + "1.0.24": { + "release_date": "2024-01-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.24", + "status": "retired", + "engine": "WebKit" + }, + "1.0.25": { + "release_date": "2024-01-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.25", + "status": "retired", + "engine": "WebKit" + }, + "1.0.26": { + "release_date": "2024-02-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.26", + "status": "retired", + "engine": "WebKit" + }, + "1.0.27": { + "release_date": "2024-02-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.27", + "status": "retired", + "engine": "WebKit" + }, + "1.0.28": { + "release_date": "2024-02-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.28", + "status": "retired", + "engine": "WebKit" + }, + "1.0.29": { + "release_date": "2024-02-23", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.29", + "status": "retired", + "engine": "WebKit" + }, + "1.0.30": { + "release_date": "2024-03-04", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.30", + "status": "retired", + "engine": "WebKit" + }, + "1.0.31": { + "release_date": "2024-03-15", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.31", + "status": "retired", + "engine": "WebKit" + }, + "1.0.32": { + "release_date": "2024-03-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.32", + "status": "retired", + "engine": "WebKit" + }, + "1.0.33": { + "release_date": "2024-03-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.33", + "status": "retired", + "engine": "WebKit" + }, + "1.0.34": { + "release_date": "2024-03-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.34", + "status": "retired", + "engine": "WebKit" + }, + "1.0.35": { + "release_date": "2024-03-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.35", + "status": "retired", + "engine": "WebKit" + }, + "1.0.36": { + "release_date": "2024-03-29", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.36", + "status": "retired", + "engine": "WebKit" + }, + "1.1.0": { + "release_date": "2024-04-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.0", + "status": "retired", + "engine": "WebKit" + }, + "1.1.1": { + "release_date": "2024-04-04", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.1", + "status": "retired", + "engine": "WebKit" + }, + "1.1.2": { + "release_date": "2024-04-06", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.2", + "status": "retired", + "engine": "WebKit" + }, + "1.1.3": { + "release_date": "2024-04-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.3", + "status": "retired", + "engine": "WebKit" + }, + "1.1.4": { + "release_date": "2024-04-16", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.4", + "status": "retired", + "engine": "WebKit" + }, + "1.1.5": { + "release_date": "2024-04-26", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.5", + "status": "retired", + "engine": "WebKit" + }, + "1.1.6": { + "release_date": "2024-04-28", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.6", + "status": "retired", + "engine": "WebKit" + }, + "1.1.7": { + "release_date": "2024-05-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.7", + "status": "retired", + "engine": "WebKit" + }, + "1.1.8": { + "release_date": "2024-05-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.8", + "status": "retired", + "engine": "WebKit" + }, + "1.1.9": { + "release_date": "2024-05-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.9", + "status": "retired", + "engine": "WebKit" + }, + "1.1.10": { + "release_date": "2024-05-25", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.10", + "status": "retired", + "engine": "WebKit" + }, + "1.1.11": { + "release_date": "2024-06-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.11", + "status": "retired", + "engine": "WebKit" + }, + "1.1.12": { + "release_date": "2024-06-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.12", + "status": "retired", + "engine": "WebKit" + }, + "1.1.13": { + "release_date": "2024-06-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.13", + "status": "retired", + "engine": "WebKit" + }, + "1.1.14": { + "release_date": "2024-06-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.14", + "status": "retired", + "engine": "WebKit" + }, + "1.1.15": { + "release_date": "2024-06-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.15", + "status": "retired", + "engine": "WebKit" + }, + "1.1.16": { + "release_date": "2024-06-23", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.16", + "status": "retired", + "engine": "WebKit" + }, + "1.1.17": { + "release_date": "2024-06-25", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.17", + "status": "retired", + "engine": "WebKit" + }, + "1.1.18": { + "release_date": "2024-07-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.18", + "status": "retired", + "engine": "WebKit" + }, + "1.1.19": { + "release_date": "2024-07-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.19", + "status": "retired", + "engine": "WebKit" + }, + "1.1.20": { + "release_date": "2024-07-13", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.20", + "status": "retired", + "engine": "WebKit" + }, + "1.1.21": { + "release_date": "2024-07-27", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.21", + "status": "retired", + "engine": "WebKit" + }, + "1.1.22": { + "release_date": "2024-08-07", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.22", + "status": "retired", + "engine": "WebKit" + }, + "1.1.23": { + "release_date": "2024-08-14", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.23", + "status": "retired", + "engine": "WebKit" + }, + "1.1.24": { + "release_date": "2024-08-14", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.24", + "status": "retired", + "engine": "WebKit" + }, + "1.1.25": { + "release_date": "2024-08-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.25", + "status": "retired", + "engine": "WebKit" + }, + "1.1.26": { + "release_date": "2024-08-24", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.26", + "status": "retired", + "engine": "WebKit" + }, + "1.1.27": { + "release_date": "2024-09-07", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.27", + "status": "retired", + "engine": "WebKit" + }, + "1.1.28": { + "release_date": "2024-09-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.28", + "status": "retired", + "engine": "WebKit" + }, + "1.1.29": { + "release_date": "2024-09-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.29", + "status": "retired", + "engine": "WebKit" + }, + "1.1.30": { + "release_date": "2024-10-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.30", + "status": "retired", + "engine": "WebKit" + }, + "1.1.31": { + "release_date": "2024-10-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.31", + "status": "retired", + "engine": "WebKit" + }, + "1.1.32": { + "release_date": "2024-10-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.32", + "status": "retired", + "engine": "WebKit" + }, + "1.1.33": { + "release_date": "2024-10-24", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.33", + "status": "retired", + "engine": "WebKit" + }, + "1.1.34": { + "release_date": "2024-11-02", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.34", + "status": "retired", + "engine": "WebKit" + }, + "1.1.35": { + "release_date": "2024-11-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.35", + "status": "retired", + "engine": "WebKit" + }, + "1.1.36": { + "release_date": "2024-11-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.36", + "status": "retired", + "engine": "WebKit" + }, + "1.1.37": { + "release_date": "2024-11-26", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.37", + "status": "retired", + "engine": "WebKit" + }, + "1.1.38": { + "release_date": "2024-11-29", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.38", + "status": "retired", + "engine": "WebKit" + }, + "1.1.39": { + "release_date": "2024-12-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.39", + "status": "retired", + "engine": "WebKit" + }, + "1.1.40": { + "release_date": "2024-12-18", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.40", + "status": "retired", + "engine": "WebKit" + }, + "1.1.41": { + "release_date": "2024-12-20", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.41", + "status": "retired", + "engine": "WebKit" + }, + "1.1.42": { + "release_date": "2024-12-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.42", + "status": "retired", + "engine": "WebKit" + }, + "1.1.43": { + "release_date": "2025-01-08", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.43", + "status": "retired", + "engine": "WebKit" + }, + "1.1.44": { + "release_date": "2025-01-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.44", + "status": "retired", + "engine": "WebKit" + }, + "1.1.45": { + "release_date": "2025-01-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.45", + "status": "retired", + "engine": "WebKit" + }, + "1.2.0": { + "release_date": "2025-01-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.0", + "status": "retired", + "engine": "WebKit" + }, + "1.2.1": { + "release_date": "2025-01-27", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.1", + "status": "retired", + "engine": "WebKit" + }, + "1.2.2": { + "release_date": "2025-02-01", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.2", + "status": "retired", + "engine": "WebKit" + }, + "1.2.3": { + "release_date": "2025-02-22", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.3", + "status": "retired", + "engine": "WebKit" + }, + "1.2.4": { + "release_date": "2025-02-26", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.4", + "status": "retired", + "engine": "WebKit" + }, + "1.2.5": { + "release_date": "2025-03-11", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.5", + "status": "retired", + "engine": "WebKit" + }, + "1.2.6": { + "release_date": "2025-03-25", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.6", + "status": "retired", + "engine": "WebKit" + }, + "1.2.7": { + "release_date": "2025-03-27", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.7", + "status": "retired", + "engine": "WebKit" + }, + "1.2.8": { + "release_date": "2025-03-31", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.8", + "status": "retired", + "engine": "WebKit" + }, + "1.2.9": { + "release_date": "2025-04-09", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.9", + "status": "retired", + "engine": "WebKit" + }, + "1.2.10": { + "release_date": "2025-04-17", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.10", + "status": "retired", + "engine": "WebKit" + }, + "1.2.11": { + "release_date": "2025-04-29", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.11", + "status": "retired", + "engine": "WebKit" + }, + "1.2.12": { + "release_date": "2025-05-04", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.12", + "status": "retired", + "engine": "WebKit" + }, + "1.2.13": { + "release_date": "2025-05-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.13", + "status": "retired", + "engine": "WebKit" + }, + "1.2.14": { + "release_date": "2025-05-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.14", + "status": "retired", + "engine": "WebKit" + }, + "1.2.15": { + "release_date": "2025-05-28", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.15", + "status": "retired", + "engine": "WebKit" + }, + "1.2.16": { + "release_date": "2025-06-12", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.16", + "status": "retired", + "engine": "WebKit" + }, + "1.2.17": { + "release_date": "2025-06-21", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.17", + "status": "retired", + "engine": "WebKit" + }, + "1.2.18": { + "release_date": "2025-07-03", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.18", + "status": "retired", + "engine": "WebKit" + }, + "1.2.19": { + "release_date": "2025-07-19", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.19", + "status": "retired", + "engine": "WebKit" + }, + "1.2.20": { + "release_date": "2025-08-10", + "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.20", + "status": "current", + "engine": "WebKit", + "engine_version": "aa4997abc9126f5a7557c9ecb7e8104779d87ec4" + } + } + } + } +} diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts new file mode 100644 index 00000000000000..6a30d50f99bfb8 --- /dev/null +++ b/scripts/update-browser-releases/bun.ts @@ -0,0 +1,323 @@ +/* This file is a part of @mdn/browser-compat-data + * See LICENSE file for more information. */ + +import fs from 'node:fs/promises'; +import path from 'node:path'; + +import { compareVersions } from 'compare-versions'; + +import { spawn } from '../../utils/index.js'; +import stringify from '../lib/stringify-and-order-properties.js'; + +import { + createOrUpdateBrowserEntry, + gfmNoteblock, + updateBrowserEntry, +} from './utils.js'; + +interface GitHubRelease { + tag_name?: string; + name?: string; + draft?: boolean; + prerelease?: boolean; + published_at?: string; // ISO + html_url?: string; +} + +const GITHUB_API = + 'https://api.github.com/repos/oven-sh/bun/releases?per_page=100&page='; + +const SEMVER_RE = /(\d+\.\d+\.\d+)/; + +/** + * Converts an ISO date string to a YYYY-MM-DD format. + * @param iso - The ISO date string to convert. + * @returns The date in YYYY-MM-DD format, or undefined if input is falsy. + */ +const toDate = (iso?: string): string | undefined => + iso ? new Date(iso).toISOString().split('T')[0] : undefined; + +/** + * Extracts the version number from a GitHub release. + * @param r - The GitHub release object. + * @returns The version number, or undefined if not found. + */ +const extractVersion = (r: GitHubRelease): string | undefined => { + const hay = `${r.tag_name ?? ''} ${r.name ?? ''}`; + const m = hay.match(SEMVER_RE); + return m ? m[1] : undefined; +}; + +/** + * Updates the JSON file listing Bun releases. + * Relies on GitHub releases for stable versions; ignores drafts/prereleases. + * @param options Options including `browserName`, `bcdFile`, and `bcdBrowserName`. + * @returns A markdown changelog string, or an empty string if no changes. + */ +const fetchAllReleases = async (): Promise => { + const all: GitHubRelease[] = []; + for (let page = 1; page <= 10; page++) { + const res = await fetch(GITHUB_API + page, { + headers: { + 'User-Agent': + 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', + Accept: 'application/vnd.github+json', + }, + }); + if (!res.ok) { + throw new Error(`GitHub releases fetch failed: HTTP ${res.status}`); + } + const chunk = (await res.json()) as GitHubRelease[]; + if (!Array.isArray(chunk) || chunk.length === 0) { + break; + } + all.push(...chunk); + } + return all; +}; + +// Resolve asset suffix for current platform/arch +/** + * + */ +const resolveAssetSuffix = () => { + const plat = process.platform === 'darwin' ? 'darwin' : process.platform; + const cpu = process.arch === 'arm64' ? 'aarch64' : process.arch; + return `${plat}-${cpu}`; +}; + +/** + * + * @param dir + */ +const findBunBinaryPath = async (dir: string): Promise => { + const entries = await fs.readdir(dir, { withFileTypes: true }); + for (const e of entries) { + const p = path.join(dir, e.name); + if (e.isDirectory()) { + const found = await findBunBinaryPath(p); + if (found) { + return found; + } + } else if (e.isFile() && e.name === 'bun') { + return p; + } + } + return null; +}; + +/** + * + * @param version + */ +const downloadAndExtractBun = async ( + version: string, +): Promise => { + const suffix = resolveAssetSuffix(); + const base = `https://github.com/oven-sh/bun/releases/download/bun-v${version}`; + const asset = `bun-${suffix}.zip`; + const url = `${base}/${asset}`; + + const cacheRoot = path.join(process.cwd(), '.cache', 'bun-updater', version); + const zipPath = path.join(cacheRoot, asset); + const extractDir = path.join(cacheRoot, 'extracted'); + + await fs.mkdir(extractDir, { recursive: true }); + + try { + await fs.access(zipPath); + } catch { + const res = await fetch(url); + if (!res.ok) { + return null; + } + const buf = Buffer.from(await res.arrayBuffer()); + await fs.mkdir(cacheRoot, { recursive: true }); + await fs.writeFile(zipPath, buf); + } + + try { + spawn('unzip', ['-o', zipPath, '-d', extractDir]); + } catch { + return null; + } + + const bin = await findBunBinaryPath(extractDir); + if (!bin) { + return null; + } + try { + await fs.chmod(bin, 0o755); + } catch {} + return bin; +}; + +/** + * Gets Bun version info for a given version. + * @param version - The Bun version to fetch info for. + * @returns An object containing webkitRev and bunRevision, if available. + */ +const getBunInfoForVersion = async ( + version: string, +): Promise<{ webkitRev?: string; bunRevision?: string }> => { + const bin = await downloadAndExtractBun(version); + if (!bin) { + return {}; + } + try { + const versionsJSON = spawn(bin, [ + '--eval', + 'console.log(JSON.stringify(process.versions))', + ]); + const versions = JSON.parse(versionsJSON) as Record; + const webkitRev = versions['webkit']; + let bunRevision = ''; + try { + bunRevision = spawn(bin, ['--revision']).trim(); + } catch {} + return { webkitRev, bunRevision }; + } catch { + return {}; + } +}; + +/** + * Updates the Bun releases. + * @param options - The options. + * @returns The result. + */ +export const updateBunReleases = async (options) => { + const browser = options.bcdBrowserName ?? 'bun'; + + // Load existing Bun browser data + let fileText: string; + try { + fileText = await fs.readFile(`${options.bcdFile}`, 'utf-8'); + } catch { + return gfmNoteblock( + 'NOTE', + `**${options.browserName ?? 'Bun'}**: No browser data file found at ${options.bcdFile}. Add a seed file (e.g., browsers/bun.json) before running updates.`, + ); + } + + const data = JSON.parse(fileText); + + let result = ''; + + let releases: GitHubRelease[] = []; + try { + releases = await fetchAllReleases(); + } catch (e) { + return gfmNoteblock( + 'WARNING', + `**${options.browserName ?? 'Bun'}**: Failed to fetch GitHub releases (${e}).`, + ); + } + + interface Stable { + version: string; + date?: string; + url?: string; + } + + // Build stable releases in a single clear pass; keep earliest date per version. + const byVersion = new Map(); + for (const r of releases) { + if (r.draft || r.prerelease) { + continue; + } + + const version = extractVersion(r); + + if (!version) { + continue; + } + + if (compareVersions(version, '1.0.0') < 0) { + continue; + } + + const candidate: Stable = { + version, + date: toDate(r.published_at), + url: r.html_url ?? '', + }; + + const existing = byVersion.get(version); + + if (!existing) { + byVersion.set(version, candidate); + } else if ( + existing.date && + candidate.date && + existing.date > candidate.date + ) { + byVersion.set(version, candidate); + } + } + + const stableReleases = Array.from(byVersion.values()).sort((a, b) => + compareVersions(a.version, b.version), + ); + + if (stableReleases.length === 0) { + return gfmNoteblock( + 'NOTE', + `**${options.browserName ?? 'Bun'}**: No stable releases found since v1.0.0.`, + ); + } + + const latest = stableReleases[stableReleases.length - 1]; + + for (const rel of stableReleases) { + const status = rel.version === latest.version ? 'current' : 'retired'; + result += createOrUpdateBrowserEntry( + data, + browser, + rel.version, + status, + 'WebKit', + undefined, + rel.date, + rel.url, + ); + + // Ensure engine is set to WebKit (update existing entries too) + const entry = data.browsers[browser].releases[rel.version]; + + if (entry) { + entry.engine = 'WebKit'; + // Only resolve engine_version for the current release to avoid heavy downloads/timeouts + if (rel.version === latest.version && !entry.engine_version) { + const { webkitRev } = await getBunInfoForVersion(rel.version); + if (webkitRev) { + entry.engine_version = webkitRev; + } + } + } + } + + // Ensure any existing non-latest entries are retired + const existing = Object.keys(data.browsers[browser].releases ?? {}); + for (const v of existing) { + if (v !== latest.version) { + result += updateBrowserEntry( + data, + browser, + v, + undefined, + 'retired', + undefined, + undefined, + ); + } + } + + await fs.writeFile(`./${options.bcdFile}`, stringify(data) + '\n'); + + if (result) { + result = `### Updates for ${options.browserName ?? 'Bun'}\n${result}`; + } + + return result; +}; diff --git a/scripts/update-browser-releases/index.ts b/scripts/update-browser-releases/index.ts index 38a83569b2dcfa..7c3baf86dedaf3 100644 --- a/scripts/update-browser-releases/index.ts +++ b/scripts/update-browser-releases/index.ts @@ -2,6 +2,7 @@ * See LICENSE file for more information. */ import yargs from 'yargs'; +import { updateBunReleases } from './bun.js'; import { updateChromiumReleases } from './chrome.js'; import { updateEdgeReleases } from './edge.js'; import { updateFirefoxReleases } from './firefox.js'; @@ -40,6 +41,11 @@ const argv = yargs(process.argv.slice(2)) type: 'boolean', group: 'Engine selection:', }) + .option('bun', { + describe: 'Update Bun', + type: 'boolean', + group: 'Engine selection:', + }) .option('all', { describe: 'Update all browsers (default)', type: 'boolean', @@ -72,7 +78,8 @@ const updateAllBrowsers = argv['firefox'] || argv['edge'] || argv['opera'] || - argv['safari'] + argv['safari'] || + argv['bun'] ); const updateChrome = argv['chrome'] || updateAllBrowsers; const updateWebview = argv['webview'] || updateAllBrowsers; @@ -80,6 +87,7 @@ const updateFirefox = argv['firefox'] || updateAllBrowsers; const updateEdge = argv['edge'] || updateAllBrowsers; const updateOpera = argv['opera'] || updateAllBrowsers; const updateSafari = argv['safari'] || updateAllBrowsers; +const updateBun = argv['bun'] || updateAllBrowsers; const updateAllDevices = argv['alldevices'] || !(argv['mobile'] || argv['desktop']); const updateMobile = argv['mobile'] || updateAllDevices; @@ -217,6 +225,11 @@ const options = { 'https://developer.apple.com/tutorials/data/documentation/safari-release-notes.json', releaseNoteURLBase: 'https://developer.apple.com', }, + bun: { + browserName: 'Bun', + bcdFile: './browsers/bun.json', + bcdBrowserName: 'bun', + }, }; const results = await Promise.all([ @@ -249,6 +262,7 @@ const results = await Promise.all([ updateMobile && updateSafariReleases(options.webview_ios), ] : []), + updateBun && updateBunReleases(options.bun), ]); const result = results.filter(Boolean).join('\n\n'); From f2344c9b5e012d68d63e144276a94940263c21b7 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Tue, 19 Aug 2025 15:10:32 -0700 Subject: [PATCH 02/13] collect engine version --- browsers/bun.json | 273 ++++++++++++++++++++++++++++++---------------- 1 file changed, 182 insertions(+), 91 deletions(-) diff --git a/browsers/bun.json b/browsers/bun.json index 38ab36b8039b34..7c80f7c9178be2 100644 --- a/browsers/bun.json +++ b/browsers/bun.json @@ -82,547 +82,638 @@ "release_date": "2023-11-16", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.12", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.13": { "release_date": "2023-11-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.13", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.14": { "release_date": "2023-11-23", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.14", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.15": { "release_date": "2023-12-02", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.15", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.16": { "release_date": "2023-12-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.16", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.17": { "release_date": "2023-12-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.17", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.18": { "release_date": "2023-12-14", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.18", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.19": { "release_date": "2023-12-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.19", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.20": { "release_date": "2023-12-24", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.20", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.21": { "release_date": "2024-01-02", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.21", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.22": { "release_date": "2024-01-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.22", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.23": { "release_date": "2024-01-16", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.23", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.24": { "release_date": "2024-01-20", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.24", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.25": { "release_date": "2024-01-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.25", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.26": { "release_date": "2024-02-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.26", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.27": { "release_date": "2024-02-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.27", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.28": { "release_date": "2024-02-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.28", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.29": { "release_date": "2024-02-23", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.29", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.30": { "release_date": "2024-03-04", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.30", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.31": { "release_date": "2024-03-15", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.31", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.32": { "release_date": "2024-03-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.32", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.33": { "release_date": "2024-03-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.33", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.34": { "release_date": "2024-03-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.34", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.35": { "release_date": "2024-03-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.35", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.0.36": { "release_date": "2024-03-29", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.36", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.0": { "release_date": "2024-04-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.0", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.1": { "release_date": "2024-04-04", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.1", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.2": { "release_date": "2024-04-06", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.2", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.3": { "release_date": "2024-04-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.3", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.4": { "release_date": "2024-04-16", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.4", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.5": { "release_date": "2024-04-26", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.5", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.6": { "release_date": "2024-04-28", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.6", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.7": { "release_date": "2024-05-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.7", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.8": { "release_date": "2024-05-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.8", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.9": { "release_date": "2024-05-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.9", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.10": { "release_date": "2024-05-25", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.10", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.11": { "release_date": "2024-06-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.11", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.12": { "release_date": "2024-06-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.12", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" }, "1.1.13": { "release_date": "2024-06-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.13", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "353aa20567e80a74eb43694a27cdf41f4a56ccef" }, "1.1.14": { "release_date": "2024-06-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.14", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "353aa20567e80a74eb43694a27cdf41f4a56ccef" }, "1.1.15": { "release_date": "2024-06-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.15", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "353aa20567e80a74eb43694a27cdf41f4a56ccef" }, "1.1.16": { "release_date": "2024-06-23", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.16", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "64d04ec1a65d91326c5f2298b9c7d05b56125252" }, "1.1.17": { "release_date": "2024-06-25", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.17", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "64d04ec1a65d91326c5f2298b9c7d05b56125252" }, "1.1.18": { "release_date": "2024-07-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.18", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "615e8585f96aa718b0f5158210259b83fe8440ea" }, "1.1.19": { "release_date": "2024-07-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.19", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "b49be549da59347762aa83f849a65158d2a0d724" }, "1.1.20": { "release_date": "2024-07-13", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.20", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "b49be549da59347762aa83f849a65158d2a0d724" }, "1.1.21": { "release_date": "2024-07-27", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.21", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "f9a0fda2d2b2fd001a00bfcf8e7917a56b382516" }, "1.1.22": { "release_date": "2024-08-07", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.22", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" }, "1.1.23": { "release_date": "2024-08-14", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.23", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" }, "1.1.24": { "release_date": "2024-08-14", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.24", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" }, "1.1.25": { "release_date": "2024-08-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.25", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" }, "1.1.26": { "release_date": "2024-08-24", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.26", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" }, "1.1.27": { "release_date": "2024-09-07", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.27", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" }, "1.1.28": { "release_date": "2024-09-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.28", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "4a2db3254a9535949a5d5380eb58cf0f77c8e15a" }, "1.1.29": { "release_date": "2024-09-20", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.29", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "4a2db3254a9535949a5d5380eb58cf0f77c8e15a" }, "1.1.30": { "release_date": "2024-10-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.30", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "0a0a3838e5fab36b579df26620237bb62ed6d950" }, "1.1.31": { "release_date": "2024-10-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.31", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "12e2f46fb01f7c5cf5a992b9414ddfaab32b7110" }, "1.1.32": { "release_date": "2024-10-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.32", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "543cca2140eafdba845f6689024abaac0d9924f5" }, "1.1.33": { "release_date": "2024-10-24", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.33", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "543cca2140eafdba845f6689024abaac0d9924f5" }, "1.1.34": { "release_date": "2024-11-02", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.34", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "9b84f43643eff64ab46daec9b860de262c80f5e2" }, "1.1.35": { "release_date": "2024-11-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.35", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "3bc4abf2d5875baf500b4687ef869987f6d19e00" }, "1.1.36": { "release_date": "2024-11-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.36", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "3bc4abf2d5875baf500b4687ef869987f6d19e00" }, "1.1.37": { "release_date": "2024-11-26", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.37", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "8f9ae4f01a047c666ef548864294e01df731d4ea" }, "1.1.38": { "release_date": "2024-11-29", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.38", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "8f9ae4f01a047c666ef548864294e01df731d4ea" }, "1.1.39": { "release_date": "2024-12-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.39", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "58549ddc4d9e7164823fe9d4e86c46c003e46a19" }, "1.1.40": { "release_date": "2024-12-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.40", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "3845bf370ff4e9a5c0b96036255142c7904be963" }, "1.1.41": { "release_date": "2024-12-20", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.41", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "3845bf370ff4e9a5c0b96036255142c7904be963" }, "1.1.42": { "release_date": "2024-12-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.42", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "3845bf370ff4e9a5c0b96036255142c7904be963" }, "1.1.43": { "release_date": "2025-01-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.43", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "e1a802a2287edfe7f4046a9dd8307c8b59f5d816" }, "1.1.44": { "release_date": "2025-01-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.44", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" }, "1.1.45": { "release_date": "2025-01-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.45", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" }, "1.2.0": { "release_date": "2025-01-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.0", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" }, "1.2.1": { "release_date": "2025-01-27", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.1", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" }, "1.2.2": { "release_date": "2025-02-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.2", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "e32c6356625cfacebff0c61d182f759abf6f508a" }, "1.2.3": { "release_date": "2025-02-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.3", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "763e836175f705b3acb6fcd29270e68dd15d08bb" }, "1.2.4": { "release_date": "2025-02-26", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.4", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "c333de54223425d7148603d63dd3f6152d0bc348" }, "1.2.5": { "release_date": "2025-03-11", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.5", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "abe5e808a649db1182333f65bef55e65bb374616" }, "1.2.6": { "release_date": "2025-03-25", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.6", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "ef31d98a1370e01b7483cabcbe3593d055bea982" }, "1.2.7": { "release_date": "2025-03-27", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.7", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "ef31d98a1370e01b7483cabcbe3593d055bea982" }, "1.2.8": { "release_date": "2025-03-31", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.8", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "ef31d98a1370e01b7483cabcbe3593d055bea982" }, "1.2.9": { "release_date": "2025-04-09", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.9", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "06820714a7990ea77c78157f9eeaabaf56c2098a" }, "1.2.10": { "release_date": "2025-04-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.10", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "06820714a7990ea77c78157f9eeaabaf56c2098a" }, "1.2.11": { "release_date": "2025-04-29", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.11", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "11b10bb50bd69481fe4c7a4dd075eea4755b3fee" }, "1.2.12": { "release_date": "2025-05-04", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.12", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "c244f567ab804c2558067d00733013c01725d824" }, "1.2.13": { "release_date": "2025-05-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.13", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "017930ebf915121f8f593bef61cbbca82d78132d" }, "1.2.14": { "release_date": "2025-05-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.14", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "eda8b0fb4fb1aa23db9c2b00933df8b58bcdd289" }, "1.2.15": { "release_date": "2025-05-28", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.15", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "b98e20b11e6ab044f73218bdd05ab064587b9ead" }, "1.2.16": { "release_date": "2025-06-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.16", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "014cad89f528483e3fc431ff5ca6e2095d92e7bd" }, "1.2.17": { "release_date": "2025-06-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.17", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "397dafc9721b8f8046f9448abb6dbc14efe096d3" }, "1.2.18": { "release_date": "2025-07-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.18", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "29bbdff0f94f362891f8e007ae2a73f9bc3e66d3" }, "1.2.19": { "release_date": "2025-07-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.19", "status": "retired", - "engine": "WebKit" + "engine": "WebKit", + "engine_version": "1098cc50652ab1eab171f58f7669e19ca6c276ae" }, "1.2.20": { "release_date": "2025-08-10", From 4b3e318f696998f11e0979d77d39e41b4840f5c4 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Tue, 19 Aug 2025 15:16:10 -0700 Subject: [PATCH 03/13] no engine version available for these older versions --- browsers/bun.json | 36 ++++++++--------------- scripts/update-browser-releases/bun.ts | 40 ++++++++++++++++++++++---- 2 files changed, 47 insertions(+), 29 deletions(-) diff --git a/browsers/bun.json b/browsers/bun.json index 7c80f7c9178be2..1b6cf788d3526e 100644 --- a/browsers/bun.json +++ b/browsers/bun.json @@ -9,74 +9,62 @@ "1.0.0": { "release_date": "2023-09-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.0", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.1": { "release_date": "2023-09-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.1", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.2": { "release_date": "2023-09-15", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.2", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.3": { "release_date": "2023-09-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.3", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.4": { "release_date": "2023-10-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.4", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.5": { "release_date": "2023-10-11", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.5", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.6": { "release_date": "2023-10-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.6", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.7": { "release_date": "2023-10-20", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.7", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.8": { "release_date": "2023-11-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.8", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.9": { "release_date": "2023-11-05", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.9", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.10": { "release_date": "2023-11-07", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.10", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.11": { "release_date": "2023-11-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.11", - "status": "retired", - "engine": "WebKit" + "status": "retired" }, "1.0.12": { "release_date": "2023-11-16", diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index 6a30d50f99bfb8..6d2735219cccef 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -7,6 +7,7 @@ import path from 'node:path'; import { compareVersions } from 'compare-versions'; import { spawn } from '../../utils/index.js'; +import chalk from 'chalk-template'; import stringify from '../lib/stringify-and-order-properties.js'; import { @@ -123,10 +124,12 @@ const downloadAndExtractBun = async ( const extractDir = path.join(cacheRoot, 'extracted'); await fs.mkdir(extractDir, { recursive: true }); + console.log(chalk`{gray Bun v${version}: preparing cache at ${cacheRoot}}`); try { await fs.access(zipPath); } catch { + console.log(chalk`{gray Bun v${version}: downloading ${url}}`); const res = await fetch(url); if (!res.ok) { return null; @@ -137,8 +140,14 @@ const downloadAndExtractBun = async ( } try { + console.log( + chalk`{gray Bun v${version}: extracting archive to ${extractDir}}`, + ); spawn('unzip', ['-o', zipPath, '-d', extractDir]); - } catch { + } catch (e) { + console.warn( + chalk`{yellow Bun v${version}: failed to extract (${String(e)})}`, + ); return null; } @@ -146,6 +155,7 @@ const downloadAndExtractBun = async ( if (!bin) { return null; } + console.log(chalk`{gray Bun v${version}: found binary at ${bin}}`); try { await fs.chmod(bin, 0o755); } catch {} @@ -160,6 +170,9 @@ const downloadAndExtractBun = async ( const getBunInfoForVersion = async ( version: string, ): Promise<{ webkitRev?: string; bunRevision?: string }> => { + console.log( + chalk`{gray Bun v${version}: resolving engine_version and revision...}`, + ); const bin = await downloadAndExtractBun(version); if (!bin) { return {}; @@ -175,6 +188,9 @@ const getBunInfoForVersion = async ( try { bunRevision = spawn(bin, ['--revision']).trim(); } catch {} + console.log( + chalk`{gray Bun v${version}: webkit=${webkitRev ?? 'unknown'} bun-revision=${bunRevision || 'unknown'}}`, + ); return { webkitRev, bunRevision }; } catch { return {}; @@ -276,7 +292,7 @@ export const updateBunReleases = async (options) => { browser, rel.version, status, - 'WebKit', + undefined, undefined, rel.date, rel.url, @@ -286,12 +302,16 @@ export const updateBunReleases = async (options) => { const entry = data.browsers[browser].releases[rel.version]; if (entry) { - entry.engine = 'WebKit'; - // Only resolve engine_version for the current release to avoid heavy downloads/timeouts - if (rel.version === latest.version && !entry.engine_version) { + const shouldResolve = rel.version === latest.version; + if (shouldResolve && !entry.engine_version) { const { webkitRev } = await getBunInfoForVersion(rel.version); if (webkitRev) { + entry.engine = 'WebKit'; entry.engine_version = webkitRev; + } else { + console.log( + chalk`{gray Bun v${rel.version}: no engine info in process.versions; leaving engine unset}`, + ); } } } @@ -313,6 +333,16 @@ export const updateBunReleases = async (options) => { } } + // Ensure schema dependency: if engine is present, engine_version must be present. + // Clean any existing entries that have engine without engine_version. + for (const [ver, rel] of Object.entries( + data.browsers[browser].releases ?? {}, + ) as [string, any][]) { + if (rel.engine && !rel.engine_version) { + delete rel.engine; + } + } + await fs.writeFile(`./${options.bcdFile}`, stringify(data) + '\n'); if (result) { From 72f52fe209941ad567446af9c4f548cffd888f05 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Tue, 19 Aug 2025 15:17:46 -0700 Subject: [PATCH 04/13] eslint autofix --- scripts/update-browser-releases/bun.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index 6d2735219cccef..c4805ebb607341 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -4,10 +4,10 @@ import fs from 'node:fs/promises'; import path from 'node:path'; +import chalk from 'chalk-template'; import { compareVersions } from 'compare-versions'; import { spawn } from '../../utils/index.js'; -import chalk from 'chalk-template'; import stringify from '../lib/stringify-and-order-properties.js'; import { From 589f7df68c2c08ae76d43d58c9a84a89bdd9b320 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Tue, 19 Aug 2025 15:26:44 -0700 Subject: [PATCH 05/13] remove --- scripts/update-browser-releases/bun.ts | 31 +++++++++----------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index c4805ebb607341..f1d309ad60ea69 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -50,10 +50,8 @@ const extractVersion = (r: GitHubRelease): string | undefined => { }; /** - * Updates the JSON file listing Bun releases. - * Relies on GitHub releases for stable versions; ignores drafts/prereleases. - * @param options Options including `browserName`, `bcdFile`, and `bcdBrowserName`. - * @returns A markdown changelog string, or an empty string if no changes. + * Fetches all Bun GitHub releases across pages. + * @returns A list of GitHub release objects. */ const fetchAllReleases = async (): Promise => { const all: GitHubRelease[] = []; @@ -77,9 +75,9 @@ const fetchAllReleases = async (): Promise => { return all; }; -// Resolve asset suffix for current platform/arch /** - * + * Resolves the Bun release asset suffix for the current platform/arch. + * @returns The asset suffix like "darwin-aarch64" or "linux-x64". */ const resolveAssetSuffix = () => { const plat = process.platform === 'darwin' ? 'darwin' : process.platform; @@ -88,8 +86,9 @@ const resolveAssetSuffix = () => { }; /** - * - * @param dir + * Recursively searches for the Bun binary within an extracted directory. + * @param dir The directory to search within. + * @returns The path to the Bun binary, or null if not found. */ const findBunBinaryPath = async (dir: string): Promise => { const entries = await fs.readdir(dir, { withFileTypes: true }); @@ -108,8 +107,10 @@ const findBunBinaryPath = async (dir: string): Promise => { }; /** - * - * @param version + * Downloads and extracts a specific Bun version for the current platform. + * Uses a local cache and reuses artifacts when available. + * @param version The Bun version to download, for example "1.2.21". + * @returns The absolute path to the extracted Bun binary, or null on failure. */ const downloadAndExtractBun = async ( version: string, @@ -333,16 +334,6 @@ export const updateBunReleases = async (options) => { } } - // Ensure schema dependency: if engine is present, engine_version must be present. - // Clean any existing entries that have engine without engine_version. - for (const [ver, rel] of Object.entries( - data.browsers[browser].releases ?? {}, - ) as [string, any][]) { - if (rel.engine && !rel.engine_version) { - delete rel.engine; - } - } - await fs.writeFile(`./${options.bcdFile}`, stringify(data) + '\n'); if (result) { From 45c9a67b73dc9453a7859928a6ef040bdb1f9e92 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Tue, 19 Aug 2025 15:34:18 -0700 Subject: [PATCH 06/13] cleaning --- scripts/update-browser-releases/bun.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index f1d309ad60ea69..df0bd47acc6092 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -206,7 +206,6 @@ const getBunInfoForVersion = async ( export const updateBunReleases = async (options) => { const browser = options.bcdBrowserName ?? 'bun'; - // Load existing Bun browser data let fileText: string; try { fileText = await fs.readFile(`${options.bcdFile}`, 'utf-8'); @@ -237,7 +236,6 @@ export const updateBunReleases = async (options) => { url?: string; } - // Build stable releases in a single clear pass; keep earliest date per version. const byVersion = new Map(); for (const r of releases) { if (r.draft || r.prerelease) { @@ -299,7 +297,6 @@ export const updateBunReleases = async (options) => { rel.url, ); - // Ensure engine is set to WebKit (update existing entries too) const entry = data.browsers[browser].releases[rel.version]; if (entry) { @@ -318,7 +315,6 @@ export const updateBunReleases = async (options) => { } } - // Ensure any existing non-latest entries are retired const existing = Object.keys(data.browsers[browser].releases ?? {}); for (const v of existing) { if (v !== latest.version) { From 1895e5bb2ebd120f9163f24cb09ddaf451d8739b Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Tue, 19 Aug 2025 15:55:00 -0700 Subject: [PATCH 07/13] pass noImplicitAny/lint --- scripts/update-browser-releases/bun.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index df0bd47acc6092..b0ebce897877b7 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -201,9 +201,16 @@ const getBunInfoForVersion = async ( /** * Updates the Bun releases. * @param options - The options. + * @param options.bcdBrowserName - The name of the browser in the BCD file. + * @param options.bcdFile - The path to the BCD file. + * @param options.browserName - The name of the browser. * @returns The result. */ -export const updateBunReleases = async (options) => { +export const updateBunReleases = async (options: { + bcdBrowserName: string; + bcdFile: string; + browserName: string; +}) => { const browser = options.bcdBrowserName ?? 'bun'; let fileText: string; From ab9fb8f20d7786b646c4769fde85e93bfef8dd6c Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Thu, 21 Aug 2025 17:25:08 -0700 Subject: [PATCH 08/13] suggestions --- scripts/update-browser-releases/bun.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index b0ebce897877b7..62e268333bb28a 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -79,11 +79,8 @@ const fetchAllReleases = async (): Promise => { * Resolves the Bun release asset suffix for the current platform/arch. * @returns The asset suffix like "darwin-aarch64" or "linux-x64". */ -const resolveAssetSuffix = () => { - const plat = process.platform === 'darwin' ? 'darwin' : process.platform; - const cpu = process.arch === 'arm64' ? 'aarch64' : process.arch; - return `${plat}-${cpu}`; -}; +const resolveAssetSuffix = () => + `${process.platform}-${process.arch === 'arm64' ? 'aarch64' : process.arch}` as const; /** * Recursively searches for the Bun binary within an extracted directory. @@ -120,9 +117,15 @@ const downloadAndExtractBun = async ( const asset = `bun-${suffix}.zip`; const url = `${base}/${asset}`; - const cacheRoot = path.join(process.cwd(), '.cache', 'bun-updater', version); + const cacheRoot = path.join( + process.cwd(), + 'node_modules', + '.cache', + 'bun-releases', + version, + ); const zipPath = path.join(cacheRoot, asset); - const extractDir = path.join(cacheRoot, 'extracted'); + const extractDir = path.join(cacheRoot, suffix); await fs.mkdir(extractDir, { recursive: true }); console.log(chalk`{gray Bun v${version}: preparing cache at ${cacheRoot}}`); From f2c5645f480a56381d45bc479a4617d43ba09d68 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Thu, 21 Aug 2025 17:46:26 -0700 Subject: [PATCH 09/13] Use new Bun versions API --- browsers/bun.json | 2 +- scripts/update-browser-releases/bun.ts | 292 ++++++----------------- scripts/update-browser-releases/index.ts | 2 +- 3 files changed, 78 insertions(+), 218 deletions(-) diff --git a/browsers/bun.json b/browsers/bun.json index 1b6cf788d3526e..043adec2b6b69e 100644 --- a/browsers/bun.json +++ b/browsers/bun.json @@ -708,7 +708,7 @@ "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.20", "status": "current", "engine": "WebKit", - "engine_version": "aa4997abc9126f5a7557c9ecb7e8104779d87ec4" + "engine_version": "684d4551ce5f62683476409d7402424e0f6eafb5" } } } diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index 62e268333bb28a..7c63a105219742 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -2,12 +2,10 @@ * See LICENSE file for more information. */ import fs from 'node:fs/promises'; -import path from 'node:path'; import chalk from 'chalk-template'; import { compareVersions } from 'compare-versions'; -import { spawn } from '../../utils/index.js'; import stringify from '../lib/stringify-and-order-properties.js'; import { @@ -16,189 +14,66 @@ import { updateBrowserEntry, } from './utils.js'; -interface GitHubRelease { - tag_name?: string; - name?: string; - draft?: boolean; - prerelease?: boolean; - published_at?: string; // ISO - html_url?: string; -} - -const GITHUB_API = - 'https://api.github.com/repos/oven-sh/bun/releases?per_page=100&page='; - -const SEMVER_RE = /(\d+\.\d+\.\d+)/; - -/** - * Converts an ISO date string to a YYYY-MM-DD format. - * @param iso - The ISO date string to convert. - * @returns The date in YYYY-MM-DD format, or undefined if input is falsy. - */ -const toDate = (iso?: string): string | undefined => - iso ? new Date(iso).toISOString().split('T')[0] : undefined; - -/** - * Extracts the version number from a GitHub release. - * @param r - The GitHub release object. - * @returns The version number, or undefined if not found. - */ -const extractVersion = (r: GitHubRelease): string | undefined => { - const hay = `${r.tag_name ?? ''} ${r.name ?? ''}`; - const m = hay.match(SEMVER_RE); - return m ? m[1] : undefined; -}; +import type { CompatData } from '../../types/types.js'; -/** - * Fetches all Bun GitHub releases across pages. - * @returns A list of GitHub release objects. - */ -const fetchAllReleases = async (): Promise => { - const all: GitHubRelease[] = []; - for (let page = 1; page <= 10; page++) { - const res = await fetch(GITHUB_API + page, { - headers: { - 'User-Agent': - 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', - Accept: 'application/vnd.github+json', - }, - }); - if (!res.ok) { - throw new Error(`GitHub releases fetch failed: HTTP ${res.status}`); +type BunVersionInfo = { + status: 'current' | 'retired'; + release_date: string; + release_notes: string; +} & ( + | { + versions?: never; + revision?: never; } - const chunk = (await res.json()) as GitHubRelease[]; - if (!Array.isArray(chunk) || chunk.length === 0) { - break; + | { + versions: Record<(string & {}) | 'webkit', string>; + revision: string; } - all.push(...chunk); - } - return all; -}; +); -/** - * Resolves the Bun release asset suffix for the current platform/arch. - * @returns The asset suffix like "darwin-aarch64" or "linux-x64". - */ -const resolveAssetSuffix = () => - `${process.platform}-${process.arch === 'arm64' ? 'aarch64' : process.arch}` as const; +interface BunVersionsResponse { + $note: string; + releases: Record; +} -/** - * Recursively searches for the Bun binary within an extracted directory. - * @param dir The directory to search within. - * @returns The path to the Bun binary, or null if not found. - */ -const findBunBinaryPath = async (dir: string): Promise => { - const entries = await fs.readdir(dir, { withFileTypes: true }); - for (const e of entries) { - const p = path.join(dir, e.name); - if (e.isDirectory()) { - const found = await findBunBinaryPath(p); - if (found) { - return found; - } - } else if (e.isFile() && e.name === 'bun') { - return p; - } - } - return null; -}; +const VERSIONS_API = 'https://bun.com/versions.json'; /** - * Downloads and extracts a specific Bun version for the current platform. - * Uses a local cache and reuses artifacts when available. - * @param version The Bun version to download, for example "1.2.21". - * @returns The absolute path to the extracted Bun binary, or null on failure. + * Fetches Bun version information from the versions.json endpoint. + * @returns The versions response object. */ -const downloadAndExtractBun = async ( - version: string, -): Promise => { - const suffix = resolveAssetSuffix(); - const base = `https://github.com/oven-sh/bun/releases/download/bun-v${version}`; - const asset = `bun-${suffix}.zip`; - const url = `${base}/${asset}`; - - const cacheRoot = path.join( - process.cwd(), - 'node_modules', - '.cache', - 'bun-releases', - version, - ); - const zipPath = path.join(cacheRoot, asset); - const extractDir = path.join(cacheRoot, suffix); - - await fs.mkdir(extractDir, { recursive: true }); - console.log(chalk`{gray Bun v${version}: preparing cache at ${cacheRoot}}`); - - try { - await fs.access(zipPath); - } catch { - console.log(chalk`{gray Bun v${version}: downloading ${url}}`); - const res = await fetch(url); - if (!res.ok) { - return null; - } - const buf = Buffer.from(await res.arrayBuffer()); - await fs.mkdir(cacheRoot, { recursive: true }); - await fs.writeFile(zipPath, buf); - } - - try { - console.log( - chalk`{gray Bun v${version}: extracting archive to ${extractDir}}`, - ); - spawn('unzip', ['-o', zipPath, '-d', extractDir]); - } catch (e) { - console.warn( - chalk`{yellow Bun v${version}: failed to extract (${String(e)})}`, - ); - return null; - } - - const bin = await findBunBinaryPath(extractDir); - if (!bin) { - return null; +const fetchVersions = async (): Promise => { + const res = await fetch(VERSIONS_API, { + headers: { + 'User-Agent': + 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', + Accept: 'application/json', + }, + }); + if (!res.ok) { + throw new Error(`Bun versions fetch failed: HTTP ${res.status}`); } - console.log(chalk`{gray Bun v${version}: found binary at ${bin}}`); - try { - await fs.chmod(bin, 0o755); - } catch {} - return bin; + return (await res.json()) as BunVersionsResponse; }; /** - * Gets Bun version info for a given version. - * @param version - The Bun version to fetch info for. + * Gets Bun version info from the versions data. + * @param versionInfo - The version info object from the API. * @returns An object containing webkitRev and bunRevision, if available. */ -const getBunInfoForVersion = async ( - version: string, -): Promise<{ webkitRev?: string; bunRevision?: string }> => { - console.log( - chalk`{gray Bun v${version}: resolving engine_version and revision...}`, - ); - const bin = await downloadAndExtractBun(version); - if (!bin) { - return {}; - } - try { - const versionsJSON = spawn(bin, [ - '--eval', - 'console.log(JSON.stringify(process.versions))', - ]); - const versions = JSON.parse(versionsJSON) as Record; - const webkitRev = versions['webkit']; - let bunRevision = ''; - try { - bunRevision = spawn(bin, ['--revision']).trim(); - } catch {} +const getBunInfoFromVersionData = ( + versionInfo: BunVersionInfo, +): { webkitRev?: string; bunRevision?: string } => { + const webkitRev = versionInfo.versions?.webkit; + const bunRevision = versionInfo.revision; + + if (webkitRev || bunRevision) { console.log( - chalk`{gray Bun v${version}: webkit=${webkitRev ?? 'unknown'} bun-revision=${bunRevision || 'unknown'}}`, + chalk`{gray Bun: webkit=${webkitRev ?? 'unknown'} bun-revision=${bunRevision || 'unknown'}}`, ); - return { webkitRev, bunRevision }; - } catch { - return {}; } + + return { webkitRev, bunRevision }; }; /** @@ -210,15 +85,15 @@ const getBunInfoForVersion = async ( * @returns The result. */ export const updateBunReleases = async (options: { - bcdBrowserName: string; + bcdBrowserName: 'bun'; bcdFile: string; browserName: string; }) => { - const browser = options.bcdBrowserName ?? 'bun'; + const browser = options.bcdBrowserName; let fileText: string; try { - fileText = await fs.readFile(`${options.bcdFile}`, 'utf-8'); + fileText = await fs.readFile(options.bcdFile, 'utf-8'); } catch { return gfmNoteblock( 'NOTE', @@ -226,17 +101,17 @@ export const updateBunReleases = async (options: { ); } - const data = JSON.parse(fileText); + const data: CompatData = JSON.parse(fileText); let result = ''; - let releases: GitHubRelease[] = []; + let versionsData: BunVersionsResponse; try { - releases = await fetchAllReleases(); + versionsData = await fetchVersions(); } catch (e) { return gfmNoteblock( 'WARNING', - `**${options.browserName ?? 'Bun'}**: Failed to fetch GitHub releases (${e}).`, + `**${options.browserName ?? 'Bun'}**: Failed to fetch versions data (${e}).`, ); } @@ -244,46 +119,31 @@ export const updateBunReleases = async (options: { version: string; date?: string; url?: string; + info: BunVersionInfo; } - const byVersion = new Map(); - for (const r of releases) { - if (r.draft || r.prerelease) { - continue; - } - - const version = extractVersion(r); - - if (!version) { - continue; - } + const stableReleases: Stable[] = []; + let latestVersion: string | null = null; + for (const [version, info] of Object.entries(versionsData.releases)) { + // Only include versions >= 1.0.0 if (compareVersions(version, '1.0.0') < 0) { continue; } - const candidate: Stable = { + stableReleases.push({ version, - date: toDate(r.published_at), - url: r.html_url ?? '', - }; - - const existing = byVersion.get(version); - - if (!existing) { - byVersion.set(version, candidate); - } else if ( - existing.date && - candidate.date && - existing.date > candidate.date - ) { - byVersion.set(version, candidate); + date: info.release_date, + url: info.release_notes, + info, + }); + + if (info.status === 'current') { + latestVersion = version; } } - const stableReleases = Array.from(byVersion.values()).sort((a, b) => - compareVersions(a.version, b.version), - ); + stableReleases.sort((a, b) => compareVersions(a.version, b.version)); if (stableReleases.length === 0) { return gfmNoteblock( @@ -292,7 +152,13 @@ export const updateBunReleases = async (options: { ); } - const latest = stableReleases[stableReleases.length - 1]; + if (!latestVersion) { + latestVersion = stableReleases[stableReleases.length - 1].version; + } + + const latest = + stableReleases.find((r) => r.version === latestVersion) || + stableReleases[stableReleases.length - 1]; for (const rel of stableReleases) { const status = rel.version === latest.version ? 'current' : 'retired'; @@ -310,17 +176,11 @@ export const updateBunReleases = async (options: { const entry = data.browsers[browser].releases[rel.version]; if (entry) { - const shouldResolve = rel.version === latest.version; - if (shouldResolve && !entry.engine_version) { - const { webkitRev } = await getBunInfoForVersion(rel.version); - if (webkitRev) { - entry.engine = 'WebKit'; - entry.engine_version = webkitRev; - } else { - console.log( - chalk`{gray Bun v${rel.version}: no engine info in process.versions; leaving engine unset}`, - ); - } + const { webkitRev } = getBunInfoFromVersionData(rel.info); + + if (webkitRev) { + entry.engine = 'WebKit'; + entry.engine_version = webkitRev; } } } diff --git a/scripts/update-browser-releases/index.ts b/scripts/update-browser-releases/index.ts index 7c3baf86dedaf3..59503c70e63075 100644 --- a/scripts/update-browser-releases/index.ts +++ b/scripts/update-browser-releases/index.ts @@ -229,7 +229,7 @@ const options = { browserName: 'Bun', bcdFile: './browsers/bun.json', bcdBrowserName: 'bun', - }, + } as const, }; const results = await Promise.all([ From ad07ea704b4af68a7b665bb69803a4539d0da7ff Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Thu, 21 Aug 2025 18:25:10 -0700 Subject: [PATCH 10/13] fetch webkit semver-like values --- scripts/update-browser-releases/bun.ts | 61 ++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 4 deletions(-) diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index 7c63a105219742..c3077ec0872bbc 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -56,16 +56,69 @@ const fetchVersions = async (): Promise => { return (await res.json()) as BunVersionsResponse; }; +/** + * Fetches WebKit version from the Version.xcconfig file at a specific commit. + * @param commitHash - The WebKit commit hash. + * @returns The WebKit version in x.y.z format, or undefined if fetch fails. + */ +const fetchWebKitVersion = async ( + commitHash: string, +): Promise => { + try { + const url = `https://api.github.com/repos/oven-sh/WebKit/contents/Configurations/Version.xcconfig?ref=${commitHash}`; + const res = await fetch(url, { + headers: { + 'User-Agent': + 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', + Accept: 'application/vnd.github.v3.raw', + }, + }); + + if (!res.ok) { + console.warn( + chalk`{yellow Warning: Failed to fetch WebKit Version.xcconfig for commit ${commitHash}: HTTP ${res.status}}`, + ); + return undefined; + } + + const content = await res.text(); + + const majorMatch = content.match(/MAJOR_VERSION\s*=\s*(\d+)/); + const minorMatch = content.match(/MINOR_VERSION\s*=\s*(\d+)/); + const tinyMatch = content.match(/TINY_VERSION\s*=\s*(\d+)/); + + if (majorMatch && minorMatch && tinyMatch) { + const version = `${majorMatch[1]}.${minorMatch[1]}.${tinyMatch[1]}`; + return version; + } + + console.warn( + chalk`{yellow Warning: Could not parse version numbers from Version.xcconfig for commit ${commitHash}}`, + ); + return undefined; + } catch (error) { + console.warn( + chalk`{yellow Warning: Error fetching WebKit version for commit ${commitHash}: ${error}}`, + ); + return undefined; + } +}; + /** * Gets Bun version info from the versions data. * @param versionInfo - The version info object from the API. * @returns An object containing webkitRev and bunRevision, if available. */ -const getBunInfoFromVersionData = ( +const getBunInfoFromVersionData = async ( versionInfo: BunVersionInfo, -): { webkitRev?: string; bunRevision?: string } => { - const webkitRev = versionInfo.versions?.webkit; +): Promise<{ webkitRev?: string; bunRevision?: string }> => { + const webkitCommitHash = versionInfo.versions?.webkit; const bunRevision = versionInfo.revision; + let webkitRev: string | undefined; + + if (webkitCommitHash) { + webkitRev = await fetchWebKitVersion(webkitCommitHash); + } if (webkitRev || bunRevision) { console.log( @@ -176,7 +229,7 @@ export const updateBunReleases = async (options: { const entry = data.browsers[browser].releases[rel.version]; if (entry) { - const { webkitRev } = getBunInfoFromVersionData(rel.info); + const { webkitRev } = await getBunInfoFromVersionData(rel.info); if (webkitRev) { entry.engine = 'WebKit'; From 359b4a46d8cff729a1f0954e71ce75ecb9f9ed81 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Thu, 21 Aug 2025 18:26:59 -0700 Subject: [PATCH 11/13] start moving webkit hashes to semver-like versions --- browsers/bun.json | 114 ++++++++++++------------- scripts/update-browser-releases/bun.ts | 54 ++++++++++++ 2 files changed, 111 insertions(+), 57 deletions(-) diff --git a/browsers/bun.json b/browsers/bun.json index 043adec2b6b69e..3f3012dbcdb665 100644 --- a/browsers/bun.json +++ b/browsers/bun.json @@ -71,399 +71,399 @@ "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.12", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.13": { "release_date": "2023-11-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.13", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.14": { "release_date": "2023-11-23", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.14", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.15": { "release_date": "2023-12-02", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.15", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.16": { "release_date": "2023-12-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.16", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.17": { "release_date": "2023-12-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.17", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.18": { "release_date": "2023-12-14", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.18", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.19": { "release_date": "2023-12-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.19", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.20": { "release_date": "2023-12-24", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.20", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.21": { "release_date": "2024-01-02", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.21", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.22": { "release_date": "2024-01-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.22", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.23": { "release_date": "2024-01-16", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.23", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.24": { "release_date": "2024-01-20", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.24", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.25": { "release_date": "2024-01-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.25", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.26": { "release_date": "2024-02-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.26", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.27": { "release_date": "2024-02-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.27", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.28": { "release_date": "2024-02-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.28", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.29": { "release_date": "2024-02-23", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.29", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.30": { "release_date": "2024-03-04", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.30", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.31": { "release_date": "2024-03-15", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.31", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.32": { "release_date": "2024-03-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.32", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.33": { "release_date": "2024-03-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.33", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.34": { "release_date": "2024-03-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.34", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.35": { "release_date": "2024-03-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.35", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.0.36": { "release_date": "2024-03-29", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.0.36", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.0": { "release_date": "2024-04-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.0", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.1": { "release_date": "2024-04-04", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.1", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.2": { "release_date": "2024-04-06", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.2", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.3": { "release_date": "2024-04-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.3", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.4": { "release_date": "2024-04-16", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.4", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.5": { "release_date": "2024-04-26", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.5", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.6": { "release_date": "2024-04-28", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.6", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.7": { "release_date": "2024-05-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.7", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.8": { "release_date": "2024-05-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.8", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.9": { "release_date": "2024-05-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.9", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.10": { "release_date": "2024-05-25", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.10", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.11": { "release_date": "2024-06-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.11", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.12": { "release_date": "2024-06-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.12", "status": "retired", "engine": "WebKit", - "engine_version": "a780bdf0255ae1a7ed15e4b3f31c14af705facae" + "engine_version": "617.1.3" }, "1.1.13": { "release_date": "2024-06-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.13", "status": "retired", "engine": "WebKit", - "engine_version": "353aa20567e80a74eb43694a27cdf41f4a56ccef" + "engine_version": "619.1.13" }, "1.1.14": { "release_date": "2024-06-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.14", "status": "retired", "engine": "WebKit", - "engine_version": "353aa20567e80a74eb43694a27cdf41f4a56ccef" + "engine_version": "619.1.13" }, "1.1.15": { "release_date": "2024-06-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.15", "status": "retired", "engine": "WebKit", - "engine_version": "353aa20567e80a74eb43694a27cdf41f4a56ccef" + "engine_version": "619.1.13" }, "1.1.16": { "release_date": "2024-06-23", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.16", "status": "retired", "engine": "WebKit", - "engine_version": "64d04ec1a65d91326c5f2298b9c7d05b56125252" + "engine_version": "619.1.13" }, "1.1.17": { "release_date": "2024-06-25", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.17", "status": "retired", "engine": "WebKit", - "engine_version": "64d04ec1a65d91326c5f2298b9c7d05b56125252" + "engine_version": "619.1.13" }, "1.1.18": { "release_date": "2024-07-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.18", "status": "retired", "engine": "WebKit", - "engine_version": "615e8585f96aa718b0f5158210259b83fe8440ea" + "engine_version": "619.1.22" }, "1.1.19": { "release_date": "2024-07-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.19", "status": "retired", "engine": "WebKit", - "engine_version": "b49be549da59347762aa83f849a65158d2a0d724" + "engine_version": "619.1.22" }, "1.1.20": { "release_date": "2024-07-13", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.20", "status": "retired", "engine": "WebKit", - "engine_version": "b49be549da59347762aa83f849a65158d2a0d724" + "engine_version": "619.1.22" }, "1.1.21": { "release_date": "2024-07-27", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.21", "status": "retired", "engine": "WebKit", - "engine_version": "f9a0fda2d2b2fd001a00bfcf8e7917a56b382516" + "engine_version": "619.1.22" }, "1.1.22": { "release_date": "2024-08-07", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.22", "status": "retired", "engine": "WebKit", - "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" + "engine_version": "620.1.2" }, "1.1.23": { "release_date": "2024-08-14", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.23", "status": "retired", "engine": "WebKit", - "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" + "engine_version": "620.1.2" }, "1.1.24": { "release_date": "2024-08-14", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.24", "status": "retired", "engine": "WebKit", - "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" + "engine_version": "620.1.2" }, "1.1.25": { "release_date": "2024-08-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.25", "status": "retired", "engine": "WebKit", - "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" + "engine_version": "620.1.2" }, "1.1.26": { "release_date": "2024-08-24", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.26", "status": "retired", "engine": "WebKit", - "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" + "engine_version": "620.1.2" }, "1.1.27": { "release_date": "2024-09-07", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.27", "status": "retired", "engine": "WebKit", - "engine_version": "13bb88da0b791154dca60910f301dcd70c321f72" + "engine_version": "620.1.2" }, "1.1.28": { "release_date": "2024-09-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.28", "status": "retired", "engine": "WebKit", - "engine_version": "4a2db3254a9535949a5d5380eb58cf0f77c8e15a" + "engine_version": "621.1.1" }, "1.1.29": { "release_date": "2024-09-20", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.29", "status": "retired", "engine": "WebKit", - "engine_version": "4a2db3254a9535949a5d5380eb58cf0f77c8e15a" + "engine_version": "621.1.1" }, "1.1.30": { "release_date": "2024-10-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.30", "status": "retired", "engine": "WebKit", - "engine_version": "0a0a3838e5fab36b579df26620237bb62ed6d950" + "engine_version": "621.1.3" }, "1.1.31": { "release_date": "2024-10-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.31", "status": "retired", "engine": "WebKit", - "engine_version": "12e2f46fb01f7c5cf5a992b9414ddfaab32b7110" + "engine_version": "621.1.4" }, "1.1.32": { "release_date": "2024-10-21", diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index c3077ec0872bbc..8ca387b2c31b1b 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -38,6 +38,9 @@ interface BunVersionsResponse { const VERSIONS_API = 'https://bun.com/versions.json'; +// Cache for WebKit versions to avoid repeated API calls +const webkitVersionCache = new Map(); + /** * Fetches Bun version information from the versions.json endpoint. * @returns The versions response object. @@ -74,6 +77,57 @@ const fetchWebKitVersion = async ( }, }); + if (res.status === 403 || res.status === 429) { + const retryAfter = res.headers.get('Retry-After'); + const rateLimitReset = res.headers.get('X-RateLimit-Reset'); + + let waitTime = 60; // Default wait time in seconds + + if (retryAfter) { + waitTime = parseInt(retryAfter, 10); + } else if (rateLimitReset) { + const resetTime = parseInt(rateLimitReset, 10) * 1000; + waitTime = Math.max(1, Math.ceil((resetTime - Date.now()) / 1000)); + } + + console.log( + chalk`{yellow Rate limited for commit ${commitHash}. Waiting ${waitTime} seconds...}`, + ); + + await new Promise((resolve) => setTimeout(resolve, waitTime * 1000)); + + const retryRes = await fetch(url, { + headers: { + 'User-Agent': + 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', + Accept: 'application/vnd.github.v3.raw', + }, + }); + + if (!retryRes.ok) { + console.warn( + chalk`{yellow Warning: Failed to fetch WebKit Version.xcconfig for commit ${commitHash} after retry: HTTP ${retryRes.status}}`, + ); + return undefined; + } + + const content = await retryRes.text(); + + const majorMatch = content.match(/MAJOR_VERSION\s*=\s*(\d+)/); + const minorMatch = content.match(/MINOR_VERSION\s*=\s*(\d+)/); + const tinyMatch = content.match(/TINY_VERSION\s*=\s*(\d+)/); + + if (majorMatch && minorMatch && tinyMatch) { + const version = `${majorMatch[1]}.${minorMatch[1]}.${tinyMatch[1]}`; + return version; + } + + console.warn( + chalk`{yellow Warning: Could not parse version numbers from Version.xcconfig for commit ${commitHash}}`, + ); + return undefined; + } + if (!res.ok) { console.warn( chalk`{yellow Warning: Failed to fetch WebKit Version.xcconfig for commit ${commitHash}: HTTP ${res.status}}`, From a4ce47074e1e23759faeeff4535c430e3662a7e0 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Thu, 21 Aug 2025 18:29:23 -0700 Subject: [PATCH 12/13] use github token to avoid rate limit for the rest --- browsers/bun.json | 70 +++++++++++++------------- scripts/update-browser-releases/bun.ts | 40 +++++++++------ 2 files changed, 60 insertions(+), 50 deletions(-) diff --git a/browsers/bun.json b/browsers/bun.json index 3f3012dbcdb665..e7e61d65b47c1f 100644 --- a/browsers/bun.json +++ b/browsers/bun.json @@ -470,245 +470,245 @@ "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.32", "status": "retired", "engine": "WebKit", - "engine_version": "543cca2140eafdba845f6689024abaac0d9924f5" + "engine_version": "621.1.4" }, "1.1.33": { "release_date": "2024-10-24", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.33", "status": "retired", "engine": "WebKit", - "engine_version": "543cca2140eafdba845f6689024abaac0d9924f5" + "engine_version": "621.1.4" }, "1.1.34": { "release_date": "2024-11-02", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.34", "status": "retired", "engine": "WebKit", - "engine_version": "9b84f43643eff64ab46daec9b860de262c80f5e2" + "engine_version": "621.1.5" }, "1.1.35": { "release_date": "2024-11-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.35", "status": "retired", "engine": "WebKit", - "engine_version": "3bc4abf2d5875baf500b4687ef869987f6d19e00" + "engine_version": "621.1.5" }, "1.1.36": { "release_date": "2024-11-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.36", "status": "retired", "engine": "WebKit", - "engine_version": "3bc4abf2d5875baf500b4687ef869987f6d19e00" + "engine_version": "621.1.5" }, "1.1.37": { "release_date": "2024-11-26", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.37", "status": "retired", "engine": "WebKit", - "engine_version": "8f9ae4f01a047c666ef548864294e01df731d4ea" + "engine_version": "621.1.5" }, "1.1.38": { "release_date": "2024-11-29", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.38", "status": "retired", "engine": "WebKit", - "engine_version": "8f9ae4f01a047c666ef548864294e01df731d4ea" + "engine_version": "621.1.5" }, "1.1.39": { "release_date": "2024-12-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.39", "status": "retired", "engine": "WebKit", - "engine_version": "58549ddc4d9e7164823fe9d4e86c46c003e46a19" + "engine_version": "621.1.9" }, "1.1.40": { "release_date": "2024-12-18", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.40", "status": "retired", "engine": "WebKit", - "engine_version": "3845bf370ff4e9a5c0b96036255142c7904be963" + "engine_version": "621.1.9" }, "1.1.41": { "release_date": "2024-12-20", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.41", "status": "retired", "engine": "WebKit", - "engine_version": "3845bf370ff4e9a5c0b96036255142c7904be963" + "engine_version": "621.1.9" }, "1.1.42": { "release_date": "2024-12-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.42", "status": "retired", "engine": "WebKit", - "engine_version": "3845bf370ff4e9a5c0b96036255142c7904be963" + "engine_version": "621.1.9" }, "1.1.43": { "release_date": "2025-01-08", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.43", "status": "retired", "engine": "WebKit", - "engine_version": "e1a802a2287edfe7f4046a9dd8307c8b59f5d816" + "engine_version": "621.1.10" }, "1.1.44": { "release_date": "2025-01-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.44", "status": "retired", "engine": "WebKit", - "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" + "engine_version": "621.1.11" }, "1.1.45": { "release_date": "2025-01-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.1.45", "status": "retired", "engine": "WebKit", - "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" + "engine_version": "621.1.11" }, "1.2.0": { "release_date": "2025-01-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.0", "status": "retired", "engine": "WebKit", - "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" + "engine_version": "621.1.11" }, "1.2.1": { "release_date": "2025-01-27", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.1", "status": "retired", "engine": "WebKit", - "engine_version": "9e3b60e4a6438d20ee6f8aa5bec6b71d2b7d213f" + "engine_version": "621.1.11" }, "1.2.2": { "release_date": "2025-02-01", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.2", "status": "retired", "engine": "WebKit", - "engine_version": "e32c6356625cfacebff0c61d182f759abf6f508a" + "engine_version": "621.1.11" }, "1.2.3": { "release_date": "2025-02-22", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.3", "status": "retired", "engine": "WebKit", - "engine_version": "763e836175f705b3acb6fcd29270e68dd15d08bb" + "engine_version": "622.1.3" }, "1.2.4": { "release_date": "2025-02-26", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.4", "status": "retired", "engine": "WebKit", - "engine_version": "c333de54223425d7148603d63dd3f6152d0bc348" + "engine_version": "622.1.3" }, "1.2.5": { "release_date": "2025-03-11", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.5", "status": "retired", "engine": "WebKit", - "engine_version": "abe5e808a649db1182333f65bef55e65bb374616" + "engine_version": "622.1.7" }, "1.2.6": { "release_date": "2025-03-25", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.6", "status": "retired", "engine": "WebKit", - "engine_version": "ef31d98a1370e01b7483cabcbe3593d055bea982" + "engine_version": "622.1.7" }, "1.2.7": { "release_date": "2025-03-27", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.7", "status": "retired", "engine": "WebKit", - "engine_version": "ef31d98a1370e01b7483cabcbe3593d055bea982" + "engine_version": "622.1.7" }, "1.2.8": { "release_date": "2025-03-31", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.8", "status": "retired", "engine": "WebKit", - "engine_version": "ef31d98a1370e01b7483cabcbe3593d055bea982" + "engine_version": "622.1.7" }, "1.2.9": { "release_date": "2025-04-09", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.9", "status": "retired", "engine": "WebKit", - "engine_version": "06820714a7990ea77c78157f9eeaabaf56c2098a" + "engine_version": "622.1.10" }, "1.2.10": { "release_date": "2025-04-17", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.10", "status": "retired", "engine": "WebKit", - "engine_version": "06820714a7990ea77c78157f9eeaabaf56c2098a" + "engine_version": "622.1.10" }, "1.2.11": { "release_date": "2025-04-29", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.11", "status": "retired", "engine": "WebKit", - "engine_version": "11b10bb50bd69481fe4c7a4dd075eea4755b3fee" + "engine_version": "622.1.11" }, "1.2.12": { "release_date": "2025-05-04", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.12", "status": "retired", "engine": "WebKit", - "engine_version": "c244f567ab804c2558067d00733013c01725d824" + "engine_version": "622.1.11" }, "1.2.13": { "release_date": "2025-05-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.13", "status": "retired", "engine": "WebKit", - "engine_version": "017930ebf915121f8f593bef61cbbca82d78132d" + "engine_version": "622.1.12" }, "1.2.14": { "release_date": "2025-05-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.14", "status": "retired", "engine": "WebKit", - "engine_version": "eda8b0fb4fb1aa23db9c2b00933df8b58bcdd289" + "engine_version": "622.1.12" }, "1.2.15": { "release_date": "2025-05-28", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.15", "status": "retired", "engine": "WebKit", - "engine_version": "b98e20b11e6ab044f73218bdd05ab064587b9ead" + "engine_version": "622.1.15" }, "1.2.16": { "release_date": "2025-06-12", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.16", "status": "retired", "engine": "WebKit", - "engine_version": "014cad89f528483e3fc431ff5ca6e2095d92e7bd" + "engine_version": "622.1.16" }, "1.2.17": { "release_date": "2025-06-21", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.17", "status": "retired", "engine": "WebKit", - "engine_version": "397dafc9721b8f8046f9448abb6dbc14efe096d3" + "engine_version": "622.1.17" }, "1.2.18": { "release_date": "2025-07-03", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.18", "status": "retired", "engine": "WebKit", - "engine_version": "29bbdff0f94f362891f8e007ae2a73f9bc3e66d3" + "engine_version": "622.1.19" }, "1.2.19": { "release_date": "2025-07-19", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.19", "status": "retired", "engine": "WebKit", - "engine_version": "1098cc50652ab1eab171f58f7669e19ca6c276ae" + "engine_version": "622.1.19" }, "1.2.20": { "release_date": "2025-08-10", "release_notes": "https://github.com/oven-sh/bun/releases/tag/bun-v1.2.20", "status": "current", "engine": "WebKit", - "engine_version": "684d4551ce5f62683476409d7402424e0f6eafb5" + "engine_version": "623.1.3" } } } diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index 8ca387b2c31b1b..48ea26d25aa87b 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -67,21 +67,32 @@ const fetchVersions = async (): Promise => { const fetchWebKitVersion = async ( commitHash: string, ): Promise => { + if (webkitVersionCache.has(commitHash)) { + return webkitVersionCache.get(commitHash); + } + try { const url = `https://api.github.com/repos/oven-sh/WebKit/contents/Configurations/Version.xcconfig?ref=${commitHash}`; - const res = await fetch(url, { - headers: { - 'User-Agent': - 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', - Accept: 'application/vnd.github.v3.raw', - }, - }); + + const headers: Record = { + 'User-Agent': + 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', + Accept: 'application/vnd.github.v3.raw', + }; + + const githubToken = process.env.GITHUB_TOKEN || process.env.GH_TOKEN; + if (githubToken) { + headers['Authorization'] = `token ${githubToken}`; + console.log(chalk`{gray Using GitHub token for API requests}`); + } + + const res = await fetch(url, { headers }); if (res.status === 403 || res.status === 429) { const retryAfter = res.headers.get('Retry-After'); const rateLimitReset = res.headers.get('X-RateLimit-Reset'); - let waitTime = 60; // Default wait time in seconds + let waitTime = 60; if (retryAfter) { waitTime = parseInt(retryAfter, 10); @@ -96,13 +107,7 @@ const fetchWebKitVersion = async ( await new Promise((resolve) => setTimeout(resolve, waitTime * 1000)); - const retryRes = await fetch(url, { - headers: { - 'User-Agent': - 'MDN-Browser-Release-Update-Bot/1.0 (+https://developer.mozilla.org/)', - Accept: 'application/vnd.github.v3.raw', - }, - }); + const retryRes = await fetch(url, { headers }); if (!retryRes.ok) { console.warn( @@ -119,12 +124,14 @@ const fetchWebKitVersion = async ( if (majorMatch && minorMatch && tinyMatch) { const version = `${majorMatch[1]}.${minorMatch[1]}.${tinyMatch[1]}`; + webkitVersionCache.set(commitHash, version); return version; } console.warn( chalk`{yellow Warning: Could not parse version numbers from Version.xcconfig for commit ${commitHash}}`, ); + webkitVersionCache.set(commitHash, undefined); return undefined; } @@ -143,17 +150,20 @@ const fetchWebKitVersion = async ( if (majorMatch && minorMatch && tinyMatch) { const version = `${majorMatch[1]}.${minorMatch[1]}.${tinyMatch[1]}`; + webkitVersionCache.set(commitHash, version); return version; } console.warn( chalk`{yellow Warning: Could not parse version numbers from Version.xcconfig for commit ${commitHash}}`, ); + webkitVersionCache.set(commitHash, undefined); return undefined; } catch (error) { console.warn( chalk`{yellow Warning: Error fetching WebKit version for commit ${commitHash}: ${error}}`, ); + webkitVersionCache.set(commitHash, undefined); return undefined; } }; From cea7fadf1d6f2ecb2d6cd420d33c9954bf067a55 Mon Sep 17 00:00:00 2001 From: Alistair Smith Date: Thu, 21 Aug 2025 18:34:14 -0700 Subject: [PATCH 13/13] rm --- scripts/update-browser-releases/bun.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/update-browser-releases/bun.ts b/scripts/update-browser-releases/bun.ts index 48ea26d25aa87b..f6276a33b524ef 100644 --- a/scripts/update-browser-releases/bun.ts +++ b/scripts/update-browser-releases/bun.ts @@ -38,7 +38,6 @@ interface BunVersionsResponse { const VERSIONS_API = 'https://bun.com/versions.json'; -// Cache for WebKit versions to avoid repeated API calls const webkitVersionCache = new Map(); /**