syntax = "proto3";
package autoroll.config;
option go_package = "go.skia.org/infra/autoroll/go/config";

// Config provides configuration for one AutoRoller.
message Config {
    // roller_name is the name for this roller. It is used as the unique ID for
    // the roller.
    // TODO(borenet): Use an actual DB-generated ID for the roller.
    string roller_name = 1;
    // child_display_name is the human-readable display name of the child.
    string child_display_name = 2;
    // parent_display_name is the human-readable display name of the parent.
    string parent_display_name = 3;
    // parent_waterfall is the URL of the waterfall display of the parent repo.
    string parent_waterfall = 4;
    // owner_primary is the primary owner of this roller.
    string owner_primary = 5;
    // owner_secondary is the secondary owner of this roller.
    string owner_secondary = 6;
    // contacts is a list of email addresses of contacts for this roller, used
    // for sending PSAs, asking questions, etc.
    repeated string contacts = 7;
    // service_account is the full email address of the service account for this
    // roller.
    string service_account = 8;
    // is_internal indicates whether this roller is internal, ie. only visible
    // to Googlers.
    // TODO(borenet): Is this necessary?
    bool is_internal = 9;
    // reviewer are the email addresses to add as reviewers on rolls, or URL(s)
    // from which to obtain those email addresses.
    repeated string reviewer = 10;
    // reviewer_backup are backup email addresses to add as reviewers on rolls,
    // in case obtaining the email addresses from the URL fails. Only required
    // if a URL is specified for the reviewer.
    repeated string reviewer_backup = 11;
    // roll_cooldown is a period of time after a successful roll attempt during
    // which no new roll attempts will be created. Optional.
    string roll_cooldown = 12;
    // time_window in which the roller is allowed to upload roll CLs. See the
    // go/time_window package for supported format.
    string time_window = 13;
    // supports_manual_rolls indicates whether this roller supports manual
    // rolls.
    bool supports_manual_rolls = 14;
    // commit_msg provides configuration for the commit message.
    CommitMsgConfig commit_msg = 15;
    // code_review provides configuration for code review.
    oneof code_review {
        // gerrit provides configuration for code review using Gerrit.
        GerritConfig gerrit = 16;
        // github provides configuration for code review using GitHub.
        GitHubConfig github = 17;
        // google3 provides configuration for code review using Google3.
        Google3Config google3 = 18;
    }
    // kubernetes provides configuration for Kubernetes.
    KubernetesConfig kubernetes = 19;
    // repo_manager provides configuration for the repo manager.
    oneof repo_manager {
        ParentChildRepoManagerConfig parent_child_repo_manager = 20;
        AndroidRepoManagerConfig android_repo_manager = 21;
        CommandRepoManagerConfig command_repo_manager = 22;
        FreeTypeRepoManagerConfig freetype_repo_manager = 23;
        FuchsiaSDKAndroidRepoManagerConfig fuchsia_sdk_android_repo_manager = 24;
        Google3RepoManagerConfig google3_repo_manager = 25;
    }
    // notifiers configures any extra notifications used by this roller.
    repeated NotifierConfig notifiers = 26;
    // safety_throttle provides configuration for safety-throttling the roller
    // in case of persistent errors.
    ThrottleConfig safety_throttle = 27;
    // transitive_deps is an optional mapping of dependency ID (eg. repo URL)
	// to the paths within the parent and child repo, respectively, where
    // those dependencies are versioned, eg. "DEPS".
    // TODO(borenet): Where is this used? Why isn't it nested within the repo
    // manager config?
    repeated TransitiveDepConfig transitive_deps = 28;
}

