101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry# Copyright 2017 The Chromium Authors. All rights reserved. 201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry# Use of this source code is governed by a BSD-style license that can be 301b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry# found in the LICENSE file. 401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry"""Update meta/config of the specified Skia repo.""" 601b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 701b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 801b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryimport argparse 901b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryimport json 1001b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryimport os 1101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryimport subprocess 1201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryimport sys 1301b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryimport urllib2 1401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 1501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryimport git_utils 1601b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 1701b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 1801b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi MistrySKIA_COMMITTER_EMAIL = 'update-meta-config@skia.org' 1901b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi MistrySKIA_COMMITTER_NAME = 'Update Meta Config' 2001b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi MistrySKIA_REPO_TEMPLATE = 'https://skia.googlesource.com/%s.git' 2101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 22287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal CanaryCQ_INCLUDE_CHROMIUM_TRYBOTS = [ 23287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ('master.tryserver.blink', [ 24287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'linux_trusty_blink_dbg', 25fb4d3f0fb1d15c3fac2256983df213cf9323e0e2Mike Klein 'linux_trusty_blink_rel', 26fb4d3f0fb1d15c3fac2256983df213cf9323e0e2Mike Klein 'mac10.10_blink_rel', 27fb4d3f0fb1d15c3fac2256983df213cf9323e0e2Mike Klein 'mac10.11_blink_rel', 28fb4d3f0fb1d15c3fac2256983df213cf9323e0e2Mike Klein 'mac10.11_retina_blink_rel', 29fb4d3f0fb1d15c3fac2256983df213cf9323e0e2Mike Klein 'mac10.12_blink_rel', 30fb4d3f0fb1d15c3fac2256983df213cf9323e0e2Mike Klein 'win10_blink_rel', 31fb4d3f0fb1d15c3fac2256983df213cf9323e0e2Mike Klein 'win7_blink_rel', 32287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ]), 33287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ('master.tryserver.chromium.linux', [ 34287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'linux_chromium_compile_dbg_ng', 35287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'linux_chromium_compile_rel_ng', 36287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'linux_chromium_dbg_ng', 37287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'linux_chromium_rel_ng', 38287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'linux_optional_gpu_tests_rel', 39287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ]), 40287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ('master.tryserver.chromium.mac', [ 41287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'mac_chromium_compile_dbg_ng', 42287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'mac_chromium_compile_rel_ng', 43287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'mac_chromium_dbg_ng', 44287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'mac_chromium_rel_ng', 45287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'mac_optional_gpu_tests_rel', 46287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ]), 47287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ('master.tryserver.chromium.win', [ 48287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'win_chromium_compile_dbg_ng', 49287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'win_chromium_compile_rel_ng', 50287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'win_chromium_dbg_ng', 51287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'win_optional_gpu_tests_rel', 5201f70aa89e31a2c9c8073b8c612eb1192eee469cRavi Mistry 'win7_chromium_rel_ng', 5301f70aa89e31a2c9c8073b8c612eb1192eee469cRavi Mistry 'win10_chromium_x64_rel_ng', 54287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ]), 55287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ('master.tryserver.chromium.android', [ 56f8e353d5eb97119f4dd44e65331f70d4a57ce7d9Mike Klein 'android_blink_rel', 57287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'android_compile_dbg', 58287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'android_compile_rel', 5901f70aa89e31a2c9c8073b8c612eb1192eee469cRavi Mistry 'android_n5x_swarming_dbg', 6001f70aa89e31a2c9c8073b8c612eb1192eee469cRavi Mistry 'android_n5x_swarming_rel', 61287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary 'android_optional_gpu_tests_rel', 62287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary ]) 63287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary] 6401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 6501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 6601b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistrydef addChromiumTrybots(f): 67287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary for master, bots in CQ_INCLUDE_CHROMIUM_TRYBOTS: 6801b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry f.write('[bucket "%s"]\n' % master) 69287a3fe6b9b1cda050922054a2bf2c55a4f28e76Hal Canary for bot in bots: 7001b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry f.write('\tbuilder = %s\n' % bot) 7101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 7201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 73cff9f956c794954a67000792ab632c17026ececfEric Borendef main(): 74cff9f956c794954a67000792ab632c17026ececfEric Boren parser = argparse.ArgumentParser() 75cff9f956c794954a67000792ab632c17026ececfEric Boren parser.add_argument("--gitcookies") 76cff9f956c794954a67000792ab632c17026ececfEric Boren parser.add_argument("--repo_name") 77cff9f956c794954a67000792ab632c17026ececfEric Boren parser.add_argument("--tasks_json") 78cff9f956c794954a67000792ab632c17026ececfEric Boren args = parser.parse_args() 79cff9f956c794954a67000792ab632c17026ececfEric Boren 80cff9f956c794954a67000792ab632c17026ececfEric Boren skia_repo = SKIA_REPO_TEMPLATE % args.repo_name 8101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry with git_utils.NewGitCheckout(repository=skia_repo): 8201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry # Fetch and checkout the meta/config branch. 8301b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry subprocess.check_call(['git', 'fetch', skia_repo, 'refs/meta/config:cfg']) 8401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry subprocess.check_call(['git', 'checkout', 'cfg']) 8501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 8601b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry # Create list of tryjobs from tasks_json. 8701b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry tryjobs = [] 88cff9f956c794954a67000792ab632c17026ececfEric Boren with open(args.tasks_json) as tasks_json: 8901b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry data = json.load(tasks_json) 9001b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry for job in data['jobs'].keys(): 9101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry if not job.startswith('Upload-'): 9201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry tryjobs.append(job) 9301b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry tryjobs.sort() 9401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 9501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry # Write to buildbucket.config. 9601b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry buildbucket_config = os.path.join(os.getcwd(), 'buildbucket.config') 9701b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry with open(buildbucket_config, 'w') as f: 9801b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 99cff9f956c794954a67000792ab632c17026ececfEric Boren if args.repo_name == 'skia': 10001b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry addChromiumTrybots(f) 10101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 10201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry # Adding all Skia jobs. 10301b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry f.write('[bucket "skia.primary"]\n') 10401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry for job in tryjobs: 10501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry f.write('\tbuilder = ' + job + '\n') 10601b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 10701b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry # Push the change as the update-meta-config user. 10801b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry config_dict = { 10901b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 'user.name': SKIA_COMMITTER_NAME, 11001b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 'user.email': SKIA_COMMITTER_EMAIL, 111cff9f956c794954a67000792ab632c17026ececfEric Boren 'http.cookiefile': args.gitcookies, 11201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry } 11301b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry with git_utils.GitLocalConfig(config_dict): 11401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry subprocess.check_call(['git', 'add', 'buildbucket.config']) 11501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry try: 11601b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry subprocess.check_call( 11701b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry ['git', 'commit', '-m', 'Update builders in buildbucket.config']) 11801b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry except subprocess.CalledProcessError: 11901b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry print 'No changes to buildbucket.config' 12001b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry return 12101b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 12201b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry subprocess.check_call(['git', 'push', skia_repo, 'cfg:refs/meta/config']) 12301b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 12401b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistry 12501b48e7f13c25af430b6c90aac8cefcd79c0d870Ravi Mistryif '__main__' == __name__: 126cff9f956c794954a67000792ab632c17026ececfEric Boren main() 127