// Copyright 2019 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

syntax = "proto2";

package scheduler;

// Model of .ci.yaml.
// Next ID: 4
message SchedulerConfig {
    // Targets to run from this config.
    repeated Target targets = 1;
    // Git branches to run these targets against.
    repeated string enabled_branches = 2;
    // Universal platform args passed to LUCI builders.
    // Keys are the platform and values are the properties.
    map<string, Properties> platform_properties = 3;
    // Next ID: 2
    message Properties {
        // Generic key, value that can be passed anywhere.
        map<string, string> properties = 1;
    }
}

// A unit of work for infrastructure to run.
// Next ID: 15
message Target {
    // Unique, human readable identifier.
    optional string name = 1;
    // Names of other targets required to succeed before triggering this target.
    repeated string dependencies = 2;
    // Whether this target is stable and can be used to gate commits.
    // Defaults to false which blocks builds and does not run in presubmit.
    optional bool bringup = 3 [default = false];
    // Number of minutes this target is allowed to run before being marked as failed.
    optional int32 timeout = 4 [default = 30];
    // Name of the testbed this target will run on.
    // Defaults to a linux vm.
    optional string testbed = 5 [default = 'linux-vm'];
    // Properties to configure infrastructure tooling.
    map<string, string> properties = 6;
    // Name of the LUCI builder to trigger.
    optional string builder = 7 [deprecated = true];
    // Name of the scheduler to trigger this target.
    // Defaults to being triggered by cocoon.
    optional SchedulerSystem scheduler = 8 [default = cocoon];
    // Whether target should run pre-submit. Defaults to true, will run in presubmit.
    optional bool presubmit = 9 [default = true];
    // Whether target should run post-submit. Defaults to true, will run in postsubmit.
    optional bool postsubmit = 10 [default = true];
    // List of paths that trigger this target in presubmit when there is a diff.
    // If no paths are given, it will always run.
    repeated string run_if = 11;
    // Override of enabled_branches for this target (for release targets).
    repeated string enabled_branches = 12;
    // Name of the LUCI recipe to use for the builder.
    optional string recipe = 13;
    reserved 14; // tags
    // Properties to configure infrastructure tooling for only postsubmit runs.
    map<string, string> postsubmit_properties = 15;
}

// Schedulers supported in SchedulerConfig.
// Next ID: 4
enum SchedulerSystem {
    // Cocoon will handle all actions for the target (initial trigger, retries).
    cocoon = 1;
    // LUCI triggers the build when mirrored to GoB. Cocoon triggers retries.
    luci = 2;
    // Google internally uses Flutter, and validates if tip-of-tree causes breakages.
    google_internal = 3;
}
