@@ -90,6 +90,55 @@ def download_file_from_url(
9090 return False
9191
9292
93+ def get_release_interval_info (
94+ start_ver : str , end_ver : str , should_be_pre_release : bool , timeout : int = 30
95+ ) -> dict [str , dict [str , Any ]]:
96+ """
97+ Get release information from GitHub API.
98+
99+ Get release version information from all the versions starting in start_ver (exclusive) to end_ver (inclusive).
100+
101+ Args:
102+ start_ver (str): The starting version (exclusive) for the search.
103+ end_ver (str): The ending version (inclusive) for the search.
104+ should_be_pre_release (bool): Whether the releases should be pre-releases.
105+ timeout (int): Request timeout in seconds
106+
107+ Returns:
108+ Release information dictionary
109+
110+ """
111+ releases_info = {}
112+
113+ try :
114+ url = urljoin (GITHUB_API_URL_RELEASES , "tags" )
115+ response = requests_get (url , timeout = timeout )
116+ response .raise_for_status ()
117+
118+ releases = response .json ()
119+
120+ for release in releases :
121+ tag_name = release .get ("tag_name" , "" ).lstrip ("v" ) # Remove the 'v' prefix if it exists
122+
123+ # Check if the tag name is within the specified range
124+ if start_ver < tag_name <= end_ver :
125+ if should_be_pre_release != release .get ("prerelease" , False ):
126+ continue # Skip if release doesn't match pre-release requirement
127+
128+ releases_info [tag_name ] = {
129+ "id" : release ["id" ],
130+ "name" : release ["name" ],
131+ "published_at" : release ["published_at" ],
132+ "prerelease" : release ["prerelease" ],
133+ }
134+
135+ except requests_RequestException as e :
136+ logging_error (_ ("Failed to fetch releases: {}" ).format (e ))
137+ raise
138+
139+ return releases_info
140+
141+
93142def get_release_info (name : str , should_be_pre_release : bool , timeout : int = 30 ) -> dict [str , Any ]:
94143 """
95144 Get release information from GitHub API.
0 commit comments