| #!/usr/bin/env python |
| # Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| import os |
| import run_on_as_app |
| import shutil |
| import subprocess |
| import sys |
| import utils |
| |
| def main(): |
| working_dir = run_on_as_app.WORKING_DIR |
| |
| print 'Removing directories that do not match checked out revision' |
| if not os.path.exists(working_dir): |
| os.makedirs(working_dir) |
| else: |
| for repo in run_on_as_app.APP_REPOSITORIES: |
| repo_dir = os.path.join(working_dir, repo.name) |
| if os.path.exists(repo_dir) \ |
| and utils.get_HEAD_sha1_for_checkout(repo_dir) != repo.revision: |
| print 'Removing %s' % repo_dir |
| shutil.rmtree(repo_dir) |
| |
| print 'Downloading all missing apps' |
| run_on_as_app.clone_repositories(quiet=False) |
| |
| # Package all files as cloud dependency |
| print 'Creating archive for opensource_apps (this may take some time)' |
| if os.path.exists(utils.OPENSOURCE_APPS_FOLDER): |
| shutil.rmtree(utils.OPENSOURCE_APPS_FOLDER) |
| for repo in run_on_as_app.APP_REPOSITORIES: |
| repo_dir = os.path.join(working_dir, repo.name) |
| # Ensure there is a local gradle user home in the folder |
| for app in repo.apps: |
| app_checkout_dir = (os.path.join(repo_dir, app.dir) |
| if app.dir else repo_dir) |
| gradle_user_home = os.path.join( |
| app_checkout_dir, run_on_as_app.GRADLE_USER_HOME) |
| if not os.path.exists(gradle_user_home): |
| print 'Could not find the local gradle cache at %s. You should run ' \ |
| 'run_on_as_app for app %s at least once.' \ |
| % (gradle_user_home, repo.name) |
| sys.exit(1) |
| dst = os.path.join(utils.OPENSOURCE_APPS_FOLDER, repo.name) |
| shutil.copytree(repo_dir, dst) |
| |
| with utils.ChangedWorkingDirectory(utils.THIRD_PARTY): |
| subprocess.check_call(['upload_to_google_storage.py', '-a', '--bucket', |
| 'r8-deps', 'opensource_apps']) |
| |
| print 'To have apps benchmarked on Golem, the updated apps have to be ' \ |
| 'downloaded to the runners by ssh\'ing into each runner and do:\n' \ |
| 'cd ../golem\n' \ |
| 'update_dependencies.sh\n' |
| |
| if __name__ == '__main__': |
| sys.exit(main()) |