blob: 8a09862809c8850ba06dc5afb5b7adb407c07ef5 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Outputs a `led edit` command to re-use a good subbuild.
Useful for testing recipe changes that only touch the testing part.
Example of suggested usage:
export BUILDER="fuchsia/try:fuchsia-x64-asan"
led get-builder ${BUILDER} | led edit-recipe-bundle | /bin/bash -c $(scripts/led_edit_to_reuse_subbuild.py ${BUILDER}) | led launch
"""
import json
import sys
import subprocess
def main(argv):
if len(argv) != 1:
sys.exit("Need exactly 1 argument: <project>/<bucket>:<builder>")
led_format_builder = argv[0]
project, rest = led_format_builder.split("/")
bucket, builder = rest.split(":")
subbuilder = builder
if not builder.endswith("-subbuild"):
subbuilder += "-subbuild"
output = subprocess.check_output(
(
"bb",
"ls",
f"{project}/{bucket}/{subbuilder}",
"-n",
"20",
"-status",
"success",
"-json",
"-fields",
"output.properties",
)
)
output_lines = output.strip().split(b"\n")
build_id = None
for ol in output_lines:
try:
build_dict = json.loads(ol)
except json.decoder.JSONDecodeError:
continue
if build_dict["output"]["properties"].get("test_orchestration_inputs_hash"):
build_id = build_dict["id"]
break
if not build_id:
sys.exit(
f"Unable to find a recent build of {subbuilder} that with property "
"test_orchestration_inputs_hash"
)
print(f'led edit -p child_build_id=\\"{build_id}\\"')
if __name__ == "__main__":
main(sys.argv[1:])