blob: 741705e0b688f0173ca4e3fdae9f7cbacb930a9b [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:core.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
use_cas = False
for ol in output_lines:
try:
build_dict = json.loads(ol)
except json.decoder.JSONDecodeError:
continue
output_properties = build_dict["output"]["properties"]
if output_properties.get("test_orchestration_inputs_hash"):
build_id = build_dict["id"]
break
elif output_properties.get("test_orchestration_inputs_digest"):
use_cas = True
build_id = build_dict["id"]
break
if not build_id:
sys.exit(
f"Unable to find a recent build of {subbuilder} with property "
"test_orchestration_inputs_hash or test_orchestration_inputs_digest"
)
led_edit_cmd = f'led edit -p child_build_id=\\"{build_id}\\"'
if use_cas:
led_edit_cmd += " -p experimental.rbe_cas=true"
print(led_edit_cmd)
if __name__ == "__main__":
main(sys.argv[1:])