| #!/usr/bin/env python3 |
| # Copyright 2026 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. |
| |
| import argparse |
| import os |
| import subprocess |
| import sys |
| |
| REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
| |
| def main(): |
| os.chdir(REPO_ROOT) |
| |
| parser = argparse.ArgumentParser( |
| description='Trigger remote tryjobs with local recipe modifications.') |
| parser.add_argument( |
| 'cl', |
| help='Gerrit CL URL or number (e.g. 24801 or https://gn-review.googlesource.com/c/gn/+/24801)' |
| ) |
| parser.add_argument( |
| '--platform', |
| '-p', |
| choices=['linux', 'mac', 'win'], |
| action='append', |
| help='Platform(s) to run tryjobs for. If omitted, runs all platforms.') |
| |
| args = parser.parse_args() |
| |
| cl = args.cl |
| if cl.isdigit(): |
| cl = f'https://gn-review.googlesource.com/c/gn/+/{cl}' |
| |
| platforms = list(dict.fromkeys(args.platform)) if args.platform else ['linux', 'mac', 'win'] |
| |
| print(f'Triggering tryjobs for CL: {cl}...') |
| |
| for platform in platforms: |
| print(f'Triggering {platform} tryjob...') |
| p1 = subprocess.Popen(['led', 'get-builder', f'gn/try/{platform}'], |
| stdout=subprocess.PIPE) |
| p2 = subprocess.Popen(['led', 'edit-cr-cl', cl], |
| stdin=p1.stdout, |
| stdout=subprocess.PIPE) |
| p3 = subprocess.Popen(['led', 'edit-recipe-bundle'], |
| stdin=p2.stdout, |
| stdout=subprocess.PIPE) |
| p4 = subprocess.Popen(['led', 'launch'], stdin=p3.stdout) |
| |
| p1.stdout.close() |
| p2.stdout.close() |
| p3.stdout.close() |
| |
| for p in [p4, p3, p2, p1]: |
| p.wait() |
| if p.returncode != 0: |
| print(f'Failed to launch tryjob for {platform}', file=sys.stderr) |
| sys.exit(1) |
| |
| |
| if __name__ == '__main__': |
| main() |