diff options
Diffstat (limited to 'src/ci/docker/scripts/android-sdk-manager.py')
| -rwxr-xr-x | src/ci/docker/scripts/android-sdk-manager.py | 60 |
1 files changed, 47 insertions, 13 deletions
diff --git a/src/ci/docker/scripts/android-sdk-manager.py b/src/ci/docker/scripts/android-sdk-manager.py index 66cba58427b..6356f15a886 100755 --- a/src/ci/docker/scripts/android-sdk-manager.py +++ b/src/ci/docker/scripts/android-sdk-manager.py @@ -35,6 +35,7 @@ MIRROR_BUCKET = "rust-lang-ci-mirrors" MIRROR_BUCKET_REGION = "us-west-1" MIRROR_BASE_DIR = "rustc/android/" + class Package: def __init__(self, path, url, sha1, deps=None): if deps is None: @@ -53,18 +54,25 @@ class Package: sha1 = hashlib.sha1(f.read()).hexdigest() if sha1 != self.sha1: raise RuntimeError( - "hash mismatch for package " + self.path + ": " + - sha1 + " vs " + self.sha1 + " (known good)" + "hash mismatch for package " + + self.path + + ": " + + sha1 + + " vs " + + self.sha1 + + " (known good)" ) return file def __repr__(self): - return "<Package "+self.path+" at "+self.url+" (sha1="+self.sha1+")" + return "<Package " + self.path + " at " + self.url + " (sha1=" + self.sha1 + ")" + def fetch_url(url): page = urllib.request.urlopen(url) return page.read() + def fetch_repository(base, repo_url): packages = {} root = ET.fromstring(fetch_url(base + repo_url)) @@ -92,12 +100,14 @@ def fetch_repository(base, repo_url): return packages + def fetch_repositories(): packages = {} for repo in REPOSITORIES: packages.update(fetch_repository(BASE_REPOSITORY, repo)) return packages + class Lockfile: def __init__(self, path): self.path = path @@ -123,6 +133,7 @@ class Lockfile: for package in packages: f.write(package.path + " " + package.url + " " + package.sha1 + "\n") + def cli_add_to_lockfile(args): lockfile = Lockfile(args.lockfile) packages = fetch_repositories() @@ -130,28 +141,49 @@ def cli_add_to_lockfile(args): lockfile.add(packages, package) lockfile.save() + def cli_update_mirror(args): lockfile = Lockfile(args.lockfile) for package in lockfile.packages.values(): path = package.download(BASE_REPOSITORY) - subprocess.run([ - "aws", "s3", "mv", path, - "s3://" + MIRROR_BUCKET + "/" + MIRROR_BASE_DIR + package.url, - "--profile=" + args.awscli_profile, - ], check=True) + subprocess.run( + [ + "aws", + "s3", + "mv", + path, + "s3://" + MIRROR_BUCKET + "/" + MIRROR_BASE_DIR + package.url, + "--profile=" + args.awscli_profile, + ], + check=True, + ) + def cli_install(args): lockfile = Lockfile(args.lockfile) for package in lockfile.packages.values(): # Download the file from the mirror into a temp file - url = "https://" + MIRROR_BUCKET + ".s3-" + MIRROR_BUCKET_REGION + \ - ".amazonaws.com/" + MIRROR_BASE_DIR + url = ( + "https://" + + MIRROR_BUCKET + + ".s3-" + + MIRROR_BUCKET_REGION + + ".amazonaws.com/" + + MIRROR_BASE_DIR + ) downloaded = package.download(url) # Extract the file in a temporary directory extract_dir = tempfile.mkdtemp() - subprocess.run([ - "unzip", "-q", downloaded, "-d", extract_dir, - ], check=True) + subprocess.run( + [ + "unzip", + "-q", + downloaded, + "-d", + extract_dir, + ], + check=True, + ) # Figure out the prefix used in the zip subdirs = [d for d in os.listdir(extract_dir) if not d.startswith(".")] if len(subdirs) != 1: @@ -162,6 +194,7 @@ def cli_install(args): os.rename(os.path.join(extract_dir, subdirs[0]), dest) os.unlink(downloaded) + def cli(): parser = argparse.ArgumentParser() subparsers = parser.add_subparsers() @@ -187,5 +220,6 @@ def cli(): exit(1) args.func(args) + if __name__ == "__main__": cli() |
