mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 13:50:01 +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())
 |