// CommitMsgConfig provides configuration for commit messages.
message CommitMsgConfig {
    // bug_project indicates which project (eg. in Monorail) the bugs attached
    // to various revisions are associated with.  If provided, any "Bug: " lines
    // from revisions in the roll which match the given project name will be
    // included in the roll itself.
    string bug_project = 1;
    // child_log_url_tmpl is a template for building log URLs using the IDs of
    // the from- and to-revisions of the child for a given roll.
    string child_log_url_tmpl = 2;
    // cq_extra_trybots are additional tryjobs to trigger as part of the commit
    // queue for every roll.
    repeated string cq_extra_trybots = 3;
    // cq_do_not_cancel_trybots indicates that the commit queue should not
    // cancel tryjobs from old patch sets when a new patch set is uploaded.
    bool cq_do_not_cancel_trybots = 4;
    // include_log indicates whether the list of revisions contained in the roll
    // should be included as part of the commit message.
    bool include_log = 5;
    // include_revision_count indicates whether the number of revisions
    // contained in the roll should be included in the subject line of the
    // commit message.
    bool include_revision_count = 6;
    // include_tbr_line indicates whether the "TBR:" line should be included in
    // the commit message. This is required for some commit queues.
    bool include_tbr_line = 7;
    // include_tests indicates whether the "Test: " lines from the revisions in
    // the roll should be propagated through to the roll itself.
    bool include_tests = 8;
    // extra_footers are any extra footers which should be added to all roll
    // commit messages.
    repeated string extra_footers = 11;

    // BuiltIn lists the built-in commit message templates.
    enum BuiltIn {
        // DEFAULT is the default commit message template.
        DEFAULT = 0;
        // ANDROID is the commit message template used for Android rollers.
        ANDROID = 1;
    }

    // template specifies exactly how the commit message should be structured.
    // If not specified, the default template is used.
    oneof template {
        // built_in is the name of a built-in commit message template.
        BuiltIn built_in = 9;
        // custom is a full custom commit message template string.
        string custom = 10;
    }
}

// GerritConfig provides configuration for code review using Gerrit.
message GerritConfig {
    // url of the Gerrit host.
    string url = 1;
    // project name for uploaded CLs.
    string project = 2;

    // Config lists the built-in Gerrit configs, named for the projects which
    // use them.
    enum Config {
        ANDROID = 0;
        ANGLE = 1;
        CHROMIUM = 2;
        CHROMIUM_NO_CQ = 3;
        LIBASSISTANT = 4;
        CHROMIUM_BOT_COMMIT = 5;
        CHROMIUM_BOT_COMMIT_NO_CQ = 6;
        ANDROID_NO_CR = 7;
    }
    // config indicates the mode of operation used by the Gerrit host, which
    // informs the roller of, for example, which labels to set. See the
    // autoroll/go/codereview package for possible values.
    Config config = 3;
}

// GitHubConfig provides configuration for code review using GitHub.
message GitHubConfig {
    // repo_owner is the owner of the GitHub repo.
    string repo_owner = 1;
    // repo_name is the name of the GitHub repo.
    string repo_name = 2;
    // checks_wait_for indicates which GitHub checks must succeed before a pull
    // request may be merged. If they are failing, we wait for them to succeed
    // (eg. tree-status checks). Note: These checks are ignored during dry runs
    // because the PR is not going to be submitted so the tree-status checks
    // will not be important in that case.
    repeated string checks_wait_for = 3;
}

// Google3Config is an empty configuration object for Google3.
message Google3Config {}

// KubernetesConfig provides Kubernetes configuration for the autoroll backend
// service for this roller.
message KubernetesConfig {
    // cpu is the requested number of CPUs, eg. "250m".
    string cpu = 1;
    // memory is the requested memory, eg. "2Gi".
    string memory = 2;
    // readiness_failure_threshold indicates how many times the ready check may
    // fail.
    int32 readiness_failure_threshold = 3;
    // readiness_initial_delay_seconds indicates how long to wait before
    // performing the ready check for the first time.
    int32 readiness_initial_delay_seconds = 4;
    // readiness_period_seconds indicates how often to perform the ready check.
    int32 readiness_period_seconds = 5;
    // disk indicates the size of the requested persistent disk.  If not
    // specified, no persistent disk is used.
    string disk = 6;
    // secrets provided to the pod.
    repeated KubernetesSecret secrets = 7;
}

// KubernetesSecret provides configuration for a Kubernetes secret.
message KubernetesSecret {
    // name of the secret.
    string name = 1;
    // mount_path of the secret.
    string mount_path = 2;
}

