// Copyright 2021 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.

syntax = "proto3";

package fint;

option go_package = "go.fuchsia.dev/fuchsia/tools/integration/fint/proto";

import "google/protobuf/struct.proto";

// BuildArtifacts contains information about the targets built by `fint build`.
message BuildArtifacts {
  // A brief error log populated in case of a recognized failure mode (e.g. a
  // Ninja compilation failure).
  string failure_summary = 1;

  // All targets that were passed to Ninja.
  repeated string built_targets = 2;

  // Images produced by the build. We use a struct to avoid needing to maintain
  // a copy of the images.json schema here.
  repeated google.protobuf.Struct built_images = 3;

  // Archives produced by the build. We use a struct to avoid needing to
  // maintain a copy of the images.json schema here.
  repeated google.protobuf.Struct built_archives = 4;

  // Zedboot paving images built for ZBI tests. Only populated if ZBI tests were
  // built.
  repeated google.protobuf.Struct built_zedboot_images = 5;

  // Mapping from ZBI test name to QEMU kernel image for the test. Only
  // populated if ZBI tests were built.
  map<string, google.protobuf.Struct> zbi_test_qemu_kernel_images = 6;

  // Absolute path to the Ninja log file.
  string ninja_log_path = 7;

  // Absolute path to a Ninja graph file.
  string ninja_graph_path = 8;

  // Absolute path to a Ninja compdb file.
  string ninja_compdb_path = 9;

  // The duration taken by the ninja build step.
  int32 ninja_duration_seconds = 10;

  // Mapping from user-friendly title to absolute path for important log files
  // that should be presented by the infrastructure for humans to read. We
  // reference the logs by path rather than inlining the contents in the
  // protobuf because the logs may be very long and inlining them would make it
  // very hard for humans to read the output proto.
  map<string, string> log_files = 11;

  // Whether an analysis of the build graph determined that the changed files do
  // not affect the build.
  bool build_not_affected = 12;

  // Names, as they appear in tests.json, of tests affected by the change under
  // tests. This is determined by doing a build graph analysis of the files
  // reported in the `changed_files` context spec field.
  repeated string affected_tests = 13;
}
