github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/pkg/apis/core/v1alpha1/generated.proto (about) 1 /* 2 Copyright 2020 The Tilt Dev Authors 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 // This file was autogenerated by go-to-protobuf. Do not edit it manually! 18 19 syntax = "proto2"; 20 21 package github.com.tilt_dev.tilt.pkg.apis.core.v1alpha1; 22 23 import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; 24 import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; 25 26 // Package-wide variables from generator "generated". 27 option go_package = "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1"; 28 29 // Cluster defines any runtime for running containers, in the broadest 30 // sense of the word "runtime". 31 // 32 // +k8s:openapi-gen=true 33 message Cluster { 34 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 35 36 optional ClusterSpec spec = 2; 37 38 optional ClusterStatus status = 3; 39 } 40 41 // Connection spec for an existing cluster. 42 message ClusterConnection { 43 // Defines connection to a Kubernetes cluster. 44 optional KubernetesClusterConnection kubernetes = 1; 45 46 // Defines connection to a Docker daemon. 47 optional DockerClusterConnection docker = 2; 48 } 49 50 // Connection spec for an existing cluster. 51 message ClusterConnectionStatus { 52 // Defines connection to a Kubernetes cluster. 53 optional KubernetesClusterConnectionStatus kubernetes = 1; 54 } 55 56 // ClusterList 57 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 58 message ClusterList { 59 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 60 61 repeated Cluster items = 2; 62 } 63 64 // ClusterSpec defines how to find the cluster we're running 65 // containers on. 66 // 67 // Tilt currently supports connecting to an existing Kubernetes 68 // cluster or an existing Docker Daemon (for Docker Compose). 69 message ClusterSpec { 70 // Connection spec for an existing cluster. 71 optional ClusterConnection connection = 1; 72 73 // DefaultRegistry determines where images for this Cluster should 74 // be pushed/pulled from if the Cluster itself does not provide local 75 // registry hosting metadata. 76 // 77 // If not specified, no registry rewriting will occur, and the images will 78 // be pushed/pulled to from the registry specified by the corresponding 79 // image build directive (e.g. `docker_build` or `custom_build`). 80 // 81 // +optional 82 optional RegistryHosting defaultRegistry = 2; 83 } 84 85 // ClusterStatus defines the observed state of Cluster 86 message ClusterStatus { 87 // The preferred chip architecture of the cluster. 88 // 89 // On Kubernetes, this will correspond to the kubernetes.io/arch annotation on 90 // a node. 91 // 92 // On Docker, this will be the Architecture of the Docker daemon. 93 // 94 // Note that many clusters support multiple chipsets. This field doesn't intend 95 // that this is the only architecture a cluster supports, only that it's one 96 // of the architectures. 97 optional string arch = 1; 98 99 // An unrecoverable error connecting to the cluster. 100 // 101 // +optional 102 optional string error = 2; 103 104 // ConnectedAt indicates the time at which the cluster connection was established. 105 // 106 // Consumers can use this to detect when the underlying config has changed 107 // and refresh their client/connection accordingly. 108 // 109 // +optional 110 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime connectedAt = 3; 111 112 // Registry describes a local registry that developer tools can 113 // connect to. A local registry allows clients to load images into the local 114 // cluster by pushing to this registry. 115 // 116 // +optional 117 optional RegistryHosting registry = 4; 118 119 // Connection status for an existing cluster. 120 // 121 // +optional 122 optional ClusterConnectionStatus connection = 5; 123 124 // Version is a cluster-provided, human-readable version string. 125 // 126 // +optional 127 optional string version = 6; 128 } 129 130 // Cmd represents a process on the host machine. 131 // 132 // When the process exits, we will make a best-effort attempt 133 // (within OS limitations) to kill any spawned descendant processes. 134 // 135 // +k8s:openapi-gen=true 136 // +tilt:starlark-gen=true 137 message Cmd { 138 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 139 140 optional CmdSpec spec = 2; 141 142 optional CmdStatus status = 3; 143 } 144 145 // CmdImage describes an image to build with an arbitrary shell command. 146 // +k8s:openapi-gen=true 147 message CmdImage { 148 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 149 150 optional CmdImageSpec spec = 2; 151 152 optional CmdImageStatus status = 3; 153 } 154 155 // CmdImageList 156 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 157 message CmdImageList { 158 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 159 160 repeated CmdImage items = 2; 161 } 162 163 // CmdImageSpec describes how the custom script builds images and where it puts them. 164 message CmdImageSpec { 165 // The named reference of the image. 166 optional string ref = 7; 167 168 // Command-line arguments. Must have length at least 1. 169 repeated string args = 1; 170 171 // Process working directory. 172 // 173 // If the working directory is not specified, the command is run 174 // in the default Tilt working directory. 175 // 176 // +optional 177 // +tilt:local-path=true 178 optional string dir = 2; 179 180 // Additional environment variables for the build process. 181 // 182 // Expressed as a C-style array of strings of the form ["KEY1=VALUE1", "KEY2=VALUE2", ...]. 183 // 184 // Environment variables are layered on top of the environment variables 185 // that Tilt runs with. 186 // 187 // +optional 188 repeated string env = 10; 189 190 // Names of image maps that this build depends on. 191 // 192 // The controller will watch all the image maps, and rebuild the image 193 // if any of the maps resolve to a new image. 194 // 195 // +optional 196 repeated string imageMaps = 3; 197 198 // Specifies where the image is built. If not specified, we assume the image 199 // was built to the local Docker image store. 200 optional string outputMode = 4; 201 202 // Tag we expect the image to be built with (we use this to check that 203 // the expected image+tag has been created). 204 // 205 // If empty, we create an expected tag at the beginning of CustomBuild (and 206 // export $EXPECTED_REF=name:expected_tag ) 207 // 208 // +optional 209 optional string outputTag = 5; 210 211 // Specifies a filepath where the cmd script prints the result image ref. 212 // 213 // Tilt will read it out when we're done to find the image. 214 // 215 // +optional 216 // +tilt:local-path=true 217 optional string outputsImageRefTo = 6; 218 219 // The name of the cluster we're building for. 220 // 221 // We'll use the cluster to determine the architecture of the image to build, 222 // and the registry to build it for. 223 // 224 // If no cluster is specified, assumes the default cluster. 225 // 226 // +optional 227 optional string cluster = 8; 228 229 // Whether the cluster needs access to the image. 230 // 231 // If not specified, assumes we have to push up to the cluster. 232 // 233 // +optional 234 optional string clusterNeeds = 9; 235 } 236 237 // CmdImageStateBuilding expresses that an image build is in-progress. 238 message CmdImageStateBuilding { 239 // The reason why the image is building. 240 // +optional 241 optional string reason = 1; 242 243 // Time when the build started. 244 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 2; 245 } 246 247 // CmdImageStateCompleted expresses when the image build is finished and 248 // no new images need to be built. 249 message CmdImageStateCompleted { 250 // The reason why the image was built. 251 // +optional 252 optional string reason = 1; 253 254 // Error message if the build failed. 255 // +optional 256 optional string error = 2; 257 258 // Time when we started building an image. 259 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 3; 260 261 // Time when we finished building an image 262 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishedAt = 4; 263 } 264 265 // CmdImageStateWaiting expresses what we're waiting on to build an image. 266 message CmdImageStateWaiting { 267 // (brief) reason the image build is waiting. 268 // +optional 269 optional string reason = 1; 270 } 271 272 // CmdImageStatus describes the result of the image build. 273 message CmdImageStatus { 274 // A fully-qualified image reference of a built image, as seen from the local 275 // network. 276 // 277 // Usually includes a name and an immutable tag. 278 // 279 // NB: If we're building to a particular registry, this may 280 // have a different hostname from the Spec `Ref` field. 281 // 282 // +optional 283 optional string ref = 1; 284 285 // Details about a waiting image build. 286 // +optional 287 optional CmdImageStateWaiting waiting = 2; 288 289 // Details about a building image. 290 // +optional 291 optional CmdImageStateBuilding building = 3; 292 293 // Details about a finished image build. 294 // +optional 295 optional CmdImageStateCompleted completed = 4; 296 } 297 298 // CmdList 299 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 300 message CmdList { 301 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 302 303 repeated Cmd items = 2; 304 } 305 306 // CmdSpec defines how to run a local command. 307 message CmdSpec { 308 // Command-line arguments. Must have length at least 1. 309 repeated string args = 1; 310 311 // Process working directory. 312 // 313 // If the working directory is not specified, the command is run 314 // in the default Tilt working directory. 315 // 316 // +optional 317 // +tilt:local-path=true 318 optional string dir = 2; 319 320 // Additional variables process environment. 321 // 322 // Expressed as a C-style array of strings of the form ["KEY1=VALUE1", "KEY2=VALUE2", ...]. 323 // 324 // Environment variables are layered on top of the environment variables 325 // that Tilt runs with. 326 // 327 // +optional 328 repeated string env = 3; 329 330 // Periodic probe of service readiness. 331 // 332 // +optional 333 optional Probe readinessProbe = 4; 334 335 // Indicates objects that can trigger a restart of this command. 336 // 337 // When a restart is triggered, Tilt will try to gracefully shutdown any 338 // currently running process, waiting for it to exit before starting a new 339 // process. If the process doesn't shutdown within the allotted time, Tilt 340 // will kill the process abruptly. 341 // 342 // Restarts can happen even if the command is already done. 343 // 344 // Logs of the current process after the restart are discarded. 345 optional RestartOnSpec restartOn = 5; 346 347 // Indicates objects that can trigger a start/restart of this command. 348 // 349 // Restarts behave the same as RestartOn. The key difference is that 350 // a Cmd with any StartOn triggers will not have its command run until its 351 // StartOn is satisfied. 352 optional StartOnSpec startOn = 6; 353 354 // Specifies how to disable this. 355 // 356 // +optional 357 optional DisableSource disableSource = 7; 358 } 359 360 // CmdStateRunning is a running state of a local command. 361 message CmdStateRunning { 362 // The process id of the command. 363 optional int32 pid = 1; 364 365 // Time at which the command was last started. 366 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 2; 367 } 368 369 // CmdStateTerminated is a terminated state of a local command. 370 message CmdStateTerminated { 371 // The process id of the command. 372 optional int32 pid = 1; 373 374 // Exit status from the last termination of the command 375 optional int32 exitCode = 2; 376 377 // Time at which previous execution of the command started 378 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 3; 379 380 // Time at which the command last terminated 381 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishedAt = 4; 382 383 // (brief) reason the process is terminated 384 // +optional 385 optional string reason = 5; 386 } 387 388 // CmdStateWaiting is a waiting state of a local command. 389 message CmdStateWaiting { 390 // (brief) reason the process is not yet running. 391 // +optional 392 optional string reason = 1; 393 } 394 395 // CmdStatus defines the observed state of Cmd 396 // 397 // Based loosely on ContainerStatus in Kubernetes 398 message CmdStatus { 399 // Details about a waiting process. 400 // +optional 401 optional CmdStateWaiting waiting = 1; 402 403 // Details about a running process. 404 // +optional 405 optional CmdStateRunning running = 2; 406 407 // Details about a terminated process. 408 // +optional 409 optional CmdStateTerminated terminated = 3; 410 411 // Specifies whether the command has passed its readiness probe. 412 // 413 // Terminating the command does not change its Ready state. 414 // 415 // Is always true when no readiness probe is defined. 416 // 417 // +optional 418 optional bool ready = 4; 419 420 // Details about whether/why this is disabled. 421 // +optional 422 optional DisableStatus disableStatus = 5; 423 } 424 425 // ConfigMap stores unstructured data that other controllers can read and write. 426 // 427 // Useful for sharing data from one system and subscribing to it from another. 428 // 429 // +k8s:openapi-gen=true 430 // +tilt:starlark-gen=true 431 message ConfigMap { 432 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 433 434 // Data contains the configuration data. 435 // Each key must consist of alphanumeric characters, '-', '_' or '.'. 436 // +optional 437 map<string, string> data = 2; 438 } 439 440 // Specifies a ConfigMap to control a DisableSource 441 message ConfigMapDisableSource { 442 // The name of the ConfigMap 443 optional string name = 1; 444 445 // The key where the enable/disable state is stored. 446 optional string key = 2; 447 } 448 449 // ConfigMapList 450 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 451 message ConfigMapList { 452 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 453 454 repeated ConfigMap items = 2; 455 } 456 457 // Describes how a ToggleButton's state is stored in a ConfigMap. 458 // The ConfigMap must be created separately - the ToggleButton will not automatically create it. 459 message ConfigMapStateSource { 460 // Name of the ConfigMap 461 optional string name = 1; 462 463 // Key within the ConfigMap 464 optional string key = 2; 465 466 // ConfigMap value corresponding to the button's "on" state. 467 // If not specified, "true" will be used. 468 // +optional 469 optional string onValue = 3; 470 471 // ConfigMap value corresponding to the button's "off" state 472 // If not specified, "false" will be used. 473 optional string offValue = 4; 474 } 475 476 // Container is an init or application container within a pod. 477 // 478 // The Tilt API representation mirrors the Kubernetes API very closely. Irrelevant data is 479 // not included, and some fields might be simplified. 480 // 481 // There might also be Tilt-specific status fields. 482 message Container { 483 // Name is the name of the container as defined in Kubernetes. 484 optional string name = 1; 485 486 // ID is the normalized container ID (the `docker://` prefix is stripped). 487 optional string id = 2; 488 489 // Ready is true if the container is passing readiness checks (or has none defined). 490 optional bool ready = 3; 491 492 // Image is the image the container is running. 493 optional string image = 4; 494 495 // Restarts is the number of times the container has restarted. 496 // 497 // This includes restarts before the Tilt daemon was started if the container was already running. 498 optional int32 restarts = 5; 499 500 // State provides details about the container's current condition. 501 optional ContainerState state = 6; 502 503 // Ports are exposed ports as extracted from the Pod spec. 504 // 505 // This is added by Tilt for convenience when managing port forwards. 506 repeated int32 ports = 7; 507 } 508 509 // ContainerLogStreamStatus defines the current status of each individual 510 // container log stream. 511 message ContainerLogStreamStatus { 512 // The name of the container. 513 optional string name = 1; 514 515 // True when the stream is set up and streaming logs properly. 516 // 517 // +optional 518 optional bool active = 2; 519 520 // True when the logs are done stream and the container is terminated. 521 // 522 // +optional 523 optional bool terminated = 3; 524 525 // The last error message encountered while streaming. 526 // 527 // Empty when the stream is actively streaming or successfully terminated. 528 // 529 // +optional 530 optional string error = 4; 531 } 532 533 // ContainerState holds a possible state of container. 534 // 535 // Only one of its members may be specified. 536 // If none of them is specified, the default one is ContainerStateWaiting. 537 message ContainerState { 538 // Waiting provides details about a container that is not yet running. 539 optional ContainerStateWaiting waiting = 1; 540 541 // Running provides details about a currently executing container. 542 optional ContainerStateRunning running = 2; 543 544 // Terminated provides details about an exited container. 545 optional ContainerStateTerminated terminated = 3; 546 } 547 548 // ContainerStateRunning is a running state of a container. 549 message ContainerStateRunning { 550 // StartedAt is the time the container began running. 551 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startedAt = 1; 552 } 553 554 // ContainerStateTerminated is a terminated state of a container. 555 message ContainerStateTerminated { 556 // StartedAt is the time the container began running. 557 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startedAt = 1; 558 559 // FinishedAt is the time the container stopped running. 560 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time finishedAt = 2; 561 562 // Reason is a (brief) reason the container stopped running. 563 optional string reason = 3; 564 565 // ExitCode is the exit status from the termination of the container. 566 // 567 // Any non-zero value indicates an error during termination. 568 optional int32 exitCode = 4; 569 } 570 571 // ContainerStateWaiting is a waiting state of a container. 572 message ContainerStateWaiting { 573 // Reason is a (brief) reason the container is not yet running. 574 optional string reason = 1; 575 } 576 577 // Aggregated disable status of DisableSources that belong to a resource. 578 message DisableResourceStatus { 579 // How many of the resource's sources are enabled. 580 optional int32 enabledCount = 1; 581 582 // How many of the resource's sources are disabled. 583 optional int32 disabledCount = 2; 584 585 // Whether this is currently disabled (if known) 586 optional string state = 4; 587 588 // All unique sources that control the resource's objects' disable status. 589 repeated DisableSource sources = 3; 590 } 591 592 // Points at a thing that can control whether something is disabled 593 message DisableSource { 594 // Disabled by single ConfigMap value. 595 optional ConfigMapDisableSource configMap = 2; 596 597 // Disabled by multiple ConfigMap values, which must all be set to disabled 598 // to disable the object. 599 repeated ConfigMapDisableSource everyConfigMap = 3; 600 } 601 602 message DisableStatus { 603 // Whether this is currently disabled. Deprecated in favor of `State`. 604 optional bool disabled = 1; 605 606 // The last time this status was updated. 607 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastUpdateTime = 2; 608 609 // The reason this status was updated. 610 optional string reason = 3; 611 612 // Whether this is currently disabled (if known) 613 optional string state = 4; 614 } 615 616 message DockerClusterConnection { 617 // The docker host to use. 618 // 619 // If not specified, will read the DOCKER_HOST env or use the default docker 620 // host. 621 optional string host = 1; 622 } 623 624 // DockerComposeLogStream 625 // +k8s:openapi-gen=true 626 message DockerComposeLogStream { 627 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 628 629 optional DockerComposeLogStreamSpec spec = 2; 630 631 optional DockerComposeLogStreamStatus status = 3; 632 } 633 634 // DockerComposeLogStreamList 635 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 636 message DockerComposeLogStreamList { 637 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 638 639 repeated DockerComposeLogStream items = 2; 640 } 641 642 // DockerComposeLogStreamSpec defines the desired state of DockerComposeLogStream 643 message DockerComposeLogStreamSpec { 644 // The name of the service to stream from. 645 optional string service = 1; 646 647 // A specification of the project the service belongs to. 648 // 649 // Each service spec keeps its own copy of the project spec. 650 optional DockerComposeProject project = 2; 651 } 652 653 // DockerComposeLogStreamStatus defines the observed state of DockerComposeLogStream 654 message DockerComposeLogStreamStatus { 655 // When we last started the log streamer. 656 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 1; 657 658 // Contains an error message when the log streamer is in an error state. 659 optional string error = 2; 660 } 661 662 message DockerComposeProject { 663 // Configuration files to load. 664 // 665 // If both ConfigPaths and ProjectPath/YAML are specified, 666 // the YAML is the source of truth, and the ConfigPaths 667 // are used to print diagnostic information. 668 repeated string configPaths = 1; 669 670 // The base path of the docker-compose project. 671 // 672 // Expressed in docker-compose as --project-directory. 673 // 674 // When used on the command-line, the Docker Compose spec mandates that this 675 // must be the directory of the first yaml file. All additional yaml files are 676 // evaluated relative to this project path. 677 optional string projectPath = 2; 678 679 // The docker-compose config YAML. 680 // 681 // Usually contains multiple services. 682 // 683 // If you have multiple docker-compose.yaml files, you can combine them into a 684 // single YAML with `docker-compose -f file1.yaml -f file2.yaml config`. 685 optional string yaml = 3; 686 687 // The docker-compose project name. 688 // 689 // If omitted, the default is to use the NormalizedName of the ProjectPath 690 // base name. 691 optional string name = 4; 692 693 // Path to an env file to use. Passed to docker-compose as `--env-file FILE`. 694 optional string envFile = 5; 695 696 // Optional docker-compose profiles to use. 697 // 698 // Services with defined profiles will only be included if their profile matches 699 // one in this list. 700 repeated string profiles = 6; 701 702 // Optionally, pass --wait to docker compose up 703 optional bool wait = 7; 704 } 705 706 // DockerComposeService represents a container orchestrated by Docker Compose. 707 // 708 // +k8s:openapi-gen=true 709 message DockerComposeService { 710 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 711 712 optional DockerComposeServiceSpec spec = 2; 713 714 optional DockerComposeServiceStatus status = 3; 715 } 716 717 // DockerComposeServiceList 718 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 719 message DockerComposeServiceList { 720 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 721 722 repeated DockerComposeService items = 2; 723 } 724 725 // DockerComposeServiceSpec defines the desired state a Docker Compose container. 726 message DockerComposeServiceSpec { 727 // The name of the service to create. 728 optional string service = 1; 729 730 // A specification of the project the service belongs to. 731 // 732 // Each service spec keeps its own copy of the project spec. 733 optional DockerComposeProject project = 2; 734 735 // The image maps that this deploy depends on. 736 repeated string imageMaps = 3; 737 738 // Specifies how to disable this. 739 // 740 // +optional 741 optional DisableSource disableSource = 4; 742 } 743 744 // DockerComposeServiceStatus defines the observed state of DockerComposeService, 745 // continuing to watch the container after it starts. 746 message DockerComposeServiceStatus { 747 // Details about whether/why this is disabled. 748 // +optional 749 optional DisableStatus disableStatus = 1; 750 751 // How docker binds container ports to the host network for this service. 752 // +optional 753 repeated DockerPortBinding portBindings = 2; 754 755 // Current state of the container for this service. 756 // +optional 757 optional DockerContainerState containerState = 3; 758 759 // Current container ID. 760 // +optional 761 optional string containerID = 4; 762 763 // Current container name. 764 // +optional 765 optional string containerName = 8; 766 767 // An error bringing up the container. 768 // 769 // +optional 770 optional string applyError = 5; 771 772 // Timestamp of when we last started bringing up this service in Docker Compose. 773 // 774 // +optional 775 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastApplyStartTime = 6; 776 777 // Timestamp of when we last finished bringing up this service in Docker Compose. 778 // 779 // When populated, must be equal or after the LastApplyStartTime field. 780 // 781 // +optional 782 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastApplyFinishTime = 7; 783 } 784 785 // State of a standalone container in Docker. 786 // 787 // An apiserver-compatible representation of this struct: 788 // https://pkg.go.dev/github.com/docker/docker/api/types#ContainerState 789 message DockerContainerState { 790 // String representation of the container state. 791 // Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead". 792 // +optional 793 optional string status = 1; 794 795 // Whether the container is running. 796 // +optional 797 optional bool running = 2; 798 799 // Whether the container is in an error state. 800 // +optional 801 optional string error = 3; 802 803 // The exit code, if the container has exited. 804 // +optional 805 optional int32 exitCode = 4; 806 807 // When the container process started. 808 // +optional 809 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 5; 810 811 // When the container process finished. 812 // +optional 813 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishedAt = 6; 814 } 815 816 // DockerImage describes an image to build with Docker. 817 // +k8s:openapi-gen=true 818 message DockerImage { 819 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 820 821 optional DockerImageSpec spec = 2; 822 823 optional DockerImageStatus status = 3; 824 } 825 826 // DockerImageList 827 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 828 message DockerImageList { 829 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 830 831 repeated DockerImage items = 2; 832 } 833 834 // DockerImageSpec describes how to build a Docker image with `docker_build`. 835 // 836 // Most fields of this spec directly correspond to the Docker CLI. 837 message DockerImageSpec { 838 // The named reference of the image. 839 optional string ref = 12; 840 841 // Dockerfile contains the complete contents of the Dockerfile. 842 // 843 // TODO(nick): We should also support referencing the Dockerfile as a path. 844 // 845 // +optional 846 optional string dockerfileContents = 1; 847 848 // Context specifies the Docker build context. 849 // 850 // Must be an absolute path on the local filesystem. 851 // 852 // +tilt:local-path=true 853 optional string context = 2; 854 855 // Ignores are filters on the Docker build context. 856 // 857 // The DockerImage controller will NOT read ignores from .dockerignore files. 858 // Instead, all filters must be expressed in this field, which covers 859 // .dockerignore files, ignore= lists in the tiltfile, only= lists in the 860 // tiltfile, and more. 861 repeated IgnoreDef contextIgnores = 16; 862 863 // Args specifies the build arguments to the Dockerfile. 864 // 865 // Equivalent to `--build-arg` in the docker CLI. 866 // 867 // Each item should take the form "KEY" or "KEY=VALUE". 868 // 869 // +optional 870 repeated string args = 3; 871 872 // Target specifies the name of the stage in the Dockerfile to build. 873 // 874 // Equivalent to `--target` in the docker CLI. 875 // 876 // +optional 877 optional string target = 4; 878 879 // Pass SSH secrets to docker so it can clone private repos. 880 // 881 // https://docs.docker.com/develop/develop-images/build_enhancements/#using-ssh-to-access-private-data-in-builds 882 // 883 // Equivalent to `--ssh` in the docker CLI. 884 // 885 // +optional 886 repeated string sshAgentConfigs = 5; 887 888 // Pass secrets to docker. 889 // 890 // https://docs.docker.com/develop/develop-images/build_enhancements/#new-docker-build-secret-information 891 // 892 // Equivalent to `--secret` in the Docker CLI. 893 // 894 // +optional 895 repeated string secrets = 6; 896 897 // Set the networking mode for the RUN instructions in the docker build. 898 // 899 // Equivalent to `--network` in the Docker CLI. 900 // 901 // +optional 902 optional string network = 7; 903 904 // Always attempt to pull a new version of the base image. 905 // 906 // Equivalent to `--pull` in the Docker CLI. 907 // 908 // +optional 909 optional bool pull = 8; 910 911 // Images to use as cache sources. 912 // 913 // Equivalent to `--cache-from` in the Docker CLI. 914 repeated string cacheFrom = 9; 915 916 // Platform specifies architecture information for target image. 917 // 918 // https://docs.docker.com/desktop/multi-arch/ 919 // 920 // Equivalent to `--platform` in the Docker CLI. 921 optional string platform = 10; 922 923 // By default, Tilt creates a new temporary image reference for each build. 924 // The user can also specify their own reference, to integrate with other tooling 925 // (like build IDs for Jenkins build pipelines) 926 // 927 // Equivalent to the docker build --tag flag. 928 // 929 // +optional 930 repeated string extraTags = 11; 931 932 // Names of image maps that this build depends on. 933 // 934 // The controller will watch all the image maps, rebuild the image if any of 935 // the maps resolve to a new image, and inject them into the dockerfile. 936 // 937 // +optional 938 repeated string imageMaps = 13; 939 940 // The name of the cluster we're building for. 941 // 942 // We'll use the cluster to determine the architecture of the image to build, 943 // and the registry to build it for. 944 // 945 // If no cluster is specified, assumes the default cluster. 946 // 947 // +optional 948 optional string cluster = 14; 949 950 // Whether the cluster needs access to the image. 951 // 952 // If not specified, assumes we have to push up to the cluster. 953 // 954 // +optional 955 optional string clusterNeeds = 15; 956 957 // Other hosts to be added into a container’s /etc/hosts file 958 // 959 // https://docs.docker.com/engine/reference/commandline/build/#add-host 960 // 961 // Equivalent to `--add-host` in the Docker CLI. 962 repeated string extraHosts = 17; 963 } 964 965 // DockerImageStageStatus gives detailed report of each stage 966 // of the most recent image build. 967 // 968 // Most stages are derived from Buildkit's StatusResponse 969 // https://github.com/moby/buildkit/blob/35fcb28a009d6454b2915a5c8084b25ad851cf38/api/services/control/control.proto#L108 970 // but Tilt may synthesize its own stages for the steps it 971 // owns. 972 // 973 // Stages may be executed in parallel. 974 message DockerImageStageStatus { 975 // A human-readable name of the stage. 976 optional string name = 1; 977 978 // Whether Buildkit was able to cache the stage based on inputs. 979 // +optional 980 optional bool cached = 2; 981 982 // The timestamp when we started working on the stage. 983 // +optional 984 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 6; 985 986 // The timetsamp when we completed the work on the stage. 987 // +optional 988 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishedAt = 7; 989 990 // Error message if the stage failed. If empty, the stage succeeded. 991 // +optional 992 optional string error = 5; 993 } 994 995 // DockerImageStateBuilding expresses that an image build is in-progress. 996 message DockerImageStateBuilding { 997 // The reason why the image is building. 998 // +optional 999 optional string reason = 1; 1000 1001 // Time when the build started. 1002 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 2; 1003 } 1004 1005 // DockerImageStateCompleted expresses when the image build is finished and 1006 // no new images need to be built. 1007 message DockerImageStateCompleted { 1008 // The reason why the image was built. 1009 // +optional 1010 optional string reason = 1; 1011 1012 // Error message if the build failed. 1013 // +optional 1014 optional string error = 2; 1015 1016 // Time when we started building an image. 1017 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 3; 1018 1019 // Time when we finished building an image 1020 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishedAt = 4; 1021 } 1022 1023 // DockerImageStateWaiting expresses what we're waiting on to build an image. 1024 message DockerImageStateWaiting { 1025 // (brief) reason the image build is waiting. 1026 // +optional 1027 optional string reason = 1; 1028 } 1029 1030 // DockerImageStatus defines the observed state of DockerImage 1031 message DockerImageStatus { 1032 // A fully-qualified image reference of a built image, as seen from the local 1033 // network. 1034 // 1035 // Usually includes a name and an immutable tag. 1036 // 1037 // NB: If we're building to a particular registry, this may 1038 // have a different hostname from the Spec `Ref` field. 1039 // 1040 // +optional 1041 optional string ref = 1; 1042 1043 // Details about a waiting image build. 1044 // +optional 1045 optional DockerImageStateWaiting waiting = 2; 1046 1047 // Details about a building image. 1048 // +optional 1049 optional DockerImageStateBuilding building = 3; 1050 1051 // Details about a finished image build. 1052 // +optional 1053 optional DockerImageStateCompleted completed = 4; 1054 1055 // Status information about each individual build stage 1056 // of the most recent image build. 1057 repeated DockerImageStageStatus stageStatuses = 5; 1058 } 1059 1060 // How docker binds container ports to the host network 1061 message DockerPortBinding { 1062 // The port inside the container. 1063 optional int32 containerPort = 1; 1064 1065 // The port on the host machine where Docker running. 1066 optional int32 hostPort = 2; 1067 1068 // The IP on the host machine where Docker is binding the network. 1069 optional string hostIP = 3; 1070 } 1071 1072 // ExecAction describes a "run in container" action. 1073 message ExecAction { 1074 // Command is the command line to execute inside the container, the working directory for the 1075 // command is root ('/') in the container's filesystem. The command is simply exec'd, it is 1076 // not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use 1077 // a shell, you need to explicitly call out to that shell. 1078 // Exit status of 0 is treated as live/healthy and non-zero is unhealthy. 1079 // +optional 1080 repeated string command = 1; 1081 } 1082 1083 // Extension defines an extension that's evaluated on Tilt startup. 1084 // +k8s:openapi-gen=true 1085 // +tilt:starlark-gen=true 1086 message Extension { 1087 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 1088 1089 optional ExtensionSpec spec = 2; 1090 1091 optional ExtensionStatus status = 3; 1092 } 1093 1094 // ExtensionList 1095 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 1096 message ExtensionList { 1097 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 1098 1099 repeated Extension items = 2; 1100 } 1101 1102 // ExtensionRepo specifies a repo or folder where a set of extensions live. 1103 // +k8s:openapi-gen=true 1104 // +tilt:starlark-gen=true 1105 message ExtensionRepo { 1106 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 1107 1108 optional ExtensionRepoSpec spec = 2; 1109 1110 optional ExtensionRepoStatus status = 3; 1111 } 1112 1113 // ExtensionRepoList 1114 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 1115 message ExtensionRepoList { 1116 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 1117 1118 repeated ExtensionRepo items = 2; 1119 } 1120 1121 // ExtensionRepoSpec defines how to access the repo. 1122 message ExtensionRepoSpec { 1123 // The URL of the repo. 1124 // 1125 // Allowed: 1126 // https: URLs that point to a public git repo 1127 // file: URLs that point to a location on disk. 1128 optional string url = 1; 1129 1130 // A reference to sync the repo to. If empty, Tilt will always update 1131 // the repo to the latest version. 1132 // +optional 1133 optional string ref = 2; 1134 } 1135 1136 // ExtensionRepoStatus defines the observed state of ExtensionRepo 1137 message ExtensionRepoStatus { 1138 // Contains information about any problems loading the repo. 1139 optional string error = 1; 1140 1141 // The last time the repo was fetched and checked for validity. 1142 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastFetchedAt = 2; 1143 1144 // The path to the repo on local disk. 1145 optional string path = 3; 1146 1147 // The reference that we currently have checked out. 1148 // On git, this is the commit hash. 1149 // On file repos, this is empty. 1150 optional string checkoutRef = 4; 1151 1152 // If StaleReason is non-empty, that indicates the repo failed to fetch, but 1153 // we were successfully able to use an on-disk copy. 1154 optional string staleReason = 5; 1155 } 1156 1157 // ExtensionSpec defines the desired state of Extension 1158 message ExtensionSpec { 1159 // RepoName specifies the ExtensionRepo object where we should find this extension. 1160 // 1161 // The Extension controller should watch for changes to this repo, and 1162 // may update if this repo is deleted or moved. 1163 optional string repoName = 1; 1164 1165 // RepoPath specifies the path to the extension directory inside the repo. 1166 // 1167 // Once the repo is downloaded, this path should point to a directory with a 1168 // Tiltfile as the main "entrypoint" of the extension. 1169 optional string repoPath = 2; 1170 1171 // Arguments to the Tiltfile loaded by this extension. 1172 // 1173 // Arguments can be positional (['a', 'b', 'c']) or flag-based ('--to-edit=a'). 1174 // By default, a list of arguments indicates the list of services in the tiltfile 1175 // that should be enabled. 1176 // 1177 // +optional 1178 repeated string args = 3; 1179 } 1180 1181 // ExtensionStatus defines the observed state of Extension 1182 message ExtensionStatus { 1183 // Contains information about any problems loading the extension. 1184 optional string error = 1; 1185 1186 // The path to the extension on disk. This location should be shared 1187 // and readable by all Tilt instances. 1188 optional string path = 2; 1189 } 1190 1191 message FileEvent { 1192 // Time is an approximate timestamp for a batch of file changes. 1193 // 1194 // This will NOT exactly match any inode attributes (e.g. ctime, mtime) at the filesystem level and is purely 1195 // informational or for use as an opaque watermark. 1196 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime time = 1; 1197 1198 // SeenFiles is a list of paths which changed (create, modify, or delete). 1199 repeated string seenFiles = 2; 1200 } 1201 1202 // FileWatch 1203 // +k8s:openapi-gen=true 1204 // +tilt:starlark-gen=true 1205 message FileWatch { 1206 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 1207 1208 optional FileWatchSpec spec = 2; 1209 1210 optional FileWatchStatus status = 3; 1211 } 1212 1213 // FileWatchList 1214 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 1215 message FileWatchList { 1216 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 1217 1218 repeated FileWatch items = 2; 1219 } 1220 1221 // FileWatchSpec defines the desired state of FileWatch 1222 message FileWatchSpec { 1223 // WatchedPaths are paths of directories or files to watch for changes to. It cannot be empty. 1224 // 1225 // +tilt:local-path=true 1226 repeated string watchedPaths = 1; 1227 1228 // Ignores are optional rules to filter out a subset of changes matched by WatchedPaths. 1229 repeated IgnoreDef ignores = 2; 1230 1231 // Specifies how to disable this. 1232 // 1233 // +optional 1234 optional DisableSource disableSource = 3; 1235 } 1236 1237 // FileWatchStatus defines the observed state of FileWatch 1238 message FileWatchStatus { 1239 // MonitorStartTime is the timestamp of when filesystem monitor was started. It is zero if the monitor has not 1240 // been started yet. 1241 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime monitorStartTime = 1; 1242 1243 // LastEventTime is the timestamp of the most recent file event. It is zero if no events have been seen yet. 1244 // 1245 // If the specifics of which files changed are not important, this field can be used as a watermark without 1246 // needing to inspect FileEvents. 1247 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastEventTime = 2; 1248 1249 // FileEvents summarizes batches of file changes (create, modify, or delete) that have been seen in ascending 1250 // chronological order. Only the most recent 20 events are included. 1251 repeated FileEvent fileEvents = 3; 1252 1253 // Error is set if there is a problem with the filesystem watch. If non-empty, consumers should assume that 1254 // no filesystem events will be seen and that the file watcher is in a failed state. 1255 optional string error = 4; 1256 1257 // Details about whether/why this is disabled. 1258 // +optional 1259 optional DisableStatus disableStatus = 5; 1260 } 1261 1262 // Forward defines a port forward to execute on a given pod. 1263 message Forward { 1264 // The port to expose on the current machine. 1265 // 1266 // If not specified (or 0), a random free port will be chosen and can 1267 // be discovered via the status once established. 1268 // 1269 // +optional 1270 optional int32 localPort = 4; 1271 1272 // The port on the Kubernetes pod to connect to. Required. 1273 optional int32 containerPort = 3; 1274 1275 // Optional host to bind to on the current machine. 1276 // 1277 // If not explicitly specified, uses the bind host of the tilt web UI (usually localhost). 1278 // 1279 // +optional 1280 optional string host = 5; 1281 1282 // Name to identify this port forward. 1283 // 1284 // +optional 1285 optional string name = 6; 1286 1287 // Path to include as part of generated links for port forward. 1288 // 1289 // +optional 1290 optional string path = 7; 1291 } 1292 1293 message ForwardStatus { 1294 // LocalPort is the port bound to on the system running Tilt. 1295 optional int32 localPort = 1; 1296 1297 // ContainerPort is the port in the container being forwarded. 1298 optional int32 containerPort = 2; 1299 1300 // Addresses that the forwarder is bound to. 1301 // 1302 // For example, a `localhost` host will bind to 127.0.0.1 and [::1]. 1303 repeated string addresses = 3; 1304 1305 // StartedAt is the time at which the forward was initiated. 1306 // 1307 // If the forwarder is not running yet, this will be zero/empty. 1308 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 4; 1309 1310 // Error is a human-readable description if a problem was encountered 1311 // while initializing the forward. 1312 optional string error = 5; 1313 } 1314 1315 // HTTPGetAction describes an action based on HTTP Get requests. 1316 message HTTPGetAction { 1317 // Path to access on the HTTP server. 1318 // +optional 1319 optional string path = 1; 1320 1321 // Name or number of the port to access on the container. 1322 // Number must be in the range 1 to 65535. 1323 optional int32 port = 2; 1324 1325 // Host name to connect to, defaults to the pod IP. You probably want to set 1326 // "Host" in httpHeaders instead. 1327 // +optional 1328 optional string host = 3; 1329 1330 // Scheme to use for connecting to the host. 1331 // Defaults to HTTP. 1332 // +optional 1333 optional string scheme = 4; 1334 1335 // Custom headers to set in the request. HTTP allows repeated headers. 1336 // +optional 1337 repeated HTTPHeader httpHeaders = 5; 1338 } 1339 1340 // HTTPHeader describes a custom header to be used in HTTP probes 1341 message HTTPHeader { 1342 // The header field name 1343 optional string name = 1; 1344 1345 // The header field value 1346 optional string value = 2; 1347 } 1348 1349 // Handler defines a specific action that should be taken in a probe. 1350 message Handler { 1351 // One and only one of the following should be specified. 1352 // Exec specifies the action to take. 1353 // +optional 1354 optional ExecAction exec = 1; 1355 1356 // HTTPGet specifies the http request to perform. 1357 // +optional 1358 optional HTTPGetAction httpGet = 2; 1359 1360 // TCPSocket specifies an action involving a TCP port. 1361 // TCP hooks not yet supported 1362 // TODO: implement a realistic TCP lifecycle hook 1363 // +optional 1364 optional TCPSocketAction tcpSocket = 3; 1365 } 1366 1367 // Describes sets of file paths that the FileWatch should ignore. 1368 message IgnoreDef { 1369 // BasePath is the base path for the patterns. It cannot be empty. 1370 // 1371 // If no patterns are specified, everything under it will be recursively ignored. 1372 // 1373 // +tilt:local-path=true 1374 optional string basePath = 1; 1375 1376 // Patterns are dockerignore style rules. Absolute-style patterns will be rooted to the BasePath. 1377 // 1378 // See https://docs.docker.com/engine/reference/builder/#dockerignore-file. 1379 repeated string patterns = 2; 1380 } 1381 1382 // ImageMap expresses the mapping from an image reference to a real, pushed 1383 // image in an image registry that a container runtime can access. 1384 // 1385 // Another way to think about the ImageMap is that ImageMapSpec is a mutable 1386 // image reference (where the image might not exist yet), but ImageMapStatus is 1387 // an immutable image reference (where, if an image is specified, it always 1388 // exists). 1389 // 1390 // ImageMap does not specify how the image is built or who is responsible for 1391 // building this. But any API that builds images should produce an ImageMap. 1392 // 1393 // For example, a builder that builds to a local image registry might create 1394 // a map from: 'my-apiserver:dev' to 'localhost:5000/my-apiserver:content-based-label'. 1395 // 1396 // ImageMap doesn't follow the usual Kubernetes-style API semantics 1397 // (where the Status is the result of running the Spec). It's closer to a 1398 // ConfigMap. Though the Status does represent a real runtime result 1399 // (an image in a registry). 1400 // 1401 // +k8s:openapi-gen=true 1402 message ImageMap { 1403 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 1404 1405 optional ImageMapSpec spec = 2; 1406 1407 optional ImageMapStatus status = 3; 1408 } 1409 1410 // ImageMapList 1411 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 1412 message ImageMapList { 1413 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 1414 1415 repeated ImageMap items = 2; 1416 } 1417 1418 // ImageMapArgsOverride defines args to inject when the image 1419 // is injected. Only applies to types that embed a v1.Container 1420 // with a Command field. 1421 // 1422 // https://pkg.go.dev/k8s.io/api/core/v1#Container 1423 message ImageMapOverrideArgs { 1424 // A list of args strings. 1425 repeated string args = 1; 1426 } 1427 1428 // ImageMapCommandOverride defines a command to inject when the image 1429 // is injected. Only applies to types that embed a v1.Container 1430 // with a Command field. 1431 // 1432 // https://pkg.go.dev/k8s.io/api/core/v1#Container 1433 message ImageMapOverrideCommand { 1434 // A list of command strings. 1435 repeated string command = 1; 1436 } 1437 1438 // ImageMapSpec defines the desired state of ImageMap 1439 message ImageMapSpec { 1440 // A named image reference. 1441 // 1442 // Deployment tools expect this image reference to match an image 1443 // in the YAML being deployed, and will replace that image reference. 1444 // 1445 // By default, this selector will match an image if the names match 1446 // (tags on both the selector and the matched reference are ignored). 1447 optional string selector = 1; 1448 1449 // If specified, then tags on both the selector and the matched 1450 // reference are used for matching. The selector will only 1451 // match the reference if the tags match exactly. 1452 // 1453 // +optional 1454 optional bool matchExact = 2; 1455 1456 // If specified, then the selector will also match any strings 1457 // in container env variables. 1458 // 1459 // +optional 1460 optional bool matchInEnvVars = 3; 1461 1462 // If specified, the injector will replace the 'command' 1463 // field in the container when it replaces the image. 1464 // 1465 // +optional 1466 optional ImageMapOverrideCommand overrideCommand = 4; 1467 1468 // If specified, the injector will replace the 'args' 1469 // field in the container when it replaces the image. 1470 // 1471 // +optional 1472 optional ImageMapOverrideArgs overrideArgs = 5; 1473 } 1474 1475 // ImageMapStatus defines the observed state of ImageMap 1476 message ImageMapStatus { 1477 // A fully-qualified image reference, including a name and an immutable tag, 1478 // as seen from the cluster container runtime that we're mapping this image to. 1479 // 1480 // NB: Container images often need to be referenced from different networks, 1481 // including: 1482 // 1483 // 1) The cluster container runtime 1484 // 2) The local network 1485 // 3) The cluster network 1486 // 1487 // And each of these cases may have distinct URLs. 1488 // We might deprecate this field and only use fields 1489 // of the form `ImageFromX`. 1490 // 1491 // For more details on image references in different networks, see: 1492 // https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/generic/1755-communicating-a-local-registry#specification-for-localregistryhosting-v1 1493 optional string image = 1; 1494 1495 // A fully-qualified image reference, including a name and an immutable tag, 1496 // as seen from the local network. 1497 optional string imageFromLocal = 3; 1498 1499 // A fully-qualified image reference, including a name and an immutable tag, 1500 // as seen from the cluster container runtime. 1501 optional string imageFromCluster = 4; 1502 1503 // Timestamp indicating when the image started building. 1504 // 1505 // Intended to be used to determine which file changes were picked up by the 1506 // image build. We can assume that any file changes before this timestamp were 1507 // definitely included in the image, and any file changes after this timestamp 1508 // may not be included in the image. 1509 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime buildStartTime = 2; 1510 } 1511 1512 // KubernetesApply specifies a blob of YAML to apply, and a set of ImageMaps 1513 // that the YAML depends on. 1514 // 1515 // The KubernetesApply controller will resolve the ImageMaps into immutable image 1516 // references. The controller will process the spec YAML, then apply it to the cluster. 1517 // Those processing steps might include: 1518 // 1519 // - Injecting the resolved image references. 1520 // - Adding custom labels so that Tilt can track the progress of the apply. 1521 // - Modifying image pull rules to ensure the image is pulled correctly. 1522 // 1523 // The controller won't apply anything until all ImageMaps resolve to real images. 1524 // 1525 // The controller will watch all the image maps, and redeploy the entire YAML if 1526 // any of the maps resolve to a new image. 1527 // 1528 // The status field will contain both the raw applied object, and derived fields 1529 // to help other controllers figure out how to watch the apply progress. 1530 // 1531 // +k8s:openapi-gen=true 1532 // +tilt:starlark-gen=true 1533 message KubernetesApply { 1534 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 1535 1536 optional KubernetesApplySpec spec = 2; 1537 1538 optional KubernetesApplyStatus status = 3; 1539 } 1540 1541 message KubernetesApplyCmd { 1542 // Args are the command-line arguments for the apply command. Must have length >= 1. 1543 repeated string args = 1; 1544 1545 // Process working directory. 1546 // 1547 // If not specified, will default to Tilt working directory. 1548 // 1549 // +optional 1550 // +tilt:local-path=true 1551 optional string dir = 2; 1552 1553 // Env are additional variables for the process environment. 1554 // 1555 // Environment variables are layered on top of the environment variables 1556 // that Tilt runs with. 1557 // 1558 // +optional 1559 repeated string env = 3; 1560 } 1561 1562 // KubernetesApplyList 1563 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 1564 message KubernetesApplyList { 1565 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 1566 1567 repeated KubernetesApply items = 2; 1568 } 1569 1570 // KubernetesApplySpec defines the desired state of KubernetesApply 1571 message KubernetesApplySpec { 1572 // YAML to apply to the cluster. 1573 // 1574 // Exactly one of YAML OR ApplyCmd MUST be provided. 1575 // 1576 // +optional 1577 optional string yaml = 1; 1578 1579 // Names of image maps that this applier depends on. 1580 // 1581 // The controller will watch all the image maps, and redeploy the entire YAML 1582 // if any of the maps resolve to a new image. 1583 // 1584 // +optional 1585 repeated string imageMaps = 2; 1586 1587 // Descriptors of how to find images in the YAML. 1588 // 1589 // Needed when injecting images into CRDs. 1590 // 1591 // +optional 1592 repeated KubernetesImageLocator imageLocators = 3; 1593 1594 // The timeout on the apply operation. 1595 // 1596 // We've had problems with both: 1597 // 1) CRD apiservers that take an arbitrarily long time to apply, and 1598 // 2) Infinite loops in the apimachinery 1599 // So we offer the ability to set a timeout on Kubernetes apply operations. 1600 // 1601 // The default timeout is 30s. 1602 // 1603 // +optional 1604 optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration timeout = 4; 1605 1606 // KubernetesDiscoveryTemplateSpec describes how we discover pods 1607 // for resources created by this Apply. 1608 // 1609 // If not specified, the KubernetesDiscovery controller will listen to all pods, 1610 // and follow owner references to find the pods owned by these resources. 1611 // 1612 // +optional 1613 optional KubernetesDiscoveryTemplateSpec kubernetesDiscoveryTemplateSpec = 5; 1614 1615 // PortForwardTemplateSpec describes the data model for port forwards 1616 // that KubernetesApply should set up. 1617 // 1618 // Underneath the hood, we'll create a KubernetesDiscovery object that finds 1619 // the pods and sets up the port-forwarding. Only one PortForward will be 1620 // active at a time. 1621 // 1622 // +optional 1623 optional PortForwardTemplateSpec portForwardTemplateSpec = 6; 1624 1625 // PodLogStreamTemplateSpec describes the data model for PodLogStreams 1626 // that KubernetesApply should set up. 1627 // 1628 // Underneath the hood, we'll create a KubernetesDiscovery object that finds 1629 // the pods and sets up the pod log streams. 1630 // 1631 // If no template is specified, the controller will stream all 1632 // pod logs available from the apiserver. 1633 // 1634 // +optional 1635 optional PodLogStreamTemplateSpec podLogStreamTemplateSpec = 7; 1636 1637 // DiscoveryStrategy describes how we set up pod watches for the applied 1638 // resources. This affects all systems that attach to pods, including 1639 // PortForwards, PodLogStreams, resource readiness, and live-updates. 1640 // 1641 // +optional 1642 optional string discoveryStrategy = 8; 1643 1644 // Specifies how to disable this. 1645 // 1646 // +optional 1647 optional DisableSource disableSource = 9; 1648 1649 // ApplyCmd is a custom command to execute to deploy entities to the Kubernetes cluster. 1650 // 1651 // The command must be idempotent, e.g. it must not fail if some or all entities already exist. 1652 // 1653 // The ApplyCmd MUST return valid Kubernetes YAML for the entities it applied to the cluster. 1654 // 1655 // Exactly one of YAML OR ApplyCmd MUST be provided. 1656 // 1657 // +optional 1658 optional KubernetesApplyCmd applyCmd = 10; 1659 1660 // RestartOn determines external triggers that will result in an apply. 1661 // 1662 // +optional 1663 optional RestartOnSpec restartOn = 11; 1664 1665 // DeleteCmd is a custom command to execute to delete entities created by ApplyCmd and clean up any 1666 // additional state. 1667 // 1668 // +optional 1669 optional KubernetesApplyCmd deleteCmd = 12; 1670 1671 // Cluster name to determine the Kubernetes cluster. 1672 // 1673 // If not provided, "default" will be used. 1674 // 1675 // +optional 1676 optional string cluster = 13; 1677 } 1678 1679 // KubernetesApplyStatus defines the observed state of KubernetesApply 1680 message KubernetesApplyStatus { 1681 // The result of applying the YAML to the cluster. This should contain 1682 // UIDs for the applied resources. 1683 // 1684 // +optional 1685 optional string resultYAML = 1; 1686 1687 // An error applying the YAML. 1688 // 1689 // If there was an error, than ResultYAML should be empty (and vice versa). 1690 // 1691 // +optional 1692 optional string error = 2; 1693 1694 // Timestamp of we last finished applying this YAML to the cluster. 1695 // 1696 // When populated, must be equal or after the LastApplyStartTime field. 1697 // 1698 // TODO(nick): In v1, we may rename this to LastApplyFinishTime, which 1699 // is more consistent with how we name this in other API objects. 1700 // 1701 // +optional 1702 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastApplyTime = 3; 1703 1704 // Timestamp of when we last started applying this YAML to the cluster. 1705 // 1706 // +optional 1707 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastApplyStartTime = 6; 1708 1709 // A base64-encoded hash of all the inputs to the apply. 1710 // 1711 // We added this so that more procedural code can determine whether 1712 // their updates have been applied yet or not by the reconciler. But any code 1713 // using it this way should note that the reconciler may "skip" an update 1714 // (e.g., if two images get updated in quick succession before the reconciler 1715 // injects them into the YAML), so a particular ApplieInputHash might never appear. 1716 // 1717 // +optional 1718 optional string appliedInputHash = 4; 1719 1720 // Details about whether/why this is disabled. 1721 // +optional 1722 optional DisableStatus disableStatus = 5; 1723 1724 // Conditions based on the result of the apply. 1725 // 1726 // +optional 1727 repeated k8s.io.apimachinery.pkg.apis.meta.v1.Condition conditions = 7; 1728 } 1729 1730 message KubernetesClusterConnection { 1731 // The name of the kubeconfig context to use. 1732 // 1733 // If not specified, will use the default context in the kubeconfig. 1734 // 1735 // +optional 1736 optional string context = 1; 1737 1738 // The default namespace to use. 1739 // 1740 // If not specified, will use the namespace in the kubeconfig. 1741 // 1742 // +optional 1743 optional string namespace = 2; 1744 } 1745 1746 // Kubernetes-specific fields for connection status 1747 message KubernetesClusterConnectionStatus { 1748 // The resolved kubeconfig context. 1749 optional string context = 2; 1750 1751 // The resolved default namespace. 1752 optional string namespace = 3; 1753 1754 // The resolved cluster name (as determined by the kubeconfig context). 1755 optional string cluster = 4; 1756 1757 // The product name for this cluster. 1758 // 1759 // For a complete list of possible product names, see: 1760 // https://pkg.go.dev/github.com/tilt-dev/clusterid#Product 1761 optional string product = 1; 1762 1763 // The resolved config path. 1764 // 1765 // Tilt will freeze the config and write it to a temporary directory. 1766 // Subprocesses that depend on this cluster can find this file 1767 // by reading the KUBECONFIG env var. 1768 optional string configPath = 5; 1769 } 1770 1771 // KubernetesDiscovery 1772 // +k8s:openapi-gen=true 1773 // +tilt:starlark-gen=true 1774 message KubernetesDiscovery { 1775 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 1776 1777 optional KubernetesDiscoverySpec spec = 2; 1778 1779 optional KubernetesDiscoveryStatus status = 3; 1780 } 1781 1782 // KubernetesDiscoveryList 1783 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 1784 message KubernetesDiscoveryList { 1785 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 1786 1787 repeated KubernetesDiscovery items = 2; 1788 } 1789 1790 // KubernetesDiscoverySpec defines the desired state of KubernetesDiscovery 1791 message KubernetesDiscoverySpec { 1792 // Watches determine what resources are discovered. 1793 // 1794 // If a discovered resource (e.g. Pod) matches the KubernetesWatchRef UID exactly, it will be reported. 1795 // If a discovered resource is transitively owned by the KubernetesWatchRef UID, it will be reported. 1796 repeated KubernetesWatchRef watches = 1; 1797 1798 // ExtraSelectors are label selectors that will force discovery of a Pod even if it does not match 1799 // the AncestorUID. 1800 // 1801 // This should only be necessary in the event that a CRD creates Pods but does not set an owner reference 1802 // to itself. 1803 repeated k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector extraSelectors = 2; 1804 1805 // PortForwardTemplateSpec describes the data model for port forwards 1806 // that KubernetesDiscovery should set up. 1807 // 1808 // The KubernetesDiscovery controller will choose a "best" candidate 1809 // for attaching the port-forwarding. Only one PortForward will be 1810 // active at a time. 1811 // 1812 // +optional 1813 optional PortForwardTemplateSpec portForwardTemplateSpec = 3; 1814 1815 // PodLogStreamTemplateSpec describes the data model for PodLogStreams 1816 // that KubernetesDiscovery should set up. 1817 // 1818 // The KubernetesDiscovery controller will attach PodLogStream objects 1819 // to all active pods it discovers. 1820 // 1821 // If no template is specified, the controller will stream all 1822 // pod logs available from the apiserver. 1823 // 1824 // +optional 1825 optional PodLogStreamTemplateSpec podLogStreamTemplateSpec = 4; 1826 1827 // Cluster name to determine the Kubernetes cluster. 1828 // 1829 // If not provided, "default" will be used. 1830 // 1831 // +optional 1832 optional string cluster = 5; 1833 } 1834 1835 message KubernetesDiscoveryStateRunning { 1836 // StartTime is when Kubernetes resource discovery began. 1837 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startTime = 1; 1838 } 1839 1840 message KubernetesDiscoveryStateWaiting { 1841 // Reason the monitor has not yet been started. 1842 optional string reason = 1; 1843 } 1844 1845 // KubernetesDiscoveryStatus defines the observed state of KubernetesDiscovery 1846 message KubernetesDiscoveryStatus { 1847 // MonitorStartTime is the timestamp of when Kubernetes resource discovery was started. 1848 // 1849 // It is zero if discovery has not been started yet. 1850 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime monitorStartTime = 2; 1851 1852 // Pods that have been discovered based on the criteria in the spec. 1853 repeated Pod pods = 1; 1854 1855 // Waiting contains information about why the monitor has not started. 1856 // 1857 // +optional 1858 optional KubernetesDiscoveryStateWaiting waiting = 3; 1859 1860 // Running contains information about the currently running monitor. 1861 // 1862 // +optional 1863 optional KubernetesDiscoveryStateRunning running = 4; 1864 } 1865 1866 message KubernetesDiscoveryTemplateSpec { 1867 // ExtraSelectors are label selectors that will force discovery of a Pod even 1868 // if it does not match the AncestorUID. 1869 // 1870 // This should only be necessary in the event that a CRD creates Pods but does 1871 // not set an owner reference to itself. 1872 repeated k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector extraSelectors = 1; 1873 } 1874 1875 // Finds image references in Kubernetes YAML. 1876 message KubernetesImageLocator { 1877 // Selects which objects to look in. 1878 optional ObjectSelector objectSelector = 1; 1879 1880 // A JSON path to the image reference field. 1881 // 1882 // If Object is empty, the field should be a string. 1883 // 1884 // If Object is non-empty, the field should be an object with subfields. 1885 optional string path = 2; 1886 1887 // A descriptor of the path and structure of an object that describes an image 1888 // reference. This is a common way to describe images in CRDs, breaking 1889 // them down into an object rather than an image reference string. 1890 // 1891 // +optional 1892 optional KubernetesImageObjectDescriptor object = 3; 1893 } 1894 1895 message KubernetesImageObjectDescriptor { 1896 // The name of the field that contains the image repository. 1897 optional string repoField = 1; 1898 1899 // The name of the field that contains the image tag. 1900 optional string tagField = 2; 1901 } 1902 1903 // KubernetesWatchRef is similar to v1.ObjectReference from the Kubernetes API and is used to determine 1904 // what objects should be reported on based on discovery. 1905 message KubernetesWatchRef { 1906 // UID is a Kubernetes object UID. 1907 // 1908 // It should either be the exact object UID or the transitive owner. 1909 // 1910 // +optional 1911 optional string uid = 1; 1912 1913 // Namespace is the Kubernetes namespace for discovery. Required. 1914 optional string namespace = 2; 1915 1916 // Name is the Kubernetes object name. 1917 // 1918 // This is not directly used in discovery; it is extra metadata. 1919 // 1920 // +optional 1921 optional string name = 3; 1922 } 1923 1924 // LiveUpdate 1925 // +k8s:openapi-gen=true 1926 message LiveUpdate { 1927 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 1928 1929 optional LiveUpdateSpec spec = 2; 1930 1931 optional LiveUpdateStatus status = 3; 1932 } 1933 1934 message LiveUpdateContainerStateWaiting { 1935 // One word camel-case reason why we're in a waiting state. 1936 // +optional 1937 optional string reason = 1; 1938 1939 // Human-readable description of what's blocking. 1940 // +optional 1941 optional string message = 2; 1942 } 1943 1944 // LiveUpdateContainerStatus defines the observed state of 1945 // the live-update syncer for a particular container. 1946 message LiveUpdateContainerStatus { 1947 // The name of the container in the pod. 1948 optional string containerName = 1; 1949 1950 // The ID of the container in the pod, in the format 'docker://<container_id>'. 1951 // +optional 1952 optional string containerID = 2; 1953 1954 // The name of the pod this container belongs to. 1955 optional string podName = 3; 1956 1957 // The namespace of the pod this container belongs to. 1958 optional string namespace = 4; 1959 1960 // The timestamp of the most recent file update successfully synced to the 1961 // container. 1962 // 1963 // Must match the timestamp in a FileEvent, not the time the sync was performed. 1964 // 1965 // +optional 1966 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastFileTimeSynced = 5; 1967 1968 // Contains any error messages from the most recent sequence of Execs. 1969 // 1970 // Empty if the most recent Execs completed successfully. 1971 // 1972 // An ExecError is not necessarily a failure state. For example, a linter 1973 // error in the container is something we'd want to surface to the user, but 1974 // not an indication that the live-updater did something wrong. 1975 // 1976 // +optional 1977 optional string lastExecError = 6; 1978 1979 // Details about a waiting live update. 1980 // 1981 // A live update is waiting when the reconciler is aware of file changes 1982 // that need to be synced to the container, but has decided not to sync them yet. 1983 optional LiveUpdateContainerStateWaiting waiting = 7; 1984 } 1985 1986 // Specifies how to select containers to live update inside Docker Compose. 1987 message LiveUpdateDockerComposeSelector { 1988 // The name of a DockerComposeService object. 1989 // 1990 // For simple projects, this is usually the same as the service 1991 // name in the docker-compose.yml file. (But it doesn't necessarily 1992 // have to be.) 1993 optional string service = 1; 1994 } 1995 1996 // Runs a remote command after files have been synced to the container. 1997 // Commonly used for small in-container changes (like moving files 1998 // around, or restart processes). 1999 message LiveUpdateExec { 2000 // Command-line arguments to run inside the container. Must have length at least 1. 2001 repeated string args = 1; 2002 2003 // A list of relative paths that trigger this command exec. 2004 // 2005 // If not specified, all file changes seen by the LiveUpdate trigger this exec. 2006 // 2007 // Paths are specified relative to the the BasePath of the LiveUpdate. 2008 // 2009 // +optional 2010 repeated string triggerPaths = 2; 2011 2012 optional bool echoOff = 3; 2013 } 2014 2015 // Specifies how to select containers to live update inside K8s. 2016 message LiveUpdateKubernetesSelector { 2017 // The name of a KubernetesDiscovery object for finding pods. 2018 optional string discoveryName = 1; 2019 2020 // ApplyName is the name of a KubernetesApply object for filtering discovered pods to prevent updating old 2021 // deployments. 2022 // 2023 // If not provided, no filtering will be applied and all discovered Pods will be eligible for update. 2024 // 2025 // +optional 2026 optional string applyName = 3; 2027 2028 // Image specifies the name of the image that we're copying files into. 2029 // 2030 // Determines which containers in a pod to live-update. 2031 // Matches images by name unless tag is explicitly specified. 2032 // 2033 // Exactly one of Image, ContainerName, or ImageMapName MUST be specified. 2034 // 2035 // +optional 2036 optional string image = 2; 2037 2038 // ContainerName specifies the name of the container that we're copying files into. 2039 // 2040 // Exactly one of Image, ContainerName, or ImageMapName MUST be specified. 2041 // 2042 // +optional 2043 optional string containerName = 4; 2044 2045 // ImageMapName specifies the name of an ImageMapName object to use for determining 2046 // the image we're copying files into. 2047 // 2048 // Exactly one of Image, ContainerName, or ImageMapName MUST be specified. 2049 // 2050 // +optional 2051 optional string imageMapName = 5; 2052 } 2053 2054 // LiveUpdateList 2055 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 2056 message LiveUpdateList { 2057 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 2058 2059 repeated LiveUpdate items = 2; 2060 } 2061 2062 // Specifies how to select containers to live update. 2063 // 2064 // Every live update must be associated with some object for finding 2065 // containers. In the future, we expect there to be other types 2066 // of container discovery objects (like Docker Compose container discovery). 2067 message LiveUpdateSelector { 2068 // Finds containers in Kubernetes. 2069 optional LiveUpdateKubernetesSelector kubernetes = 1; 2070 2071 // Finds containers in Docker Compose. 2072 optional LiveUpdateDockerComposeSelector dockerCompose = 2; 2073 } 2074 2075 // Specifies how to pull in files. 2076 message LiveUpdateSource { 2077 // The name of a FileWatch to use as a file source. 2078 // 2079 // +optional 2080 optional string fileWatch = 1; 2081 2082 // Name of the ImageMap object to watch for which file changes from this source 2083 // are included in the container image. 2084 // 2085 // If not provided, the live-updater will copy any file changes that it's aware of, 2086 // even if they're already included in the container. 2087 // 2088 // +optional 2089 optional string imageMap = 2; 2090 } 2091 2092 // LiveUpdateSpec defines the desired state of LiveUpdate 2093 message LiveUpdateSpec { 2094 // An absolute local path that serves as the basis for all 2095 // path calculations. 2096 // 2097 // Relative paths in this object are calculated relative to the base path. It 2098 // cannot be empty. 2099 // 2100 // +tilt:local-path=true 2101 optional string basePath = 1; 2102 2103 // Specifies how this live-updater finds the containers that need live update. 2104 optional LiveUpdateSelector selector = 8; 2105 2106 // Sources of files to sync. 2107 // 2108 // Every live update must be associated with at least one Source object 2109 // to trigger the update. Usually, Tilt structures it so that there's 2110 // a Source for each image we depend on. 2111 repeated LiveUpdateSource sources = 9; 2112 2113 // A list of relative paths that will immediately stop the live-update for the 2114 // current container. 2115 // 2116 // Used to detect file changes that invalidate the entire container image, 2117 // forcing a complete rebuild. 2118 // 2119 // +optional 2120 repeated string stopPaths = 4; 2121 2122 // Specify paths that can be live-updated into the container and their destinations. 2123 // Any file changes observed that do not match any of these will invalidate the container image and force a complete rebuild. 2124 // 2125 // +optional 2126 repeated LiveUpdateSync syncs = 5; 2127 2128 // A list of commands to run inside the container after files are synced. 2129 // 2130 // NB: In some documentation, we call these 'runs'. 'exec' more clearly 2131 // matches kubectl exec for remote commands. 2132 // 2133 // +optional 2134 repeated LiveUpdateExec execs = 6; 2135 2136 // Specifies whether Tilt should try to natively restart the container in-place 2137 // after syncs and execs. 2138 // 2139 // Note that native restarts are only supported by Docker and Docker Compose 2140 // (and NOT docker-shim or containerd, the most common Kubernetes runtimes). 2141 // 2142 // To restart on live-update in Kubernetes, see the guide for how 2143 // to apply extensions to add restart behavior: 2144 // 2145 // https://docs.tilt.dev/live_update_reference.html 2146 // 2147 // +optional 2148 optional string restart = 7; 2149 } 2150 2151 // If any of the containers are currently failing to process updates, the 2152 // LiveUpdateStateFailed surfaces information about what's happening and what 2153 // the live-updater is doing to fix the problem. 2154 message LiveUpdateStateFailed { 2155 // One word camel-case reason why we've reached a failure state. 2156 // +optional 2157 optional string reason = 1; 2158 2159 // Human-readable description of what's wrong. 2160 // +optional 2161 optional string message = 2; 2162 2163 // When the live-updater transitioned into a Failed state. 2164 // +optional 2165 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastTransitionTime = 3; 2166 } 2167 2168 // LiveUpdateStatus defines the observed state of LiveUpdate 2169 message LiveUpdateStatus { 2170 // A list of all containers that the live-updater is currently connected to. 2171 // +optional 2172 repeated LiveUpdateContainerStatus containers = 1; 2173 2174 // If any of the containers are currently failing to process updates, 2175 // the Failed state surfaces information about what's happening and what 2176 // the live-updater is doing to fix the problem. 2177 // 2178 // If all containers are updating successfully, Failed will be nil. 2179 // 2180 // +optional 2181 optional LiveUpdateStateFailed failed = 2; 2182 } 2183 2184 // Determines how a local path maps into a container image. 2185 message LiveUpdateSync { 2186 // A relative path to local files. Required. 2187 // 2188 // Computed relative to the live-update BasePath. 2189 optional string localPath = 1; 2190 2191 // An absolute path inside the container. Required. 2192 optional string containerPath = 2; 2193 } 2194 2195 // Selector for any Kubernetes-style API. 2196 message ObjectSelector { 2197 // A regular expression apiVersion match. 2198 // +optional 2199 optional string apiVersionRegexp = 1; 2200 2201 // A regular expression kind match. 2202 // +optional 2203 optional string kindRegexp = 2; 2204 2205 // A regular expression name match. 2206 // +optional 2207 optional string nameRegexp = 3; 2208 2209 // A regular expression namespace match. 2210 // +optional 2211 optional string namespaceRegexp = 4; 2212 } 2213 2214 // Pod is a collection of containers that can run on a host. 2215 // 2216 // The Tilt API representation mirrors the Kubernetes API very closely. Irrelevant data is 2217 // not included, and some fields might be simplified. 2218 // 2219 // There might also be Tilt-specific status fields. 2220 message Pod { 2221 // UID is the unique Pod UID within the K8s cluster. 2222 optional string uid = 14; 2223 2224 // Name is the Pod name within the K8s cluster. 2225 optional string name = 1; 2226 2227 // Namespace is the Pod namespace within the K8s cluster. 2228 optional string namespace = 2; 2229 2230 // CreatedAt is when the Pod was created. 2231 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time createdAt = 3; 2232 2233 // Phase is where the Pod is at in its current lifecycle. 2234 // 2235 // Valid values for this are v1.PodPhase values from the Kubernetes API. 2236 optional string phase = 4; 2237 2238 // Deleting indicates that the Pod is in the process of being removed. 2239 optional bool deleting = 5; 2240 2241 // Conditions are various lifecycle conditions for this Pod. 2242 // 2243 // See also v1.PodCondition in the Kubernetes API. 2244 repeated PodCondition conditions = 6; 2245 2246 // InitContainers are containers executed prior to the Pod containers being executed. 2247 repeated Container initContainers = 7; 2248 2249 // Containers are the containers belonging to the Pod. 2250 repeated Container containers = 8; 2251 2252 // AncestorUID is the UID from the WatchRef that matched this Pod. 2253 // 2254 // If the Pod matched based on extra label selectors, this will be empty. 2255 // 2256 // +optional 2257 optional string ancestorUID = 15; 2258 2259 // PodTemplateSpecHash is a hash of the Pod template spec. 2260 // 2261 // Tilt uses this to associate Pods with the build that triggered them. 2262 optional string podTemplateSpecHash = 10; 2263 2264 // Status is a concise description for the Pod's current state. 2265 // 2266 // This is based off the status output from `kubectl get pod` and is not an "enum-like" 2267 // value. 2268 optional string status = 12; 2269 2270 // Errors are aggregated error messages for the Pod and its containers. 2271 repeated string errors = 13; 2272 2273 // Direct owner of this pod, if available. 2274 optional PodOwner owner = 16; 2275 } 2276 2277 // PodCondition is a lifecycle condition for a Pod. 2278 message PodCondition { 2279 // Type is the type of condition. 2280 // 2281 // Valid values for this are v1.PodConditionType values from the Kubernetes API. 2282 optional string type = 1; 2283 2284 // Status is the current state of the condition (True, False, or Unknown). 2285 // 2286 // Valid values for this are v1.PodConditionStatus values from the Kubernetes API. 2287 optional string status = 2; 2288 2289 // LastTransitionTime is the last time the status changed. 2290 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastTransitionTime = 3; 2291 2292 // Reason is a unique, one-word, CamelCase value for the cause of the last status change. 2293 optional string reason = 4; 2294 2295 // Message is a human-readable description of the last status change. 2296 optional string message = 5; 2297 } 2298 2299 // PodLogStream 2300 // 2301 // Streams logs from a pod on Kubernetes into the core Tilt engine. 2302 // 2303 // +k8s:openapi-gen=true 2304 message PodLogStream { 2305 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 2306 2307 optional PodLogStreamSpec spec = 2; 2308 2309 optional PodLogStreamStatus status = 3; 2310 } 2311 2312 // PodLogStreamList 2313 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 2314 message PodLogStreamList { 2315 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 2316 2317 repeated PodLogStream items = 2; 2318 } 2319 2320 // PodLogStreamSpec defines the desired state of PodLogStream 2321 // 2322 // Translated into a PodLog query to the current Kubernetes cluster: 2323 // https://pkg.go.dev/k8s.io/api/core/v1#PodLogOptions 2324 // 2325 // TODO(nick): Should all Kubernetes types have an object that describes 2326 // which Kubernetes context to use? 2327 message PodLogStreamSpec { 2328 // The name of the pod to watch. Required. 2329 optional string pod = 1; 2330 2331 // The namespace of the pod to watch. Defaults to the kubecontext default namespace. 2332 // 2333 // +optional 2334 optional string namespace = 2; 2335 2336 // An RFC3339 timestamp from which to show logs. If this value 2337 // precedes the time a pod was started, only logs since the pod start will be returned. 2338 // If this value is in the future, no logs will be returned. 2339 // 2340 // Translates directly to the underlying PodLogOptions. 2341 // 2342 // +optional 2343 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time sinceTime = 3; 2344 2345 // The names of containers to include in the stream. 2346 // 2347 // If `onlyContainers` and `ignoreContainers` are not set, 2348 // will watch all containers in the pod. 2349 // 2350 // +optional 2351 repeated string onlyContainers = 4; 2352 2353 // The names of containers to exclude from the stream. 2354 // 2355 // If `onlyContainers` and `ignoreContainers` are not set, 2356 // will watch all containers in the pod. 2357 // 2358 // +optional 2359 repeated string ignoreContainers = 5; 2360 2361 // Cluster the Pod belongs to. 2362 // 2363 // If not provided, "default" will be used. 2364 // 2365 // +optional 2366 optional string cluster = 6; 2367 } 2368 2369 // PodLogStreamStatus defines the observed state of PodLogStream 2370 message PodLogStreamStatus { 2371 // A list of containers being watched. 2372 // 2373 // +optional 2374 repeated ContainerLogStreamStatus containerStatuses = 1; 2375 2376 // Error message encountered while setting up the stream. 2377 // 2378 // +optional 2379 optional string error = 2; 2380 } 2381 2382 // PodLogStreamTemplateSpec describes common attributes for PodLogStreams 2383 // that can be shared across pods. 2384 message PodLogStreamTemplateSpec { 2385 // An RFC3339 timestamp from which to show logs. If this value 2386 // precedes the time a pod was started, only logs since the pod start will be returned. 2387 // If this value is in the future, no logs will be returned. 2388 // 2389 // Translates directly to the underlying PodLogOptions. 2390 // 2391 // +optional 2392 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time sinceTime = 1; 2393 2394 // The names of containers to include in the stream. 2395 // 2396 // If `onlyContainers` and `ignoreContainers` are not set, 2397 // will watch all containers in the pod. 2398 // 2399 // +optional 2400 repeated string onlyContainers = 2; 2401 2402 // The names of containers to exclude from the stream. 2403 // 2404 // If `onlyContainers` and `ignoreContainers` are not set, 2405 // will watch all containers in the pod. 2406 // 2407 // +optional 2408 repeated string ignoreContainers = 3; 2409 } 2410 2411 // PodOwner contains information of the direct owner of the 2412 // pod, if available. 2413 // 2414 // Tools that need to select a most relevant pod or set of pods 2415 // can use this info to group pods by owner. 2416 message PodOwner { 2417 // The name of the owner. 2418 optional string name = 1; 2419 2420 // API version of the owner. 2421 optional string apiVersion = 3; 2422 2423 // Kind of the owner 2424 // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds 2425 optional string kind = 4; 2426 2427 // The creation timestamp of the owner. 2428 // +optional 2429 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time creationTimestamp = 2; 2430 } 2431 2432 // PortForward 2433 // +k8s:openapi-gen=true 2434 message PortForward { 2435 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 2436 2437 optional PortForwardSpec spec = 2; 2438 2439 optional PortForwardStatus status = 3; 2440 } 2441 2442 // PortForwardList 2443 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 2444 message PortForwardList { 2445 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 2446 2447 repeated PortForward items = 2; 2448 } 2449 2450 // PortForwardSpec defines the desired state of PortForward 2451 message PortForwardSpec { 2452 // The name of the pod to port forward to/from. Required. 2453 optional string podName = 1; 2454 2455 // The namespace of the pod to port forward to/from. Defaults to the kubecontext default namespace. 2456 // 2457 // +optional 2458 optional string namespace = 2; 2459 2460 // One or more port forwards to execute on the given pod. Required. 2461 repeated Forward forwards = 3; 2462 2463 // Cluster to forward ports from to the local machine. 2464 // 2465 // If not specified, the default Kubernetes cluster will be used. 2466 // 2467 // +optional 2468 optional string cluster = 4; 2469 } 2470 2471 // PortForwardStatus defines the observed state of PortForward 2472 message PortForwardStatus { 2473 repeated ForwardStatus forwardStatuses = 2; 2474 } 2475 2476 // PortForwardTemplateSpec describes common attributes for PortForwards 2477 // that can be shared across pods. 2478 message PortForwardTemplateSpec { 2479 // One or more port forwards to execute on the given pod. Required. 2480 repeated Forward forwards = 1; 2481 } 2482 2483 // Probe describes a health check to be performed to determine whether it is 2484 // alive or ready to receive traffic. 2485 message Probe { 2486 // The action taken to determine the health of a container 2487 optional Handler handler = 1; 2488 2489 // Number of seconds after the container has started before liveness probes are initiated. 2490 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes 2491 // +optional 2492 optional int32 initialDelaySeconds = 2; 2493 2494 // Number of seconds after which the probe times out. 2495 // Defaults to 1 second. Minimum value is 1. 2496 // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes 2497 // +optional 2498 optional int32 timeoutSeconds = 3; 2499 2500 // How often (in seconds) to perform the probe. 2501 // Default to 10 seconds. Minimum value is 1. 2502 // +optional 2503 optional int32 periodSeconds = 4; 2504 2505 // Minimum consecutive successes for the probe to be considered successful after having failed. 2506 // Defaults to 1. Must be 1 for liveness and startup. Minimum value is 1. 2507 // +optional 2508 optional int32 successThreshold = 5; 2509 2510 // Minimum consecutive failures for the probe to be considered failed after having succeeded. 2511 // Defaults to 3. Minimum value is 1. 2512 // +optional 2513 optional int32 failureThreshold = 6; 2514 } 2515 2516 message RegistryHosting { 2517 // Host documents the host (hostname and port) of the registry, as seen from 2518 // outside the cluster. 2519 // 2520 // This is the registry host that tools outside the cluster should push images 2521 // to. 2522 optional string host = 1; 2523 2524 // HostFromClusterNetwork documents the host (hostname and port) of the 2525 // registry, as seen from networking inside the container pods. 2526 // 2527 // This is the registry host that tools running on pods inside the cluster 2528 // should push images to. If not set, then tools inside the cluster should 2529 // assume the local registry is not available to them. 2530 // 2531 // +optional 2532 optional string hostFromClusterNetwork = 2; 2533 2534 // HostFromContainerRuntime documents the host (hostname and port) of the 2535 // registry, as seen from the cluster's container runtime. 2536 // 2537 // When tools apply Kubernetes objects to the cluster, this host should be 2538 // used for image name fields. If not set, users of this field should use the 2539 // value of Host instead. 2540 // 2541 // Note that it doesn't make sense semantically to define this field, but not 2542 // define Host or HostFromClusterNetwork. That would imply a way to pull 2543 // images without a way to push images. 2544 // 2545 // +optional 2546 optional string hostFromContainerRuntime = 3; 2547 2548 // Help contains a URL pointing to documentation for users on how to set 2549 // up and configure a local registry. 2550 // 2551 // Tools can use this to nudge users to enable the registry. When possible, 2552 // the writer should use as permanent a URL as possible to prevent drift 2553 // (e.g., a version control SHA). 2554 // 2555 // When image pushes to a registry host specified in one of the other fields 2556 // fail, the tool should display this help URL to the user. The help URL 2557 // should contain instructions on how to diagnose broken or misconfigured 2558 // registries. 2559 // 2560 // +optional 2561 optional string help = 4; 2562 2563 // SingleName uses a shared image name for _all_ Tilt-built images and 2564 // relies on tags to distinguish between logically distinct images. 2565 // 2566 // This is most commonly used with Amazon Elastic Container Registry (ECR), 2567 // which works differently than other image registries. 2568 // 2569 // An ECR host takes the form https://aws_account_id.dkr.ecr.region.amazonaws.com. 2570 // Each image name in that registry must be pre-created ಠ_ಠ and assigned 2571 // IAM permissions. 2572 // For example: https://aws_account_id.dkr.ecr.region.amazonaws.com/my-repo 2573 // (They call this a repo). 2574 // 2575 // For this reason, some users using ECR prefer to push all images to a 2576 // single image name (ECR repo). 2577 // 2578 // A recommended pattern here is to create a "personal" image repo for each 2579 // user during development. 2580 // 2581 // See: 2582 // https://docs.aws.amazon.com/AmazonECR/latest/userguide/Repositories.html 2583 // https://github.com/tilt-dev/tilt/issues/2419 2584 // 2585 // +optional 2586 optional string singleName = 5; 2587 } 2588 2589 // RestartOnSpec indicates the set of objects that can trigger a restart of this object. 2590 message RestartOnSpec { 2591 // FileWatches that can trigger a restart. 2592 // +optional 2593 repeated string fileWatches = 1; 2594 2595 // UIButtons that can trigger a restart. 2596 // +optional 2597 repeated string uiButtons = 2; 2598 } 2599 2600 // Session provides introspective data about the status of the Tilt process. 2601 // +k8s:openapi-gen=true 2602 message Session { 2603 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 2604 2605 optional SessionSpec spec = 2; 2606 2607 optional SessionStatus status = 3; 2608 } 2609 2610 message SessionCISpec { 2611 // Grace period given for Kubernetes resources to recover after 2612 // they start failing. 2613 // 2614 // If omitted, and in exitCondition=ci, the session will exit as soon 2615 // as we see a pod failure. 2616 optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration k8sGracePeriod = 1; 2617 2618 // Timeout for the whole CI pipeline. Defaults to 30m. 2619 optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration timeout = 2; 2620 } 2621 2622 // SessionList is a list of Session objects. 2623 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 2624 message SessionList { 2625 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 2626 2627 repeated Session items = 2; 2628 } 2629 2630 // SessionSpec defines the desired state of Session 2631 message SessionSpec { 2632 // TiltfilePath is the path to the Tiltfile for the run. It cannot be empty. 2633 optional string tiltfilePath = 1; 2634 2635 // ExitCondition defines the criteria for Tilt to exit. 2636 optional string exitCondition = 2; 2637 2638 // Additional settings when in exitCondition=CI. 2639 optional SessionCISpec ci = 3; 2640 } 2641 2642 // SessionStatus defines the observed state of Session 2643 message SessionStatus { 2644 // PID is the process identifier for this instance of Tilt. 2645 optional int64 pid = 1; 2646 2647 // StartTime is when the Tilt engine was first started. 2648 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startTime = 2; 2649 2650 // Targets are normalized representations of the servers/jobs managed by this Session. 2651 // 2652 // A resource from a Tiltfile might produce one or more targets. A target can also be shared across 2653 // multiple resources (e.g. an image referenced by multiple K8s pods). 2654 repeated Target targets = 3; 2655 2656 // Done indicates whether this Session has completed its work and is ready to exit. 2657 optional bool done = 4; 2658 2659 // Error is a non-empty string when the Session is Done but encountered a failure as defined by the ExitCondition 2660 // from the SessionSpec. 2661 // 2662 // +optional 2663 optional string error = 5; 2664 } 2665 2666 // StartOnSpec indicates the set of objects that can trigger a start/restart of this object. 2667 message StartOnSpec { 2668 // StartAfter indicates that events before this time should be ignored. 2669 // 2670 // +optional 2671 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time startAfter = 1; 2672 2673 // UIButtons that can trigger a start/restart. 2674 repeated string uiButtons = 2; 2675 } 2676 2677 // Describes where a ToggleButton's state is stored. 2678 // Exactly one type of source must be set. 2679 message StateSource { 2680 // State is stored in a ConfigMap. 2681 // 2682 // +optional 2683 optional ConfigMapStateSource configMap = 1; 2684 } 2685 2686 message StopOnSpec { 2687 // UIButtons that can trigger a stop. 2688 repeated string uiButtons = 2; 2689 } 2690 2691 // TCPSocketAction describes an action based on opening a socket 2692 message TCPSocketAction { 2693 // Number or name of the port to access on the container. 2694 // Number must be in the range 1 to 65535. 2695 optional int32 port = 1; 2696 2697 // Optional: Host name to connect to, defaults to the pod IP. 2698 // +optional 2699 optional string host = 2; 2700 } 2701 2702 // Target is a server or job whose execution is managed as part of this Session. 2703 message Target { 2704 // Name is the name of the target; this is auto-generated from Tiltfile resources. 2705 optional string name = 1; 2706 2707 // Type is the execution profile for this resource. 2708 // 2709 // Job targets run to completion (e.g. a build script or database migration script). 2710 // Server targets run indefinitely (e.g. an HTTP server). 2711 optional string type = 2; 2712 2713 // Resources are one or more Tiltfile resources that this target is associated with. 2714 repeated string resources = 3; 2715 2716 // State provides information about the current status of the target. 2717 optional TargetState state = 4; 2718 } 2719 2720 // TargetState describes the current execution status for a target. 2721 // 2722 // Either EXACTLY one of Waiting, Active, Disabled, or Terminated will be populated or NONE of them will be. 2723 // In the event that all states are null, the target is currently inactive or disabled and should not 2724 // be expected to execute. 2725 message TargetState { 2726 // Waiting being non-nil indicates that the next execution of the target has been queued but not yet started. 2727 // 2728 // +optional 2729 optional TargetStateWaiting waiting = 1; 2730 2731 // Active being non-nil indicates that the target is currently executing. 2732 // 2733 // +optional 2734 optional TargetStateActive active = 2; 2735 2736 // Terminated being non-nil indicates that the target finished execution either normally or due to failure. 2737 // 2738 // +optional 2739 optional TargetStateTerminated terminated = 3; 2740 2741 // Disabled being non-nil indicates that the target is disabled. 2742 // 2743 // +optional 2744 optional TargetStateDisabled disabled = 4; 2745 } 2746 2747 // TargetStateActive is a target that is currently running but has not yet finished. 2748 message TargetStateActive { 2749 // StartTime is when execution began. 2750 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startTime = 1; 2751 2752 // Ready indicates that the target has passed readiness checks. 2753 // 2754 // If the target does not use or support readiness checks, this is always true. 2755 optional bool ready = 2; 2756 } 2757 2758 // TargetStateDisabled is a target that has been disabled. 2759 message TargetStateDisabled { 2760 } 2761 2762 // TargetStateTerminated is a target that finished running, either because it completed successfully or 2763 // encountered an error. 2764 message TargetStateTerminated { 2765 // StartTime is when the target began executing. 2766 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startTime = 1; 2767 2768 // FinishTime is when the target stopped executing. 2769 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishTime = 2; 2770 2771 // Error is a non-empty string if the target encountered a failure during execution that caused it to stop. 2772 // 2773 // For targets of type TargetTypeServer, this is always populated, as the target is expected to run indefinitely, 2774 // and thus any termination is an error. 2775 // 2776 // +optional 2777 optional string error = 3; 2778 2779 // Errors may be tolerated if the target is still within a grace period set on 2780 // the session. 2781 optional string graceStatus = 4; 2782 } 2783 2784 // TargetStateWaiting is a target that has been enqueued for execution but has not yet started. 2785 message TargetStateWaiting { 2786 // WaitReason is a description for why the target is waiting and not yet active. 2787 // 2788 // This is NOT the "cause" or "trigger" for the target being invoked. 2789 optional string waitReason = 1; 2790 } 2791 2792 // Information about the running tilt binary. 2793 message TiltBuild { 2794 // A semantic version string. 2795 // +optional 2796 optional string version = 1; 2797 2798 // The Git digest of the commit this binary was built at. 2799 // +optional 2800 optional string commitSHA = 2; 2801 2802 // A human-readable string representing when the binary was built. 2803 // +optional 2804 optional string date = 3; 2805 2806 // Indicates whether this is a development build (true) or an official release (false). 2807 // +optional 2808 optional bool dev = 4; 2809 } 2810 2811 // Tiltfile is the main way users add services to Tilt. 2812 // 2813 // The Tiltfile evaluator executes the Tiltfile, then adds all the objects 2814 // it creates as children of the Tiltfile object. 2815 // 2816 // +k8s:openapi-gen=true 2817 message Tiltfile { 2818 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 2819 2820 optional TiltfileSpec spec = 2; 2821 2822 optional TiltfileStatus status = 3; 2823 } 2824 2825 // TiltfileList 2826 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 2827 message TiltfileList { 2828 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 2829 2830 repeated Tiltfile items = 2; 2831 } 2832 2833 // TiltfileSpec defines the desired state of Tiltfile 2834 message TiltfileSpec { 2835 // The path to the Tiltfile on disk. 2836 optional string path = 1; 2837 2838 // A set of labels to apply to all objects owned by this Tiltfile. 2839 // +optional 2840 map<string, string> labels = 2; 2841 2842 // Objects that can trigger a re-execution of this Tiltfile. 2843 // +optional 2844 optional RestartOnSpec restartOn = 3; 2845 2846 // Arguments to the Tiltfile. 2847 // 2848 // Arguments can be positional (['a', 'b', 'c']) or flag-based ('--to-edit=a'). 2849 // By default, a list of arguments indicates the list of services in the tiltfile 2850 // that should be enabled. 2851 // 2852 // +optional 2853 repeated string args = 4; 2854 2855 // Objects that can stop execution of this Tiltfile. 2856 // 2857 // +optional 2858 optional StopOnSpec stopOn = 5; 2859 } 2860 2861 // TiltfileStateRunning is a running state of a tiltfile execution. 2862 message TiltfileStateRunning { 2863 // The reason why this tiltfile was built. 2864 // May contain more than one reason. 2865 // +optional 2866 repeated string reasons = 1; 2867 2868 // Time at which previous execution of the command started. 2869 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 2; 2870 } 2871 2872 // TiltfileStateTerminated is a terminated state of a tiltfile execution. 2873 message TiltfileStateTerminated { 2874 // The reasons why this tiltfile was built. 2875 // May contain more than one reason. 2876 // +optional 2877 repeated string reasons = 1; 2878 2879 // Error message if this tiltfile execution failed. 2880 // +optional 2881 optional string error = 2; 2882 2883 // Time at which previous execution of the command started. 2884 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startedAt = 3; 2885 2886 // Time at which the command last terminated. 2887 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishedAt = 4; 2888 2889 // Number of warnings generated by this Tiltfile. 2890 // (brief) reason the process is terminated 2891 // +optional 2892 optional int32 warningCount = 5; 2893 } 2894 2895 // TiltfileStateWaiting is a waiting state of a tiltfile execution. 2896 message TiltfileStateWaiting { 2897 // (brief) reason the tiltfile is waiting. 2898 // +optional 2899 optional string reason = 1; 2900 } 2901 2902 // TiltfileStatus defines the observed state of Tiltfile 2903 message TiltfileStatus { 2904 // Details about a waiting tiltfile. 2905 // +optional 2906 optional TiltfileStateWaiting waiting = 1; 2907 2908 // Details about a running tiltfile. 2909 // +optional 2910 optional TiltfileStateRunning running = 2; 2911 2912 // Details about a terminated tiltfile. 2913 // +optional 2914 optional TiltfileStateTerminated terminated = 3; 2915 } 2916 2917 // ToggleButton 2918 // +k8s:openapi-gen=true 2919 message ToggleButton { 2920 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 2921 2922 optional ToggleButtonSpec spec = 2; 2923 2924 optional ToggleButtonStatus status = 3; 2925 } 2926 2927 // ToggleButtonList 2928 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 2929 message ToggleButtonList { 2930 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 2931 2932 repeated ToggleButton items = 2; 2933 } 2934 2935 // ToggleButtonSpec defines the desired state of ToggleButton 2936 message ToggleButtonSpec { 2937 // Where to display the button 2938 optional UIComponentLocation location = 1; 2939 2940 // Config for the button when it is "on" 2941 optional ToggleButtonStateSpec on = 2; 2942 2943 // Config for the button when it is "off" 2944 optional ToggleButtonStateSpec off = 3; 2945 2946 // If `StateSource` does not point at a valid value, the initial button 2947 // state will be "on" or "off" depending on this bool 2948 optional bool defaultOn = 4; 2949 2950 // Where the toggle button's state is stored 2951 optional StateSource stateSource = 5; 2952 } 2953 2954 // Describes a state (on/off) of a ToggleButton 2955 message ToggleButtonStateSpec { 2956 // Text to appear on the button itself or as hover text (depending on button location). 2957 optional string text = 2; 2958 2959 // IconName is a Material Icon to appear next to button text or on the button itself (depending on button location). 2960 // 2961 // Valid values are icon font ligature names from the Material Icons set. 2962 // See https://fonts.google.com/icons for the full list of available icons. 2963 // 2964 // If both IconSVG and IconName are specified, IconSVG will take precedence. 2965 // 2966 // +optional 2967 optional string iconName = 3; 2968 2969 // IconSVG is an SVG to use as the icon to appear next to button text or on the button itself (depending on button 2970 // location). 2971 // 2972 // This should be an <svg> element scaled for a 24x24 viewport. 2973 // 2974 // If both IconSVG and IconName are specified, IconSVG will take precedence. 2975 // 2976 // +optional 2977 optional string iconSVG = 4; 2978 2979 // If true, clicking the button in this state requires a second click 2980 // to confirm. 2981 // 2982 // +optional 2983 optional bool requiresConfirmation = 5; 2984 } 2985 2986 // ToggleButtonStatus defines the observed state of ToggleButton 2987 message ToggleButtonStatus { 2988 // If healthy, empty. If non-healthy, specifies a problem the ToggleButton encountered 2989 // +optional 2990 optional string error = 1; 2991 } 2992 2993 // Describes a boolean checkbox input field attached to a button. 2994 message UIBoolInputSpec { 2995 // Whether the input is initially true or false. 2996 // +optional 2997 optional bool defaultValue = 1; 2998 2999 // If the input's value is converted to a string, use this when the value is true. 3000 // If unspecified, its string value will be `"true"` 3001 // +optional 3002 optional string trueString = 2; 3003 3004 // If the input's value is converted to a string, use this when the value is false. 3005 // If unspecified, its string value will be `"false"` 3006 // +optional 3007 optional string falseString = 3; 3008 } 3009 3010 message UIBoolInputStatus { 3011 optional bool value = 1; 3012 } 3013 3014 // UIBuildRunning represents an in-progress build/update in the user interface. 3015 message UIBuildRunning { 3016 // The time when the build started. 3017 // +optional 3018 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startTime = 1; 3019 3020 // The log span where the build logs are stored in the logstore. 3021 // +optional 3022 optional string spanID = 2; 3023 } 3024 3025 // UIBuildRunning represents a finished build/update in the user interface. 3026 message UIBuildTerminated { 3027 // A non-empty string if the build failed with an error. 3028 // +optional 3029 optional string error = 1; 3030 3031 // A list of warnings encountered while running the build. 3032 // These warnings will also be printed to the build's log. 3033 // +optional 3034 repeated string warnings = 2; 3035 3036 // The time when the build started. 3037 // +optional 3038 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime startTime = 3; 3039 3040 // The time when the build finished. 3041 // +optional 3042 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime finishTime = 4; 3043 3044 // The log span where the build logs are stored in the logstore. 3045 // +optional 3046 optional string spanID = 5; 3047 3048 // A crash rebuild happens when Tilt live-updated a container, then 3049 // the pod crashed, wiping out the live-updates. Tilt does a full 3050 // build+deploy to reset the pod state to what's on disk. 3051 // +optional 3052 optional bool isCrashRebuild = 6; 3053 } 3054 3055 // UIButton 3056 // +k8s:openapi-gen=true 3057 // +tilt:starlark-gen=true 3058 message UIButton { 3059 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 3060 3061 optional UIButtonSpec spec = 2; 3062 3063 optional UIButtonStatus status = 3; 3064 } 3065 3066 // UIButtonList 3067 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 3068 message UIButtonList { 3069 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 3070 3071 repeated UIButton items = 2; 3072 } 3073 3074 // UIButtonSpec defines the desired state of UIButton 3075 message UIButtonSpec { 3076 // Location associates the button with another component for layout. 3077 optional UIComponentLocation location = 1; 3078 3079 // Text to appear on the button itself or as hover text (depending on button location). 3080 optional string text = 2; 3081 3082 // IconName is a Material Icon to appear next to button text or on the button itself (depending on button location). 3083 // 3084 // Valid values are icon font ligature names from the Material Icons set. 3085 // See https://fonts.google.com/icons for the full list of available icons. 3086 // 3087 // If both IconSVG and IconName are specified, IconSVG will take precedence. 3088 // 3089 // +optional 3090 optional string iconName = 3; 3091 3092 // IconSVG is an SVG to use as the icon to appear next to button text or on the button itself (depending on button 3093 // location). 3094 // 3095 // This should be an <svg> element scaled for a 24x24 viewport. 3096 // 3097 // If both IconSVG and IconName are specified, IconSVG will take precedence. 3098 // 3099 // +optional 3100 optional string iconSVG = 4; 3101 3102 // If true, the button will be rendered, but with an effect indicating it's 3103 // disabled. It will also be unclickable. 3104 // 3105 // +optional 3106 optional bool disabled = 5; 3107 3108 // If true, the UI will require the user to click the button a second time to 3109 // confirm before taking action 3110 // 3111 // +optional 3112 optional bool requiresConfirmation = 7; 3113 3114 // Any inputs for this button. 3115 // +optional 3116 repeated UIInputSpec inputs = 6; 3117 } 3118 3119 // UIButtonStatus defines the observed state of UIButton 3120 message UIButtonStatus { 3121 // LastClickedAt is the timestamp of the last time the button was clicked. 3122 // 3123 // If the button has never clicked before, this will be the zero-value/null. 3124 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastClickedAt = 1; 3125 3126 // Status of any inputs on this button. 3127 // +optional 3128 repeated UIInputStatus inputs = 2; 3129 } 3130 3131 // Describes a choice dropdown input field attached to a button 3132 message UIChoiceInputSpec { 3133 // The list of valid values for this field 3134 // 3135 // +optional 3136 repeated string choices = 2; 3137 } 3138 3139 message UIChoiceInputStatus { 3140 optional string value = 1; 3141 } 3142 3143 // UIComponentLocation specifies where to put a UI component. 3144 message UIComponentLocation { 3145 // ComponentID is the identifier of the parent component to associate this component with. 3146 // 3147 // For example, this is a resource name if the ComponentType is Resource. 3148 optional string componentID = 1; 3149 3150 // ComponentType is the type of the parent component. 3151 optional string componentType = 2; 3152 } 3153 3154 message UIComponentLocationResource { 3155 optional string resourceName = 1; 3156 } 3157 3158 // Configures Tilt to enable non-default features (e.g., experimental or 3159 // deprecated). 3160 // 3161 // The Tilt features controlled by this are generally in an unfinished state, 3162 // and not yet documented. 3163 // 3164 // As a Tilt user, you don’t need to worry about this unless something 3165 // else directs you to (e.g., an experimental feature doc, or a conversation 3166 // with a Tilt contributor). 3167 message UIFeatureFlag { 3168 // The name of the flag. 3169 // +optional 3170 optional string name = 1; 3171 3172 // The value of the flag. 3173 // +optional 3174 optional bool value = 2; 3175 } 3176 3177 // Describes a hidden input field attached to a button, 3178 // with a value to pass on any submit. 3179 message UIHiddenInputSpec { 3180 optional string value = 1; 3181 } 3182 3183 message UIHiddenInputStatus { 3184 optional string value = 1; 3185 } 3186 3187 // Defines an Input to render in the UI. 3188 // If UIButton is analogous to an HTML <form>, 3189 // UIInput is analogous to an HTML <input>. 3190 message UIInputSpec { 3191 // Name of this input. Must be unique within the UIButton. 3192 optional string name = 1; 3193 3194 // A label to display next to this input in the UI. 3195 // +optional 3196 optional string label = 2; 3197 3198 // A Text input that takes a string. 3199 // +optional 3200 optional UITextInputSpec text = 3; 3201 3202 // A Bool input that is true or false 3203 // +optional 3204 optional UIBoolInputSpec bool = 4; 3205 3206 // An input that has a constant value and does not display to the user 3207 // +optional 3208 optional UIHiddenInputSpec hidden = 5; 3209 3210 // A Choice input that takes a list of strings 3211 optional UIChoiceInputSpec choice = 6; 3212 } 3213 3214 // The status corresponding to a UIInputSpec 3215 message UIInputStatus { 3216 // Name of the input whose status this is. Must match the `Name` of a corresponding 3217 // UIInputSpec. 3218 optional string name = 1; 3219 3220 // The status of the input, if it's text 3221 // +optional 3222 optional UITextInputStatus text = 2; 3223 3224 // The status of the input, if it's a bool 3225 // +optional 3226 optional UIBoolInputStatus bool = 3; 3227 3228 // The status of the input, if it's a hidden 3229 // +optional 3230 optional UIHiddenInputStatus hidden = 4; 3231 3232 // The status of the input, if it's a choice 3233 // +optional 3234 optional UIChoiceInputStatus choice = 5; 3235 } 3236 3237 // UIResource represents per-resource status data for rendering the web UI. 3238 // 3239 // Treat this as a legacy data structure that's more intended to make transition 3240 // easier rather than a robust long-term API. 3241 // 3242 // +k8s:openapi-gen=true 3243 message UIResource { 3244 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 3245 3246 optional UIResourceSpec spec = 2; 3247 3248 optional UIResourceStatus status = 3; 3249 } 3250 3251 message UIResourceCondition { 3252 // Type of UI Resource condition. 3253 optional string type = 1; 3254 3255 // Status of the condition, one of True, False, Unknown. 3256 optional string status = 6; 3257 3258 // Last time the condition transitioned from one status to another. 3259 // +optional 3260 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastTransitionTime = 3; 3261 3262 // The reason for the condition's last transition. 3263 // +optional 3264 optional string reason = 4; 3265 3266 // A human readable message indicating details about the transition. 3267 // +optional 3268 optional string message = 5; 3269 } 3270 3271 // UIResourceKubernetes contains status information specific to Kubernetes. 3272 message UIResourceKubernetes { 3273 // The name of the active pod. 3274 // 3275 // The active pod tends to be what Tilt defaults to for port-forwards, 3276 // live-updates, etc. 3277 // +optional 3278 optional string podName = 1; 3279 3280 // The creation time of the active pod. 3281 // +optional 3282 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time podCreationTime = 2; 3283 3284 // The last update time of the active pod 3285 // +optional 3286 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time podUpdateStartTime = 3; 3287 3288 // The status of the active pod. 3289 // +optional 3290 optional string podStatus = 4; 3291 3292 // Extra error messaging around the current status of the active pod. 3293 // +optional 3294 optional string podStatusMessage = 5; 3295 3296 // Whether all the containers in the pod are currently healthy 3297 // and have passed readiness checks. 3298 // +optional 3299 optional bool allContainersReady = 6; 3300 3301 // The number of pod restarts. 3302 // +optional 3303 optional int32 podRestarts = 7; 3304 3305 // The span where this pod stores its logs in the Tilt logstore. 3306 // +optional 3307 optional string spanID = 8; 3308 3309 // The list of all resources deployed in the Kubernetes deploy 3310 // for this resource. 3311 // +optional 3312 repeated string displayNames = 9; 3313 } 3314 3315 // UIResourceLink represents a link assocatiated with a UIResource. 3316 message UIResourceLink { 3317 // A URL to link to. 3318 // +optional 3319 optional string url = 1; 3320 3321 // The display label on a URL. 3322 // +optional 3323 optional string name = 2; 3324 } 3325 3326 // UIResourceList 3327 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 3328 message UIResourceList { 3329 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 3330 3331 repeated UIResource items = 2; 3332 } 3333 3334 // UIResourceLocal contains status information specific to local commands. 3335 message UIResourceLocal { 3336 // The PID of the actively running local command. 3337 // +optional 3338 optional int64 pid = 1; 3339 3340 // Whether this represents a test job. 3341 // 3342 // Deprecated: Users should use labels for marking services as tests. 3343 // 3344 // +optional 3345 optional bool isTest = 2; 3346 } 3347 3348 // UIResourceSpec is an empty struct. 3349 // UIResource is a kludge for making Tilt's internal status readable, not 3350 // for specifying behavior. 3351 message UIResourceSpec { 3352 } 3353 3354 message UIResourceStateWaiting { 3355 // Reason is a unique, one-word reason for why the UIResource update is pending. 3356 optional string reason = 1; 3357 3358 // HoldingOn is the set of objects blocking this resource from updating. 3359 // 3360 // These objects might NOT be explicit dependencies of the current resource. For example, if an un-parallelizable 3361 // resource is updating, all other resources with queued updates will be holding on it with a reason of 3362 // `waiting-for-local`. 3363 // 3364 // +optional 3365 repeated UIResourceStateWaitingOnRef on = 2; 3366 } 3367 3368 message UIResourceStateWaitingOnRef { 3369 // Group for the object type being waited on. 3370 optional string group = 1; 3371 3372 // APIVersion for the object type being waited on. 3373 optional string apiVersion = 2; 3374 3375 // Kind of the object type being waited on. 3376 optional string kind = 3; 3377 3378 // Name of the object being waiting on. 3379 optional string name = 4; 3380 } 3381 3382 // UIResourceStatus defines the observed state of UIResource 3383 message UIResourceStatus { 3384 // The last time this resource was deployed. 3385 // +optional 3386 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastDeployTime = 1; 3387 3388 // Bit mask representing whether this resource is run when: 3389 // 1) When a file changes 3390 // 2) When the resource initializes 3391 // +optional 3392 optional int32 triggerMode = 2; 3393 3394 // Past completed builds. 3395 // +optional 3396 repeated UIBuildTerminated buildHistory = 3; 3397 3398 // The currently running build, if any. 3399 // +optional 3400 optional UIBuildRunning currentBuild = 4; 3401 3402 // When the build was put in the pending queue. 3403 // +optional 3404 optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime pendingBuildSince = 5; 3405 3406 // True if the build was put in the pending queue due to file changes. 3407 // +optional 3408 optional bool hasPendingChanges = 6; 3409 3410 // Links attached to this resource. 3411 // +optional 3412 repeated UIResourceLink endpointLinks = 7; 3413 3414 // Extra data about Kubernetes resources. 3415 // +optional 3416 optional UIResourceKubernetes k8sResourceInfo = 8; 3417 3418 // Extra data about Local resources 3419 // +optional 3420 optional UIResourceLocal localResourceInfo = 9; 3421 3422 // The RuntimeStatus is a simple, high-level summary of the runtime state of a server. 3423 // 3424 // Not all resources run servers. 3425 // +optional 3426 optional string runtimeStatus = 10; 3427 3428 // The UpdateStatus is a simple, high-level summary of any update tasks to bring 3429 // the resource up-to-date. 3430 // 3431 // If the resource runs a server, this may include both build tasks and live-update 3432 // syncing. 3433 // +optional 3434 optional string updateStatus = 14; 3435 3436 // Information about all the target specs that this resource summarizes. 3437 // +optional 3438 repeated UIResourceTargetSpec specs = 12; 3439 3440 // Queued is a simple indicator of whether the resource is queued for an update. 3441 // +optional 3442 optional bool queued = 13; 3443 3444 // Order expresses the relative order of resources in the UI when they're not 3445 // otherwise sorted. Lower integers go first. When two resources have the same 3446 // order, they should be sorted by name. 3447 // 3448 // When UIResources are generated from the Tiltfile, we use the order they 3449 // were added to the Tiltfile for the Order field. 3450 // 3451 // +optional 3452 optional int32 order = 15; 3453 3454 // Information about the resource's objects' disabled status. 3455 optional DisableResourceStatus disableStatus = 16; 3456 3457 // Waiting provides detail on why the resource is currently blocked from updating. 3458 // 3459 // +optional 3460 optional UIResourceStateWaiting waiting = 17; 3461 3462 // Represents the latest available observations of a UIResource's current state. 3463 // 3464 // Designed for compatibility with 'wait' and cross-resource status reporting. 3465 // https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api-conventions.md#typical-status-properties 3466 // 3467 // +optional 3468 repeated UIResourceCondition conditions = 18; 3469 } 3470 3471 // UIResourceTargetSpec represents the spec of a build or deploy that a resource summarizes. 3472 message UIResourceTargetSpec { 3473 // The ID of the target. 3474 // +optional 3475 optional string id = 1; 3476 3477 // The type of the target. 3478 // +optional 3479 optional string type = 2; 3480 3481 // Whether the target has a live update associated with it. 3482 // +optional 3483 optional bool hasLiveUpdate = 3; 3484 } 3485 3486 // UISession represents global status data for rendering the web UI. 3487 // 3488 // Treat this as a legacy data structure that's more intended to make transition 3489 // easier rather than a robust long-term API. 3490 // 3491 // Per-resource status data should be stored in UIResource. 3492 // 3493 // +k8s:openapi-gen=true 3494 message UISession { 3495 optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; 3496 3497 optional UISessionSpec spec = 2; 3498 3499 optional UISessionStatus status = 3; 3500 } 3501 3502 // UISessionList 3503 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object 3504 message UISessionList { 3505 optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; 3506 3507 repeated UISession items = 2; 3508 } 3509 3510 // UISessionSpec is an empty struct. 3511 // UISession is a kludge for making Tilt's internal status readable, not 3512 // for specifying behavior. 3513 message UISessionSpec { 3514 } 3515 3516 // UISessionStatus defines the observed state of UISession 3517 message UISessionStatus { 3518 // FeatureFlags reports a list of experimental features that have been 3519 // enabled. 3520 // +optional 3521 repeated UIFeatureFlag featureFlags = 1; 3522 3523 // NeedsAnalyticsNudge reports whether the UI hasn't opted in or out 3524 // of analytics, and the UI should nudge them to do so. 3525 // +optional 3526 optional bool needsAnalyticsNudge = 2; 3527 3528 // RunningTiltBuild reports the currently running version of tilt 3529 // that this UI is talking to. 3530 // +optional 3531 optional TiltBuild runningTiltBuild = 3; 3532 3533 // SuggestedTiltVersion tells the UI the recommended version for this 3534 // user. If the version is different than what's running, the UI 3535 // may display a prompt to upgrade. 3536 // +optional 3537 optional string suggestedTiltVersion = 4; 3538 3539 // VersionSettings indicates whether version updates have been enabled/disabled 3540 // from the Tiltfile. 3541 // +optional 3542 optional VersionSettings versionSettings = 12; 3543 3544 // TiltCloudUsername reports the username if the user is signed into 3545 // TiltCloud. 3546 // 3547 // deprecated: no longer populated 3548 // 3549 // +optional 3550 optional string tiltCloudUsername = 5; 3551 3552 // TiltCloudUsername reports the human-readable team name if the user is 3553 // signed into TiltCloud and the Tiltfile declares a team. 3554 // 3555 // deprecated: no longer populated 3556 // 3557 // +optional 3558 optional string tiltCloudTeamName = 6; 3559 3560 // TiltCloudSchemeHost reports the base URL of the Tilt Cloud instance 3561 // associated with this Tilt process. Usually https://cloud.tilt.dev 3562 // 3563 // deprecated: no longer populated 3564 // 3565 // +optional 3566 optional string tiltCloudSchemeHost = 7; 3567 3568 // TiltCloudTeamID reports the unique team id if the user is signed into 3569 // TiltCloud and the Tiltfile declares a team. 3570 // 3571 // deprecated: no longer populated 3572 // 3573 // +optional 3574 optional string tiltCloudTeamID = 8; 3575 3576 // A FatalError is an error that forces Tilt to stop its control loop. 3577 // The API server will stay up and continue to serve the UI, but 3578 // no further builds will happen. 3579 // +optional 3580 optional string fatalError = 9; 3581 3582 // The time that this instance of tilt started. 3583 // Clients can use this to determine if the API server has restarted 3584 // and all the objects need to be refreshed. 3585 // +optional 3586 optional k8s.io.apimachinery.pkg.apis.meta.v1.Time tiltStartTime = 10; 3587 3588 // An identifier for the Tiltfile that is running. 3589 // Clients can use this to store data associated with a particular 3590 // project in LocalStorage or other persistent storage. 3591 // +optional 3592 optional string tiltfileKey = 11; 3593 } 3594 3595 // Describes a text input field attached to a button. 3596 message UITextInputSpec { 3597 // Initial value for this field. 3598 // 3599 // +optional 3600 optional string defaultValue = 1; 3601 3602 // A short hint that describes the expected input of this field. 3603 // 3604 // +optional 3605 optional string placeholder = 2; 3606 } 3607 3608 message UITextInputStatus { 3609 // The content of the text input. 3610 optional string value = 1; 3611 } 3612 3613 // Information about how the Tilt binary handles updates. 3614 message VersionSettings { 3615 // Whether version updates have been enabled/disabled from the Tiltfile. 3616 // +optional 3617 optional bool checkUpdates = 1; 3618 } 3619