// AndroidRepoManagerConfig provides configuration for a roller which rolls into
// Android.
message AndroidRepoManagerConfig {
    // ProjectMetadataFileConfig provides configuration for METADATA files in
    // the Android repo.
    message ProjectMetadataFileConfig {
        // file_path of the project metadata file within the repo.
        string file_path = 1;
        // name of the project.
        string name = 2;
        // description of the project.
        string description = 3;
        // home_page of the project.
        string home_page = 4;
        // git_url of the project.
        string git_url = 5;
        // license_type of the project.
        string license_type = 6;
    }

    // child_repo_url is the URL of the child repo.
    string child_repo_url = 1;
    // child_branch is the Git branch of the child repo to track.
    string child_branch = 2;
    // child_path is the path to the child repo within the parent.
    string child_path = 3;
    // parent_repo_url is the URL of the parent repo.
    string parent_repo_url = 4;
    // parent_branch is the Git branch of the parent repo to track.
    string parent_branch = 5;
    // child_rev_link_tmpl is a template used to create links to revisions of
    // the child repo. If not supplied, no links will be created.
    string child_rev_link_tmpl = 6;
    // child_subdir indicates the subdirectory of the working directory (not the
    // parent repo) in which the child_path should be rooted. In most cases this
    // should be empty, but if child_path is relative to the parent repo dir
    // (eg. when DEPS specifies use_relative_paths), then this is required.
    string child_subdir = 7;
    // pre_upload_steps are named steps to run before uploading roll CLs.
    repeated PreUploadStep pre_upload_steps = 8;
    // metadata about the child project which should be updated in a file
    // checked into the parent repo.
    ProjectMetadataFileConfig metadata = 9;
    // include_authors_as_reviewers determines whether the authors of rolled
    // changes should be included as change reviewers.
    bool include_authors_as_reviewers = 10;
    // pre_upload describes command(s) to run before uploading roll CLs.
    PreUploadConfig pre_upload_commands = 11;
}

// CommandRepoManagerConfig provides configuration for a roller which runs
// specified commands to perform different functions.
message CommandRepoManagerConfig {
    message CommandConfig {
        // command to run. If this is the command used to update the revision of
        // the Child, this should be a text template which uses SetPinnedRevVars
        // to get the from- and to-revisions.
        repeated string command = 1;
        // dir is the relative path within the Git checkout to run the command.
        string dir = 2;
        // env are environment variables to supply to the command, in KEY=VALUE
        // format.
        repeated string env = 3;
    }

    // git_checkout configures the Git checkout of the parent repo.
    GitCheckoutConfig git_checkout = 1;
    // short_rev_regex is a regular expression used to shorten revision IDs for
    // display.
    string short_rev_regex = 2;
    // get_tip_rev is a command used to obtain the latest revision of the Child.
    CommandConfig get_tip_rev = 3;
    // get_pinned_rev is a command used to obtain the currently-pinned revision
    // of the Child.
    CommandConfig get_pinned_rev = 4;
    // set_pinned_rev is a command used to update the currently-pinned revision
    // of the Child.
    CommandConfig set_pinned_rev = 5;
}

// FreeTypeRepoManagerConfig provides configuration for the FreeType roller.
message FreeTypeRepoManagerConfig {
    FreeTypeParentConfig parent = 1;
    GitilesChildConfig child = 2;
}

// FuchsiaSDKAndroidRepoManagerConfig provides configuration for the Fuchsia SDK
// into Android roller.
message FuchsiaSDKAndroidRepoManagerConfig {
    GitCheckoutParentConfig parent = 1;
    FuchsiaSDKChildConfig child = 2;
    // gen_sdk_bp_repo is the repo URL for the generation script.
    string gen_sdk_bp_repo = 3;
    // gen_sdk_bp_branch is the branch of the generation script.
    string gen_sdk_bp_branch = 4;
}

// Google3RepoManagerConfig provides configuration for a roller into Google3.
message Google3RepoManagerConfig {
    // child_branch is the branch of the child repo to track.
    string child_branch = 1;
    // child_repo is the URL of the child repo.
    string child_repo = 2;
}

// ParentChildRepoManagerConfig provides configuration for a roller which
// combines a pre-defined Parent and Child type.
message ParentChildRepoManagerConfig {
    // parent is the entity which depends on the child and receives the rolls.
    oneof parent {
        CopyParentConfig copy_parent = 1;
        DEPSLocalGitHubParentConfig deps_local_github_parent = 2;
        DEPSLocalGerritParentConfig deps_local_gerrit_parent = 3;
        GitCheckoutGitHubFileParentConfig git_checkout_github_file_parent = 4;
        GitilesParentConfig gitiles_parent = 5;
    }
    // child is the entity which is depended on by the parent and is rolled.
    oneof child {
        CIPDChildConfig cipd_child = 6;
        FuchsiaSDKChildConfig fuchsia_sdk_child = 7;
        GitCheckoutChildConfig git_checkout_child = 8;
        GitCheckoutGitHubChildConfig git_checkout_github_child = 9;
        GitilesChildConfig gitiles_child = 10;
        SemVerGCSChildConfig semver_gcs_child = 11;
    }
    // revision_filter filters out revisions of the child which should not be
    // considered as roll candidates.
    oneof revision_filter {
        BuildbucketRevisionFilterConfig buildbucket_revision_filter = 12;
    }
}

