mirror of
https://github.com/zulip/zulip.git
synced 2025-10-24 00:23:49 +00:00
This reduces confusion amount users when they download the intel version and it works super slow. Downloading the arm64 version on an intel mac would just not work. Users who use intel macs have a habit now (atleast me) to look for `Intel` version of software when downloading an app. So, made `Intel` bold to help that process.
64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
import json
|
|
import logging
|
|
from typing import Any
|
|
|
|
import requests
|
|
|
|
from zerver.lib.cache import cache_with_key
|
|
from zerver.lib.outgoing_http import OutgoingSession
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class GithubSession(OutgoingSession):
|
|
def __init__(self, **kwargs: Any) -> None:
|
|
super().__init__(role="github", timeout=5, **kwargs)
|
|
|
|
|
|
def get_latest_github_release_version_for_repo(repo: str) -> str:
|
|
api_url = f"https://api.github.com/repos/zulip/{repo}/releases/latest"
|
|
try:
|
|
return GithubSession().get(api_url).json()["tag_name"]
|
|
except (requests.RequestException, json.JSONDecodeError, KeyError):
|
|
logger.exception(
|
|
"Unable to fetch the latest release version from GitHub %s", api_url, stack_info=True
|
|
)
|
|
return ""
|
|
|
|
|
|
def verify_release_download_link(link: str) -> bool:
|
|
try:
|
|
GithubSession().head(link).raise_for_status()
|
|
return True
|
|
except requests.RequestException:
|
|
logger.error("App download link is broken %s", link)
|
|
return False
|
|
|
|
|
|
PLATFORM_TO_SETUP_FILE = {
|
|
"linux": "Zulip-{version}-x86_64.AppImage",
|
|
"mac": "Zulip-{version}-arm64.dmg",
|
|
"mac-intel": "Zulip-{version}-x64.dmg",
|
|
"mac-arm64": "Zulip-{version}-arm64.dmg",
|
|
"windows": "Zulip-Web-Setup-{version}.exe",
|
|
}
|
|
|
|
|
|
class InvalidPlatformError(Exception):
|
|
pass
|
|
|
|
|
|
@cache_with_key(lambda platform: f"download_link:{platform}", timeout=60 * 30)
|
|
def get_latest_github_release_download_link_for_platform(platform: str) -> str:
|
|
if platform not in PLATFORM_TO_SETUP_FILE:
|
|
raise InvalidPlatformError
|
|
|
|
latest_version = get_latest_github_release_version_for_repo("zulip-desktop")
|
|
if latest_version:
|
|
latest_version = latest_version.removeprefix("v")
|
|
setup_file = PLATFORM_TO_SETUP_FILE[platform].format(version=latest_version)
|
|
link = f"https://desktop-download.zulip.com/v{latest_version}/{setup_file}"
|
|
if verify_release_download_link(link):
|
|
return link
|
|
return "https://github.com/zulip/zulip-desktop/releases/latest"
|