summaryrefslogtreecommitdiff
path: root/chromium/third_party/androidx/fetch_all_androidx.py
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/androidx/fetch_all_androidx.py')
-rwxr-xr-xchromium/third_party/androidx/fetch_all_androidx.py300
1 files changed, 0 insertions, 300 deletions
diff --git a/chromium/third_party/androidx/fetch_all_androidx.py b/chromium/third_party/androidx/fetch_all_androidx.py
deleted file mode 100755
index 055d77c08c1..00000000000
--- a/chromium/third_party/androidx/fetch_all_androidx.py
+++ /dev/null
@@ -1,300 +0,0 @@
-#!/usr/bin/env python3
-
-# Copyright 2020 The Chromium Authors
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-"""A script to generate build.gradle from template and run fetch_all.py
-
-More specifically, to generate build.gradle:
- - It downloads the BUILD_INFO file for the latest androidx snapshot from
- https://androidx.dev/snapshots/builds
- - It replaces {{androidx_repository_url}} with the URL for the latest snapshot
- - For each dependency, it looks up the version in the BUILD_INFO file and
- substitutes the version into {{androidx_dependency_version}}.
-"""
-
-import argparse
-import contextlib
-import json
-import logging
-import os
-import re
-import shutil
-import stat
-import subprocess
-import tempfile
-import urllib
-from urllib import request
-
-_ANDROIDX_PATH = os.path.normpath(os.path.join(__file__, '..'))
-
-_FETCH_ALL_PATH = os.path.normpath(
- os.path.join(_ANDROIDX_PATH, '..', 'android_deps', 'fetch_all.py'))
-
-# URL to BUILD_INFO in latest androidx snapshot.
-_ANDROIDX_LATEST_SNAPSHOT_BUILD_INFO_URL = 'https://androidx.dev/snapshots/latest/artifacts/BUILD_INFO'
-
-# Snapshot repository URL with {{version}} placeholder.
-_SNAPSHOT_REPOSITORY_URL = 'https://androidx.dev/snapshots/builds/{{version}}/artifacts/repository'
-
-# When androidx roller is breaking, and a fix is not immenent, use this to pin a
-# broken library to an old known-working version.
-# * The first element of each tuple is the path to the artifact of the latest
-# version of the library. It could change if the version is rev'ed in a new
-# snapshot.
-# * The second element is a URL to replace the file with. Find the URL for older
-# versions of libraries by looking in the BUILD_INFO for the older version
-# (e.g.: https://androidx.dev/snapshots/builds/8545498/artifacts/BUILD_INFO)
-_OVERRIDES = [
- # Example:
- #('androidx_core_core/core-1.9.0-SNAPSHOT.aar',
- # 'https://androidx.dev/snapshots/builds/8545498/artifacts/repository/'
- # 'androidx/core/core/1.8.0-SNAPSHOT/core-1.8.0-20220505.122105-1.aar'),
-]
-
-
-def _build_snapshot_repository_url(version):
- return _SNAPSHOT_REPOSITORY_URL.replace('{{version}}', version)
-
-
-def _delete_readonly_files(paths):
- for path in paths:
- if os.path.exists(path):
- os.chmod(path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IWUSR)
- os.remove(path)
-
-
-def _parse_dir_list(dir_list):
- """Computes 'library_group:library_name'->library_version mapping.
-
- Args:
- dir_list: List of androidx library directories.
- """
- dependency_version_map = dict()
- for dir_entry in dir_list:
- stripped_dir = dir_entry.strip()
- if not stripped_dir.startswith('repository/androidx/'):
- continue
- dir_components = stripped_dir.split('/')
- # Expected format:
- # "repository/androidx/library_group/library_name/library_version/pom_or_jar"
- if len(dir_components) < 6:
- continue
- dependency_package = 'androidx.' + '.'.join(dir_components[2:-3])
- dependency_module = '{}:{}'.format(dependency_package,
- dir_components[-3])
- if dependency_module not in dependency_version_map:
- dependency_version_map[dependency_module] = dir_components[-2]
- return dependency_version_map
-
-
-def _compute_replacement(dependency_version_map, androidx_repository_url,
- line):
- """Computes output line for build.gradle from build.gradle.template line.
-
- Replaces {{android_repository_url}}, {{androidx_dependency_version}} and
- {{version_overrides}}.
-
- Args:
- dependency_version_map: An "dependency_group:dependency_name"->dependency_version mapping.
- androidx_repository_url: URL of the maven repository.
- line: Input line from the build.gradle.template.
- """
- line = line.replace('{{androidx_repository_url}}', androidx_repository_url)
-
- if line.strip() == '{{version_overrides}}':
- lines = ['versionOverrideMap = [:]']
- for dependency, version in sorted(dependency_version_map.items()):
- lines.append(f"versionOverrideMap['{dependency}'] = '{version}'")
- return '\n'.join(lines)
-
- match = re.search(r'\'(\S+):{{androidx_dependency_version}}\'', line)
- if not match:
- return line
-
- dependency = match.group(1)
- version = dependency_version_map.get(dependency)
- if not version:
- raise Exception(f'Version for {dependency} not found.')
-
- return line.replace('{{androidx_dependency_version}}', version)
-
-
-@contextlib.contextmanager
-def _build_dir():
- dirname = tempfile.mkdtemp()
- try:
- yield dirname
- finally:
- shutil.rmtree(dirname)
-
-
-def _download_and_parse_build_info():
- """Downloads and parses BUILD_INFO file."""
- with _build_dir() as build_dir:
- androidx_build_info_response = request.urlopen(
- _ANDROIDX_LATEST_SNAPSHOT_BUILD_INFO_URL)
- androidx_build_info_url = androidx_build_info_response.geturl()
- logging.info('URL for the latest build info: %s',
- androidx_build_info_url)
- androidx_build_info_path = os.path.join(build_dir, 'BUILD_INFO')
- with open(androidx_build_info_path, 'w') as f:
- f.write(androidx_build_info_response.read().decode('utf-8'))
-
- # Strip '/repository' from pattern.
- resolved_snapshot_repository_url_pattern = (
- _build_snapshot_repository_url('([0-9]*)').rsplit('/', 1)[0])
-
- version = re.match(resolved_snapshot_repository_url_pattern,
- androidx_build_info_url).group(1)
-
- with open(androidx_build_info_path, 'r') as f:
- build_info_dict = json.loads(f.read())
- dir_list = build_info_dict['target']['dir_list']
-
- return dir_list, version
-
-
-def _create_local_dir_list(repo_path):
- repo_path = repo_path.rstrip('/')
- prefix_len = len(repo_path) + 1
- ret = []
- for dirpath, _, filenames in os.walk(repo_path):
- for name in filenames:
- ret.append(os.path.join('repository', dirpath[prefix_len:], name))
- return ret
-
-
-def _process_build_gradle(dependency_version_map, androidx_repository_url):
- """Generates build.gradle from template.
-
- Args:
- dependency_version_map: An "dependency_group:dependency_name"->dependency_version mapping.
- androidx_repository_url: URL of the maven repository.
- """
- build_gradle_template_path = os.path.join(_ANDROIDX_PATH,
- 'build.gradle.template')
- build_gradle_out_path = os.path.join(_ANDROIDX_PATH, 'build.gradle')
- # |build_gradle_out_path| is not deleted after script has finished running. The file is in
- # .gitignore and thus will be excluded from uploaded CLs.
- with open(build_gradle_template_path, 'r') as template_f, \
- open(build_gradle_out_path, 'w') as out:
- for template_line in template_f:
- replacement = _compute_replacement(dependency_version_map,
- androidx_repository_url,
- template_line)
- out.write(replacement)
-
-
-def _write_cipd_yaml(libs_dir, version, cipd_yaml_path, experimental=False):
- """Writes cipd.yaml file at the passed-in path."""
-
- lib_dirs = os.listdir(libs_dir)
- if not lib_dirs:
- raise Exception('No generated libraries in {}'.format(libs_dir))
-
- data_files = [
- 'BUILD.gn', 'VERSION.txt', 'additional_readme_paths.json',
- 'build.gradle'
- ]
- for lib_dir in lib_dirs:
- abs_lib_dir = os.path.join(libs_dir, lib_dir)
- androidx_rel_lib_dir = os.path.relpath(abs_lib_dir, _ANDROIDX_PATH)
- if not os.path.isdir(abs_lib_dir):
- continue
- lib_files = os.listdir(abs_lib_dir)
- if not 'cipd.yaml' in lib_files:
- continue
-
- for lib_file in lib_files:
- if lib_file == 'cipd.yaml' or lib_file == 'OWNERS':
- continue
- data_files.append(os.path.join(androidx_rel_lib_dir, lib_file))
-
- if experimental:
- package = 'experimental/google.com/' + os.getlogin() + '/androidx'
- else:
- package = 'chromium/third_party/androidx'
- contents = [
- '# Copyright 2021 The Chromium Authors. All rights reserved.',
- '# Use of this source code is governed by a BSD-style license that can be',
- '# found in the LICENSE file.',
- '# version: ' + version,
- 'package: ' + package,
- 'description: androidx',
- 'data:',
- ]
- contents.extend('- file: ' + f for f in data_files)
-
- with open(cipd_yaml_path, 'w') as out:
- out.write('\n'.join(contents))
-
-
-def main():
- parser = argparse.ArgumentParser(description=__doc__)
- parser.add_argument('-v',
- '--verbose',
- dest='verbose_count',
- default=0,
- action='count',
- help='Verbose level (multiple times for more)')
- parser.add_argument('--local-repo',
- help='Path to a locally androidx maven repo to use '
- 'instead of fetching the latest.')
- args = parser.parse_args()
-
- logging.basicConfig(
- level=logging.WARNING - 10 * args.verbose_count,
- format='%(levelname).1s %(relativeCreated)6d %(message)s')
-
- libs_dir = os.path.join(_ANDROIDX_PATH, 'libs')
- if os.path.exists(libs_dir):
- shutil.rmtree(libs_dir)
-
- # Files uploaded to cipd are read-only. Delete them because they will be
- # re-generated.
- _delete_readonly_files([
- os.path.join(_ANDROIDX_PATH, 'BUILD.gn'),
- os.path.join(_ANDROIDX_PATH, 'VERSION.txt'),
- os.path.join(_ANDROIDX_PATH, 'additional_readme_paths.json'),
- os.path.join(_ANDROIDX_PATH, 'build.gradle'),
- ])
-
- if args.local_repo:
- version = 'local'
- dir_list = _create_local_dir_list(args.local_repo)
- androidx_snapshot_repository_url = ('file://' +
- os.path.abspath(args.local_repo))
- else:
- dir_list, version = _download_and_parse_build_info()
- androidx_snapshot_repository_url = _build_snapshot_repository_url(
- version)
- # Prepend '0' to version to avoid conflicts with previous version format.
- version = 'cr-0' + version
-
- dependency_version_map = _parse_dir_list(dir_list)
- _process_build_gradle(dependency_version_map,
- androidx_snapshot_repository_url)
-
- fetch_all_cmd = [
- _FETCH_ALL_PATH, '--android-deps-dir', _ANDROIDX_PATH,
- '--ignore-vulnerabilities'
- ]
- # Overrides do not work with local snapshots since the repository_url is
- # different.
- if not args.local_repo:
- for subpath, url in _OVERRIDES:
- fetch_all_cmd += ['--override-artifact', f'{subpath}:{url}']
- subprocess.run(fetch_all_cmd, check=True)
-
- version_txt_path = os.path.join(_ANDROIDX_PATH, 'VERSION.txt')
- with open(version_txt_path, 'w') as f:
- f.write(version)
-
- yaml_path = os.path.join(_ANDROIDX_PATH, 'cipd.yaml')
- _write_cipd_yaml(libs_dir, version, yaml_path,
- experimental=bool(args.local_repo))
-
-
-if __name__ == '__main__':
- main()