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