Skip to content

Commit 53d263e

Browse files
authored
fix(PlaywrightBinary): mirror builds/cft/{browserVersion}/ chromium paths (#1050)
## Summary Playwright 1.58.1 moved chromium downloads to Chrome for Testing URLs (`builds/cft/{browserVersion}/{platform}/{file}.zip`) for mac, win64, and x64 linux. linux-arm64 still uses the old `builds/chromium/{revision}/` path. The mirror only knew the old layout, so newer chromium revisions stopped appearing under `playwright/builds/chromium/` (see [the playwright registry source](https://github.com/microsoft/playwright/blob/v1.59.1/packages/playwright-core/src/server/registry/index.ts) and [PR #39037](microsoft/playwright#39037) which introduced the change). Closes #1033 ## URL changes (chromium revision `1217`, browserVersion `147.0.7727.15`) ### Upstream (`https://playwright.azureedge.net`) What playwright requests from `PLAYWRIGHT_DOWNLOAD_HOST`: | Platform | Before (playwright ≤ 1.58.0) | After (playwright ≥ 1.58.1) | | --- | --- | --- | | `mac-x64` | https://playwright.azureedge.net/builds/chromium/1217/chromium-mac.zip | https://playwright.azureedge.net/builds/cft/147.0.7727.15/mac-x64/chrome-mac-x64.zip | | `mac-arm64` | https://playwright.azureedge.net/builds/chromium/1217/chromium-mac-arm64.zip | https://playwright.azureedge.net/builds/cft/147.0.7727.15/mac-arm64/chrome-mac-arm64.zip | | `win64` | https://playwright.azureedge.net/builds/chromium/1217/chromium-win64.zip | https://playwright.azureedge.net/builds/cft/147.0.7727.15/win64/chrome-win64.zip | | `ubuntu/debian x64` | https://playwright.azureedge.net/builds/chromium/1217/chromium-linux.zip | https://playwright.azureedge.net/builds/cft/147.0.7727.15/linux64/chrome-linux64.zip | | `ubuntu/debian arm64` | https://playwright.azureedge.net/builds/chromium/1217/chromium-linux-arm64.zip | https://playwright.azureedge.net/builds/chromium/1217/chromium-linux-arm64.zip *(unchanged)* | ### Mirror (`https://cdn.npmmirror.com/binaries/playwright`) What cnpmcore exposes — these are the URLs a playwright client hits after setting `PLAYWRIGHT_DOWNLOAD_HOST=https://cdn.npmmirror.com/binaries/playwright`: | Platform | Before this PR | After this PR | | --- | --- | --- | | `mac-x64` | ❌ not mirrored at the path playwright requests | ✅ https://cdn.npmmirror.com/binaries/playwright/builds/cft/147.0.7727.15/mac-x64/chrome-mac-x64.zip | | `mac-arm64` | ❌ not mirrored at the path playwright requests | ✅ https://cdn.npmmirror.com/binaries/playwright/builds/cft/147.0.7727.15/mac-arm64/chrome-mac-arm64.zip | | `win64` | ❌ not mirrored at the path playwright requests | ✅ https://cdn.npmmirror.com/binaries/playwright/builds/cft/147.0.7727.15/win64/chrome-win64.zip | | `ubuntu/debian x64` | ❌ not mirrored at the path playwright requests | ✅ https://cdn.npmmirror.com/binaries/playwright/builds/cft/147.0.7727.15/linux64/chrome-linux64.zip | | `ubuntu/debian arm64` | ✅ https://cdn.npmmirror.com/binaries/playwright/builds/chromium/1217/chromium-linux-arm64.zip | ✅ https://cdn.npmmirror.com/binaries/playwright/builds/chromium/1217/chromium-linux-arm64.zip *(unchanged)* | `chromium-headless-shell` files share the same `builds/cft/{browserVersion}/{platform}/` directory, e.g. https://cdn.npmmirror.com/binaries/playwright/builds/cft/147.0.7727.15/mac-arm64/chrome-headless-shell-mac-arm64.zip. `chromium-tip-of-tree` follows the same pattern with its own `browserVersion`. ## Mirror directory tree (before / after) Before — for revision 1217, only the linux-arm64 file existed in the tree, so the chromium directory effectively stalled at the last pre-CFT revision (1200) for most users: ``` https://registry.npmmirror.com/binary.html?path=playwright/builds/chromium/1217/ chromium-linux-arm64.zip chromium-headless-shell-linux-arm64.zip ``` After — chromium directory still gets the linux-arm64 entries, and a new `builds/cft/` tree exposes the CFT downloads: ``` https://registry.npmmirror.com/binary.html?path=playwright/builds/chromium/1217/ chromium-linux-arm64.zip chromium-headless-shell-linux-arm64.zip https://registry.npmmirror.com/binary.html?path=playwright/builds/cft/147.0.7727.15/linux64/ chrome-linux64.zip chrome-headless-shell-linux64.zip https://registry.npmmirror.com/binary.html?path=playwright/builds/cft/147.0.7727.15/mac-x64/ chrome-mac-x64.zip chrome-headless-shell-mac-x64.zip https://registry.npmmirror.com/binary.html?path=playwright/builds/cft/147.0.7727.15/mac-arm64/ chrome-mac-arm64.zip chrome-headless-shell-mac-arm64.zip https://registry.npmmirror.com/binary.html?path=playwright/builds/cft/147.0.7727.15/win64/ chrome-win64.zip chrome-headless-shell-win64.zip ``` ## Changes - `app/common/adapter/binary/PlaywrightBinary.ts` - Introduced a `cft(suffix)` helper and switched `chromium` / `chromium-headless-shell` / `chromium-tip-of-tree` / `chromium-tip-of-tree-headless-shell` entries for mac, win64, and x64 linux platforms to CFT objects. - Added the new `debian13-*` platform keys playwright now ships. - Emit `builds/cft/` as a top-level directory and populate `/builds/cft/{browserVersion}/{platform}/` with deduplicated entries so chromium and chromium-headless-shell share the same version+platform dir. ## Test plan - [x] `npm run test:local test/common/adapter/binary/PlaywrightBinary.test.ts` — 3 tests pass, including a new test asserting `/builds/cft/{browserVersion}/{platform}/` contains `chrome-*.zip` and `chrome-headless-shell-*.zip` with correctly-formed CFT URLs. - [x] `npm run lint` - [x] `npm run typecheck` <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added support for Chrome for Testing (CFT) binary downloads with optimized download structure. * **Tests** * Added comprehensive test coverage validating CFT mirror layout and download URL patterns. * Updated existing tests to reflect new directory organization. <!-- review_stack_entry_start --> [![Review Change Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/cnpm/cnpmcore/pull/1050?utm_source=github_walkthrough&utm_medium=github&utm_campaign=change_stack) <!-- review_stack_entry_end --> <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1 parent f2e685f commit 53d263e

2 files changed

Lines changed: 213 additions & 84 deletions

File tree

app/common/adapter/binary/PlaywrightBinary.ts

Lines changed: 139 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -12,123 +12,134 @@ const DOWNLOAD_HOST = 'https://playwright.azureedge.net/';
1212
const PLAYWRIGHT_DRIVER_ARCHS = ['win32_x64', 'mac-arm64', 'mac', 'linux-arm64', 'linux'];
1313

1414
// https://github.com/microsoft/playwright/blob/main/packages/playwright-core/src/server/registry/index.ts
15+
// CFT entries use Chrome for Testing URLs: builds/cft/{browserVersion}/{suffix}
16+
// (introduced in playwright 1.58.1, see https://github.com/cnpm/cnpmcore/issues/1033)
17+
const cft = (suffix: string) => ({ cft: suffix }) as const;
1518
/* eslint-disable quote-props */
1619
const DOWNLOAD_PATHS = {
1720
chromium: {
1821
'<unknown>': undefined,
1922
'ubuntu18.04-x64': undefined,
20-
'ubuntu20.04-x64': 'builds/chromium/%s/chromium-linux.zip',
21-
'ubuntu22.04-x64': 'builds/chromium/%s/chromium-linux.zip',
22-
'ubuntu24.04-x64': 'builds/chromium/%s/chromium-linux.zip',
23+
'ubuntu20.04-x64': cft('linux64/chrome-linux64.zip'),
24+
'ubuntu22.04-x64': cft('linux64/chrome-linux64.zip'),
25+
'ubuntu24.04-x64': cft('linux64/chrome-linux64.zip'),
2326
'ubuntu18.04-arm64': undefined,
2427
'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
2528
'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
2629
'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
27-
'debian11-x64': 'builds/chromium/%s/chromium-linux.zip',
30+
'debian11-x64': cft('linux64/chrome-linux64.zip'),
2831
'debian11-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
29-
'debian12-x64': 'builds/chromium/%s/chromium-linux.zip',
32+
'debian12-x64': cft('linux64/chrome-linux64.zip'),
3033
'debian12-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
31-
'mac10.13': 'builds/chromium/%s/chromium-mac.zip',
32-
'mac10.14': 'builds/chromium/%s/chromium-mac.zip',
33-
'mac10.15': 'builds/chromium/%s/chromium-mac.zip',
34-
mac11: 'builds/chromium/%s/chromium-mac.zip',
35-
'mac11-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
36-
mac12: 'builds/chromium/%s/chromium-mac.zip',
37-
'mac12-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
38-
mac13: 'builds/chromium/%s/chromium-mac.zip',
39-
'mac13-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
40-
mac14: 'builds/chromium/%s/chromium-mac.zip',
41-
'mac14-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
42-
mac15: 'builds/chromium/%s/chromium-mac.zip',
43-
'mac15-arm64': 'builds/chromium/%s/chromium-mac-arm64.zip',
44-
win64: 'builds/chromium/%s/chromium-win64.zip',
34+
'debian13-x64': cft('linux64/chrome-linux64.zip'),
35+
'debian13-arm64': 'builds/chromium/%s/chromium-linux-arm64.zip',
36+
'mac10.13': cft('mac-x64/chrome-mac-x64.zip'),
37+
'mac10.14': cft('mac-x64/chrome-mac-x64.zip'),
38+
'mac10.15': cft('mac-x64/chrome-mac-x64.zip'),
39+
mac11: cft('mac-x64/chrome-mac-x64.zip'),
40+
'mac11-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
41+
mac12: cft('mac-x64/chrome-mac-x64.zip'),
42+
'mac12-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
43+
mac13: cft('mac-x64/chrome-mac-x64.zip'),
44+
'mac13-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
45+
mac14: cft('mac-x64/chrome-mac-x64.zip'),
46+
'mac14-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
47+
mac15: cft('mac-x64/chrome-mac-x64.zip'),
48+
'mac15-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
49+
win64: cft('win64/chrome-win64.zip'),
4550
},
4651
'chromium-headless-shell': {
4752
'<unknown>': undefined,
4853
'ubuntu18.04-x64': undefined,
49-
'ubuntu20.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
50-
'ubuntu22.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
51-
'ubuntu24.04-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
54+
'ubuntu20.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
55+
'ubuntu22.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
56+
'ubuntu24.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
5257
'ubuntu18.04-arm64': undefined,
5358
'ubuntu20.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
5459
'ubuntu22.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
5560
'ubuntu24.04-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
56-
'debian11-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
61+
'debian11-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
5762
'debian11-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
58-
'debian12-x64': 'builds/chromium/%s/chromium-headless-shell-linux.zip',
63+
'debian12-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
5964
'debian12-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
65+
'debian13-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
66+
'debian13-arm64': 'builds/chromium/%s/chromium-headless-shell-linux-arm64.zip',
6067
'mac10.13': undefined,
6168
'mac10.14': undefined,
6269
'mac10.15': undefined,
63-
mac11: 'builds/chromium/%s/chromium-headless-shell-mac.zip',
64-
'mac11-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
65-
mac12: 'builds/chromium/%s/chromium-headless-shell-mac.zip',
66-
'mac12-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
67-
mac13: 'builds/chromium/%s/chromium-headless-shell-mac.zip',
68-
'mac13-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
69-
mac14: 'builds/chromium/%s/chromium-headless-shell-mac.zip',
70-
'mac14-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
71-
mac15: 'builds/chromium/%s/chromium-headless-shell-mac.zip',
72-
'mac15-arm64': 'builds/chromium/%s/chromium-headless-shell-mac-arm64.zip',
73-
win64: 'builds/chromium/%s/chromium-headless-shell-win64.zip',
70+
mac11: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
71+
'mac11-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
72+
mac12: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
73+
'mac12-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
74+
mac13: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
75+
'mac13-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
76+
mac14: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
77+
'mac14-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
78+
mac15: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
79+
'mac15-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
80+
win64: cft('win64/chrome-headless-shell-win64.zip'),
7481
},
7582
'chromium-tip-of-tree': {
7683
'<unknown>': undefined,
7784
'ubuntu18.04-x64': undefined,
78-
'ubuntu20.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
79-
'ubuntu22.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
80-
'ubuntu24.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
85+
'ubuntu20.04-x64': cft('linux64/chrome-linux64.zip'),
86+
'ubuntu22.04-x64': cft('linux64/chrome-linux64.zip'),
87+
'ubuntu24.04-x64': cft('linux64/chrome-linux64.zip'),
8188
'ubuntu18.04-arm64': undefined,
8289
'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
8390
'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
8491
'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
85-
'debian11-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
92+
'debian11-x64': cft('linux64/chrome-linux64.zip'),
8693
'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
87-
'debian12-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux.zip',
94+
'debian12-x64': cft('linux64/chrome-linux64.zip'),
8895
'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
89-
'mac10.13': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
90-
'mac10.14': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
91-
'mac10.15': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
92-
mac11: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
93-
'mac11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
94-
mac12: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
95-
'mac12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
96-
mac13: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
97-
'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
98-
mac14: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
99-
'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
100-
mac15: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac.zip',
101-
'mac15-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-mac-arm64.zip',
102-
win64: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-win64.zip',
96+
'debian13-x64': cft('linux64/chrome-linux64.zip'),
97+
'debian13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-linux-arm64.zip',
98+
'mac10.13': cft('mac-x64/chrome-mac-x64.zip'),
99+
'mac10.14': cft('mac-x64/chrome-mac-x64.zip'),
100+
'mac10.15': cft('mac-x64/chrome-mac-x64.zip'),
101+
mac11: cft('mac-x64/chrome-mac-x64.zip'),
102+
'mac11-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
103+
mac12: cft('mac-x64/chrome-mac-x64.zip'),
104+
'mac12-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
105+
mac13: cft('mac-x64/chrome-mac-x64.zip'),
106+
'mac13-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
107+
mac14: cft('mac-x64/chrome-mac-x64.zip'),
108+
'mac14-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
109+
mac15: cft('mac-x64/chrome-mac-x64.zip'),
110+
'mac15-arm64': cft('mac-arm64/chrome-mac-arm64.zip'),
111+
win64: cft('win64/chrome-win64.zip'),
103112
},
104113
'chromium-tip-of-tree-headless-shell': {
105114
'<unknown>': undefined,
106115
'ubuntu18.04-x64': undefined,
107-
'ubuntu20.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
108-
'ubuntu22.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
109-
'ubuntu24.04-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
116+
'ubuntu20.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
117+
'ubuntu22.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
118+
'ubuntu24.04-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
110119
'ubuntu18.04-arm64': undefined,
111120
'ubuntu20.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
112121
'ubuntu22.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
113122
'ubuntu24.04-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
114-
'debian11-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
123+
'debian11-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
115124
'debian11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
116-
'debian12-x64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux.zip',
125+
'debian12-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
117126
'debian12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
127+
'debian13-x64': cft('linux64/chrome-headless-shell-linux64.zip'),
128+
'debian13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-linux-arm64.zip',
118129
'mac10.13': undefined,
119130
'mac10.14': undefined,
120131
'mac10.15': undefined,
121-
mac11: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
122-
'mac11-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
123-
mac12: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
124-
'mac12-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
125-
mac13: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
126-
'mac13-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
127-
mac14: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
128-
'mac14-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
129-
mac15: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac.zip',
130-
'mac15-arm64': 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-mac-arm64.zip',
131-
win64: 'builds/chromium-tip-of-tree/%s/chromium-tip-of-tree-headless-shell-win64.zip',
132+
mac11: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
133+
'mac11-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
134+
mac12: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
135+
'mac12-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
136+
mac13: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
137+
'mac13-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
138+
mac14: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
139+
'mac14-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
140+
mac15: cft('mac-x64/chrome-headless-shell-mac-x64.zip'),
141+
'mac15-arm64': cft('mac-arm64/chrome-headless-shell-mac-arm64.zip'),
142+
win64: cft('win64/chrome-headless-shell-win64.zip'),
132143
},
133144
firefox: {
134145
'<unknown>': undefined,
@@ -338,6 +349,15 @@ export class PlaywrightBinary extends AbstractBinary {
338349
size: '-',
339350
date: nowDateISO,
340351
});
352+
// builds/cft/ holds Chrome for Testing downloads
353+
// (Playwright 1.58.1+ moved chromium downloads to builds/cft/{browserVersion}/{platform}/)
354+
buildDirs.push({
355+
name: 'cft/',
356+
isDir: true,
357+
url: '',
358+
size: '-',
359+
date: nowDateISO,
360+
});
341361
this.dirItems = {
342362
'/': [
343363
{
@@ -349,6 +369,7 @@ export class PlaywrightBinary extends AbstractBinary {
349369
},
350370
],
351371
'/builds/': buildDirs,
372+
'/builds/cft/': [],
352373
};
353374
for (const browserName of Object.keys(DOWNLOAD_PATHS)) {
354375
if (browserName === 'chromium-headless-shell' || browserName === 'chromium-tip-of-tree-headless-shell') {
@@ -467,21 +488,56 @@ export class PlaywrightBinary extends AbstractBinary {
467488
browserDirname = 'chromium-tip-of-tree';
468489
}
469490
for (const [platform, remotePath] of Object.entries(downloadPaths)) {
470-
if (typeof remotePath !== 'string') continue;
491+
if (!remotePath) continue;
471492
const revision = browser.revisionOverrides?.[platform] ?? browser.revision;
472493
const itemDate = browser.browserVersion || revision;
473-
const url = DOWNLOAD_HOST + util.format(remotePath, revision);
474-
const name = path.basename(remotePath);
475-
const dir = `/builds/${browserDirname}/${revision}/`;
476-
if (!this.dirItems[dir]) {
477-
this.dirItems[`/builds/${browserDirname}/`].push({
478-
name: `${revision}/`,
479-
isDir: true,
480-
url: '',
481-
size: '-',
482-
date: revision,
483-
});
484-
this.dirItems[dir] = [];
494+
let url: string;
495+
let name: string;
496+
let dir: string;
497+
if (typeof remotePath === 'string') {
498+
url = DOWNLOAD_HOST + util.format(remotePath, revision);
499+
name = path.basename(remotePath);
500+
dir = `/builds/${browserDirname}/${revision}/`;
501+
if (!this.dirItems[dir]) {
502+
this.dirItems[`/builds/${browserDirname}/`].push({
503+
name: `${revision}/`,
504+
isDir: true,
505+
url: '',
506+
size: '-',
507+
date: revision,
508+
});
509+
this.dirItems[dir] = [];
510+
}
511+
} else {
512+
if (!browser.browserVersion) continue;
513+
const cftSuffix = remotePath.cft;
514+
url = `${DOWNLOAD_HOST}builds/cft/${browser.browserVersion}/${cftSuffix}`;
515+
name = path.basename(cftSuffix);
516+
const platformDir = path.dirname(cftSuffix);
517+
const versionDir = `/builds/cft/${browser.browserVersion}/`;
518+
dir = `${versionDir}${platformDir}/`;
519+
if (!this.dirItems[versionDir]) {
520+
this.dirItems['/builds/cft/'].push({
521+
name: `${browser.browserVersion}/`,
522+
isDir: true,
523+
url: '',
524+
size: '-',
525+
date: browser.browserVersion,
526+
});
527+
this.dirItems[versionDir] = [];
528+
}
529+
if (!this.dirItems[versionDir].some((item) => item.name === `${platformDir}/`)) {
530+
this.dirItems[versionDir].push({
531+
name: `${platformDir}/`,
532+
isDir: true,
533+
url: '',
534+
size: '-',
535+
date: browser.browserVersion,
536+
});
537+
}
538+
if (!this.dirItems[dir]) {
539+
this.dirItems[dir] = [];
540+
}
485541
}
486542
if (!this.dirItems[dir].some((item) => item.name === name)) {
487543
this.dirItems[dir].push({

0 commit comments

Comments
 (0)