// CopyParentConfig provides configuration for a Parent which copies the Child
// into itself. It uses Gitiles and Gerrit instead of a local checkout.
message CopyParentConfig {
    message CopyEntry {
        // src_rel_path is the relative path within the Child.
        string src_rel_path = 1;
        // dst_rel_path is the relative path within the Parent.
        string dst_rel_path = 2;
    }

    GitilesParentConfig gitiles = 1;
    repeated CopyEntry copies = 2;
}

// DEPSLocalGitHubParentConfig provides configuration for a Parent which uses a
// local Git checkout with DEPS and uploads pull requests to GitHub.
message DEPSLocalGitHubParentConfig {
    DEPSLocalParentConfig deps_local = 1;
    GitHubConfig github = 2;
    string fork_repo_url = 3;
}

// DEPSLocalGerritParentConfig provides configuration for a Parent which uses a
// local Git checkout with DEPS and uploads CLs to Gerrit.
message DEPSLocalGerritParentConfig {
    DEPSLocalParentConfig deps_local = 1;
    GerritConfig gerrit = 2;
}

// GitCheckoutGitHubParentConfig provides configuration for a Parent which
// uses a local Git checkout and uploads pull requests to GitHub.
// TODO(borenet): Why doesn't this contain the GitHubConfig? Is this even
// needed?
message GitCheckoutGitHubParentConfig {
    GitCheckoutParentConfig git_checkout = 1;
    string fork_repo_url = 2;
}

// GitCheckoutGitHubFileParentConfig provides configuration for a Parent which
// uses a local Git checkout and uploads pull requests to GitHub.
message GitCheckoutGitHubFileParentConfig {
    GitCheckoutGitHubParentConfig git_checkout = 1;
    repeated PreUploadStep pre_upload_steps = 2;
    // pre_upload describes command(s) to run before uploading roll CLs.
    PreUploadConfig pre_upload_commands = 3;
}

// GitilesParentConfig provides configuration for a Parent which uses Gitiles.
message GitilesParentConfig {
    GitilesConfig gitiles = 1;
    DependencyConfig dep = 2;
    GerritConfig gerrit = 3;
}

// GitilesConfig provides configuration for a Git repo in Gitiles.
message GitilesConfig {
    // branch to track.
    string branch = 1;
    // repo_url from which to load Git data.
    string repo_url = 2;
    // dependencies is an optional specification of dependencies to track.
    // Revisions generated by the checkout will contain the pinned versions of
    // these dependencies.
    repeated VersionFileConfig dependencies = 3;
}

// DEPSLocalConfig provides configuration for a Parent which uses a local
// checkout and DEPS to manage dependencies.
message DEPSLocalParentConfig {
    GitCheckoutParentConfig git_checkout = 1;
    // child_path is the path to the child repo within the parent.
    string child_path = 2;
    // child_subdir is the subdirectory of the workdir in which the child_path
    // should be rooted.  In most cases, this should be empty, but if child_path
    // is relative to the parent repo dir (eg. when DEPS specifies
    // use_relative_paths), then this is required.
    string child_subdir = 3;
    // checkout_path is the path to the repo within the checkout root
    string checkout_path = 4;
    // gclient_spec overrides the default gclient spec.
    string gclient_spec = 5;
    // pre_upload_steps are steps to run before uploading the CL.
    repeated PreUploadStep pre_upload_steps = 6;
    // run_hooks indicates whether to run "gclient runhooks" after syncing.
    bool run_hooks = 7;
    // pre_upload describes command(s) to run before uploading roll CLs.
    PreUploadConfig pre_upload_commands = 8;
}

// GitCheckoutParentConfig provides configuration for a Parent which uses a
// local checkout to create changes.
message GitCheckoutParentConfig {
    GitCheckoutConfig git_checkout = 1;
    DependencyConfig dep = 2;
}

// FreeTypeParentConfig provides configuration for the FreeType Parent.
message FreeTypeParentConfig {
    GitilesParentConfig gitiles = 1;
}

