// 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";

// Various ninja build data.
message NinjaActionMetrics {
  // The number of actions to complete the build in the beginning.
  int32 initial_actions = 1;

  // The number of actions executed at the end of the build.
  // This may be less than the number of initial actions due to `restat`
  // (dynamic action graph pruning).
  int32 final_actions = 2;

  // Breakdown of actions executed by type, e.g. "ACTION", "CXX", "STAMP".
  map<string, int32> actions_by_type = 3;
}

message DebugFile {
  // Absolute path to the file.
  string path = 1;

  // Relative path to which the file should be uploaded within the build's
  // namespace in cloud storage.
  string upload_dest = 2;
}

// 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;

  // 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 = 2;

  // 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 = 3;

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

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

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

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

  // Various ninja build data
  NinjaActionMetrics ninja_action_metrics = 8;

  // 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 = 9;

  // Files to upload to cloud storage even if the build fails, to help with
  // debugging and understanding build performance. Files produced by ninja
  // targets themselves should *not* be uploaded via this mechanism, use
  // artifactory instead.
  repeated DebugFile debug_files = 10;

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

  // 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 = 12;
}
