Merge pull request #63517 from ixdy/update-workspace-mirror-fixes

Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

//hack:update-mirror: ensure last URL in list is mirrored too

**What this PR does / why we need it**: a small bug in https://github.com/kubernetes/kubernetes/pull/62495 prevented the last URL from mirrored, since there wasn't a trailing newline.

Also, the bazel target printed out if you ran `hack/update-workspace-mirror.sh` directly was incorrect, so that's now fixed.

**Special notes for your reviewer**: buildifier is apparently now formatting bzl files, and I can't figure out how to disable that, so I reformatted this as the first commit.

**Release note**:

```release-note
NONE
```

/assign @BenTheElder 
/cc @rmmh
pull/8/head
Kubernetes Submit Queue 2018-05-07 21:53:34 -07:00 committed by GitHub
commit e72d54981a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 20 deletions

View File

@ -15,31 +15,35 @@
prefix = "https://storage.googleapis.com/k8s-bazel-cache/"
def mirror(url):
"""Try downloading a URL from a GCS mirror first, then from the original.
"""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]
Update the GCS bucket using bazel run //hack:update-mirror"""
return [prefix + url, url]
# 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.
def mirror_urls():
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)
# 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"), """
repo_ctx.file(repo_ctx.path("BUILD.bazel"), """
exports_files(glob(["**"]), visibility=["//visibility:public"])
""")
repo_ctx.file(repo_ctx.path("urls.txt"), content="\n".join(repo_ctx.attr.urls))
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 = {
@ -50,4 +54,4 @@ _export_urls = repository_rule(
)
def export_urls(name):
return _export_urls(name=name, urls=mirror_urls())
return _export_urls(name = name, urls = mirror_urls())

View File

@ -19,7 +19,7 @@ set -o nounset
set -o pipefail
if [[ $# -ne 1 ]]; then
echo 'use "bazel run //build:update-mirror"'
echo 'use "bazel run //hack:update-mirror"'
echo "(usage: $0 <file with list of URLs to mirror>)"
exit 1
fi