// Copyright 2020 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto3";

package prototype;

option go_package = "go.chromium.org/chromiumos/infra/proto/go/prototype";

// Defines the metadata for a project, which ultimately controls how this
// project is managed throughout the infrastructure.
message DesignProject {
  // Defines the human-readable name for the project.
  string name = 1;
  // Defines the git-repo path for the project.
  string repo = 2;
  // Defines the path that stores all of the project configuration.
  // Relative to the git-repo
  string config_path = 3;
  // Define the project's local_manifest.
  string repo_manifest_path = 4;
  // The Google Storage bucket for artifacts from the project's builds.
  string gs_bucket = 5;

  // Defines config needed to maintain firmware builders for the project.
  FirmwareConfig firmware_config = 6;

  // Define factory build config needed for manufacturing verification.
  FactoryConfig factory_config = 7;

  // Defines signing config unique to the given design project.
  SigningConfig signing_config = 8;

  message FirmwareConfig {
    // Defines the firmware branch that will be maintained for the project.
    string firmware_branch = 1;
  }

  message FactoryConfig {
    // Defines the factory branch that will be maintained for the project.
    string factory_branch = 1;

    // A key in the project.yaml metadata file, to look up the branch, path,
    // etc. For example, to match the entry in the project.yaml file:
    //
    // MILKYWAY:
    //   board: GALAXY
    //   branch: master
    //   version: 3
    //   path: v3/MILKYWAY
    //
    // project_key should be 'MILKYWAY'. The matching is case-insensitive.
    string hwid_project_key = 2;
  }

  message SigningConfig {
    // Key names have taken historically followed many different patterns.
    // To support all of the cases, this defines an explicit mapping between the
    // supported brands and corresponding keys present in the respective
    // keysets.
    // Going forward, this could be standardized, removing the need for the
    // explict mapping, but this will be required for the foreseeable future.
    map<string, string> brand_id_to_key = 1;
  }
}
