Skip to content

Commit 000e450

Browse files
committed
[build] Use latest Chrome stable milestone for pinned browsers too
1 parent e907606 commit 000e450

2 files changed

Lines changed: 10 additions & 35 deletions

File tree

scripts/chrome_version.py

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,19 @@
99

1010
LAST_KNOWN_GOOD = "https://googlechromelabs.github.io/chrome-for-testing/last-known-good-versions.json"
1111
KNOWN_GOOD_WITH_DOWNLOADS = "https://googlechromelabs.github.io/chrome-for-testing/known-good-versions-with-downloads.json"
12-
RELEASES = "https://chromiumdash.appspot.com/fetch_releases"
1312

14-
# Consumer channel rolls out per-platform; these are the platforms we pin binaries for.
15-
PINNED_PLATFORMS = ("Mac", "Linux")
1613

14+
def latest_for_channel(channel):
15+
"""Return the newest Chrome-for-Testing version entry (version + downloads) for a channel.
1716
18-
def chrome_for_milestone(milestone):
19-
"""Return the newest Chrome-for-Testing version entry (version + downloads) for a milestone."""
17+
Uses Chrome-for-Testing's channel designation (e.g. "Stable", "Beta"), which tracks the
18+
latest milestone and is unaffected by N-1 security respins.
19+
"""
20+
r = http.request("GET", LAST_KNOWN_GOOD)
21+
milestone = json.loads(r.data)["channels"][channel]["version"].split(".")[0]
2022
r = http.request("GET", KNOWN_GOOD_WITH_DOWNLOADS)
2123
versions = json.loads(r.data)["versions"]
2224
return sorted(
2325
filter(lambda v: v["version"].split(".")[0] == str(milestone), versions),
2426
key=lambda v: parse(v["version"]),
2527
)[-1]
26-
27-
28-
def latest_for_channel(channel):
29-
"""Newest version Chrome-for-Testing designates for a channel (e.g. "Stable", "Beta").
30-
31-
Adopts a new milestone as soon as its binaries ship, without waiting for consumer rollout.
32-
"""
33-
r = http.request("GET", LAST_KNOWN_GOOD)
34-
milestone = json.loads(r.data)["channels"][channel]["version"].split(".")[0]
35-
return chrome_for_milestone(milestone)
36-
37-
38-
def conservative_for_channel(channel):
39-
"""Newest milestone that has reached the consumer channel on every pinned platform.
40-
41-
Per-platform we take the highest milestone seen (respin-immune: an N-1 security respin
42-
can't hide that the platform also has N), then the lowest across platforms so a staggered
43-
rollout steps back to N-1 until every platform has N.
44-
"""
45-
milestones = []
46-
for platform in PINNED_PLATFORMS:
47-
r = http.request("GET", f"{RELEASES}?channel={channel}&num=20&platform={platform}")
48-
seen = [release["milestone"] for release in json.loads(r.data) if release["milestone"]]
49-
if not seen:
50-
raise ValueError(f"No {channel} milestone found for platform '{platform}'")
51-
milestones.append(max(seen))
52-
return chrome_for_milestone(min(milestones))

scripts/pinned_browsers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from pathlib import Path
88

99
import urllib3
10-
from chrome_version import conservative_for_channel
10+
from chrome_version import latest_for_channel
1111
from packaging.version import parse
1212

1313
# Find the current stable versions of each browser we
@@ -533,12 +533,12 @@ def pin_browsers():
533533
content = content + edge_and_edgedriver()
534534

535535
# Stable Chrome
536-
stable_chrome_info = conservative_for_channel("Stable")
536+
stable_chrome_info = latest_for_channel("Stable")
537537
content = content + chrome(stable_chrome_info, workspace_prefix="")
538538
content = content + chromedriver(stable_chrome_info, workspace_prefix="")
539539

540540
# Beta Chrome
541-
beta_chrome_info = conservative_for_channel("Beta")
541+
beta_chrome_info = latest_for_channel("Beta")
542542
content = content + chrome(beta_chrome_info, workspace_prefix="beta_")
543543
content = content + chromedriver(beta_chrome_info, workspace_prefix="beta_")
544544

0 commit comments

Comments
 (0)