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