| """This module provides the gcs_mirror_url macro.""" |
| |
| # Set to True to force the macro to only return the mirror URL. |
| _TEST_GCS_MIRROR = False |
| |
| # Must be kept in sync with the suffixes supported by gcs_mirror (e.g. |
| # https://skia.googlesource.com/skia/+/8ad66c2340713234df6b249e793415233337a103/bazel/gcs_mirror/gcs_mirror.go#140). |
| _SUPPORTED_SUFFIXES = [".tar.gz", ".tgz", ".tar.xz", ".deb", ".zip"] |
| |
| _GCS_MIRROR_PREFIX = "https://storage.googleapis.com/skia-world-readable/bazel" |
| |
| def gcs_mirror_url(url, sha256): |
| """Takes the URL of an external resource and computes its GCS mirror URL. |
| |
| We store backup copies of external resources in the skia-world-readable GCS bucket. This macro |
| returns a list with two elements: the original URL, and the mirrored URL. |
| |
| Files are expected to be in the mirror location named after their sha256 hash. The files should |
| still have their file extension, as some of the Starlark functions sniff the file extension |
| (e.g. download_and_extract). See //bazel/gcs_mirror for an automated way to update this mirror. |
| |
| To mirror a new URL, please use the `gcs_mirror` utility found at |
| https://skia.googlesource.com/skia/+/8ad66c2340713234df6b249e793415233337a103/bazel/gcs_mirror/gcs_mirror.go. |
| |
| Args: |
| url: URL of the mirrored resource. |
| sha256: SHA256 hash of the mirrored resource. |
| Returns: |
| A list of the form [original URL, mirror URL]. |
| """ |
| extension = "" |
| for suffix in _SUPPORTED_SUFFIXES: |
| if url.endswith(suffix): |
| extension = suffix |
| break |
| if extension == "": |
| fail("URL %s has an unsupported suffix." % url) |
| |
| mirror_url = "%s/%s%s" % (_GCS_MIRROR_PREFIX, sha256, extension) |
| return [mirror_url] if _TEST_GCS_MIRROR else [url, mirror_url] |
| |
| def gcs_mirror_only(sha256, suffix): |
| if suffix not in _SUPPORTED_SUFFIXES: |
| fail("unsupported suffix %s" % suffix) |
| return "%s/%s%s" % (_GCS_MIRROR_PREFIX, sha256, suffix) |