mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-11-04 07:49:35 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright 2018 The Kubernetes Authors.
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
# you may not use this file except in compliance with the License.
 | 
						|
# You may obtain a copy of the License at
 | 
						|
#
 | 
						|
#     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
# See the License for the specific language governing permissions and
 | 
						|
# limitations under the License.
 | 
						|
 | 
						|
prefix = "https://storage.googleapis.com/k8s-bazel-cache/"
 | 
						|
 | 
						|
def mirror(url):
 | 
						|
    """Try downloading a URL from a GCS mirror first, then from the original.
 | 
						|
 | 
						|
    Update the GCS bucket using bazel run //hack:update-mirror"""
 | 
						|
    return [prefix + url, url]
 | 
						|
 | 
						|
def mirror_urls():
 | 
						|
    # This function only gives proper results when executed from WORKSPACE,
 | 
						|
    # but the data is needed in sh_binary, which can only be in a BUILD file.
 | 
						|
    # Thus, it is be exported by a repository_rule (which executes in WORKSPACE)
 | 
						|
    # to be used by the sh_binary.
 | 
						|
    urls = []
 | 
						|
    for k, v in native.existing_rules().items():
 | 
						|
        us = list(v.get("urls", []))
 | 
						|
        if "url" in v:
 | 
						|
            us.append(v["url"])
 | 
						|
        for u in us:
 | 
						|
            if u and not u.startswith(prefix):
 | 
						|
                urls.append(u)
 | 
						|
    return sorted(urls)
 | 
						|
 | 
						|
def export_urls_impl(repo_ctx):
 | 
						|
    repo_ctx.file(repo_ctx.path("BUILD.bazel"), """
 | 
						|
exports_files(glob(["**"]), visibility=["//visibility:public"])
 | 
						|
""")
 | 
						|
    repo_ctx.file(
 | 
						|
        repo_ctx.path("urls.txt"),
 | 
						|
        # Add a trailing newline, since the "while read" loop needs it
 | 
						|
        content = ("\n".join(repo_ctx.attr.urls) + "\n"),
 | 
						|
    )
 | 
						|
 | 
						|
_export_urls = repository_rule(
 | 
						|
    attrs = {
 | 
						|
        "urls": attr.string_list(mandatory = True),
 | 
						|
    },
 | 
						|
    local = True,
 | 
						|
    implementation = export_urls_impl,
 | 
						|
)
 | 
						|
 | 
						|
def export_urls(name):
 | 
						|
    return _export_urls(name = name, urls = mirror_urls())
 |