| #!/usr/bin/env python |
| # Copyright 2022 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import argparse |
| import json |
| import os |
| import re |
| import urllib.request |
| |
| _TOOL_NAME = os.path.basename(os.path.dirname(__file__)) |
| |
| |
| def do_latest(): |
| print( |
| json.load( |
| urllib.request.urlopen( |
| "https://api.github.com/repos/bazelbuild/buildtools/releases/latest" |
| ) |
| )["tag_name"] |
| ) |
| |
| |
| _PLATFORMS = { |
| "linux-amd64": "linux-amd64", |
| "linux-arm64": "linux-arm64", |
| "mac-amd64": "darwin-amd64", |
| "mac-arm64": "darwin-arm64", |
| "windows-amd64": "windows-amd64", |
| } |
| |
| _EXTENSION = { |
| "linux": "", |
| "mac": "", |
| "windows": ".zip", |
| } |
| |
| |
| def get_download_url(version, platform): |
| if platform not in _PLATFORMS: |
| raise ValueError("unsupported platform {}".format(platform)) |
| |
| extension = _EXTENSION[platform.split("-")[0]] |
| |
| url = ( |
| "https://github.com/bazelbuild/buildtools/releases/download/{version}/" |
| "{tool_name}-{platform}{extension}".format( |
| tool_name=_TOOL_NAME, |
| version=version, |
| platform=_PLATFORMS[platform], |
| extension=extension, |
| ) |
| ) |
| |
| manifest = { |
| "url": [url], |
| "ext": extension, |
| } |
| |
| print(json.dumps(manifest)) |
| |
| |
| # The following works with Python2 and Python3 as well for local testing. |
| _FUNCTION_MAP = { |
| "latest": lambda: do_latest(), |
| "get_url": lambda: get_download_url( |
| os.environ["_3PP_VERSION"], os.environ["_3PP_PLATFORM"] |
| ), |
| } |
| |
| |
| def main(): |
| ap = argparse.ArgumentParser() |
| ap.add_argument("command", choices=_FUNCTION_MAP.keys()) |
| |
| opts = ap.parse_args() |
| _FUNCTION_MAP[opts.command]() |
| |
| |
| if __name__ == "__main__": |
| main() |