66# prefer use local version file
77def 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
2123def 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+
3699def 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 ("\n Fetching 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." )
0 commit comments