|
1 | 1 | import ast
|
2 |
| -import sys |
| 2 | +import requests |
| 3 | +from packaging.requirements import Requirement |
| 4 | +from packaging.version import Version |
3 | 5 |
|
4 | 6 |
|
5 | 7 | def fetch_dependencies_from_setup(file_path):
|
6 | 8 | with open(file_path, "r") as file:
|
7 | 9 | tree = ast.parse(file.read(), filename=file_path)
|
8 | 10 |
|
9 | 11 | dependencies = []
|
10 |
| - |
11 | 12 | for node in ast.walk(tree):
|
12 | 13 | if isinstance(node, ast.Call) and getattr(node.func, "id", None) == "setup":
|
13 | 14 | for keyword in node.keywords:
|
14 | 15 | if keyword.arg == "install_requires":
|
15 | 16 | dependencies = [elt.s for elt in keyword.value.elts]
|
16 | 17 | break
|
17 |
| - |
18 | 18 | return dependencies
|
19 | 19 |
|
20 | 20 |
|
21 |
| -# Path to the setup.py file of azure-ai-ml |
22 |
| -setup_file_path = "sdk/ml/azure-ai-ml/setup.py" |
23 |
| - |
24 |
| -# Fetch dependencies |
25 |
| -deps_list = fetch_dependencies_from_setup(setup_file_path) |
26 |
| - |
27 |
| -print("Dependencies of azure-sdk-for-python repo from setup.py of azure-ai-ml:") |
28 |
| -print(deps_list) |
29 |
| - |
30 |
| -from packaging.requirements import Requirement |
31 |
| - |
32 |
| -deps = [Requirement(line) for line in deps_list if line.strip() and not line.strip().startswith("#")] |
33 |
| -import requests |
34 |
| - |
35 |
| - |
36 | 21 | def list_versions(package_name):
|
37 | 22 | url = f"https://pypi.org/pypi/{package_name}/json"
|
38 | 23 | response = requests.get(url)
|
39 | 24 | data = response.json()
|
40 | 25 | versions = data["releases"].keys()
|
41 |
| - version_array = [] |
42 |
| - for version in versions: |
43 |
| - version_array.append(version.split(".")[0]) |
44 |
| - return sorted(version_array, key=int, reverse=True) |
45 |
| - |
46 |
| - |
47 |
| -from packaging.version import Version |
| 26 | + return sorted(versions, key=Version, reverse=True) |
48 | 27 |
|
49 | 28 |
|
50 | 29 | def is_major_update(previous, latest):
|
51 | 30 | return Version(latest).major > Version(previous).major
|
52 | 31 |
|
53 | 32 |
|
54 | 33 | def check_for_major_updates():
|
55 |
| - major_updates = [] |
56 |
| - for dep in deps: |
57 |
| - all_version = list_versions(dep.name) |
58 |
| - if len(all_version) > 1 and is_major_update(all_version[1], all_version[0]): |
59 |
| - major_updates.append( |
60 |
| - f"Current config of `{dep}` and major version updated from {dep.name}: {all_version[1]} → {all_version[0]}" |
61 |
| - ) |
62 |
| - if major_updates: |
63 |
| - # body = "\n".join(major_updates) # Uncomment this line if you want to send an email or notification |
64 |
| - print("Major Dependency Updates Found:") |
65 |
| - print(major_updates) |
66 |
| - sys.exit(1) |
67 |
| - else: |
68 |
| - print("No major updates found.") |
| 34 | + setup_file_path = "sdk/ml/azure-ai-ml/setup.py" |
| 35 | + deps_list = fetch_dependencies_from_setup(setup_file_path) |
| 36 | + deps = [Requirement(line) for line in deps_list if line.strip() and not line.strip().startswith("#")] |
| 37 | + |
| 38 | + with open("updates.txt", "w") as f: |
| 39 | + for dep in deps: |
| 40 | + all_versions = list_versions(dep.name) |
| 41 | + if len(all_versions) > 1 and is_major_update(all_versions[1], all_versions[0]): |
| 42 | + f.write(f"{dep.name} {all_versions[0]}\n") |
69 | 43 |
|
70 | 44 |
|
71 | 45 | check_for_major_updates()
|
0 commit comments