-
Notifications
You must be signed in to change notification settings - Fork 81
Expand file tree
/
Copy pathnodejs_versions.py
More file actions
45 lines (33 loc) · 1.23 KB
/
nodejs_versions.py
File metadata and controls
45 lines (33 loc) · 1.23 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
import datetime
from typing import TypedDict
import requests
todays_date = datetime.datetime.now(datetime.UTC).date().isoformat()
class NodeRelease(TypedDict):
version: str
date: str
files: list[str]
def fetch_node_releases() -> list[NodeRelease]:
"""Fetch official node releases"""
url = "https://nodejs.org/dist/index.json"
res = requests.get(url, timeout=10.0)
res.raise_for_status()
data: list[NodeRelease] = res.json()
return data
def fetch_node_unofficial_releases() -> list[NodeRelease]:
url = "https://unofficial-builds.nodejs.org/download/release/index.json"
res = requests.get(url, timeout=10.0)
res.raise_for_status()
data: list[NodeRelease] = res.json()
return data
class ReleaseScheduleItem(TypedDict):
start: str
lts: str
maintenance: str
end: str
codename: str
def fetch_nodejs_release_schedule() -> dict[str, ReleaseScheduleItem]:
"""Download list of official releases, skipping unreleased and unsupported versions"""
res = requests.get("https://raw.githubusercontent.com/nodejs/Release/master/schedule.json", timeout=10.0)
res.raise_for_status()
release_schedule: dict[str, ReleaseScheduleItem] = res.json()
return release_schedule