// CIPDChildConfig provides configuration for a CIPD package Child.
message CIPDChildConfig {
    // name of the package.
    string name = 1;
    // tag to track.
    string tag = 2;
    // gitiles_repo is an optional config for a git repo which should be used
    // for generating the list of revisions in a roll. Both the old and new
    // CIPD package version must provide a git_revision tag in order for this
    // to work.
    string gitiles_repo = 4;
}

// FuchsiaSDKChildConfig provides configuration for the Fuchsia SDK Child.
message FuchsiaSDKChildConfig {
    // include_mac_sdk indicates whether to also roll the version of the Mac
    // SDK. Note that the dependency is not tracked separately; the Mac SDK is
    // simply rolled to the newest available version.
    bool include_mac_sdk = 1;
}

// SemVerGCSChildConfig provides configuration for a Child in GCS which uses
// semantic versioning.
message SemVerGCSChildConfig {
    GCSChildConfig gcs = 1;
    // short_rev_regex is a regular expression string which indicates what part
    // of the revision ID string should be used as the shortened ID for display.
    // If not specified, the full ID string is used.
    string short_rev_regex = 2;
    // version_regex is a regular expression string containing one or more
	// integer capture groups. The integers matched by the capture groups are
    // compared, in order, when comparing two revisions.
    string version_regex = 3;
}

// GCSChildConfig provides configuration for a Child in GCS.
message GCSChildConfig {
    // gcs_bucket used for finding Child revisions.
    string gcs_bucket = 1;
    // gcs_path within the bucket which contains child revisions.
    string gcs_path = 2;
}

// GitCheckoutChildConfig provides configuration for a Child which uses a local
// Git checkout.
message GitCheckoutChildConfig {
    GitCheckoutConfig git_checkout = 1;
}

// GitCheckoutGitHubChildConfig provides configuration for a Child which uses a
// local checkout of a GitHub repo.
message GitCheckoutGitHubChildConfig {
    GitCheckoutChildConfig git_checkout = 1;
    string repo_owner = 2;
    string repo_name = 3;
}

// GitilesChildConfig provides configuration for a Child which uses Gitiles.
message GitilesChildConfig {
    GitilesConfig gitiles = 1;
    // path indicates an optional single path of the repo to watch for changes;
    // all commits which do not change this path are ignored.  Note that this
    // may produce strange results if the Git history for the path is not
    // linear.
    string path = 2;
}

// PreUploadStep lists the known pre-upload steps which may be run before roll
// CLs are uploaded. These must be kept in sync with
// go/repo_manager/parent/pre_upload_steps.go.
enum PreUploadStep {
    ANGLE_CODE_GENERATION = 0;
    ANGLE_GN_TO_BP = 1;
    ANGLE_ROLL_CHROMIUM = 2;
    GO_GENERATE_CIPD = 3;
    FLUTTER_LICENSE_SCRIPTS = 4;
    FLUTTER_LICENSE_SCRIPTS_FOR_DART = 5;
    FLUTTER_LICENSE_SCRIPTS_FOR_FUCHSIA = 6;
    SKIA_GN_TO_BP = 7;
    TRAIN_INFRA = 8;
    UPDATE_FLUTTER_DEPS_FOR_DART = 9;
    VULKAN_DEPS_UPDATE_COMMIT_MESSAGE = 10;
    UPDATE_BORINGSSL = 11;
    CHROMIUM_ROLL_WEBGPU_CTS = 12;
}


// NotifierConfig provides configuration for a notification system.
message NotifierConfig {
    // LogLevel categorizes messages similarly to log severity.
    enum LogLevel {
        SILENT = 0;
        ERROR = 1;
        WARNING = 2;
        INFO = 3;
        DEBUG = 4;
    }

    // MsgType categorizes notifications based on their type.
    enum MsgType {
        ISSUE_UPDATE = 0;
        LAST_N_FAILED = 1;
        MODE_CHANGE = 2;
        NEW_FAILURE = 3;
        NEW_SUCCESS = 4;
        ROLL_CREATION_FAILED = 5;
        SAFETY_THROTTLE = 6;
        STRATEGY_CHANGE = 7;
        SUCCESS_THROTTLE = 8;
    }

    // log_level allows all messages at and above the given severity to be
    // sent. Mutually exclusive with msg_type.
    LogLevel log_level = 1;
    // msg_type limits the notifier to only send messages of the given
    // types. Mutually exclusive with log_level.
    repeated MsgType msg_type = 2;

    // config provides configuration for the specific type of notifier.
    oneof config {
        EmailNotifierConfig email = 3;
        ChatNotifierConfig chat = 4;
        MonorailNotifierConfig monorail = 5;
        PubSubNotifierConfig pubsub = 6;
    }

    // subject indicates a subject line which overrides the default subject line
    // for every notification message, if provided.
    string subject = 7;
}

