xref: /aosp_15_r20/external/skia/toolchain/utils.bzl (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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