1fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# Copyright 2017 The Chromium Authors. All rights reserved. 2fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# Use of this source code is governed by a BSD-style license that can be 3fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot# found in the LICENSE file. 4fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 5fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot"""Update and upload markdown files using the output of fiddlecli.""" 6fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 7fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 8fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport argparse 9fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport os 10fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport subprocess 11fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport sys 12fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 13fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotimport git_utils 14fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 15fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 16fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSKIA_COMMITTER_EMAIL = 'update-docs@skia.org' 17fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSKIA_COMMITTER_NAME = 'Update Docs' 18fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotSKIA_REPO = 'https://skia.googlesource.com/skia.git' 19fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotCOMMIT_MSG = '''Update markdown files 20fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 21fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotAutomatic commit by the Housekeeper-Nightly-Bookmaker bot. 22fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 23fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotTBR=%s 24fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotNO_MERGE_BUILDS 25fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot''' % SKIA_COMMITTER_EMAIL 26fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team RobotCC_LIST = ['rmistry@google.com', 'caryclark@google.com'] 27fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 28fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 29fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotdef main(): 30fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser = argparse.ArgumentParser() 31fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument("--gitcookies") 32fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument("--bookmaker_binary") 33fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot parser.add_argument("--fiddlecli_output") 34fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot args = parser.parse_args() 35fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 36fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot with git_utils.NewGitCheckout(repository=SKIA_REPO): 37fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot config_dict = { 38fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 'user.name': SKIA_COMMITTER_NAME, 39fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 'user.email': SKIA_COMMITTER_EMAIL, 40fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 'http.cookiefile': args.gitcookies, 41fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot } 42fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot # Skip GCE Auth in depot_tools/gerrit_utils.py. Use gitcookies instead. 43fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot os.environ['SKIP_GCE_AUTH_FOR_GIT'] = 'True' 44fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot os.environ['GIT_COOKIES_PATH'] = args.gitcookies 45fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 46fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot with git_utils.GitLocalConfig(config_dict): 47fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot with git_utils.GitBranch(branch_name='update_md_files', 48fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot commit_msg=COMMIT_MSG, 49fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot commit_queue=True, 50fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot upload=False, 51fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot cc_list=CC_LIST) as git_branch: 52fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot # Run bookmaker binary. 53fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot cmd = [args.bookmaker_binary, 54fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot '-b', 'docs', 55fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot '-f', args.fiddlecli_output, 56fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot '-r', 'site/user/api', 57fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot ] 58fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot try: 59fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot subprocess.check_call(cmd) 60fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot except subprocess.CalledProcessError as e: 61fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot print >> sys.stderr, ( 62fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 'Running %s failed, not uploading markdowns update:\n\n%s' % ( 63fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot cmd, e.output)) 64fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sys.exit(1) 65fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 66fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot # Verify that only files in the expected directory are going to be 67fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot # committed and uploaded. 68fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot diff_files = subprocess.check_output(['git', 'diff', '--name-only']) 69fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot for diff_file in diff_files.split(): 70fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if not diff_file.startswith('site/user/api/'): 71fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot print >> sys.stderr, ( 72fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 'Some files in %s were not in the site/user/api dir. ' 73fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 'Not uploading them' % diff_files) 74fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot sys.exit(1) 75fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot if diff_files: 76fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot subprocess.check_call(['git', 'add', '-u']) 77fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot git_branch.commit_and_upload(True) 78fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot else: 79fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot print 'No changes so nothing to upload.' 80fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 81fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot 82fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robotif '__main__' == __name__: 83fe17456d5e528078ce69b5f15cf7adf1fab963fandroid-build-team Robot main() 84