//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
// Authors
//      Raoul Hidalgo Charman <raoul.hidalgo.charman@gmail.com>

syntax = "proto3";

package buildstream.v2;

import "build/bazel/remote/execution/v2/remote_execution.proto";
import "google/api/annotations.proto";

message Artifact {
  // This version number must always be present and can be used to
  // further indicate presence or absence of parts of the proto at a
  // later date.  It only needs incrementing if a change to what is
  // *mandatory* changes.
  int32 version = 1;
  // Core metadata
  bool build_success = 2;
  string build_error = 3;  // optional
  string build_error_details = 4;
  string strong_key = 5;
  string weak_key = 6;
  bool was_workspaced = 7;
  // digest of a Directory
  build.bazel.remote.execution.v2.Digest files = 8;

  // Information about the build dependencies
  message Dependency {
    string project_name = 1;
    string element_name = 2;
    string cache_key = 3;
    bool was_workspaced = 4;
  };
  repeated Dependency build_deps = 9;

  // The public data is a yaml file which is stored into the CAS
  // Digest is of a directory
  build.bazel.remote.execution.v2.Digest public_data = 10;

  // The logs are stored in the CAS
  message LogFile {
    string name = 1;
    // digest of a file
    build.bazel.remote.execution.v2.Digest digest = 2;
  };
  repeated LogFile logs = 11;  // Zero or more log files here

  // digest of a directory
  build.bazel.remote.execution.v2.Digest buildtree = 12;  // optional

  // digest of a directory
  build.bazel.remote.execution.v2.Digest sources = 13;  // optional

  // The low/high diversity meta fields are digests of YAML files
  // in which we store detatched metadata related to the artifact.
  //
  // metadata found in the low diversity file is expected to be
  // frequently reused in the context of a given BuildStream project,
  // ergo there is a very high chance that the entire content of the
  // file can be shared across many artifacts.
  //
  // metadata found in the high diversity file is expected to diverge
  // from one artifact to another. This still consists of metadata
  // which does not directly affect an artifact's cache key, and as
  // such cannot be stored directly in the proto itself.
  //
  build.bazel.remote.execution.v2.Digest low_diversity_meta = 14;
  build.bazel.remote.execution.v2.Digest high_diversity_meta = 15;

  // Strict key is a later addition to the core metadata
  string strict_key = 16;

  // digest of a directory
  build.bazel.remote.execution.v2.Digest buildroot = 17;  // optional

  message SandboxState {
    repeated build.bazel.remote.execution.v2.Command.EnvironmentVariable environment = 1;
    string working_directory = 2;
    repeated build.bazel.remote.execution.v2.Digest subsandbox_digests = 3;
    repeated string marked_directories = 4;
  };
  SandboxState buildsandbox = 18;  // optional
}
