blob: e4ece9b1ec3bd6e7ac087ab1377752e16afec179 [file] [log] [blame]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Define a schema for representing container images generated during a build.
// For a given build target, we map container name to metadata about the image
// Then, for multiple builds, we map build target to each one's metadata.
//
// Joining multiple builds container metadata is simply achieved by using
// MergeFrom on the individual ContainerMetadata instances.
//
// Example metadata:
// {
// "containers" : {
// "amd64-generic" : {
// "images" : {
// "cros-provision" : {
// "repository" : { "hostname" : "gcr.io", "project" : "chromeos-bot" },
// "name" : "cros-provision",
// "digest" : "sha256:3e36d3622f5adad01080cc2120bb72c0714ecec6118eb9523586410b7435ae80",
// "tags" : [
// "8835841547076258945",
// "amd64-generic-release.R96-1.2.3"
// ]
// }
// }
// }
// }
//
syntax = "proto3";
package chromiumos.build.api;
option go_package = "go.chromium.org/chromiumos/config/go/build/api";
message GcrRepository {
string hostname = 1; // Hostname without protocol (eg: gcr.io)
string project = 2; // Project name (eg: chromeos-bot)
}
message ContainerImageInfo {
GcrRepository repository = 1; // repository images are stored in
string name = 2; // name of the image (eg: cros-provision)
string digest = 3; // docker provided hash of the image
repeated string tags = 4; // list of tags attached to image
}
// Map from container name (canonically lowercase) to its metadata
message ContainerImageMap {
map<string, ContainerImageInfo> images = 1;
}
// Map from a string identifier to container metadata.
// For build we'll map the build target to container metadata for it
// For provisioning, we'll map from specific boards to metadata
message ContainerMetadata {
map<string, ContainerImageMap> containers = 1;
}