go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/buildbucket/proto/builds_service.proto (about) 1 // Copyright 2020 The Swarming Authors. All rights reserved. 2 // Use of this source code is governed by the Apache v2.0 license that can be 3 // found in the LICENSE file. 4 5 syntax = "proto3"; 6 7 package buildbucket.v2; 8 9 option go_package = "go.chromium.org/luci/buildbucket/proto;buildbucketpb"; 10 11 import "google/api/field_behavior.proto"; 12 import "google/protobuf/duration.proto"; 13 import "google/protobuf/field_mask.proto"; 14 import "google/protobuf/struct.proto"; 15 import "google/rpc/status.proto"; 16 import "go.chromium.org/luci/buildbucket/proto/build.proto"; 17 import "go.chromium.org/luci/buildbucket/proto/builder_common.proto"; 18 import "go.chromium.org/luci/buildbucket/proto/common.proto"; 19 import "go.chromium.org/luci/buildbucket/proto/notification.proto"; 20 import "go.chromium.org/luci/common/proto/structmask/structmask.proto"; 21 22 // Manages builds. 23 // 24 // Buildbot: To simplify V1->V2 API transition for clients, buildbucket.v2.Builds 25 // service has some support for non-LUCI builds. Most of such builds are 26 // Buildbot builds and this documentation refers to them as such, but they also 27 // include non-Buildbot non-LUCI builds (e.g. Skia builds). 28 // See "Buildbot" paragraph in each RPC comment. 29 service Builds { 30 // Gets a build. 31 // 32 // By default the returned build does not include all fields. 33 // See GetBuildRequest.mask. 34 // 35 // Buildbot: if the specified build is a buildbot build, converts it to Build 36 // message with the following rules: 37 // * bucket names are full, e.g. "luci.infra.try". Note that LUCI buckets 38 // in v2 are shortened, e.g. "try". 39 // * if a v2 Build field does not make sense in V1, it is unset/empty. 40 // * step support is not implemented for Buildbot builds. 41 // Note that it does not support getting a buildbot build by build number. 42 // Examples: go/buildbucket-rpc#getbuild 43 // 44 // GetBuild is good for getting detailed information for a build. 45 // For use cases that only requires build status checking (e.g. wait for a 46 // build to complete), please use GetBuildStatus instead. 47 rpc GetBuild(GetBuildRequest) returns (Build) {}; 48 49 // Searches for builds. 50 // Examples: go/buildbucket-rpc#searchbuilds 51 rpc SearchBuilds(SearchBuildsRequest) returns (SearchBuildsResponse) {}; 52 53 // Updates a build. 54 // 55 // RPC metadata must include "x-buildbucket-token" key with a token 56 // generated by the server when scheduling the build. 57 rpc UpdateBuild(UpdateBuildRequest) returns (Build) {}; 58 59 // Schedules a new build. 60 // The requester must have at least SCHEDULER role in the destination bucket. 61 // Example: go/buildbucket-rpc#schedulebuild 62 rpc ScheduleBuild(ScheduleBuildRequest) returns (Build) {}; 63 64 // Cancels a build. 65 // The requester must have at least SCHEDULER role in the destination bucket. 66 // Note that cancelling a build in ended state (meaning build is not in 67 // STATUS_UNSPECIFIED, SCHEDULED or STARTED status) will be a no-op and 68 // directly return up-to-date Build message. 69 // 70 // When called, Buildbucket will set the build's cancelTime to "now". It 71 // will also recursively start the cancellation process for any children of 72 // this build which are marked as can_outlive_parent=false. 73 // 74 // The next time the build checks in (which happens periodically in 75 // `bbagent`), bbagent will see the cancelTime, and start the cancellation 76 // process described by the 'deadline' section in 77 // https://chromium.googlesource.com/infra/luci/luci-py/+/HEAD/client/LUCI_CONTEXT.md. 78 // 79 // If the build ends before the build's grace_period, then the final status 80 // reported from the build is accepted; this is considered 'graceful termination'. 81 // 82 // If the build doesn't end within the build's grace_period, Buildbucket will 83 // forcibly cancel the build. 84 rpc CancelBuild(CancelBuildRequest) returns (Build) {}; 85 86 // Executes multiple requests in a batch. 87 // The response code is always OK. 88 // Examples: go/buildbucket-rpc#batch 89 rpc Batch(BatchRequest) returns (BatchResponse) {}; 90 91 // Creates a new build for the provided build proto. 92 // 93 // If build with the given ID already exists, returns ALREADY_EXISTS 94 // error code. 95 rpc CreateBuild(CreateBuildRequest) returns (Build) {}; 96 97 // Synthesizes a build proto. 98 // 99 // This RPC is exclusively for generating led builds. 100 rpc SynthesizeBuild(SynthesizeBuildRequest) returns (Build) {}; 101 102 // Gets a build's status. 103 // 104 // The returned build contains the requested build id or 105 // (builder + build number), and build status. 106 // 107 // It's useful when a user only wants to check the build's status (i.e. wait 108 // for a build to complete). 109 rpc GetBuildStatus(GetBuildStatusRequest) returns (Build) {}; 110 111 // Starts a build. 112 // 113 // RPC metadata must include "x-buildbucket-token" key with 114 // * a BUILD type token generated by the server when it creates a Swarming 115 // task for the build (builds on Swarming) or 116 // * a START_BUILD type token generated by the server when it attempts to run 117 // a backend task (builds on TaskBackend). 118 // 119 // Agent must call it before making any UpdateBuild calls. 120 // 121 // StartBuild will associate a task with a build if the association is not done 122 // after RunTaskResponse is returned to buildbucket. 123 rpc StartBuild(StartBuildRequest) returns (StartBuildResponse) {}; 124 } 125 126 // A request message for GetBuild RPC. 127 message GetBuildRequest { 128 // Build ID. 129 // Mutually exclusive with builder and number. 130 int64 id = 1; 131 132 // Builder of the build. 133 // Requires number. Mutually exclusive with id. 134 BuilderID builder = 2; 135 // Build number. 136 // Requires builder. Mutually exclusive with id. 137 int32 build_number = 3; 138 139 // Fields to include in the response. 140 // 141 // DEPRECATED: Use mask instead. 142 // 143 // If not set, the default mask is used, see Build message comments for the 144 // list of fields returned by default. 145 // 146 // Supports advanced semantics, see 147 // https://chromium.googlesource.com/infra/luci/luci-py/+/f9ae69a37c4bdd0e08a8b0f7e123f6e403e774eb/appengine/components/components/protoutil/field_masks.py#7 148 // In particular, if the client needs only some output properties, they 149 // can be requested with paths "output.properties.fields.foo". 150 google.protobuf.FieldMask fields = 100 [deprecated = true]; 151 152 // What portion of the Build message to return. 153 // 154 // If not set, the default mask is used, see Build message comments for the 155 // list of fields returned by default. 156 BuildMask mask = 101; 157 } 158 159 // A request message for SearchBuilds RPC. 160 message SearchBuildsRequest { 161 // Returned builds must satisfy this predicate. Required. 162 BuildPredicate predicate = 1; 163 164 // Fields to include in the response, see GetBuildRequest.fields. 165 // 166 // DEPRECATED: Use mask instead. 167 // 168 // Note that this applies to the response, not each build, so e.g. steps must 169 // be requested with a path "builds.*.steps". 170 google.protobuf.FieldMask fields = 100 [deprecated = true]; 171 172 // What portion of the Build message to return. 173 // 174 // If not set, the default mask is used, see Build message comments for the 175 // list of fields returned by default. 176 BuildMask mask = 103; 177 178 // Number of builds to return. 179 // Defaults to 100. 180 // Any value >1000 is interpreted as 1000. 181 int32 page_size = 101; 182 183 // Value of SearchBuildsResponse.next_page_token from the previous response. 184 // Use it to continue searching. 185 // The predicate and page_size in this request MUST be exactly same as in the 186 // previous request. 187 string page_token = 102; 188 } 189 190 // A response message for SearchBuilds RPC. 191 message SearchBuildsResponse { 192 // Search results. 193 // 194 // Ordered by build ID, descending. IDs are monotonically decreasing, so in 195 // other words the order is newest-to-oldest. 196 repeated Build builds = 1; 197 198 // Value for SearchBuildsRequest.page_token to continue searching. 199 string next_page_token = 100; 200 } 201 202 // A request message for Batch RPC. 203 message BatchRequest { 204 205 // One request in a batch. 206 message Request { 207 oneof request { 208 GetBuildRequest get_build = 1; 209 SearchBuildsRequest search_builds = 2; 210 ScheduleBuildRequest schedule_build = 3; 211 CancelBuildRequest cancel_build = 4 ; 212 GetBuildStatusRequest get_build_status = 5; 213 } 214 } 215 216 // Requests to execute in a single batch. 217 // 218 // * All requests are executed in their own individual transactions. 219 // * BatchRequest as a whole is not transactional. 220 // * There's no guaranteed order of execution between batch items (i.e. 221 // consider them to all operate independently). 222 // * There is a limit of 200 requests per batch. 223 repeated Request requests = 1; 224 } 225 226 // A response message for Batch RPC. 227 message BatchResponse { 228 229 // Response a BatchRequest.Response. 230 message Response { 231 oneof response { 232 Build get_build = 1; 233 SearchBuildsResponse search_builds = 2; 234 Build schedule_build = 3; 235 Build cancel_build = 4; 236 Build get_build_status = 5; 237 238 // Error code and details of the unsuccessful RPC. 239 google.rpc.Status error = 100; 240 } 241 } 242 243 // Responses in the same order as BatchRequest.requests. 244 repeated Response responses = 1; 245 } 246 247 // A request message for UpdateBuild RPC. 248 message UpdateBuildRequest { 249 // Build to update, with new field values. 250 Build build = 1; 251 252 // Build fields to update. 253 // See also 254 // https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask 255 // 256 // Currently supports only the following path strings: 257 // - build.output 258 // - build.output.properties 259 // - build.output.gitiles_commit 260 // - build.output.status 261 // - build.output.status_details 262 // - build.output.summary_markdown 263 // - build.status 264 // - build.status_details 265 // - build.steps 266 // - build.summary_markdown 267 // - build.tags 268 // - build.infra.buildbucket.agent.output 269 // - build.infra.buildbucket.agent.purposes 270 // 271 // Note, "build.output.status" is required explicitly to update the field. 272 // If there is only "build.output" in update_mask, build.output.status will not 273 // be updated. 274 // 275 // If omitted, Buildbucket will update the Build's update_time, but nothing else. 276 google.protobuf.FieldMask update_mask = 2; 277 278 // Fields to include in the response. See also GetBuildRequest.fields. 279 // 280 // DEPRECATED: Use mask instead. 281 google.protobuf.FieldMask fields = 100 [deprecated = true]; 282 283 // What portion of the Build message to return. 284 // 285 // If not set, an empty build will be returned. 286 BuildMask mask = 101; 287 } 288 289 // A request message for ScheduleBuild RPC. 290 // 291 // Next ID: 24. 292 message ScheduleBuildRequest { 293 // ** STRONGLY RECOMMENDED **. 294 // A unique string id used for detecting duplicate requests. 295 // Should be unique at least per requesting identity. 296 // Used to dedup build scheduling requests with same id within 1 min. 297 // If a build was successfully scheduled with the same request id in the past 298 // minute, the existing build will be returned. 299 string request_id = 1; 300 301 // ID of a build to retry as is or altered. 302 // When specified, fields below default to the values in the template build. 303 int64 template_build_id = 2; 304 305 // Value for Build.builder. See its comments. 306 // Required, unless template_build_id is specified. 307 BuilderID builder = 3; 308 309 // DEPRECATED 310 // 311 // Set "luci.buildbucket.canary_software" in `experiments` instead. 312 // 313 // YES sets "luci.buildbucket.canary_software" to true in `experiments`. 314 // NO sets "luci.buildbucket.canary_software" to false in `experiments`. 315 Trinary canary = 4; 316 317 // DEPRECATED 318 // 319 // Set "luci.non_production" in `experiments` instead. 320 // 321 // YES sets "luci.non_production" to true in `experiments`. 322 // NO sets "luci.non_production" to false in `experiments`. 323 Trinary experimental = 5; 324 325 // Sets (or prevents) these experiments on the scheduled build. 326 // 327 // See `Builder.experiments` for well-known experiments. 328 map<string, bool> experiments = 16; 329 330 // Properties to include in Build.input.properties. 331 // 332 // Input properties of the created build are result of merging server-defined 333 // properties and properties in this field. 334 // Each property in this field defines a new or replaces an existing property 335 // on the server. 336 // If the server config does not allow overriding/adding the property, the 337 // request will fail with InvalidArgument error code. 338 // A server-defined property cannot be removed, but its value can be 339 // replaced with null. 340 // 341 // Reserved property paths: 342 // ["$recipe_engine/buildbucket"] 343 // ["$recipe_engine/runtime", "is_experimental"] 344 // ["$recipe_engine/runtime", "is_luci"] 345 // ["branch"] 346 // ["buildbucket"] 347 // ["buildername"] 348 // ["repository"] 349 // 350 // The Builder configuration specifies which top-level property names are 351 // overridable via the `allowed_property_overrides` field. ScheduleBuild 352 // requests which attempt to override a property which isn't allowed will 353 // fail with InvalidArgument. 354 // 355 // V1 equivalent: corresponds to "properties" key in "parameters_json". 356 google.protobuf.Struct properties = 6; 357 358 // Value for Build.input.gitiles_commit. 359 // 360 // Setting this field will cause the created build to have a "buildset" 361 // tag with value "commit/gitiles/{hostname}/{project}/+/{id}". 362 // 363 // GitilesCommit objects MUST have host, project, ref fields set. 364 // 365 // V1 equivalent: supersedes "revision" property and "buildset" 366 // tag that starts with "commit/gitiles/". 367 GitilesCommit gitiles_commit = 7; 368 369 // Value for Build.input.gerrit_changes. 370 // Usually present in tryjobs, set by CQ, Gerrit, git-cl-try. 371 // Applied on top of gitiles_commit if specified, otherwise tip of the tree. 372 // All GerritChange fields are required. 373 // 374 // Setting this field will cause the created build to have a "buildset" 375 // tag with value "patch/gerrit/{hostname}/{change}/{patchset}" 376 // for each change. 377 // 378 // V1 equivalent: supersedes patch_* properties and "buildset" 379 // tag that starts with "patch/gerrit/". 380 repeated GerritChange gerrit_changes = 8; 381 382 // Tags to include in Build.tags of the created build, see Build.tags 383 // comments. 384 // Note: tags of the created build may include other tags defined on the 385 // server. 386 repeated StringPair tags = 9; 387 388 // Overrides default dimensions defined by builder config or template build. 389 // 390 // A set of entries with the same key defines a new or replaces an existing 391 // dimension with the same key. 392 // If the config does not allow overriding/adding the dimension, the request 393 // will fail with InvalidArgument error code. 394 // 395 // After merging, dimensions with empty value will be excluded. 396 // 397 // Note: For the same key dimensions, it won't allow to pass empty and 398 // non-empty values at the same time in the request. 399 // 400 // Note: "caches" and "pool" dimensions may only be specified in builder 401 // configs. Setting them hear will fail the request. 402 // 403 // A dimension expiration must be a multiple of 1min. 404 repeated RequestedDimension dimensions = 10; 405 406 // If not zero, overrides swarming task priority. 407 // See also Build.infra.swarming.priority. 408 int32 priority = 11; 409 410 // A per-build notification configuration. 411 NotificationConfig notify = 12; 412 413 // Fields to include in the response. See also GetBuildRequest.fields. 414 // 415 // DEPRECATED: Use mask instead. 416 google.protobuf.FieldMask fields = 100 [deprecated = true]; 417 418 // What portion of the Build message to return. 419 // 420 // If not set, the default mask is used, see Build message comments for the 421 // list of fields returned by default. 422 BuildMask mask = 101; 423 424 // Value for Build.critical. 425 Trinary critical = 13; 426 427 // Overrides Builder.exe in the config. 428 // Supported subfields: cipd_version. 429 Executable exe = 14; 430 431 // Swarming specific part of the build request. 432 message Swarming { 433 // If specified, parent_run_id should match actual Swarming task run ID the 434 // caller is running as and results in swarming server ensuring that the newly 435 // triggered build will not outlive its parent. 436 // 437 // Typical use is for triggering and waiting on child build(s) from within 438 // 1 parent build and if child build(s) on their own aren't useful. Then, 439 // if parent build ends for whatever reason, all not yet finished child 440 // builds aren't useful and it's desirable to terminate them, too. 441 // 442 // If the Builder config does not specify a swarming backend, the request 443 // will fail with InvalidArgument error code. 444 // 445 // The parent_run_id is assumed to be from the same swarming server as the 446 // one the new build is to be executed on. The ScheduleBuildRequest doesn't 447 // check if parent_run_id refers to actually existing task, but eventually 448 // the new build will fail if so. 449 string parent_run_id = 1; 450 } 451 // Swarming specific part of the build request. 452 Swarming swarming = 15; 453 454 // Maximum build pending time. 455 // 456 // If set, overrides the default `expiration_secs` set in builder config. 457 // Only supports seconds precision for now. 458 // For more information, see Build.scheduling_timeout in build.proto. 459 google.protobuf.Duration scheduling_timeout = 17; 460 461 // Maximum build execution time. 462 // 463 // If set, overrides the default `execution_timeout_secs` set in builder config. 464 // Only supports seconds precision for now. 465 // For more information, see Build.execution_timeout in build.proto. 466 google.protobuf.Duration execution_timeout = 18; 467 468 // Amount of cleanup time after execution_timeout. 469 // 470 // If set, overrides the default `grace_period` set in builder config. 471 // Only supports seconds precision for now. 472 // For more information, see Build.grace_period in build.proto. 473 google.protobuf.Duration grace_period = 19; 474 475 // Whether or not this request constitutes a dry run. 476 // 477 // A dry run returns the build proto without actually scheduling it. All 478 // fields except those which can only be computed at run-time are filled in. 479 // Does not cause side-effects. When batching, all requests must specify the 480 // same value for dry_run. 481 bool dry_run = 20; 482 483 // Flag to control if the build can outlive its parent. 484 // 485 // If the value is UNSET, it means this build doesn't have any parent, so 486 // the request must not have a head with any BuildToken. 487 // 488 // If the value is anything other than UNSET, then the BuildToken for the 489 // parent build must be set as a header. 490 // Note: it's not currently possible to establish parent/child relationship 491 // except via the parent build at the time the build is launched. 492 // 493 // If the value is NO, it means that the build SHOULD reach a terminal status 494 // (SUCCESS, FAILURE, INFRA_FAILURE or CANCELED) before its parent. If the 495 // child fails to do so, Buildbucket will cancel it some time after the 496 // parent build reaches a terminal status. 497 // 498 // A build that can outlive its parent can also outlive its parent's ancestors. 499 // 500 // If schedule a build without parent, this field must be UNSET. 501 // 502 // If schedule a build with parent, this field should be YES or NO. 503 // But UNSET is also accepted for now, and it has the same effect as YES. 504 // TODO(crbug.com/1031205): after the parent tracking feature is stable, 505 // require this field to be set when scheduling a build with parent. 506 Trinary can_outlive_parent = 21; 507 508 // Value for Build.retriable. 509 Trinary retriable = 22; 510 511 // Information for scheduling a build as a shadow build. 512 message ShadowInput { 513 } 514 // Input for scheduling a build in the shadow bucket. 515 // 516 // If this field is set, it means the build to be scheduled will 517 // * be scheduled in the shadow bucket of the requested bucket, with shadow 518 // adjustments on service_account, dimensions and properties. 519 // * inherit its parent build's agent input and agent source if it has a parent. 520 ShadowInput shadow_input = 23; 521 } 522 523 // A request message for CancelBuild RPC. 524 message CancelBuildRequest { 525 // ID of the build to cancel. 526 int64 id = 1; 527 528 // Required. Value for Build.cancellation_markdown. Will be appended to 529 // Build.summary_markdown when exporting to bigquery and returned via GetBuild. 530 string summary_markdown = 2; 531 532 // Fields to include in the response. See also GetBuildRequest.fields. 533 // 534 // DEPRECATED: Use mask instead. 535 google.protobuf.FieldMask fields = 100 [deprecated = true]; 536 537 // What portion of the Build message to return. 538 // 539 // If not set, the default mask is used, see Build message comments for the 540 // list of fields returned by default. 541 BuildMask mask = 101; 542 } 543 544 // A request message for CreateBuild RPC. 545 message CreateBuildRequest { 546 // The Build to be created. 547 Build build = 1 [(google.api.field_behavior) = REQUIRED]; 548 549 // A unique identifier for this request. 550 // A random UUID is recommended. 551 // This request is only idempotent if a `request_id` is provided. 552 string request_id = 2; 553 554 // What portion of the Build message to return. 555 // 556 // If not set, the default mask is used, see Build message comments for the 557 // list of fields returned by default. 558 BuildMask mask = 3; 559 } 560 561 // A request message for SynthesizeBuild RPC. 562 message SynthesizeBuildRequest { 563 // ID of a build to use as the template. 564 // Mutually exclusive with builder. 565 int64 template_build_id = 1; 566 567 // Value for Build.builder. See its comments. 568 // Required, unless template_build_id is specified. 569 BuilderID builder = 2; 570 571 // Sets (or prevents) these experiments on the synthesized build. 572 // 573 // See `Builder.experiments` for well-known experiments. 574 map<string, bool> experiments = 3; 575 } 576 577 // A request message for StartBuild RPC. 578 message StartBuildRequest { 579 // A nonce to deduplicate requests. 580 string request_id = 1 [(google.api.field_behavior) = REQUIRED]; 581 // Id of the build to start. 582 int64 build_id = 2 [(google.api.field_behavior) = REQUIRED]; 583 // Id of the task running the started build. 584 string task_id = 3 [(google.api.field_behavior) = REQUIRED]; 585 } 586 587 // A response message for StartBuild RPC. 588 message StartBuildResponse { 589 // The whole proto of the started build. 590 Build build = 1; 591 // a build token for agent to use when making subsequent UpdateBuild calls. 592 string update_build_token = 2; 593 } 594 595 // A request message for GetBuildStatus RPC. 596 message GetBuildStatusRequest { 597 // Build ID. 598 // Mutually exclusive with builder and number. 599 int64 id = 1; 600 601 // Builder of the build. 602 // Requires number. Mutually exclusive with id. 603 BuilderID builder = 2; 604 // Build number. 605 // Requires builder. Mutually exclusive with id. 606 int32 build_number = 3; 607 } 608 609 // Defines a subset of Build fields and properties to return. 610 message BuildMask { 611 // Fields of the Build proto to include. 612 // 613 // Follows the standard FieldMask semantics as documented at e.g. 614 // https://pkg.go.dev/google.golang.org/protobuf/types/known/fieldmaskpb. 615 // 616 // If not set, the default mask is used, see Build message comments for the 617 // list of fields returned by default. 618 google.protobuf.FieldMask fields = 1; 619 620 // Defines a subset of `input.properties` to return. 621 // 622 // When not empty, implicitly adds the corresponding field to `fields`. 623 repeated structmask.StructMask input_properties = 2; 624 625 // Defines a subset of `output.properties` to return. 626 // 627 // When not empty, implicitly adds the corresponding field to `fields`. 628 repeated structmask.StructMask output_properties = 3; 629 630 // Defines a subset of `infra.buildbucket.requested_properties` to return. 631 // 632 // When not empty, implicitly adds the corresponding field to `fields`. 633 repeated structmask.StructMask requested_properties = 4; 634 635 // Flag for including all fields. 636 // 637 // Mutually exclusive with `fields`, `input_properties`, `output_properties`, 638 // and `requested_properties`. 639 bool all_fields = 5; 640 641 // A status to filter returned `steps` by. If unspecified, no filter is 642 // applied. Otherwise filters by the union of the given statuses. 643 // 644 // No effect unless `fields` specifies that `steps` should be returned or 645 // `all_fields` is true. 646 repeated Status step_status = 6; 647 } 648 649 // A build predicate. 650 // 651 // At least one of the following fields is required: builder, gerrit_changes and 652 // git_commits. 653 // If a field value is empty, it is ignored, unless stated otherwise. 654 message BuildPredicate { 655 // A build must be in this builder. 656 BuilderID builder = 1; 657 658 // A build must have this status. 659 Status status = 2; 660 661 // A build's Build.Input.gerrit_changes must include ALL of these changes. 662 repeated GerritChange gerrit_changes = 3; 663 664 // DEPRECATED 665 // 666 // Never implemented. 667 GitilesCommit output_gitiles_commit = 4; 668 669 // A build must be created by this identity. 670 string created_by = 5; 671 672 // A build must have ALL of these tags. 673 // For "ANY of these tags" make separate RPCs. 674 repeated StringPair tags = 6; 675 676 // A build must have been created within the specified range. 677 // Both boundaries are optional. 678 TimeRange create_time = 7; 679 680 // If false (the default), equivalent to filtering by experiment 681 // "-luci.non_production". 682 // 683 // If true, has no effect (both production and non_production builds will be 684 // returned). 685 // 686 // NOTE: If you explicitly search for non_production builds with the experiment 687 // filter "+luci.non_production", this is implied to be true. 688 // 689 // See `Builder.experiments` for well-known experiments. 690 bool include_experimental = 8; 691 692 // A build must be in this build range. 693 BuildRange build = 9; 694 695 // DEPRECATED 696 // 697 // If YES, equivalent to filtering by experiment 698 // "+luci.buildbucket.canary_software". 699 // 700 // If NO, equivalent to filtering by experiment 701 // "-luci.buildbucket.canary_software". 702 // 703 // See `Builder.experiments` for well-known experiments. 704 Trinary canary = 10; 705 706 // A list of experiments to include or exclude from the search results. 707 // 708 // Each entry should look like "[-+]$experiment_name". 709 // 710 // A "+" prefix means that returned builds MUST have that experiment set. 711 // A "-" prefix means that returned builds MUST NOT have that experiment set 712 // AND that experiment was known for the builder at the time the build 713 // was scheduled (either via `Builder.experiments` or via 714 // `ScheduleBuildRequest.experiments`). Well-known experiments are always 715 // considered to be available. 716 repeated string experiments = 11; 717 718 // A build ID. 719 // 720 // Returned builds will be descendants of this build (e.g. "100" means 721 // "any build transitively scheduled starting from build 100"). 722 // 723 // Mutually exclusive with `child_of`. 724 int64 descendant_of = 12; 725 726 // A build ID. 727 // 728 // Returned builds will be only the immediate children of this build. 729 // 730 // Mutually exclusive with `descendant_of`. 731 int64 child_of = 13; 732 } 733 734 // Open build range. 735 message BuildRange { 736 // Inclusive lower (less recent build) boundary. Optional. 737 int64 start_build_id = 1; 738 // Inclusive upper (more recent build) boundary. Optional. 739 int64 end_build_id = 2; 740 }