| #!/usr/bin/env python3 |
| |
| """ |
| A script that takes in a maven coordinate of an androidx library, such as |
| androidx.collection:collection:1.5.0 and returns two links, one to the build page and another to the |
| source tree at the state of the release. |
| """ |
| |
| import sys |
| import requests |
| |
| def get_artifact_links(coordinate): |
| try: |
| group, artifact, version = coordinate.split(':') |
| |
| # 1. Get Module Metadata URL and fetch JSON |
| base_url = "https://dl.google.com/android/maven2" |
| module_url = f"{base_url}/{group.replace('.', '/')}/{artifact}/{version}/{artifact}-{version}.module" |
| module_data = requests.get(module_url).json() |
| |
| # 2. Extract buildId |
| # Note: Uses .get() to handle potential 'buildId' vs 'buildId:' variations |
| gradle_metadata = module_data.get('createdBy', {}).get('gradle', {}) |
| build_id = gradle_metadata.get('buildId') or gradle_metadata.get('buildId:') |
| |
| if not build_id: |
| print(f"Error: Could not find buildId for {coordinate}. Only relatively new AndroidX artifact embed build id.") |
| return |
| |
| build_link = f"https://ci.android.com/builds/submitted/{build_id}/androidx/latest" |
| |
| # 3. Fetch BUILD_INFO and extract SHA |
| build_info_url = f"{build_link}/raw/BUILD_INFO" |
| build_info = requests.get(build_info_url).json() |
| sha = build_info.get('repo-dict', {}).get('platform/frameworks/support') |
| |
| if not sha: |
| print(f"Build Link: {build_link}") |
| print("Error: Could not find platform/frameworks/support SHA") |
| return |
| |
| source_link = f"https://cs.android.com/androidx/platform/frameworks/support/+/{sha}:" |
| |
| print(f"Build Page: {build_link}") |
| print(f"Source Tree: {source_link}") |
| |
| except Exception as e: |
| print(f"An error occurred: {e}") |
| |
| if __name__ == "__main__": |
| if len(sys.argv) > 1: |
| get_artifact_links(sys.argv[1]) |
| else: |
| print("Usage: get_release_information.py <maven_coordinate>") |