-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathupdate_node_version.py
More file actions
53 lines (43 loc) · 1.95 KB
/
Copy pathupdate_node_version.py
File metadata and controls
53 lines (43 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python3
# Copyright (c) Microsoft Corporation.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Pin NODE_VERSION to the latest Node.js LTS.
A Python port of upstream's utils/build/update-playwright-node.mjs: fetch the
Node.js release index and take the most recent LTS release, which is the Node.js
version Playwright bundles. Run this during a roll, alongside bumping
DRIVER_VERSION. (Unlike upstream we don't touch Dockerfiles — the
playwright-python images don't pin a Node.js version; the bundled driver carries
its own Node.js.)
"""
import json
import urllib.request
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parent.parent
NODE_INDEX_URL = "https://nodejs.org/dist/index.json"
def latest_lts_version() -> str:
with urllib.request.urlopen(NODE_INDEX_URL) as response: # noqa: S310
releases = json.load(response)
# The index is ordered newest-first; each release's "lts" field is false for
# non-LTS lines and the LTS codename otherwise. The first truthy one is the
# latest LTS release, e.g. {"version": "v24.16.0", "lts": "Krypton"}.
for release in releases:
if release.get("lts"):
return str(release["version"]).lstrip("v")
raise SystemExit("No LTS release found in the Node.js release index")
def main() -> None:
version = latest_lts_version()
(REPO_ROOT / "NODE_VERSION").write_text(version + "\n")
print(f"NODE_VERSION set to {version}")
if __name__ == "__main__":
main()