blob: 01d31b50a3e1721fbd4427ad51de65f397e3d473 [file] [log] [blame]
// Copyright 2023 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 chromiumos.build.api;
option go_package = "go.chromium.org/chromiumos/config/go/build/api";
message SubtoolPackage {
// The name of the package. May be referenced in cipd. Must not contain a /.
string name = 1;
enum ExportType {
EXPORT_UNSPECIFIED = 0;
EXPORT_CIPD = 1;
EXPORT_GCS = 2;
}
// How the package should be exported.
ExportType type = 2;
// The maximum number of files expected to be packaged. Export will fail if
// this would be exceeded.
int32 max_files = 3;
// The cipd package prefix. If not specified, defaults to
// chromiumos/infra/tools/.
string cipd_prefix = 4;
// Input paths relative to the SDK root. Pattern matching is permitted.
// Any dynamically linked ELFs are automatically wrapped with lddtree.
repeated PathMapping paths = 5;
message PathMapping {
// The source file (or files) to bundle. Glob syntax used by pathlib.Path
// is supported (go/pathlib#pathlib.Path.glob). Paths match files installed
// in the subtools chroot. If nothing matches, export will fail.
repeated string input = 1;
// The target path relative to the export destination. Default: "/bin".
string dest = 2;
// The file prefix to strip before copying to `dest`. Default: "^.*/".
// Export fails if this does not match all files matching `glob`.
string strip_prefix_regex = 3;
// A portage package (e.g., app-editors/vim) whose installed files are
// matched against `glob`. If unspecified, all files in the chroot are
// candidates to match.
string ebuild_filter = 4;
// Whether to treat all entries in this PathMapping as "opaque" data files.
// There will be no attempt to discover and bundle any dependencies.
bool opaque_data = 5;
}
// Describes how a bundled package could have changed from a prior bundle.
enum Change {
// Select the default change type configured in the subtools builder.
CHANGE_UNSPECIFIED = 0;
// The Build ID of any binary in the bundle has changed, or any file without
// a Build ID has changed, or the revision of any ebuild that contributed
// files to the bundle has changed.
CHANGE_BUILD_ID_OR_REVISION = 1;
// The revision of any ebuild contributing files to the bundle has changed.
CHANGE_REVISION_ONLY = 2;
}
// The type of change that will trigger a new upload.
Change upload_trigger = 6;
// When exporting to GCS, archives will be written to:
// gs://${BUCKET}/${PREFIX}/${NAME}/${PVR}/${HASH}.${EXTENSION}
// Where BUCKET, PREFIX, and EXTENSION are configurable using
// GcsExportOptions. NAME is the package name, and HASH is a checksum of the
// bundle contents. PVR is the package version and revision of the package
// that installed the subtool config.
message GcsExportOptions {
// The bucket name to export to.
string bucket = 1;
// An optional subdirectory prefix to use in the bucket.
string prefix = 2;
// The archive format to use. Right now only .tar.zst is supported.
enum ArchiveFormat {
ARCHIVE_FORMAT_UNSPECIFIED = 0;
ARCHIVE_FORMAT_TAR_ZST = 1;
}
ArchiveFormat archive_format = 3;
}
GcsExportOptions gcs_export_options = 7;
enum SymlinkMode {
// Default behavior (currently SYMLINK_RESOLVE, but subject to change).
SYMLINK_DEFAULT = 0;
// Resolve symlinks to files, potentially creating duplicate files. This is
// the safest behavior, but potentially creates sub-optimal archives.
SYMLINK_RESOLVE = 1;
// Preserve original symlinks. Beware of the limitations:
//
// - Installing a symlink to an absolute path will result in an error.
// - Absolutely no translation of symlink paths is attempted. I.e., if you
// re-locate files with PathMappings, things may not work.
// - Symlinks which do not resolve to a path inside the result bundle will
// result in an error.
//
// That being said, it's an effective way to reduce the size of large
// bundles like toolchains, so if you think you can work around these
// thorns, go for it.
SYMLINK_PRESERVE = 2;
}
SymlinkMode symlink_mode = 8;
}