// EmailNotifierConfig provides configuration for email notifications.
message EmailNotifierConfig {
    // emails are the email addresses which should receive notifications.
    repeated string emails = 1;
}

// ChatNotifierConfig provides configuration for Google Chat notifications.
message ChatNotifierConfig {
    // room_id in which to post messages.
    string room_id = 1;
}

// MonorailNotifierConfig provides configuration for bug-filing "notifications"
// using Monorail.
message MonorailNotifierConfig {
    // project name under which to file bugs. Required.
    string project = 1;
    // owner of bugs filed in Monorail. Required.
    string owner = 2;
    // cc these email addresses on bugs filed in Monorail.
    repeated string cc = 3;
    // components to apply to bugs filed in Monorail.
    repeated string components = 4;
    // labels to apply to bugs filed in Monorail.
    repeated string labels = 5;
}

// PubSubNotifierConfig provides configuration for PubSub notifications.
message PubSubNotifierConfig {
    // topic under which to publish PubSub messages.
    string topic = 1;
}

// ThrottleConfig provides configuration for throttling.
message ThrottleConfig {
    // attempt_count indicates the number of failed attempts after which to
    // begin throttling.
    int32 attempt_count = 1;
    // time_window during which, if the number of failed attempts exceeds the
    // specified attempt_count, throttling is enabled.
    string time_window = 2;
}

// TransitiveDepConfig provides configuration for a dependency referenced by
// both the parent and child, to be updated in the parent to match the revision
// depended on by the child at the revision being rolled.
message TransitiveDepConfig {
    // child dependency information.
    VersionFileConfig child = 1;
    // parent dependency information.
    VersionFileConfig parent = 2;
}

// VersionFileConfig provides configuration for a dependency whose version is
// pinned within a particular file.
message VersionFileConfig {
    // id of the dependency to be rolled, eg. a repo URL.
    string id = 1;
    // path within the repo of the file which pins the dependency.
    string path = 2;
}

// DependencyConfig provides configuration for a dependency whose version is
// pinned in a file and which may have transitive dependencies.
message DependencyConfig {
    // primary dependency.
    VersionFileConfig primary = 1;
    // transitive dependencies.
    repeated TransitiveDepConfig transitive = 2;
}

// GitCheckoutConfig provides configuration for a Git checkout.
message GitCheckoutConfig {
    // branch to track.
    string branch = 1;
    // repo_url to check out.
    string repo_url = 2;
    // rev_link_tmpl is an optional template used for generating links to
    // revisions. If not specified, revisions generated by the checkout will not
    // have an associated URL.
    string rev_link_tmpl = 3;
    // dependencies is an optional specification of dependencies to track.
    // Revisions generated by the checkout will contain the pinned versions of
    // these dependencies.
    repeated VersionFileConfig dependencies = 4;
}

// BuildbucketRevisionFilterConfig provides configuration for a revision filter
// which uses Buildbucket.
message BuildbucketRevisionFilterConfig {
    string project = 1;
    string bucket = 2;
    string buildset_commit_tmpl = 3;
    repeated string builder = 4;
}

// PreUploadConfig describes additional steps to run after updating the
// dependency but before uploading the CL, on rollers which use a local
// checkout.
message PreUploadConfig {
    // CIPD packages needed by the command(s).
    repeated PreUploadCIPDPackageConfig cipd_package = 1;
    // Command(s) to run.
    repeated PreUploadCommandConfig command = 2;
}

// PreUploadCommandConfig describes a command to run.
message PreUploadCommandConfig {
    // Command to run.
    string command = 1;
    // Working directory in which to run the command.
    string cwd = 2;
    // Environment variables needed by the command, in "KEY=VALUE" format.
    repeated string env = 3;
    // If true, log the error returned by the command but don't error out.
    bool ignore_failure = 4;
}

// CIPDPackageConfig describes a CIPD package.
message PreUploadCIPDPackageConfig {
    // Full CIPD package name.
    string name = 1;
    // Relative path within the root dir to install the package.
    string path = 2;
    // Version of the package.
    string version = 3;
}
