Skip to content

Commit 03d3d36

Browse files
committed
feat: fetch macOS prebuilt versions and integrate into version update workflow
1 parent 2200dfa commit 03d3d36

3 files changed

Lines changed: 88 additions & 93 deletions

File tree

.github/workflows/update_otp_versions.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ jobs:
2121
cd assets
2222
python -m pip install requests
2323
python get_all_otp_versions.py
24+
python get_macos_prebuilt_versions.py
2425
2526
- name: Push updated version file
2627
run: |

assets/get_all_otp_versions.py

Lines changed: 87 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# prefer use local version file
77
def update_all_version_from_github_api():
88
all_version = []
9-
for page in range(1,10):
9+
for page in range(1, 10):
1010
url = f"https://api.github.com/repos/erlang/otp/tags?per_page=100&sort=pushed&page={page}"
1111
response = requests.get(url)
1212
data = response.json()
@@ -15,7 +15,9 @@ def update_all_version_from_github_api():
1515
print("Failed to fetch data from github api")
1616
return
1717

18-
with open("erlang_otp_versions_from_gtihub_api.json", 'w', encoding="utf-8") as file:
18+
with open(
19+
"erlang_otp_versions_from_gtihub_api.json", "w", encoding="utf-8"
20+
) as file:
1921
json.dump(all_version, file, indent=4)
2022

2123
def get_all_prebuilt_version_from_bob():
@@ -26,16 +28,79 @@ def get_all_prebuilt_version_from_bob():
2628
url = f"https://builds.hex.pm/builds/otp/{release}/builds.txt"
2729
response = requests.get(url)
2830
all_version_info = response.text.split("\n")
29-
31+
3032
all_prebuilt_versions = []
3133
for version in all_version_info:
3234
if version.split(" ")[0]:
3335
all_prebuilt_versions.append(version.split(" ")[0])
3436
return all_prebuilt_versions
3537

38+
def get_macos_prebuilt_versions():
39+
"""Fetch all available macOS prebuilt versions from erlef/otp_builds"""
40+
41+
# GitHub API URL for releases
42+
api_url = "https://api.github.com/repos/erlef/otp_builds/releases"
43+
44+
all_versions = []
45+
page = 1
46+
47+
try:
48+
while True:
49+
print(f"Fetching macOS prebuilt versions page {page}...")
50+
url = f"{api_url}?page={page}&per_page=100"
51+
52+
response = requests.get(url)
53+
if response.status_code != 200:
54+
break
55+
56+
releases = response.json()
57+
if not releases:
58+
break
59+
60+
for release in releases:
61+
tag_name = release["tag_name"]
62+
assets = release["assets"]
63+
64+
# Check if there are macOS related assets
65+
has_macos_assets = False
66+
for asset in assets:
67+
asset_name = asset["name"]
68+
# Check if contains macOS related filename patterns
69+
if any(
70+
pattern in asset_name.lower()
71+
for pattern in [
72+
"macos",
73+
"darwin",
74+
"osx",
75+
"aarch64-apple",
76+
"x86_64-apple",
77+
"arm64.tar.gz",
78+
"amd64.tar.gz",
79+
]
80+
):
81+
has_macos_assets = True
82+
break
83+
84+
if has_macos_assets:
85+
all_versions.append(tag_name)
86+
print(f"Found macOS version: {tag_name}")
87+
88+
page += 1
89+
# Limit maximum pages to avoid infinite loop
90+
if page > 20:
91+
break
92+
93+
except Exception as e:
94+
print(f"Error fetching macOS prebuilt data: {e}")
95+
return []
96+
97+
return all_versions
98+
3699
def get_all_version():
37100
version_set = set()
38-
with open("erlang_otp_versions_from_gtihub_api.json", 'r', encoding="utf-8") as file:
101+
with open(
102+
"erlang_otp_versions_from_gtihub_api.json", "r", encoding="utf-8"
103+
) as file:
39104
data = json.load(file)
40105
for item in data:
41106
if "OTP-" not in item["tarball_url"]:
@@ -49,11 +114,25 @@ def get_all_version():
49114
versions = list(get_all_version())
50115
versions.sort(reverse=True)
51116
# print(versions)
52-
with open("versions.txt", 'w') as file:
117+
with open("versions.txt", "w") as file:
53118
for version in versions:
54-
file.write(version + '\n')
55-
with open("prebuilt_versions.txt", 'w') as file:
119+
file.write(version + "\n")
120+
121+
# Generate prebuilt versions for Linux
122+
with open("prebuilt_versions.txt", "w") as file:
56123
prebuilt_versions = get_all_prebuilt_version_from_bob()
57124
prebuilt_versions.sort(reverse=True)
58125
for version in prebuilt_versions:
59-
file.write(version + '\n')
126+
file.write(version + "\n")
127+
128+
# Generate prebuilt versions for macOS
129+
print("\nFetching macOS prebuilt versions...")
130+
macos_versions = get_macos_prebuilt_versions()
131+
if macos_versions:
132+
macos_versions.sort(reverse=True)
133+
with open("macos_prebuilt_versions.txt", "w", encoding="utf-8") as file:
134+
for version in macos_versions:
135+
file.write(version + "\n")
136+
print(f"Found {len(macos_versions)} macOS prebuilt versions, saved to macos_prebuilt_versions.txt")
137+
else:
138+
print("No macOS prebuilt versions found.")

assets/get_macos_prebuilt_versions.py

Lines changed: 0 additions & 85 deletions
This file was deleted.

0 commit comments

Comments
 (0)