1*d5c09012SAndroid Build Coastguard Worker// Copyright 2023 Google LLC 2*d5c09012SAndroid Build Coastguard Worker// 3*d5c09012SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*d5c09012SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*d5c09012SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*d5c09012SAndroid Build Coastguard Worker// 7*d5c09012SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*d5c09012SAndroid Build Coastguard Worker// 9*d5c09012SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*d5c09012SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*d5c09012SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*d5c09012SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*d5c09012SAndroid Build Coastguard Worker// limitations under the License. 14*d5c09012SAndroid Build Coastguard Worker 15*d5c09012SAndroid Build Coastguard Workersyntax = "proto3"; 16*d5c09012SAndroid Build Coastguard Worker 17*d5c09012SAndroid Build Coastguard Workerpackage google.cloud.batch.v1alpha; 18*d5c09012SAndroid Build Coastguard Worker 19*d5c09012SAndroid Build Coastguard Workerimport "google/api/field_behavior.proto"; 20*d5c09012SAndroid Build Coastguard Workerimport "google/api/resource.proto"; 21*d5c09012SAndroid Build Coastguard Workerimport "google/cloud/batch/v1alpha/volume.proto"; 22*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/duration.proto"; 23*d5c09012SAndroid Build Coastguard Workerimport "google/protobuf/timestamp.proto"; 24*d5c09012SAndroid Build Coastguard Worker 25*d5c09012SAndroid Build Coastguard Workeroption csharp_namespace = "Google.Cloud.Batch.V1Alpha"; 26*d5c09012SAndroid Build Coastguard Workeroption go_package = "cloud.google.com/go/batch/apiv1alpha/batchpb;batchpb"; 27*d5c09012SAndroid Build Coastguard Workeroption java_multiple_files = true; 28*d5c09012SAndroid Build Coastguard Workeroption java_outer_classname = "TaskProto"; 29*d5c09012SAndroid Build Coastguard Workeroption java_package = "com.google.cloud.batch.v1alpha"; 30*d5c09012SAndroid Build Coastguard Workeroption objc_class_prefix = "GCB"; 31*d5c09012SAndroid Build Coastguard Workeroption php_namespace = "Google\\Cloud\\Batch\\V1alpha"; 32*d5c09012SAndroid Build Coastguard Workeroption ruby_package = "Google::Cloud::Batch::V1alpha"; 33*d5c09012SAndroid Build Coastguard Worker 34*d5c09012SAndroid Build Coastguard Worker// Compute resource requirements. 35*d5c09012SAndroid Build Coastguard Worker// 36*d5c09012SAndroid Build Coastguard Worker// ComputeResource defines the amount of resources required for each task. 37*d5c09012SAndroid Build Coastguard Worker// Make sure your tasks have enough resources to successfully run. 38*d5c09012SAndroid Build Coastguard Worker// If you also define the types of resources for a job to use with the 39*d5c09012SAndroid Build Coastguard Worker// [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate) 40*d5c09012SAndroid Build Coastguard Worker// field, make sure both fields are compatible with each other. 41*d5c09012SAndroid Build Coastguard Workermessage ComputeResource { 42*d5c09012SAndroid Build Coastguard Worker // The milliCPU count. 43*d5c09012SAndroid Build Coastguard Worker // 44*d5c09012SAndroid Build Coastguard Worker // `cpuMilli` defines the amount of CPU resources per task in milliCPU units. 45*d5c09012SAndroid Build Coastguard Worker // For example, `1000` corresponds to 1 vCPU per task. If undefined, the 46*d5c09012SAndroid Build Coastguard Worker // default value is `2000`. 47*d5c09012SAndroid Build Coastguard Worker // 48*d5c09012SAndroid Build Coastguard Worker // If you also define the VM's machine type using the `machineType` in 49*d5c09012SAndroid Build Coastguard Worker // [InstancePolicy](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicy) 50*d5c09012SAndroid Build Coastguard Worker // field or inside the `instanceTemplate` in the 51*d5c09012SAndroid Build Coastguard Worker // [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate) 52*d5c09012SAndroid Build Coastguard Worker // field, make sure the CPU resources for both fields are compatible with each 53*d5c09012SAndroid Build Coastguard Worker // other and with how many tasks you want to allow to run on the same VM at 54*d5c09012SAndroid Build Coastguard Worker // the same time. 55*d5c09012SAndroid Build Coastguard Worker // 56*d5c09012SAndroid Build Coastguard Worker // For example, if you specify the `n2-standard-2` machine type, which has 2 57*d5c09012SAndroid Build Coastguard Worker // vCPUs each, you are recommended to set `cpuMilli` no more than `2000`, or 58*d5c09012SAndroid Build Coastguard Worker // you are recommended to run two tasks on the same VM if you set `cpuMilli` 59*d5c09012SAndroid Build Coastguard Worker // to `1000` or less. 60*d5c09012SAndroid Build Coastguard Worker int64 cpu_milli = 1; 61*d5c09012SAndroid Build Coastguard Worker 62*d5c09012SAndroid Build Coastguard Worker // Memory in MiB. 63*d5c09012SAndroid Build Coastguard Worker // 64*d5c09012SAndroid Build Coastguard Worker // `memoryMib` defines the amount of memory per task in MiB units. 65*d5c09012SAndroid Build Coastguard Worker // If undefined, the default value is `2000`. 66*d5c09012SAndroid Build Coastguard Worker // If you also define the VM's machine type using the `machineType` in 67*d5c09012SAndroid Build Coastguard Worker // [InstancePolicy](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicy) 68*d5c09012SAndroid Build Coastguard Worker // field or inside the `instanceTemplate` in the 69*d5c09012SAndroid Build Coastguard Worker // [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate) 70*d5c09012SAndroid Build Coastguard Worker // field, make sure the memory resources for both fields are compatible with 71*d5c09012SAndroid Build Coastguard Worker // each other and with how many tasks you want to allow to run on the same VM 72*d5c09012SAndroid Build Coastguard Worker // at the same time. 73*d5c09012SAndroid Build Coastguard Worker // 74*d5c09012SAndroid Build Coastguard Worker // For example, if you specify the `n2-standard-2` machine type, which has 8 75*d5c09012SAndroid Build Coastguard Worker // GiB each, you are recommended to set `memoryMib` to no more than `8192`, 76*d5c09012SAndroid Build Coastguard Worker // or you are recommended to run two tasks on the same VM if you set 77*d5c09012SAndroid Build Coastguard Worker // `memoryMib` to `4096` or less. 78*d5c09012SAndroid Build Coastguard Worker int64 memory_mib = 2; 79*d5c09012SAndroid Build Coastguard Worker 80*d5c09012SAndroid Build Coastguard Worker // The GPU count. 81*d5c09012SAndroid Build Coastguard Worker // 82*d5c09012SAndroid Build Coastguard Worker // Not yet implemented. 83*d5c09012SAndroid Build Coastguard Worker int64 gpu_count = 3; 84*d5c09012SAndroid Build Coastguard Worker 85*d5c09012SAndroid Build Coastguard Worker // Extra boot disk size in MiB for each task. 86*d5c09012SAndroid Build Coastguard Worker int64 boot_disk_mib = 4; 87*d5c09012SAndroid Build Coastguard Worker} 88*d5c09012SAndroid Build Coastguard Worker 89*d5c09012SAndroid Build Coastguard Worker// Status event 90*d5c09012SAndroid Build Coastguard Workermessage StatusEvent { 91*d5c09012SAndroid Build Coastguard Worker // Type of the event. 92*d5c09012SAndroid Build Coastguard Worker string type = 3; 93*d5c09012SAndroid Build Coastguard Worker 94*d5c09012SAndroid Build Coastguard Worker // Description of the event. 95*d5c09012SAndroid Build Coastguard Worker string description = 1; 96*d5c09012SAndroid Build Coastguard Worker 97*d5c09012SAndroid Build Coastguard Worker // The time this event occurred. 98*d5c09012SAndroid Build Coastguard Worker google.protobuf.Timestamp event_time = 2; 99*d5c09012SAndroid Build Coastguard Worker 100*d5c09012SAndroid Build Coastguard Worker // Task Execution 101*d5c09012SAndroid Build Coastguard Worker TaskExecution task_execution = 4; 102*d5c09012SAndroid Build Coastguard Worker 103*d5c09012SAndroid Build Coastguard Worker // Task State 104*d5c09012SAndroid Build Coastguard Worker TaskStatus.State task_state = 5; 105*d5c09012SAndroid Build Coastguard Worker} 106*d5c09012SAndroid Build Coastguard Worker 107*d5c09012SAndroid Build Coastguard Worker// This Task Execution field includes detail information for 108*d5c09012SAndroid Build Coastguard Worker// task execution procedures, based on StatusEvent types. 109*d5c09012SAndroid Build Coastguard Workermessage TaskExecution { 110*d5c09012SAndroid Build Coastguard Worker // When task is completed as the status of FAILED or SUCCEEDED, 111*d5c09012SAndroid Build Coastguard Worker // exit code is for one task execution result, default is 0 as success. 112*d5c09012SAndroid Build Coastguard Worker int32 exit_code = 1; 113*d5c09012SAndroid Build Coastguard Worker 114*d5c09012SAndroid Build Coastguard Worker // Optional. The tail end of any content written to standard error by the task 115*d5c09012SAndroid Build Coastguard Worker // execution. This field will be populated only when the execution failed. 116*d5c09012SAndroid Build Coastguard Worker string stderr_snippet = 2 [(google.api.field_behavior) = OPTIONAL]; 117*d5c09012SAndroid Build Coastguard Worker} 118*d5c09012SAndroid Build Coastguard Worker 119*d5c09012SAndroid Build Coastguard Worker// Status of a task 120*d5c09012SAndroid Build Coastguard Workermessage TaskStatus { 121*d5c09012SAndroid Build Coastguard Worker // Task states. 122*d5c09012SAndroid Build Coastguard Worker enum State { 123*d5c09012SAndroid Build Coastguard Worker // Unknown state. 124*d5c09012SAndroid Build Coastguard Worker STATE_UNSPECIFIED = 0; 125*d5c09012SAndroid Build Coastguard Worker 126*d5c09012SAndroid Build Coastguard Worker // The Task is created and waiting for resources. 127*d5c09012SAndroid Build Coastguard Worker PENDING = 1; 128*d5c09012SAndroid Build Coastguard Worker 129*d5c09012SAndroid Build Coastguard Worker // The Task is assigned to at least one VM. 130*d5c09012SAndroid Build Coastguard Worker ASSIGNED = 2; 131*d5c09012SAndroid Build Coastguard Worker 132*d5c09012SAndroid Build Coastguard Worker // The Task is running. 133*d5c09012SAndroid Build Coastguard Worker RUNNING = 3; 134*d5c09012SAndroid Build Coastguard Worker 135*d5c09012SAndroid Build Coastguard Worker // The Task has failed. 136*d5c09012SAndroid Build Coastguard Worker FAILED = 4; 137*d5c09012SAndroid Build Coastguard Worker 138*d5c09012SAndroid Build Coastguard Worker // The Task has succeeded. 139*d5c09012SAndroid Build Coastguard Worker SUCCEEDED = 5; 140*d5c09012SAndroid Build Coastguard Worker 141*d5c09012SAndroid Build Coastguard Worker // The Task has not been executed when the Job finishes. 142*d5c09012SAndroid Build Coastguard Worker UNEXECUTED = 6; 143*d5c09012SAndroid Build Coastguard Worker } 144*d5c09012SAndroid Build Coastguard Worker 145*d5c09012SAndroid Build Coastguard Worker // Task state 146*d5c09012SAndroid Build Coastguard Worker State state = 1; 147*d5c09012SAndroid Build Coastguard Worker 148*d5c09012SAndroid Build Coastguard Worker // Detailed info about why the state is reached. 149*d5c09012SAndroid Build Coastguard Worker repeated StatusEvent status_events = 2; 150*d5c09012SAndroid Build Coastguard Worker 151*d5c09012SAndroid Build Coastguard Worker // The resource usage of the task. 152*d5c09012SAndroid Build Coastguard Worker TaskResourceUsage resource_usage = 3; 153*d5c09012SAndroid Build Coastguard Worker} 154*d5c09012SAndroid Build Coastguard Worker 155*d5c09012SAndroid Build Coastguard Worker// TaskResourceUsage describes the resource usage of the task. 156*d5c09012SAndroid Build Coastguard Workermessage TaskResourceUsage { 157*d5c09012SAndroid Build Coastguard Worker // The CPU core hours the task consumes based on task requirement and run 158*d5c09012SAndroid Build Coastguard Worker // time. 159*d5c09012SAndroid Build Coastguard Worker double core_hours = 1; 160*d5c09012SAndroid Build Coastguard Worker} 161*d5c09012SAndroid Build Coastguard Worker 162*d5c09012SAndroid Build Coastguard Worker// Runnable describes instructions for executing a specific script or container 163*d5c09012SAndroid Build Coastguard Worker// as part of a Task. 164*d5c09012SAndroid Build Coastguard Workermessage Runnable { 165*d5c09012SAndroid Build Coastguard Worker // Container runnable. 166*d5c09012SAndroid Build Coastguard Worker message Container { 167*d5c09012SAndroid Build Coastguard Worker // The URI to pull the container image from. 168*d5c09012SAndroid Build Coastguard Worker string image_uri = 1; 169*d5c09012SAndroid Build Coastguard Worker 170*d5c09012SAndroid Build Coastguard Worker // Overrides the `CMD` specified in the container. If there is an ENTRYPOINT 171*d5c09012SAndroid Build Coastguard Worker // (either in the container image or with the entrypoint field below) then 172*d5c09012SAndroid Build Coastguard Worker // commands are appended as arguments to the ENTRYPOINT. 173*d5c09012SAndroid Build Coastguard Worker repeated string commands = 2; 174*d5c09012SAndroid Build Coastguard Worker 175*d5c09012SAndroid Build Coastguard Worker // Overrides the `ENTRYPOINT` specified in the container. 176*d5c09012SAndroid Build Coastguard Worker string entrypoint = 3; 177*d5c09012SAndroid Build Coastguard Worker 178*d5c09012SAndroid Build Coastguard Worker // Volumes to mount (bind mount) from the host machine files or directories 179*d5c09012SAndroid Build Coastguard Worker // into the container, formatted to match docker run's --volume option, 180*d5c09012SAndroid Build Coastguard Worker // e.g. /foo:/bar, or /foo:/bar:ro 181*d5c09012SAndroid Build Coastguard Worker // 182*d5c09012SAndroid Build Coastguard Worker // If the `TaskSpec.Volumes` field is specified but this field is not, Batch 183*d5c09012SAndroid Build Coastguard Worker // will mount each volume from the host machine to the container with the 184*d5c09012SAndroid Build Coastguard Worker // same mount path by default. In this case, the default mount option for 185*d5c09012SAndroid Build Coastguard Worker // containers will be read-only (ro) for existing persistent disks and 186*d5c09012SAndroid Build Coastguard Worker // read-write (rw) for other volume types, regardless of the original mount 187*d5c09012SAndroid Build Coastguard Worker // options specified in `TaskSpec.Volumes`. If you need different mount 188*d5c09012SAndroid Build Coastguard Worker // settings, you can explicitly configure them in this field. 189*d5c09012SAndroid Build Coastguard Worker repeated string volumes = 7; 190*d5c09012SAndroid Build Coastguard Worker 191*d5c09012SAndroid Build Coastguard Worker // Arbitrary additional options to include in the "docker run" command when 192*d5c09012SAndroid Build Coastguard Worker // running this container, e.g. "--network host". 193*d5c09012SAndroid Build Coastguard Worker string options = 8; 194*d5c09012SAndroid Build Coastguard Worker 195*d5c09012SAndroid Build Coastguard Worker // If set to true, external network access to and from container will be 196*d5c09012SAndroid Build Coastguard Worker // blocked, containers that are with block_external_network as true can 197*d5c09012SAndroid Build Coastguard Worker // still communicate with each other, network cannot be specified in the 198*d5c09012SAndroid Build Coastguard Worker // `container.options` field. 199*d5c09012SAndroid Build Coastguard Worker bool block_external_network = 9; 200*d5c09012SAndroid Build Coastguard Worker 201*d5c09012SAndroid Build Coastguard Worker // Required if the container image is from a private Docker registry. The 202*d5c09012SAndroid Build Coastguard Worker // username to login to the Docker registry that contains the image. 203*d5c09012SAndroid Build Coastguard Worker // 204*d5c09012SAndroid Build Coastguard Worker // You can either specify the username directly by using plain text or 205*d5c09012SAndroid Build Coastguard Worker // specify an encrypted username by using a Secret Manager secret: 206*d5c09012SAndroid Build Coastguard Worker // `projects/*/secrets/*/versions/*`. However, using a secret is 207*d5c09012SAndroid Build Coastguard Worker // recommended for enhanced security. 208*d5c09012SAndroid Build Coastguard Worker // 209*d5c09012SAndroid Build Coastguard Worker // Caution: If you specify the username using plain text, you risk the 210*d5c09012SAndroid Build Coastguard Worker // username being exposed to any users who can view the job or its logs. 211*d5c09012SAndroid Build Coastguard Worker // To avoid this risk, specify a secret that contains the username instead. 212*d5c09012SAndroid Build Coastguard Worker // 213*d5c09012SAndroid Build Coastguard Worker // Learn more about [Secret 214*d5c09012SAndroid Build Coastguard Worker // Manager](https://cloud.google.com/secret-manager/docs/) and [using 215*d5c09012SAndroid Build Coastguard Worker // Secret Manager with 216*d5c09012SAndroid Build Coastguard Worker // Batch](https://cloud.google.com/batch/docs/create-run-job-secret-manager). 217*d5c09012SAndroid Build Coastguard Worker string username = 10; 218*d5c09012SAndroid Build Coastguard Worker 219*d5c09012SAndroid Build Coastguard Worker // Required if the container image is from a private Docker registry. The 220*d5c09012SAndroid Build Coastguard Worker // password to login to the Docker registry that contains the image. 221*d5c09012SAndroid Build Coastguard Worker // 222*d5c09012SAndroid Build Coastguard Worker // For security, it is strongly recommended to specify an 223*d5c09012SAndroid Build Coastguard Worker // encrypted password by using a Secret Manager secret: 224*d5c09012SAndroid Build Coastguard Worker // `projects/*/secrets/*/versions/*`. 225*d5c09012SAndroid Build Coastguard Worker // 226*d5c09012SAndroid Build Coastguard Worker // Warning: If you specify the password using plain text, you risk the 227*d5c09012SAndroid Build Coastguard Worker // password being exposed to any users who can view the job or its logs. 228*d5c09012SAndroid Build Coastguard Worker // To avoid this risk, specify a secret that contains the password instead. 229*d5c09012SAndroid Build Coastguard Worker // 230*d5c09012SAndroid Build Coastguard Worker // Learn more about [Secret 231*d5c09012SAndroid Build Coastguard Worker // Manager](https://cloud.google.com/secret-manager/docs/) and [using 232*d5c09012SAndroid Build Coastguard Worker // Secret Manager with 233*d5c09012SAndroid Build Coastguard Worker // Batch](https://cloud.google.com/batch/docs/create-run-job-secret-manager). 234*d5c09012SAndroid Build Coastguard Worker string password = 11; 235*d5c09012SAndroid Build Coastguard Worker 236*d5c09012SAndroid Build Coastguard Worker // Optional. If set to true, this container runnable uses Image streaming. 237*d5c09012SAndroid Build Coastguard Worker // 238*d5c09012SAndroid Build Coastguard Worker // Use Image streaming to allow the runnable to initialize without 239*d5c09012SAndroid Build Coastguard Worker // waiting for the entire container image to download, which can 240*d5c09012SAndroid Build Coastguard Worker // significantly reduce startup time for large container images. 241*d5c09012SAndroid Build Coastguard Worker // 242*d5c09012SAndroid Build Coastguard Worker // When `enableImageStreaming` is set to true, the container 243*d5c09012SAndroid Build Coastguard Worker // runtime is [containerd](https://containerd.io/) instead of Docker. 244*d5c09012SAndroid Build Coastguard Worker // Additionally, this container runnable only supports the following 245*d5c09012SAndroid Build Coastguard Worker // `container` subfields: `imageUri`, 246*d5c09012SAndroid Build Coastguard Worker // `commands[]`, `entrypoint`, and 247*d5c09012SAndroid Build Coastguard Worker // `volumes[]`; any other `container` subfields are ignored. 248*d5c09012SAndroid Build Coastguard Worker // 249*d5c09012SAndroid Build Coastguard Worker // For more information about the requirements and limitations for using 250*d5c09012SAndroid Build Coastguard Worker // Image streaming with Batch, see the [`image-streaming` 251*d5c09012SAndroid Build Coastguard Worker // sample on 252*d5c09012SAndroid Build Coastguard Worker // GitHub](https://github.com/GoogleCloudPlatform/batch-samples/tree/main/api-samples/image-streaming). 253*d5c09012SAndroid Build Coastguard Worker bool enable_image_streaming = 12 [(google.api.field_behavior) = OPTIONAL]; 254*d5c09012SAndroid Build Coastguard Worker } 255*d5c09012SAndroid Build Coastguard Worker 256*d5c09012SAndroid Build Coastguard Worker // Script runnable. 257*d5c09012SAndroid Build Coastguard Worker message Script { 258*d5c09012SAndroid Build Coastguard Worker oneof command { 259*d5c09012SAndroid Build Coastguard Worker // Script file path on the host VM. 260*d5c09012SAndroid Build Coastguard Worker // 261*d5c09012SAndroid Build Coastguard Worker // To specify an interpreter, please add a `#!<interpreter>`(also known as 262*d5c09012SAndroid Build Coastguard Worker // [shebang line](https://en.wikipedia.org/wiki/Shebang_(Unix))) as the 263*d5c09012SAndroid Build Coastguard Worker // first line of the file.(For example, to execute the script using bash, 264*d5c09012SAndroid Build Coastguard Worker // `#!/bin/bash` should be the first line of the file. To execute the 265*d5c09012SAndroid Build Coastguard Worker // script using`Python3`, `#!/usr/bin/env python3` should be the first 266*d5c09012SAndroid Build Coastguard Worker // line of the file.) Otherwise, the file will by default be executed by 267*d5c09012SAndroid Build Coastguard Worker // `/bin/sh`. 268*d5c09012SAndroid Build Coastguard Worker string path = 1; 269*d5c09012SAndroid Build Coastguard Worker 270*d5c09012SAndroid Build Coastguard Worker // Shell script text. 271*d5c09012SAndroid Build Coastguard Worker // 272*d5c09012SAndroid Build Coastguard Worker // To specify an interpreter, please add a `#!<interpreter>\n` at the 273*d5c09012SAndroid Build Coastguard Worker // beginning of the text.(For example, to execute the script using bash, 274*d5c09012SAndroid Build Coastguard Worker // `#!/bin/bash\n` should be added. To execute the script using`Python3`, 275*d5c09012SAndroid Build Coastguard Worker // `#!/usr/bin/env python3\n` should be added.) Otherwise, the script will 276*d5c09012SAndroid Build Coastguard Worker // by default be executed by `/bin/sh`. 277*d5c09012SAndroid Build Coastguard Worker string text = 2; 278*d5c09012SAndroid Build Coastguard Worker } 279*d5c09012SAndroid Build Coastguard Worker } 280*d5c09012SAndroid Build Coastguard Worker 281*d5c09012SAndroid Build Coastguard Worker // Barrier runnable blocks until all tasks in a taskgroup reach it. 282*d5c09012SAndroid Build Coastguard Worker message Barrier { 283*d5c09012SAndroid Build Coastguard Worker // Barriers are identified by their index in runnable list. 284*d5c09012SAndroid Build Coastguard Worker // Names are not required, but if present should be an identifier. 285*d5c09012SAndroid Build Coastguard Worker string name = 1; 286*d5c09012SAndroid Build Coastguard Worker } 287*d5c09012SAndroid Build Coastguard Worker 288*d5c09012SAndroid Build Coastguard Worker // The script or container to run. 289*d5c09012SAndroid Build Coastguard Worker oneof executable { 290*d5c09012SAndroid Build Coastguard Worker // Container runnable. 291*d5c09012SAndroid Build Coastguard Worker Container container = 1; 292*d5c09012SAndroid Build Coastguard Worker 293*d5c09012SAndroid Build Coastguard Worker // Script runnable. 294*d5c09012SAndroid Build Coastguard Worker Script script = 2; 295*d5c09012SAndroid Build Coastguard Worker 296*d5c09012SAndroid Build Coastguard Worker // Barrier runnable. 297*d5c09012SAndroid Build Coastguard Worker Barrier barrier = 6; 298*d5c09012SAndroid Build Coastguard Worker } 299*d5c09012SAndroid Build Coastguard Worker 300*d5c09012SAndroid Build Coastguard Worker // Optional. DisplayName is an optional field that can be provided by the 301*d5c09012SAndroid Build Coastguard Worker // caller. If provided, it will be used in logs and other outputs to identify 302*d5c09012SAndroid Build Coastguard Worker // the script, making it easier for users to understand the logs. If not 303*d5c09012SAndroid Build Coastguard Worker // provided the index of the runnable will be used for outputs. 304*d5c09012SAndroid Build Coastguard Worker string display_name = 10 [(google.api.field_behavior) = OPTIONAL]; 305*d5c09012SAndroid Build Coastguard Worker 306*d5c09012SAndroid Build Coastguard Worker // Normally, a non-zero exit status causes the Task to fail. This flag allows 307*d5c09012SAndroid Build Coastguard Worker // execution of other Runnables to continue instead. 308*d5c09012SAndroid Build Coastguard Worker bool ignore_exit_status = 3; 309*d5c09012SAndroid Build Coastguard Worker 310*d5c09012SAndroid Build Coastguard Worker // This flag allows a Runnable to continue running in the background while the 311*d5c09012SAndroid Build Coastguard Worker // Task executes subsequent Runnables. This is useful to provide services to 312*d5c09012SAndroid Build Coastguard Worker // other Runnables (or to provide debugging support tools like SSH servers). 313*d5c09012SAndroid Build Coastguard Worker bool background = 4; 314*d5c09012SAndroid Build Coastguard Worker 315*d5c09012SAndroid Build Coastguard Worker // By default, after a Runnable fails, no further Runnable are executed. This 316*d5c09012SAndroid Build Coastguard Worker // flag indicates that this Runnable must be run even if the Task has already 317*d5c09012SAndroid Build Coastguard Worker // failed. This is useful for Runnables that copy output files off of the VM 318*d5c09012SAndroid Build Coastguard Worker // or for debugging. 319*d5c09012SAndroid Build Coastguard Worker // 320*d5c09012SAndroid Build Coastguard Worker // The always_run flag does not override the Task's overall max_run_duration. 321*d5c09012SAndroid Build Coastguard Worker // If the max_run_duration has expired then no further Runnables will execute, 322*d5c09012SAndroid Build Coastguard Worker // not even always_run Runnables. 323*d5c09012SAndroid Build Coastguard Worker bool always_run = 5; 324*d5c09012SAndroid Build Coastguard Worker 325*d5c09012SAndroid Build Coastguard Worker // Environment variables for this Runnable (overrides variables set for the 326*d5c09012SAndroid Build Coastguard Worker // whole Task or TaskGroup). 327*d5c09012SAndroid Build Coastguard Worker Environment environment = 7; 328*d5c09012SAndroid Build Coastguard Worker 329*d5c09012SAndroid Build Coastguard Worker // Timeout for this Runnable. 330*d5c09012SAndroid Build Coastguard Worker google.protobuf.Duration timeout = 8; 331*d5c09012SAndroid Build Coastguard Worker 332*d5c09012SAndroid Build Coastguard Worker // Labels for this Runnable. 333*d5c09012SAndroid Build Coastguard Worker map<string, string> labels = 9; 334*d5c09012SAndroid Build Coastguard Worker} 335*d5c09012SAndroid Build Coastguard Worker 336*d5c09012SAndroid Build Coastguard Worker// Spec of a task 337*d5c09012SAndroid Build Coastguard Workermessage TaskSpec { 338*d5c09012SAndroid Build Coastguard Worker // The sequence of scripts or containers to run for this Task. Each Task using 339*d5c09012SAndroid Build Coastguard Worker // this TaskSpec executes its list of runnables in order. The Task succeeds if 340*d5c09012SAndroid Build Coastguard Worker // all of its runnables either exit with a zero status or any that exit with a 341*d5c09012SAndroid Build Coastguard Worker // non-zero status have the ignore_exit_status flag. 342*d5c09012SAndroid Build Coastguard Worker // 343*d5c09012SAndroid Build Coastguard Worker // Background runnables are killed automatically (if they have not already 344*d5c09012SAndroid Build Coastguard Worker // exited) a short time after all foreground runnables have completed. Even 345*d5c09012SAndroid Build Coastguard Worker // though this is likely to result in a non-zero exit status for the 346*d5c09012SAndroid Build Coastguard Worker // background runnable, these automatic kills are not treated as Task 347*d5c09012SAndroid Build Coastguard Worker // failures. 348*d5c09012SAndroid Build Coastguard Worker repeated Runnable runnables = 8; 349*d5c09012SAndroid Build Coastguard Worker 350*d5c09012SAndroid Build Coastguard Worker // ComputeResource requirements. 351*d5c09012SAndroid Build Coastguard Worker ComputeResource compute_resource = 3; 352*d5c09012SAndroid Build Coastguard Worker 353*d5c09012SAndroid Build Coastguard Worker // Maximum duration the task should run. 354*d5c09012SAndroid Build Coastguard Worker // The task will be killed and marked as FAILED if over this limit. 355*d5c09012SAndroid Build Coastguard Worker // The valid value range for max_run_duration in seconds is [0, 356*d5c09012SAndroid Build Coastguard Worker // 315576000000.999999999], 357*d5c09012SAndroid Build Coastguard Worker google.protobuf.Duration max_run_duration = 4; 358*d5c09012SAndroid Build Coastguard Worker 359*d5c09012SAndroid Build Coastguard Worker // Maximum number of retries on failures. 360*d5c09012SAndroid Build Coastguard Worker // The default, 0, which means never retry. 361*d5c09012SAndroid Build Coastguard Worker // The valid value range is [0, 10]. 362*d5c09012SAndroid Build Coastguard Worker int32 max_retry_count = 5; 363*d5c09012SAndroid Build Coastguard Worker 364*d5c09012SAndroid Build Coastguard Worker // Lifecycle management schema when any task in a task group is failed. 365*d5c09012SAndroid Build Coastguard Worker // Currently we only support one lifecycle policy. 366*d5c09012SAndroid Build Coastguard Worker // When the lifecycle policy condition is met, 367*d5c09012SAndroid Build Coastguard Worker // the action in the policy will execute. 368*d5c09012SAndroid Build Coastguard Worker // If task execution result does not meet with the defined lifecycle 369*d5c09012SAndroid Build Coastguard Worker // policy, we consider it as the default policy. 370*d5c09012SAndroid Build Coastguard Worker // Default policy means if the exit code is 0, exit task. 371*d5c09012SAndroid Build Coastguard Worker // If task ends with non-zero exit code, retry the task with max_retry_count. 372*d5c09012SAndroid Build Coastguard Worker repeated LifecyclePolicy lifecycle_policies = 9; 373*d5c09012SAndroid Build Coastguard Worker 374*d5c09012SAndroid Build Coastguard Worker // Deprecated: please use environment(non-plural) instead. 375*d5c09012SAndroid Build Coastguard Worker map<string, string> environments = 6 [deprecated = true]; 376*d5c09012SAndroid Build Coastguard Worker 377*d5c09012SAndroid Build Coastguard Worker // Volumes to mount before running Tasks using this TaskSpec. 378*d5c09012SAndroid Build Coastguard Worker repeated Volume volumes = 7; 379*d5c09012SAndroid Build Coastguard Worker 380*d5c09012SAndroid Build Coastguard Worker // Environment variables to set before running the Task. 381*d5c09012SAndroid Build Coastguard Worker Environment environment = 10; 382*d5c09012SAndroid Build Coastguard Worker} 383*d5c09012SAndroid Build Coastguard Worker 384*d5c09012SAndroid Build Coastguard Worker// LifecyclePolicy describes how to deal with task failures 385*d5c09012SAndroid Build Coastguard Worker// based on different conditions. 386*d5c09012SAndroid Build Coastguard Workermessage LifecyclePolicy { 387*d5c09012SAndroid Build Coastguard Worker // Conditions for actions to deal with task failures. 388*d5c09012SAndroid Build Coastguard Worker message ActionCondition { 389*d5c09012SAndroid Build Coastguard Worker // Exit codes of a task execution. 390*d5c09012SAndroid Build Coastguard Worker // If there are more than 1 exit codes, 391*d5c09012SAndroid Build Coastguard Worker // when task executes with any of the exit code in the list, 392*d5c09012SAndroid Build Coastguard Worker // the condition is met and the action will be executed. 393*d5c09012SAndroid Build Coastguard Worker repeated int32 exit_codes = 1; 394*d5c09012SAndroid Build Coastguard Worker } 395*d5c09012SAndroid Build Coastguard Worker 396*d5c09012SAndroid Build Coastguard Worker // Action on task failures based on different conditions. 397*d5c09012SAndroid Build Coastguard Worker enum Action { 398*d5c09012SAndroid Build Coastguard Worker // Action unspecified. 399*d5c09012SAndroid Build Coastguard Worker ACTION_UNSPECIFIED = 0; 400*d5c09012SAndroid Build Coastguard Worker 401*d5c09012SAndroid Build Coastguard Worker // Action that tasks in the group will be scheduled to re-execute. 402*d5c09012SAndroid Build Coastguard Worker RETRY_TASK = 1; 403*d5c09012SAndroid Build Coastguard Worker 404*d5c09012SAndroid Build Coastguard Worker // Action that tasks in the group will be stopped immediately. 405*d5c09012SAndroid Build Coastguard Worker FAIL_TASK = 2; 406*d5c09012SAndroid Build Coastguard Worker } 407*d5c09012SAndroid Build Coastguard Worker 408*d5c09012SAndroid Build Coastguard Worker // Action to execute when ActionCondition is true. 409*d5c09012SAndroid Build Coastguard Worker // When RETRY_TASK is specified, we will retry failed tasks 410*d5c09012SAndroid Build Coastguard Worker // if we notice any exit code match and fail tasks if no match is found. 411*d5c09012SAndroid Build Coastguard Worker // Likewise, when FAIL_TASK is specified, we will fail tasks 412*d5c09012SAndroid Build Coastguard Worker // if we notice any exit code match and retry tasks if no match is found. 413*d5c09012SAndroid Build Coastguard Worker Action action = 1; 414*d5c09012SAndroid Build Coastguard Worker 415*d5c09012SAndroid Build Coastguard Worker // Conditions that decide why a task failure is dealt with a specific action. 416*d5c09012SAndroid Build Coastguard Worker ActionCondition action_condition = 2; 417*d5c09012SAndroid Build Coastguard Worker} 418*d5c09012SAndroid Build Coastguard Worker 419*d5c09012SAndroid Build Coastguard Worker// A Cloud Batch task. 420*d5c09012SAndroid Build Coastguard Workermessage Task { 421*d5c09012SAndroid Build Coastguard Worker option (google.api.resource) = { 422*d5c09012SAndroid Build Coastguard Worker type: "batch.googleapis.com/Task" 423*d5c09012SAndroid Build Coastguard Worker pattern: "projects/{project}/locations/{location}/jobs/{job}/taskGroups/{task_group}/tasks/{task}" 424*d5c09012SAndroid Build Coastguard Worker }; 425*d5c09012SAndroid Build Coastguard Worker 426*d5c09012SAndroid Build Coastguard Worker // Task name. 427*d5c09012SAndroid Build Coastguard Worker // The name is generated from the parent TaskGroup name and 'id' field. 428*d5c09012SAndroid Build Coastguard Worker // For example: 429*d5c09012SAndroid Build Coastguard Worker // "projects/123456/locations/us-west1/jobs/job01/taskGroups/group01/tasks/task01". 430*d5c09012SAndroid Build Coastguard Worker string name = 1; 431*d5c09012SAndroid Build Coastguard Worker 432*d5c09012SAndroid Build Coastguard Worker // Task Status. 433*d5c09012SAndroid Build Coastguard Worker TaskStatus status = 2; 434*d5c09012SAndroid Build Coastguard Worker} 435*d5c09012SAndroid Build Coastguard Worker 436*d5c09012SAndroid Build Coastguard Worker// An Environment describes a collection of environment variables to set when 437*d5c09012SAndroid Build Coastguard Worker// executing Tasks. 438*d5c09012SAndroid Build Coastguard Workermessage Environment { 439*d5c09012SAndroid Build Coastguard Worker message KMSEnvMap { 440*d5c09012SAndroid Build Coastguard Worker // The name of the KMS key that will be used to decrypt the cipher text. 441*d5c09012SAndroid Build Coastguard Worker string key_name = 1; 442*d5c09012SAndroid Build Coastguard Worker 443*d5c09012SAndroid Build Coastguard Worker // The value of the cipherText response from the `encrypt` method. 444*d5c09012SAndroid Build Coastguard Worker string cipher_text = 2; 445*d5c09012SAndroid Build Coastguard Worker } 446*d5c09012SAndroid Build Coastguard Worker 447*d5c09012SAndroid Build Coastguard Worker // A map of environment variable names to values. 448*d5c09012SAndroid Build Coastguard Worker map<string, string> variables = 1; 449*d5c09012SAndroid Build Coastguard Worker 450*d5c09012SAndroid Build Coastguard Worker // A map of environment variable names to Secret Manager secret names. 451*d5c09012SAndroid Build Coastguard Worker // The VM will access the named secrets to set the value of each environment 452*d5c09012SAndroid Build Coastguard Worker // variable. 453*d5c09012SAndroid Build Coastguard Worker map<string, string> secret_variables = 2; 454*d5c09012SAndroid Build Coastguard Worker 455*d5c09012SAndroid Build Coastguard Worker // An encrypted JSON dictionary where the key/value pairs correspond to 456*d5c09012SAndroid Build Coastguard Worker // environment variable names and their values. 457*d5c09012SAndroid Build Coastguard Worker KMSEnvMap encrypted_variables = 3; 458*d5c09012SAndroid Build Coastguard Worker} 459