|
31 | 31 | if 'tag_name' not in data: |
32 | 32 | raise ValueError("tag_name not present in latest_url") |
33 | 33 |
|
| 34 | +import urllib.request |
| 35 | +import json |
| 36 | +import semver |
| 37 | + |
| 38 | +def get_latest_v2_prerelease_tag_name(repo_owner, repo_name): |
| 39 | + """ |
| 40 | + Fetches the latest v2 prerelease tag_name from a GitHub repository's releases. |
| 41 | +
|
| 42 | + Args: |
| 43 | + repo_owner (str): The owner of the GitHub repository (e.g., 'syncthing'). |
| 44 | + repo_name (str): The name of the GitHub repository (e.g., 'syncthing'). |
| 45 | +
|
| 46 | + Returns: |
| 47 | + str or None: The tag_name of the latest v2 prerelease, or None if not found. |
| 48 | + """ |
| 49 | + url = f"https://api.github.com/repos/{repo_owner}/{repo_name}/releases" |
| 50 | + try: |
| 51 | + with urllib.request.urlopen(url) as response: |
| 52 | + if response.getcode() == 200: |
| 53 | + data = json.loads(response.read().decode('utf-8')) |
| 54 | + else: |
| 55 | + print(f"Error fetching data: HTTP {response.getcode()}") |
| 56 | + return None |
| 57 | + except urllib.error.URLError as e: |
| 58 | + print(f"Error connecting to GitHub API: {e.reason}") |
| 59 | + return None |
| 60 | + except json.JSONDecodeError: |
| 61 | + print("Error decoding JSON response.") |
| 62 | + return None |
| 63 | + |
| 64 | + v2_prereleases = [] |
| 65 | + for release in data: |
| 66 | + tag_name = release.get('tag_name') |
| 67 | + prerelease = release.get('prerelease') |
| 68 | + |
| 69 | + if tag_name and prerelease: |
| 70 | + try: |
| 71 | + version = semver.Version.parse(tag_name.lstrip('v')) # Remove 'v' prefix if present |
| 72 | + if version.major == 2 and version.prerelease: |
| 73 | + v2_prereleases.append(version) |
| 74 | + except ValueError: |
| 75 | + # Not a valid semver string, skip |
| 76 | + continue |
| 77 | + |
| 78 | + if not v2_prereleases: |
| 79 | + return None |
| 80 | + |
| 81 | + # Sort the prereleases to find the latest |
| 82 | + latest_v2_prerelease = max(v2_prereleases) |
| 83 | + return f"v{latest_v2_prerelease}" # Re-add the 'v' prefix for consistency |
| 84 | + |
34 | 85 | ### |
35 | 86 | # Parse the tag version and generate CFBundleShortVersionString and CFBundleVersion |
36 | 87 | ### |
| 88 | +owner = "syncthing" |
| 89 | +repo = "syncthing" |
| 90 | +latest_tag = get_latest_v2_prerelease_tag_name(owner, repo) |
| 91 | + |
| 92 | +if latest_tag: |
| 93 | + print(f"The latest v2 prerelease tag_name for {owner}/{repo} is: {latest_tag}") |
| 94 | +else: |
| 95 | + print(f"No v2 prerelease found for {owner}/{repo}.") |
37 | 96 |
|
38 | 97 | # Ugly hack because of https://github.com/python-semver/python-semver/issues/137 |
39 | | -tag_name = data['tag_name'].replace('v', '') |
| 98 | +tag_name = latest_tag.replace('v', '') |
40 | 99 | version = semver.VersionInfo.parse(tag_name) |
41 | 100 |
|
42 | | -CFBundleShortVersionString = "{}-{:d}".format( |
| 101 | +CFBundleShortVersionString = "{}+{:d}".format( |
43 | 102 | str(version), |
44 | 103 | distVersion) |
45 | 104 | CFBundleVersion = "{:d}{:03d}{:03d}{:02d}".format( |
|
0 commit comments