1*c8dee2aaSAndroid Build Coastguard Worker"""This module provides the gcs_mirror_url macro.""" 2*c8dee2aaSAndroid Build Coastguard Worker 3*c8dee2aaSAndroid Build Coastguard Worker# Set to True to force the macro to only return the mirror URL. 4*c8dee2aaSAndroid Build Coastguard Worker_TEST_GCS_MIRROR = False 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard Worker# Must be kept in sync with the suffixes supported by gcs_mirror (e.g. 7*c8dee2aaSAndroid Build Coastguard Worker# https://skia.googlesource.com/skia/+/8ad66c2340713234df6b249e793415233337a103/bazel/gcs_mirror/gcs_mirror.go#140). 8*c8dee2aaSAndroid Build Coastguard Worker_SUPPORTED_SUFFIXES = [".tar.gz", ".tgz", ".tar.xz", ".deb", ".zip"] 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker_GCS_MIRROR_PREFIX = "https://storage.googleapis.com/skia-world-readable/bazel" 11*c8dee2aaSAndroid Build Coastguard Worker 12*c8dee2aaSAndroid Build Coastguard Workerdef gcs_mirror_url(url, sha256): 13*c8dee2aaSAndroid Build Coastguard Worker """Takes the URL of an external resource and computes its GCS mirror URL. 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker We store backup copies of external resources in the skia-world-readable GCS bucket. This macro 16*c8dee2aaSAndroid Build Coastguard Worker returns a list with two elements: the original URL, and the mirrored URL. 17*c8dee2aaSAndroid Build Coastguard Worker 18*c8dee2aaSAndroid Build Coastguard Worker Files are expected to be in the mirror location named after their sha256 hash. The files should 19*c8dee2aaSAndroid Build Coastguard Worker still have their file extension, as some of the Starlark functions sniff the file extension 20*c8dee2aaSAndroid Build Coastguard Worker (e.g. download_and_extract). See //bazel/gcs_mirror for an automated way to update this mirror. 21*c8dee2aaSAndroid Build Coastguard Worker 22*c8dee2aaSAndroid Build Coastguard Worker To mirror a new URL, please use the `gcs_mirror` utility found at 23*c8dee2aaSAndroid Build Coastguard Worker https://skia.googlesource.com/skia/+/8ad66c2340713234df6b249e793415233337a103/bazel/gcs_mirror/gcs_mirror.go. 24*c8dee2aaSAndroid Build Coastguard Worker 25*c8dee2aaSAndroid Build Coastguard Worker Args: 26*c8dee2aaSAndroid Build Coastguard Worker url: URL of the mirrored resource. 27*c8dee2aaSAndroid Build Coastguard Worker sha256: SHA256 hash of the mirrored resource. 28*c8dee2aaSAndroid Build Coastguard Worker Returns: 29*c8dee2aaSAndroid Build Coastguard Worker A list of the form [original URL, mirror URL]. 30*c8dee2aaSAndroid Build Coastguard Worker """ 31*c8dee2aaSAndroid Build Coastguard Worker extension = "" 32*c8dee2aaSAndroid Build Coastguard Worker for suffix in _SUPPORTED_SUFFIXES: 33*c8dee2aaSAndroid Build Coastguard Worker if url.endswith(suffix): 34*c8dee2aaSAndroid Build Coastguard Worker extension = suffix 35*c8dee2aaSAndroid Build Coastguard Worker break 36*c8dee2aaSAndroid Build Coastguard Worker if extension == "": 37*c8dee2aaSAndroid Build Coastguard Worker fail("URL %s has an unsupported suffix." % url) 38*c8dee2aaSAndroid Build Coastguard Worker 39*c8dee2aaSAndroid Build Coastguard Worker mirror_url = "%s/%s%s" % (_GCS_MIRROR_PREFIX, sha256, extension) 40*c8dee2aaSAndroid Build Coastguard Worker return [mirror_url] if _TEST_GCS_MIRROR else [url, mirror_url] 41*c8dee2aaSAndroid Build Coastguard Worker 42*c8dee2aaSAndroid Build Coastguard Workerdef gcs_mirror_only(sha256, suffix): 43*c8dee2aaSAndroid Build Coastguard Worker if suffix not in _SUPPORTED_SUFFIXES: 44*c8dee2aaSAndroid Build Coastguard Worker fail("unsupported suffix %s" % suffix) 45*c8dee2aaSAndroid Build Coastguard Worker return "%s/%s%s" % (_GCS_MIRROR_PREFIX, sha256, suffix) 46