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


// WARNING: DO NOT USE these protos outside of suite scheduler. This is
// only intended to help the transition to starlark configs. It will
// be deprecated once the new replacement is in place.
syntax = "proto3";

package testplans;

option go_package = "go.chromium.org/chromiumos/infra/proto/go/testplans";


// Defines a board, its variants and its models.
message Board {
    // Name of the board. Eg: eve.
    string name = 1;

    // List of variants assiciated with the board.
    // This should only be the suffixes. Eg: ['-kernelnext'].
    repeated string variants = 2;

    // List of models of the boards to test on.
    repeated string models = 3;
}

// Aims to reflect data in lab_config.ini.
message LabConfig {
    // List of board definitions.
    repeated Board boards = 1;
}

// Specify a Board and Variant pair.
message BoardVariant {
    string board = 1;
    string variant = 2;
}

// Branches that can be targeted.
enum Branch {
    BRANCH_UNSPECIFIED = 0;
    // Canary Branch or ToT.
    CANARY = 1;
    // Dev Branch or ToT-1.
    DEV = 2;
    // Beta Branch or ToT-2.
    BETA = 3;
    // Stable Branch or ToT-3.
    STABLE = 4;
}

// Most fields are the same as suite_scheduler.ini just better organized.
// The entries will be used to generate a suite_scheduler.ini in starlark scripts.
message SchedulerConfig {
    // Name of the config. Needs to be unique.
    string name = 1;

    // Name of the suite to run.
    string suite = 2;

    // Contact emails will one day be paged in case of problems with the config.
    message Contact {
        string email = 1;
    }
    repeated Contact contacts = 3;

    // LaunchCriteria specifies when the suite should be launched.
    message LaunchCriteria {
        // LaunchProfile defines how often the suite is launched.
        enum LaunchProfile {
            UNSPECIFIED = 0;
            // Run on every new release build of the boards/variants targeted.
            NEW_BUILD = 1;
            // Run once a day at the specified hour. Used to be "NIGHTLY".
            DAILY = 2;
            // Run once a week at the specified time.
            WEEKLY = 3;
            // NOT SUPPORTED. Will be supported in the redesign.
            CRON_BASED = 4;
        }
        LaunchProfile launch_profile = 1;
        // Hour at which to run. Needs to be specified for nightly and weekly profiles.
        // Has to be [0, 23].
        int32 hour = 2;
        // Day on which to run. Needs to be specified for weekly profile.
        // Has to be [0, 6].
        int32 day = 3;
        // NOT SUPPORTED. Cron compatible schedule eg: "* * 1,3,5 * *".
        string cron_schedule = 4;
    }
    LaunchCriteria launch_criteria = 4;

    // Branches to target.
    repeated Branch branches = 5;

    // Set of boards, variants and models to target.
    message TargetOptions {
        // Use at the most one among the two fields below. If boards_list is empty,
        // all boards are targeted. exclude_boards will exclude those boards from
        // the all boards list.
        repeated string boards_list = 1;
        repeated string exclude_boards = 2;

        // To specify variants, either all variants can be skipped.
        bool skip_variants = 8;
        // OR use at the most one among the two fields below. If variants_list is empty,
        // all variants are targeted. exclude_variants will exclude those variants
        // from the all variants list.
        repeated BoardVariant variants_list = 3;
        repeated BoardVariant exclude_variants = 4;

        // There's two ways of specifying models. If all of these fields are empty,
        // all possible models are targeted.
        // Models to be targeted can be listed explicitly in models_list.
        repeated string models_list = 5;
        // OR start with the complete list and exclude some specific models.
        // any_model only tests the suite on a single model.
        bool any_model = 6;
        repeated string exclude_models = 7;
    }
    TargetOptions target_options = 6;

    // Aggregate of options related to DUT pool.
    message PoolOptions {
        // Quota Scheduler account to use.
        string qs_account = 1;
        // Pool to schedule on.
        string pool = 2;
        // Integer priority to assign. Only used by CTS. Quota scheduler takes care of
        // priorities for the rest. Has to be [20, 255].
        int32 priority = 3;
    }
    PoolOptions pool_options = 7;

    // Whether to use firmware from ToT or firmware branch.
    enum FirmwareBranch {
        UNSPECIFIED = 0;
        // ToT branch.
        CROS = 1;
        // Firmware branch.
        FIRMWARE = 2;
    }
    FirmwareBranch firmware_ro_build_spec = 8;

    enum TriggerType {
      // Trigger test whenever there is a new build for the primary board.
      PRIMARY = 0;
      // Trigger test when every board in the group has a new build.
      ALL = 1;
    }
    // Execution related options.
    message RunOptions {
        // Whether to retry if the task fails.
        bool retry = 1;

        // A list of extra labels/dimensions to attach.
        // Extra Swarming Dimensions that can be specified.
        message SwarmingDimension {
            string key = 1;
            string value = 2;
        }
        repeated SwarmingDimension dimensions = 2;

        // Timeout of the task.
        int32 timeout_mins = 3;
        // If sanity HW test passed, launch this test. Irrespective of the release build's
        // final status.
        bool only_sanity_test_required = 4; 
        TriggerType trigger_type = 5;
    }
    RunOptions run_options = 9;

    // Name of the config, used for analytics. Does not have to be unique.
    string analytics_name = 10;
}

// A proto to contain all the configs.
message SchedulerCfg {
    repeated SchedulerConfig configs = 1;
}
