blob: b866f4059c314cc4de7d544cce058542cfe52f1a [file] [log] [blame]
// Copyright 2019 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.
syntax = "proto3";
package test_platform.suite_scheduler;
import "chromite/api/artifacts.proto";
import "chromiumos/common.proto";
import "chromiumos/branch.proto";
import "device/model_id.proto";
import "google/protobuf/timestamp.proto";
option go_package = "go.chromium.org/chromiumos/infra/proto/go/test_platform/suite_scheduler";
// The build information queried from BuildBucket DB.
message BuildInfo {
// The name of the build target (a.k.a. board name), e.g., "gale", "eve".
chromiumos.BuildTarget build_target = 1;
// The milestone number (e.g. 73).
uint32 milestone = 2;
// The chrome os version (e.g. "12240.0.0" or "").
string chrome_os_version = 3;
// Build type with the board name as the prefix, e.g.
// "RELEASE" or "FIRMWARE".
chromiumos.Branch.BranchType type = 4;
}
// The firmware build information queried from BuildBucket DB.
message FirmwareBuildInfo {
// Board name.
chromiumos.BuildTarget build_target = 1;
// Build type, "RELEASE" or "FIRMWARE". Each has different form of
// artifacts.
chromiumos.Branch.BranchType type = 2;
// Relative path to the artifact file, e.g.
// "firmware-board-12345.67.B-firmwarebranch/RFoo-1.0.0-b1e234567/board"
// for firmware type or "board-release/R81-12766.0.0" for release type.
chromite.api.Artifact artifact = 3;
}
// BranchFilter is a combination of channel, operator and
// lag, e.g. a filter of the form ">=tot-2" is stated as
// { channel = MASTER; operator = GE; lag = 2; };
// a filter of "==tot" is translated to
// { channel = MASTER; operator = EQ; lag = 0; }.
message BranchFilter {
enum Channel {
BRANCH_REF_NOT_SET = 0;
MASTER = 1;
DEV = 2;
BETA = 3;
STABLE = 4;
}
Channel channel = 1;
enum Operator {
UNDEFINED = 0;
EQ = 1; // "=="
GE = 2; // ">="
LE = 3; // "<="
}
Operator operator = 2;
// Number of minor versions behind tip-of-tree on channel.
int32 lag = 3;
}
// BuildFilters defines on which build to run a suite test.
message BuildFilters {
// If true, use the relax_builds.
bool only_hwtest_sanity_required = 1;
// BranchFilter defines the target branch of the new build.
// Note, the final result is "AND" of each single filter.
repeated BranchFilter branch_filters = 2;
// The firmware build type, e.g., "RELEASE" or "FIRMWARE". Note,
// in suite scheduler, "cros" = "RELEASE".
chromiumos.Branch.BranchType firmware_ro_build_spec = 3;
chromiumos.Branch.BranchType firmware_rw_build_spec = 4;
}
// ScheduleJobTrigger defines the trigger to kick off a suite test.
message ScheduleJobTrigger {
// WeeklyTrigger is for the suite test running every week.
// "day" is from 0 to 6.
message WeeklyTrigger {
uint32 day = 1;
}
// NightlyTrigger is for the suite test running every day.
// "hour" is from 0 to 23.
message NightlyTrigger {
uint32 hour = 1;
}
// IntervalTrigger is for the suite test running every N times the
// scheduler operates.
message IntervalTrigger {
// pause represents the number of times scheduler skips this job
// once the job completed. If pause is zero, we pick this job
// whenever scheduler is kicked off.
uint32 pause = 1;
}
oneof trigger {
WeeklyTrigger weekly = 1;
NightlyTrigger nightly = 2;
// TODO: This feature is not implemented to suite scheduler yet. So
// if IntervalTrigger is configured, pause should be zero all the time.
IntervalTrigger interval = 3;
}
BuildFilters build_filters = 4;
}
// ScheduleJob represents the schedule result for a specific board
// and model.
message ScheduleJob {
// Model.
device.ModelId model = 1;
// Board.
chromiumos.BuildTarget build_target = 2;
oneof result {
// If this job qualifies to kick off a suite test, suite scheduler
// creates a task to the task-queue and assigns an ID for tracking
// the execution.
string queued_task_id = 3;
// If the job failed to schedule a suite test, clarify the reason.
string justification = 4;
}
// Result generated time in UTC.
google.protobuf.Timestamp generated_time = 5;
}
// ScheduleJobSection represents a schedule request configured in
// suite_scheduler.ini. Varying boards and models, a job section can
// have multiple suite tests scheduled.
message ScheduleJobSection {
// job_name is the name of a schedule request defined in config,
// e.g. “CrosAVAnalysis”.
string job_name = 1;
// Trigger to run jobs under this section.
ScheduleJobTrigger schedule_job_trigger = 2;
// Specific models to run this suite.
repeated device.ModelId models = 3;
// Specific boards to run this suite.
repeated chromiumos.BuildTarget build_targets = 4;
// The build matched with this job section on BuildTarget and BuildFilters.
message MatchedBuild {
oneof cros_build {
// The release build information.
BuildInfo release_build = 1;
// relax_builds are the builds failed but met the relaxed success
// requirement. Relax builds are for the suite job configured
// "only_hwtest_sanity_required: True".
BuildInfo relax_build = 2;
// The firmware build information.
FirmwareBuildInfo firmware_ro_build = 3;
FirmwareBuildInfo firmware_rw_build = 4;
}
}
repeated MatchedBuild matched_builds = 5;
// Jobs in this section.
repeated ScheduleJob schedule_jobs = 6;
// The pool to run jobs in this section.
string pool = 7;
// The suite name this section to execute.
string suite = 8;
}
// The response received from cros_test_platform.
message ExecutionResponse {
// build id used in cros_test_platform.
string ctp_build_id = 1;
}
// The error message received from cros_test_platform.
message ExecutionError {
string error_message = 1;
}
// ExecutionTask bridges suite scheduler and cros_test_platform. With it,
// we could track the execution reuslt for a scheduled test.
message ExecutionTask {
// The ID used in JobResult, to track suite's execution.
string queued_task_id = 1;
// The scheduling result from cros_test_platform, either a build id
// error message.
oneof result {
ExecutionResponse response = 2;
ExecutionError error = 3;
}
// Request sent time in UTC.
google.protobuf.Timestamp request_sent = 4;
}