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