idf_tools: Add option to replace all GitHub tools download URLs with dl.espressif.com

Via new IDF_GITHUB_ASSETS environment variable.
This commit is contained in:
Angus Gratton 2020-09-25 09:58:49 +10:00
parent 911f432e82
commit c41d706134
2 changed files with 60 additions and 2 deletions

View File

@ -185,6 +185,33 @@ Linux and macOS
cd ~/esp/esp-idf cd ~/esp/esp-idf
./install.sh ./install.sh
Alternative File Downloads
~~~~~~~~~~~~~~~~~~~~~~~~~~
The tools installer downloads a number of files attached to GitHub Releases. If accessing GitHub is slow then it is possible to set an environment variable to prefer Espressif's download server for GitHub asset downloads.
.. note:: This setting only controls individual tools downloaded from GitHub releases, it doesn't change the URLs used to access any Git repositories.
Windows
-------
To prefer the Espressif download server when running the ESP-IDF Tools Installer or installing tools from the command line, open the System control panel, then click on Advanced Settings. Add a new Environment Variable (of type either User or System) with the name ``IDF_GITHUB_ASSETS`` and value ``dl.espressif.com/github_assets``. Click OK once done.
If the command line window or ESP-IDF Tools Installer window was already open before you added the new environment variable, you will need to close and reopen it.
While this environment variable is still set, the ESP-IDF Tools Installer and the command line installer will prefer the Espressif download server.
Linux and macOS
---------------
To prefer the Espressif download server when installing tools, use the following sequence of commands when running ``install.sh``:
.. code-block:: bash
cd ~/esp/esp-idf
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh
Customizing the tools installation path Customizing the tools installation path
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -1056,6 +1056,11 @@ def action_export(args):
raise SystemExit(1) raise SystemExit(1)
def apply_url_mirrors(args, tool_download_obj):
apply_mirror_prefix_map(args, tool_download_obj)
apply_github_assets_option(tool_download_obj)
def apply_mirror_prefix_map(args, tool_download_obj): def apply_mirror_prefix_map(args, tool_download_obj):
"""Rewrite URL for given tool_obj, given tool_version, and current platform, """Rewrite URL for given tool_obj, given tool_version, and current platform,
if --mirror-prefix-map flag or IDF_MIRROR_PREFIX_MAP environment variable is given. if --mirror-prefix-map flag or IDF_MIRROR_PREFIX_MAP environment variable is given.
@ -1083,6 +1088,32 @@ def apply_mirror_prefix_map(args, tool_download_obj):
break break
def apply_github_assets_option(tool_download_obj):
""" Rewrite URL for given tool_obj if the download URL is an https://github.com/ URL and the variable
IDF_GITHUB_ASSETS is set. The github.com part of the URL will be replaced.
"""
try:
github_assets = os.environ["IDF_GITHUB_ASSETS"].strip()
except KeyError:
return # no IDF_GITHUB_ASSETS
if not github_assets: # variable exists but is empty
return
# check no URL qualifier in the mirror URL
if '://' in github_assets:
fatal("IDF_GITHUB_ASSETS shouldn't include any URL qualifier, https:// is assumed")
raise SystemExit(1)
# Strip any trailing / from the mirror URL
github_assets = github_assets.rstrip('/')
old_url = tool_download_obj.url
new_url = re.sub(r'^https://github.com/', 'https://{}/'.format(github_assets), old_url)
if new_url != old_url:
info('Using GitHub assets mirror for URL: {} => {}'.format(old_url, new_url))
tool_download_obj.url = new_url
def action_download(args): def action_download(args):
tools_info = load_tools_info() tools_info = load_tools_info()
tools_spec = args.tools tools_spec = args.tools
@ -1125,7 +1156,7 @@ def action_download(args):
tool_spec = '{}@{}'.format(tool_name, tool_version) tool_spec = '{}@{}'.format(tool_name, tool_version)
info('Downloading {}'.format(tool_spec)) info('Downloading {}'.format(tool_spec))
apply_mirror_prefix_map(args, tool_obj.versions[tool_version].get_download_for_platform(platform)) apply_url_mirrors(args, tool_obj.versions[tool_version].get_download_for_platform(platform))
tool_obj.download(tool_version) tool_obj.download(tool_version)
@ -1166,7 +1197,7 @@ def action_install(args):
continue continue
info('Installing {}'.format(tool_spec)) info('Installing {}'.format(tool_spec))
apply_mirror_prefix_map(args, tool_obj.versions[tool_version].get_download_for_platform(PYTHON_PLATFORM)) apply_url_mirrors(args, tool_obj.versions[tool_version].get_download_for_platform(PYTHON_PLATFORM))
tool_obj.download(tool_version) tool_obj.download(tool_version)
tool_obj.install(tool_version) tool_obj.install(tool_version)