diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json index c6e5b8fad8e..218a77b210f 100644 --- a/docs/content/en/api/skaffold.swagger.json +++ b/docs/content/en/api/skaffold.swagger.json @@ -151,7 +151,7 @@ }, { "name": "event.buildEvent.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -192,13 +192,15 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, { "name": "event.buildEvent.actionableErr.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -239,7 +241,9 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, @@ -263,7 +267,7 @@ }, { "name": "event.deployEvent.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -304,13 +308,15 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, { "name": "event.deployEvent.actionableErr.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -351,7 +357,9 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, @@ -437,7 +445,7 @@ }, { "name": "event.statusCheckEvent.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -478,13 +486,15 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, { "name": "event.statusCheckEvent.actionableErr.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -525,7 +535,9 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, @@ -561,7 +573,7 @@ }, { "name": "event.resourceStatusCheckEvent.statusCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -602,13 +614,15 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, { "name": "event.resourceStatusCheckEvent.actionableErr.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -649,7 +663,9 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, @@ -686,7 +702,7 @@ }, { "name": "event.fileSyncEvent.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -727,13 +743,15 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, { "name": "event.fileSyncEvent.actionableErr.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -774,7 +792,9 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, @@ -841,7 +861,7 @@ }, { "name": "event.devLoopEvent.err.errCode", - "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded", "in": "query", "required": false, "type": "string", @@ -882,7 +902,9 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK" }, @@ -1573,10 +1595,12 @@ "DEVINIT_REGISTER_BUILD_DEPS", "DEVINIT_REGISTER_TEST_DEPS", "DEVINIT_REGISTER_DEPLOY_DEPS", - "DEVINIT_REGISTER_CONFIG_DEP" + "DEVINIT_REGISTER_CONFIG_DEP", + "STATUSCHECK_CONTEXT_CANCELLED", + "STATUSCHECK_DEADLINE_EXCEEDED" ], "default": "OK", - "description": "Enum for Status codes\nThese error codes are prepended by Phase Name e.g.\nBUILD, DEPLOY, STATUSCHECK, DEVINIT\n- OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file." + "description": "Enum for Status codes\nThese error codes are prepended by Phase Name e.g.\nBUILD, DEPLOY, STATUSCHECK, DEVINIT\n- OK: A default status code for events that do not have an associated phase.\nTypically seen with the DevEndEvent event on success.\n - STATUSCHECK_SUCCESS: Status Check Success\n - BUILD_SUCCESS: Build Success\n - BUILD_PUSH_ACCESS_DENIED: Build error due to push access denied\n - BUILD_PROJECT_NOT_FOUND: Build error due to GCP project not found.\n - STATUSCHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUSCHECK_CONTAINER_CREATING: Container creating error\n - STATUSCHECK_RUN_CONTAINER_ERR: Container run error\n - STATUSCHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING: Deployment waiting for rollout\n - STATUSCHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUSCHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUSCHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUSCHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUSCHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUSCHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUSCHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUSCHECK_NODE_NOT_READY: Node not ready error\n - STATUSCHECK_FAILED_SCHEDULING: Scheduler failure error\n - STATUSCHECK_UNHEALTHY: Readiness probe failed\n - STATUSCHECK_KUBECTL_CONNECTION_ERR: Kubectl connection error\n - STATUSCHECK_KUBECTL_PID_KILLED: Kubectl process killed error\n - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_UNKNOWN: Status Check error unknown\n - STATUSCHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUSCHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - STATUSCHECK_UNKNOWN_EVENT: Container event reason unknown\n - DEPLOY_UNKNOWN: Deploy failed due to unknown reason\n - SYNC_UNKNOWN: SYNC failed due to known reason\n - BUILD_UNKNOWN: Build failed due to unknown reason\n - DEVINIT_UNKNOWN: Dev Init failed due to unknown reason\n - CLEANUP_UNKNOWN: Cleanup failed due to unknown reason\n - SYNC_INIT_ERROR: File Sync Initialize failure\n - DEVINIT_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEVINIT_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEVINIT_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEVINIT_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.\n - STATUSCHECK_CONTEXT_CANCELLED: User cancelled the skaffold dev run\n - STATUSCHECK_DEADLINE_EXCEEDED: Deadline for status check exceeded" }, "protoSuggestion": { "type": "object", diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md index 0ff1eee0693..2b49717ce13 100644 --- a/docs/content/en/docs/references/api/grpc.md +++ b/docs/content/en/docs/references/api/grpc.md @@ -783,6 +783,8 @@ BUILD, DEPLOY, STATUSCHECK, DEVINIT | DEVINIT_REGISTER_TEST_DEPS | 702 | Failed to configure watcher for test dependencies in dev loop | | DEVINIT_REGISTER_DEPLOY_DEPS | 703 | Failed to configure watcher for deploy dependencies in dev loop | | DEVINIT_REGISTER_CONFIG_DEP | 704 | Failed to configure watcher for Skaffold configuration file. | +| STATUSCHECK_CONTEXT_CANCELLED | 800 | User cancelled the skaffold dev run | +| STATUSCHECK_DEADLINE_EXCEEDED | 801 | Deadline for status check exceeded | diff --git a/pkg/diag/validator/pod.go b/pkg/diag/validator/pod.go index 3ab4930ed9d..5b6b91ea19f 100644 --- a/pkg/diag/validator/pod.go +++ b/pkg/diag/validator/pod.go @@ -85,7 +85,7 @@ func (p *PodValidator) Validate(ctx context.Context, ns string, opts metav1.List if po.Kind == "" { po.Kind = podKind } - rs = append(rs, NewResourceFromObject(&po, Status(ps.phase), ps.err, ps.statusCode, ps.logs)) + rs = append(rs, NewResourceFromObject(&po, Status(ps.phase), ps.ae, ps.logs)) } return rs, nil } @@ -209,34 +209,35 @@ func processPodEvents(e corev1.EventInterface, pod v1.Pod, ps *podStatus) { } switch recentEvent.Reason { case failedScheduling: - ps.statusCode = proto.StatusCode_STATUSCHECK_FAILED_SCHEDULING - ps.err = fmt.Errorf(recentEvent.Message) + ps.ae.ErrCode = proto.StatusCode_STATUSCHECK_FAILED_SCHEDULING + ps.ae.Message = recentEvent.Message case unhealthy: - ps.statusCode = proto.StatusCode_STATUSCHECK_UNHEALTHY - ps.err = fmt.Errorf(recentEvent.Message) + ps.ae.ErrCode = proto.StatusCode_STATUSCHECK_UNHEALTHY + ps.ae.Message = recentEvent.Message default: // TODO: Add unique error codes for reasons - ps.statusCode = proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT - ps.err = fmt.Errorf("%s: %s", recentEvent.Reason, recentEvent.Message) + ps.ae.ErrCode = proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT + ps.ae.Message = fmt.Sprintf("%s: %s", recentEvent.Reason, recentEvent.Message) } } type podStatus struct { - name string - namespace string - phase string - logs []string - err error - statusCode proto.StatusCode + name string + namespace string + phase string + logs []string + ae *proto.ActionableErr } func (p *podStatus) isStable() bool { - return p.phase == success || (p.phase == running && p.err == nil) + return p.phase == success || (p.phase == running && p.ae.Message == "") } func (p *podStatus) withErrAndLogs(errCode proto.StatusCode, l []string, err error) *podStatus { - p.err = err - p.statusCode = errCode + if err != nil { + p.ae.Message = err.Error() + } + p.ae.ErrCode = errCode p.logs = l return p } @@ -246,8 +247,8 @@ func (p *podStatus) String() string { case p.isStable(): return "" default: - if p.err != nil { - return fmt.Sprintf("%s", p.err) + if p.ae.Message != "" { + return p.ae.Message } } return fmt.Sprintf(actionableMessage, p.namespace, p.name) @@ -275,10 +276,12 @@ func extractErrorMessageFromWaitingContainerStatus(po *v1.Pod, c v1.ContainerSta func newPodStatus(n string, ns string, p string) *podStatus { return &podStatus{ - name: n, - namespace: ns, - phase: p, - statusCode: proto.StatusCode_STATUSCHECK_SUCCESS, + name: n, + namespace: ns, + phase: p, + ae: &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS, + }, } } diff --git a/pkg/diag/validator/pod_test.go b/pkg/diag/validator/pod_test.go index ffd27bb0b36..8f36fd06fc6 100644 --- a/pkg/diag/validator/pod_test.go +++ b/pkg/diag/validator/pod_test.go @@ -84,8 +84,10 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("container foo-container is waiting to start: foo-image can't be pulled"), - proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, nil)}, + &proto.ActionableErr{ + Message: "container foo-container is waiting to start: foo-image can't be pulled", + ErrCode: proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, + }, nil)}, }, { description: "pod is Waiting condition due to ErrImageBackOffPullErr", @@ -113,8 +115,10 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("container foo-container is waiting to start: foo-image can't be pulled"), - proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, nil)}, + &proto.ActionableErr{ + Message: "container foo-container is waiting to start: foo-image can't be pulled", + ErrCode: proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, + }, nil)}, }, { description: "pod is Waiting due to Image Backoff Pull error", @@ -142,8 +146,10 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("container foo-container is waiting to start: foo-image can't be pulled"), - proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, nil)}, + &proto.ActionableErr{ + Message: "container foo-container is waiting to start: foo-image can't be pulled", + ErrCode: proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, + }, nil)}, }, { description: "pod is in Terminated State", @@ -158,8 +164,11 @@ func TestRun(t *testing.T) { Conditions: []v1.PodCondition{{Type: v1.PodScheduled, Status: v1.ConditionTrue}}, }, }}, - expected: []Resource{NewResource("test", "Pod", "foo", "Succeeded", nil, - proto.StatusCode_STATUSCHECK_SUCCESS, nil)}, + expected: []Resource{NewResource("test", "Pod", "foo", "Succeeded", + &proto.ActionableErr{ + Message: "", + ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS, + }, nil)}, }, { description: "pod is in Stable State", @@ -180,8 +189,11 @@ func TestRun(t *testing.T) { }, }, }}, - expected: []Resource{NewResource("test", "Pod", "foo", "Running", nil, - proto.StatusCode_STATUSCHECK_SUCCESS, nil)}, + expected: []Resource{NewResource("test", "Pod", "foo", "Running", + &proto.ActionableErr{ + Message: "", + ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS, + }, nil)}, }, { description: "pod condition unknown", @@ -201,7 +213,10 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("could not determine"), proto.StatusCode_STATUSCHECK_UNKNOWN, nil)}, + &proto.ActionableErr{ + Message: "could not determine", + ErrCode: proto.StatusCode_STATUSCHECK_UNKNOWN, + }, nil)}, }, { description: "pod could not be scheduled", @@ -222,8 +237,10 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("Unschedulable: 0/2 nodes available: 1 node has disk pressure, 1 node is unreachable"), - proto.StatusCode_STATUSCHECK_NODE_DISK_PRESSURE, nil)}, + &proto.ActionableErr{ + Message: "Unschedulable: 0/2 nodes available: 1 node has disk pressure, 1 node is unreachable", + ErrCode: proto.StatusCode_STATUSCHECK_NODE_DISK_PRESSURE, + }, nil)}, }, { description: "pod is running but container terminated", @@ -248,8 +265,10 @@ func TestRun(t *testing.T) { output: []byte("main.go:57 \ngo panic"), }, expected: []Resource{NewResource("test", "Pod", "foo", "Running", - fmt.Errorf("container foo-container terminated with exit code 1"), - proto.StatusCode_STATUSCHECK_CONTAINER_TERMINATED, []string{ + &proto.ActionableErr{ + Message: "container foo-container terminated with exit code 1", + ErrCode: proto.StatusCode_STATUSCHECK_CONTAINER_TERMINATED, + }, []string{ "[foo foo-container] main.go:57 ", "[foo foo-container] go panic"}, )}, @@ -276,8 +295,10 @@ func TestRun(t *testing.T) { err: fmt.Errorf("error"), }, expected: []Resource{NewResource("test", "pod", "foo", "Running", - fmt.Errorf("container foo-container terminated with exit code 1"), - proto.StatusCode_STATUSCHECK_CONTAINER_TERMINATED, []string{ + &proto.ActionableErr{ + Message: "container foo-container terminated with exit code 1", + ErrCode: proto.StatusCode_STATUSCHECK_CONTAINER_TERMINATED, + }, []string{ "Error retrieving logs for pod foo. Try `kubectl logs foo -n test -c foo-container`"}, )}, }, @@ -306,7 +327,10 @@ func TestRun(t *testing.T) { }, }, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("eventCode: dummy event"), proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT, nil)}, + &proto.ActionableErr{ + Message: "eventCode: dummy event", + ErrCode: proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT, + }, nil)}, }, { description: "pod condition a warning event followed up normal event", @@ -338,7 +362,10 @@ func TestRun(t *testing.T) { }, }, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("eventCode: dummy event"), proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT, nil)}, + &proto.ActionableErr{ + Message: "eventCode: dummy event", + ErrCode: proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT, + }, nil)}, }, { description: "pod condition a normal event followed by a warning event", @@ -370,7 +397,10 @@ func TestRun(t *testing.T) { }, }, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("eventCode: dummy event"), proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT, nil)}, + &proto.ActionableErr{ + Message: "eventCode: dummy event", + ErrCode: proto.StatusCode_STATUSCHECK_UNKNOWN_EVENT, + }, nil)}, }, { description: "pod condition a warning event followed up by warning adds last warning seen", @@ -402,7 +432,10 @@ func TestRun(t *testing.T) { }, }, expected: []Resource{NewResource("test", "Pod", "foo", "Pending", - fmt.Errorf("0/1 nodes are available: 1 node(s) had taint {key: value}, that the pod didn't tolerate"), proto.StatusCode_STATUSCHECK_FAILED_SCHEDULING, nil)}, + &proto.ActionableErr{ + Message: "0/1 nodes are available: 1 node(s) had taint {key: value}, that the pod didn't tolerate", + ErrCode: proto.StatusCode_STATUSCHECK_FAILED_SCHEDULING, + }, nil)}, }, } diff --git a/pkg/diag/validator/resource.go b/pkg/diag/validator/resource.go index aa0856f5d8f..dd8f8d19c9f 100644 --- a/pkg/diag/validator/resource.go +++ b/pkg/diag/validator/resource.go @@ -26,20 +26,18 @@ import ( ) type Resource struct { - namespace string - kind string - name string - logs []string - status Status - err error - StatusCode proto.StatusCode + namespace string + kind string + name string + logs []string + status Status + ae *proto.ActionableErr } func (r Resource) Kind() string { return r.kind } func (r Resource) Name() string { return r.name } func (r Resource) Namespace() string { return r.namespace } func (r Resource) Status() Status { return r.status } -func (r Resource) Error() error { return r.err } func (r Resource) Logs() []string { return r.logs } func (r Resource) String() string { if r.namespace == "default" { @@ -47,10 +45,16 @@ func (r Resource) String() string { } return fmt.Sprintf("%s:%s/%s", r.namespace, r.kind, r.name) } +func (r Resource) ActionableError() *proto.ActionableErr { + return r.ae +} +func (r Resource) StatusUpdated(another Resource) bool { + return r.ae.ErrCode != another.ae.ErrCode +} // NewResource creates new Resource of kind -func NewResource(namespace, kind, name string, status Status, err error, statusCode proto.StatusCode, logs []string) Resource { - return Resource{namespace: namespace, kind: kind, name: name, status: status, err: err, StatusCode: statusCode, logs: logs} +func NewResource(namespace, kind, name string, status Status, ae *proto.ActionableErr, logs []string) Resource { + return Resource{namespace: namespace, kind: kind, name: name, status: status, ae: ae, logs: logs} } // objectWithMetadata is any k8s object that has kind and object metadata. @@ -60,6 +64,6 @@ type objectWithMetadata interface { } // NewResourceFromObject creates new Resource with fields populated from object metadata. -func NewResourceFromObject(object objectWithMetadata, status Status, err error, statusCode proto.StatusCode, logs []string) Resource { - return NewResource(object.GetNamespace(), object.GetObjectKind().GroupVersionKind().Kind, object.GetName(), status, err, statusCode, logs) +func NewResourceFromObject(object objectWithMetadata, status Status, ae *proto.ActionableErr, logs []string) Resource { + return NewResource(object.GetNamespace(), object.GetObjectKind().GroupVersionKind().Kind, object.GetName(), status, ae, logs) } diff --git a/pkg/diag/validator/resource_test.go b/pkg/diag/validator/resource_test.go index 093552d1510..9ed0436cf26 100644 --- a/pkg/diag/validator/resource_test.go +++ b/pkg/diag/validator/resource_test.go @@ -42,7 +42,7 @@ func TestNewResource(t *testing.T) { Name: "foo", }, }, - expected: Resource{"default", "pod", "foo", nil, Status(""), nil, 0}, + expected: Resource{"default", "pod", "foo", nil, Status(""), nil}, expectedName: "pod/foo", }, { @@ -54,13 +54,13 @@ func TestNewResource(t *testing.T) { Name: "bar", }, }, - expected: Resource{"test", "pod", "bar", nil, Status(""), nil, 0}, + expected: Resource{"test", "pod", "bar", nil, Status(""), nil}, expectedName: "test:pod/bar", }, } for _, test := range tests { testutil.Run(t, test.description, func(t *testutil.T) { - actual := NewResourceFromObject(test.resource, Status(""), nil, 0, nil) + actual := NewResourceFromObject(test.resource, Status(""), nil, nil) t.CheckDeepEqual(test.expected, actual, cmp.AllowUnexported(Resource{})) t.CheckDeepEqual(test.expectedName, actual.String(), cmp.AllowUnexported(Resource{})) }) diff --git a/pkg/skaffold/deploy/resource/deployment.go b/pkg/skaffold/deploy/resource/deployment.go index 7780e8792cd..b12f33691e9 100644 --- a/pkg/skaffold/deploy/resource/deployment.go +++ b/pkg/skaffold/deploy/resource/deployment.go @@ -18,7 +18,6 @@ package resource import ( "context" - "errors" "fmt" "strings" "time" @@ -44,8 +43,8 @@ const ( ) var ( - errKubectlKilled = errors.New("kubectl rollout status command interrupted") - ErrKubectlConnection = errors.New("kubectl connection error") + msgKubectlKilled = "kubectl rollout status command interrupted" + MsgKubectlConnection = "kubectl connection error" ) type Deployment struct { @@ -64,19 +63,15 @@ func (d *Deployment) Deadline() time.Duration { return d.deadline } -func (d *Deployment) UpdateStatus(details string, err error) { - errCode := proto.StatusCode_STATUSCHECK_SUCCESS - if err != nil { - errCode = proto.StatusCode_STATUSCHECK_UNKNOWN - } - updated := newStatus(details, errCode, err) +func (d *Deployment) UpdateStatus(ae *proto.ActionableErr) { + updated := newStatus(ae) if d.status.Equal(updated) { d.status.changed = false return } d.status = updated d.status.changed = true - if strings.Contains(details, rollOutSuccess) || isErrAndNotRetryAble(err) { + if ae.ErrCode == proto.StatusCode_STATUSCHECK_SUCCESS || isErrAndNotRetryAble(ae.ErrCode) { d.done = true } } @@ -86,7 +81,7 @@ func NewDeployment(name string, ns string, deadline time.Duration) *Deployment { name: name, namespace: ns, rType: deploymentType, - status: newStatus("", proto.StatusCode_STATUSCHECK_UNKNOWN, nil), + status: newStatus(&proto.ActionableErr{}), deadline: deadline, podValidator: diag.New(nil), } @@ -107,12 +102,12 @@ func (d *Deployment) CheckStatus(ctx context.Context, runCtx *runcontext.RunCont details := d.cleanupStatus(string(b)) - d.StatusCode, err = parseKubectlRolloutError(err) - if err == errKubectlKilled { - err = fmt.Errorf("received Ctrl-C or deployments could not stabilize within %v: %w", d.deadline, err) + ae := parseKubectlRolloutError(details, err) + if ae.ErrCode == proto.StatusCode_STATUSCHECK_KUBECTL_PID_KILLED { + ae.Message = fmt.Sprintf("received Ctrl-C or deployments could not stabilize within %v: %v", d.deadline, err) } - d.UpdateStatus(details, err) + d.UpdateStatus(ae) if err := d.fetchPods(ctx); err != nil { logrus.Debugf("pod statuses could be fetched this time due to %s", err) } @@ -153,8 +148,8 @@ func (d *Deployment) ReportSinceLastUpdated() string { var result strings.Builder result.WriteString(fmt.Sprintf("%s %s: %s", tabHeader, d, d.status)) for _, p := range d.pods { - if p.Error() != nil { - result.WriteString(fmt.Sprintf("%s %s %s: %s\n", tab, tabHeader, p, p.Error())) + if s := p.ActionableError().Message; s != "" { + result.WriteString(fmt.Sprintf("%s %s %s: %s\n", tab, tabHeader, p, s)) for _, l := range p.Logs() { result.WriteString(fmt.Sprintf("%s\n", l)) } @@ -179,24 +174,39 @@ func (d *Deployment) cleanupStatus(msg string) string { // $kubectl logs testPod -f // 2020/06/18 17:28:31 service is running // Killed: 9 -func parseKubectlRolloutError(err error) (proto.StatusCode, error) { - if err == nil { - return proto.StatusCode_STATUSCHECK_SUCCESS, err - } - if strings.Contains(err.Error(), connectionErrMsg) { - return proto.StatusCode_STATUSCHECK_KUBECTL_CONNECTION_ERR, ErrKubectlConnection - } - if strings.Contains(err.Error(), killedErrMsg) { - return proto.StatusCode_STATUSCHECK_KUBECTL_PID_KILLED, errKubectlKilled +func parseKubectlRolloutError(details string, err error) *proto.ActionableErr { + switch { + case err == nil && strings.Contains(details, rollOutSuccess): + return &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS, + Message: details, + } + case err == nil: + return &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING, + Message: details, + } + case strings.Contains(err.Error(), connectionErrMsg): + return &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_KUBECTL_CONNECTION_ERR, + Message: MsgKubectlConnection, + } + case strings.Contains(err.Error(), killedErrMsg): + return &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_KUBECTL_PID_KILLED, + Message: msgKubectlKilled, + } + default: + return &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_UNKNOWN, + Message: err.Error(), + } } - return proto.StatusCode_STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING, err } -func isErrAndNotRetryAble(err error) bool { - if err == nil { - return false - } - return err != ErrKubectlConnection +func isErrAndNotRetryAble(statusCode proto.StatusCode) bool { + return statusCode != proto.StatusCode_STATUSCHECK_KUBECTL_CONNECTION_ERR && + statusCode != proto.StatusCode_STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING } func (d *Deployment) fetchPods(ctx context.Context) error { @@ -211,13 +221,13 @@ func (d *Deployment) fetchPods(ctx context.Context) error { d.status.changed = false for _, p := range pods { originalPod, found := d.pods[p.String()] - if !found || originalPod.StatusCode != p.StatusCode { + if !found || originalPod.StatusUpdated(p) { d.status.changed = true - switch p.StatusCode { + switch p.ActionableError().ErrCode { case proto.StatusCode_STATUSCHECK_CONTAINER_CREATING: - event.ResourceStatusCheckEventUpdated(p.String(), p.StatusCode, p.Error().Error()) + event.ResourceStatusCheckEventUpdated(p.String(), p.ActionableError()) default: - event.ResourceStatusCheckEventCompleted(p.String(), p.StatusCode, p.Error()) + event.ResourceStatusCheckEventCompleted(p.String(), p.ActionableError()) } } newPods[p.String()] = p diff --git a/pkg/skaffold/deploy/resource/deployment_test.go b/pkg/skaffold/deploy/resource/deployment_test.go index 143f140aa81..eb635203358 100644 --- a/pkg/skaffold/deploy/resource/deployment_test.go +++ b/pkg/skaffold/deploy/resource/deployment_test.go @@ -77,7 +77,7 @@ func TestDeploymentCheckStatus(t *testing.T) { "", errors.New("Unable to connect to the server"), ), - expectedErr: ErrKubectlConnection.Error(), + expectedErr: MsgKubectlConnection, }, } @@ -94,7 +94,7 @@ func TestDeploymentCheckStatus(t *testing.T) { if test.expectedErr != "" { t.CheckErrorContains(test.expectedErr, r.Status().Error()) } else { - t.CheckDeepEqual(r.status.details, test.expectedDetails) + t.CheckDeepEqual(r.status.ae.Message, test.expectedDetails) } }) } @@ -103,45 +103,47 @@ func TestDeploymentCheckStatus(t *testing.T) { func TestParseKubectlError(t *testing.T) { tests := []struct { description string + details string err error - expected string - expectedSc proto.StatusCode - shouldErr bool + expectedAe *proto.ActionableErr }{ { description: "rollout status connection error", err: errors.New("Unable to connect to the server"), - expected: ErrKubectlConnection.Error(), - expectedSc: proto.StatusCode_STATUSCHECK_KUBECTL_CONNECTION_ERR, - shouldErr: true, + expectedAe: &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_KUBECTL_CONNECTION_ERR, + Message: MsgKubectlConnection, + }, }, { description: "rollout status kubectl command killed", err: errors.New("signal: killed"), - expected: errKubectlKilled.Error(), - expectedSc: proto.StatusCode_STATUSCHECK_KUBECTL_PID_KILLED, - shouldErr: true, + expectedAe: &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_KUBECTL_PID_KILLED, + Message: msgKubectlKilled, + }, }, { description: "rollout status random error", err: errors.New("deployment test not found"), - expected: "deployment test not found", - expectedSc: proto.StatusCode_STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING, - shouldErr: true, + expectedAe: &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_UNKNOWN, + Message: "deployment test not found", + }, }, { description: "rollout status nil error", - expectedSc: proto.StatusCode_STATUSCHECK_SUCCESS, + details: "successfully rolled out", + expectedAe: &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS, + Message: "successfully rolled out", + }, }, } for _, test := range tests { testutil.Run(t, test.description, func(t *testutil.T) { - sc, actual := parseKubectlRolloutError(test.err) - t.CheckError(test.shouldErr, actual) - t.CheckDeepEqual(test.expectedSc, sc) - if test.shouldErr { - t.CheckErrorContains(test.expected, actual) - } + ae := parseKubectlRolloutError(test.details, test.err) + t.CheckDeepEqual(test.expectedAe, ae) }) } } @@ -149,40 +151,42 @@ func TestParseKubectlError(t *testing.T) { func TestIsErrAndNotRetriable(t *testing.T) { tests := []struct { description string - err error + statusCode proto.StatusCode expected bool }{ { description: "rollout status connection error", - err: ErrKubectlConnection, + statusCode: proto.StatusCode_STATUSCHECK_KUBECTL_CONNECTION_ERR, }, { description: "rollout status kubectl command killed", - err: errKubectlKilled, + statusCode: proto.StatusCode_STATUSCHECK_KUBECTL_PID_KILLED, expected: true, }, { description: "rollout status random error", - err: errors.New("deployment test not found"), + statusCode: proto.StatusCode_STATUSCHECK_UNKNOWN, expected: true, }, { - description: "rollout status parent context cancelled", - err: context.Canceled, + description: "rollout status parent context canceled", + statusCode: proto.StatusCode_STATUSCHECK_CONTEXT_CANCELLED, expected: true, }, { description: "rollout status parent context timed out", - err: context.DeadlineExceeded, + statusCode: proto.StatusCode_STATUSCHECK_DEADLINE_EXCEEDED, expected: true, }, { description: "rollout status nil error", + statusCode: proto.StatusCode_STATUSCHECK_SUCCESS, + expected: true, }, } for _, test := range tests { testutil.Run(t, test.description, func(t *testutil.T) { - actual := isErrAndNotRetryAble(test.err) + actual := isErrAndNotRetryAble(test.statusCode) t.CheckDeepEqual(test.expected, actual) }) } @@ -191,27 +195,24 @@ func TestIsErrAndNotRetriable(t *testing.T) { func TestReportSinceLastUpdated(t *testing.T) { var tests = []struct { description string - message string - err error + ae *proto.ActionableErr expected string }{ { description: "updating an error status", - message: "cannot pull image", - err: errors.New("cannot pull image"), + ae: &proto.ActionableErr{Message: "cannot pull image"}, expected: " - test-ns:deployment/test: cannot pull image", }, { description: "updating a non error status", - message: "waiting for container", + ae: &proto.ActionableErr{Message: "waiting for container"}, expected: " - test-ns:deployment/test: waiting for container", }, } for _, test := range tests { testutil.Run(t, test.description, func(t *testutil.T) { dep := NewDeployment("test", "test-ns", 1) - dep.UpdateStatus(test.message, test.err) - + dep.UpdateStatus(test.ae) t.CheckDeepEqual(test.expected, dep.ReportSinceLastUpdated()) t.CheckTrue(dep.status.changed) }) @@ -250,7 +251,10 @@ func TestReportSinceLastUpdatedMultipleTimes(t *testing.T) { var actual string for i, status := range test.statuses { // update to same status - dep.UpdateStatus(status, nil) + dep.UpdateStatus(&proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING, + Message: status, + }) if test.reportStatusSeq[i] { actual = dep.ReportSinceLastUpdated() } diff --git a/pkg/skaffold/deploy/resource/status.go b/pkg/skaffold/deploy/resource/status.go index 81602362bda..8b63a40100f 100644 --- a/pkg/skaffold/deploy/resource/status.go +++ b/pkg/skaffold/deploy/resource/status.go @@ -17,47 +17,39 @@ limitations under the License. package resource import ( + "fmt" + "github.com/GoogleContainerTools/skaffold/proto" ) type Status struct { - err error - details string - errCode proto.StatusCode + ae *proto.ActionableErr changed bool reported bool } func (rs Status) Error() error { - return rs.err + return fmt.Errorf(rs.ae.Message) } -func (rs Status) ErrorCode() proto.StatusCode { - return rs.errCode +func (rs Status) ActionableError() *proto.ActionableErr { + return rs.ae } func (rs Status) String() string { - if rs.err != nil { - return rs.err.Error() - } - return rs.details + return rs.ae.Message } func (rs Status) Equal(other Status) bool { - if rs.details != other.details { - return false - } - if rs.err != nil && other.err != nil { - return rs.err.Error() == other.err.Error() + if rs.ae != nil && other.ae != nil { + return rs.ae.Message == other.ae.Message && rs.ae.ErrCode == other.ae.ErrCode } - return rs.err == other.err + return rs.ae == other.ae } -func newStatus(msg string, errCode proto.StatusCode, err error) Status { +func newStatus(ae *proto.ActionableErr) Status { return Status{ - details: msg, - err: err, - errCode: errCode, + ae: ae, changed: true, } } diff --git a/pkg/skaffold/deploy/resource/status_test.go b/pkg/skaffold/deploy/resource/status_test.go index 6e4c069466e..d55e49f7f32 100644 --- a/pkg/skaffold/deploy/resource/status_test.go +++ b/pkg/skaffold/deploy/resource/status_test.go @@ -17,43 +17,36 @@ limitations under the License. package resource import ( - "errors" - "fmt" "testing" + "github.com/GoogleContainerTools/skaffold/proto" "github.com/GoogleContainerTools/skaffold/testutil" ) func TestString(t *testing.T) { var tests = []struct { description string - details string - err error + ae *proto.ActionableErr expected string }{ { description: "should return error string if error is set", - err: errors.New("some error"), + ae: &proto.ActionableErr{Message: "some error"}, expected: "some error", }, - { - description: "should return error details if error is not set", - details: "details", - expected: "details", - }, { description: "should return error if both details and error are set", - details: "error details", - err: errors.New("error happened due to something"), + ae: &proto.ActionableErr{Message: "error happened due to something"}, expected: "error happened due to something", }, { description: "should return empty string if all empty", + ae: &proto.ActionableErr{}, }, } for _, test := range tests { testutil.Run(t, test.description, func(t *testutil.T) { - status := newStatus(test.details, 0, test.err) + status := newStatus(test.ae) t.CheckDeepEqual(test.expected, status.String()) }) } @@ -67,31 +60,25 @@ func TestEqual(t *testing.T) { expected bool }{ { - description: "status should be same for same details and error", - old: Status{details: "Waiting for 0/1 replicas to be available...", err: nil}, - new: Status{details: "Waiting for 0/1 replicas to be available...", err: nil}, - expected: true, - }, - { - description: "status should be new if error messages are same", - old: Status{details: "same", err: errors.New("same error")}, - new: Status{details: "same", err: errors.New("same error")}, + description: "status should be same if error messages are same", + old: Status{ae: &proto.ActionableErr{ErrCode: 100, Message: "Waiting for 0/1 replicas to be available..."}}, + new: Status{ae: &proto.ActionableErr{ErrCode: 100, Message: "Waiting for 0/1 replicas to be available..."}}, expected: true, }, { description: "status should be new if error is different", - old: Status{details: "same", err: nil}, - new: Status{details: "same", err: fmt.Errorf("see this error")}, + old: Status{ae: nil}, + new: Status{ae: &proto.ActionableErr{ErrCode: 100, Message: "see this error"}}, }, { - description: "status should be new if details and err are different", - old: Status{details: "same", err: nil}, - new: Status{details: "same", err: fmt.Errorf("see this error")}, + description: "status should be new if errcode are different but same message", + old: Status{ae: &proto.ActionableErr{ErrCode: 100, Message: "see this error"}}, + new: Status{ae: &proto.ActionableErr{ErrCode: 101, Message: "see this error"}}, }, { - description: "status should be new if details change", - old: Status{details: "same", err: nil}, - new: Status{details: "error", err: nil}, + description: "status should be new if messages change", + old: Status{ae: &proto.ActionableErr{ErrCode: 100, Message: "Waiting for 2/2 replicas to be available..."}}, + new: Status{ae: &proto.ActionableErr{ErrCode: 100, Message: "Waiting for 1/2 replicas to be available..."}}, }, } for _, test := range tests { diff --git a/pkg/skaffold/deploy/status_check.go b/pkg/skaffold/deploy/status_check.go index 0c2da370860..e85d578e39c 100644 --- a/pkg/skaffold/deploy/status_check.go +++ b/pkg/skaffold/deploy/status_check.go @@ -18,7 +18,6 @@ package deploy import ( "context" - "errors" "fmt" "io" "strings" @@ -36,6 +35,7 @@ import ( "github.com/GoogleContainerTools/skaffold/pkg/skaffold/event" pkgkubernetes "github.com/GoogleContainerTools/skaffold/pkg/skaffold/kubernetes" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/runner/runcontext" + "github.com/GoogleContainerTools/skaffold/proto" ) var ( @@ -143,8 +143,9 @@ func pollDeploymentStatus(ctx context.Context, runCtx *runcontext.RunContext, r for { select { case <-timeoutContext.Done(): - err := fmt.Errorf("could not stabilize within %v: %w", r.Deadline(), timeoutContext.Err()) - r.UpdateStatus(err.Error(), err) + msg := fmt.Sprintf("could not stabilize within %v: %v", r.Deadline(), timeoutContext.Err()) + r.UpdateStatus(&proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_DEADLINE_EXCEEDED, + Message: msg}) return case <-time.After(pollDuration): r.CheckStatus(timeoutContext, runCtx) @@ -172,18 +173,18 @@ func getDeadline(d int) time.Duration { } func printStatusCheckSummary(out io.Writer, r *resource.Deployment, c counter) { - err := r.Status().Error() - if errors.Is(err, context.Canceled) { + ae := r.Status().ActionableError() + if ae.ErrCode == proto.StatusCode_STATUSCHECK_CONTEXT_CANCELLED { // Don't print the status summary if the user ctrl-C return } - event.ResourceStatusCheckEventCompleted(r.String(), r.StatusCode, err) + event.ResourceStatusCheckEventCompleted(r.String(), r.Status().ActionableError()) status := fmt.Sprintf("%s %s", tabHeader, r) - if err != nil { + if ae.ErrCode != proto.StatusCode_STATUSCHECK_SUCCESS { status = fmt.Sprintf("%s failed.%s Error: %s.", status, trimNewLine(getPendingMessage(c.pending, c.total)), - trimNewLine(err.Error()), + trimNewLine(ae.Message), ) } else { status = fmt.Sprintf("%s is ready.%s", status, getPendingMessage(c.pending, c.total)) @@ -218,7 +219,7 @@ func printStatus(deployments []*resource.Deployment, out io.Writer) bool { } allDone = false if str := r.ReportSinceLastUpdated(); str != "" { - event.ResourceStatusCheckEventUpdated(r.String(), r.StatusCode, str) + event.ResourceStatusCheckEventUpdated(r.String(), r.Status().ActionableError()) fmt.Fprintln(out, trimNewLine(str)) } } diff --git a/pkg/skaffold/deploy/status_check_test.go b/pkg/skaffold/deploy/status_check_test.go index 22467297f32..42de32f8460 100644 --- a/pkg/skaffold/deploy/status_check_test.go +++ b/pkg/skaffold/deploy/status_check_test.go @@ -35,6 +35,7 @@ import ( "github.com/GoogleContainerTools/skaffold/pkg/skaffold/deploy/resource" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/event" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest" + "github.com/GoogleContainerTools/skaffold/proto" "github.com/GoogleContainerTools/skaffold/testutil" ) @@ -269,7 +270,7 @@ func TestPrintSummaryStatus(t *testing.T) { namespace string deployment string pending int32 - err error + ae *proto.ActionableErr expected string }{ { @@ -277,7 +278,7 @@ func TestPrintSummaryStatus(t *testing.T) { namespace: "test", deployment: "dep", pending: 0, - err: nil, + ae: &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS}, expected: " - test:deployment/dep is ready.\n", }, { @@ -285,7 +286,7 @@ func TestPrintSummaryStatus(t *testing.T) { namespace: "default", deployment: "dep", pending: 0, - err: nil, + ae: &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS}, expected: " - deployment/dep is ready.\n", }, { @@ -293,7 +294,7 @@ func TestPrintSummaryStatus(t *testing.T) { namespace: "test", deployment: "dep", pending: 0, - err: errors.New("context deadline expired"), + ae: &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_DEADLINE_EXCEEDED, Message: "context deadline expired"}, expected: " - test:deployment/dep failed. Error: context deadline expired.\n", }, { @@ -301,7 +302,7 @@ func TestPrintSummaryStatus(t *testing.T) { namespace: "test", deployment: "dep", pending: 4, - err: nil, + ae: &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS}, expected: " - test:deployment/dep is ready. [4/10 deployment(s) still pending]\n", }, { @@ -309,7 +310,7 @@ func TestPrintSummaryStatus(t *testing.T) { namespace: "test", deployment: "dep", pending: 8, - err: errors.New("context deadline expired"), + ae: &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_DEADLINE_EXCEEDED, Message: "context deadline expired"}, expected: " - test:deployment/dep failed. [8/10 deployment(s) still pending] Error: context deadline expired.\n", }, } @@ -319,9 +320,10 @@ func TestPrintSummaryStatus(t *testing.T) { out := new(bytes.Buffer) rc := newCounter(10) rc.pending = test.pending + event.InitializeState(latest.Pipeline{}, "test", true, true, true) printStatusCheckSummary( out, - withStatus(resource.NewDeployment(test.deployment, test.namespace, 0), "", test.err), + withStatus(resource.NewDeployment(test.deployment, test.namespace, 0), test.ae), *rc, ) t.CheckDeepEqual(test.expected, out.String()) @@ -341,8 +343,7 @@ func TestPrintStatus(t *testing.T) { rs: []*resource.Deployment{ withStatus( resource.NewDeployment("r1", "test", 1), - "deployment successfully rolled out", - nil, + &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS}, ), }, expected: true, @@ -352,8 +353,7 @@ func TestPrintStatus(t *testing.T) { rs: []*resource.Deployment{ withStatus( resource.NewDeployment("r1", "test", 1), - "error", - errors.New("error"), + &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_UNKNOWN, Message: "error"}, ), }, expected: true, @@ -363,13 +363,12 @@ func TestPrintStatus(t *testing.T) { rs: []*resource.Deployment{ withStatus( resource.NewDeployment("r1", "test", 1), - "deployment successfully rolled out", - nil, + &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS}, ), withStatus( resource.NewDeployment("r2", "test", 1), - "pending", - nil, + &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING, + Message: "pending"}, ), }, expectedOut: " - test:deployment/r2: pending\n", @@ -379,13 +378,13 @@ func TestPrintStatus(t *testing.T) { rs: []*resource.Deployment{ withStatus( resource.NewDeployment("r1", "test", 1), - "eployment successfully rolled out", - nil, + &proto.ActionableErr{ErrCode: proto.StatusCode_STATUSCHECK_SUCCESS}, ), withStatus( resource.NewDeployment("r2", "test", 1), - "", - resource.ErrKubectlConnection, + &proto.ActionableErr{ + ErrCode: proto.StatusCode_STATUSCHECK_KUBECTL_CONNECTION_ERR, + Message: resource.MsgKubectlConnection}, ), }, expectedOut: " - test:deployment/r2: kubectl connection error\n", @@ -395,6 +394,7 @@ func TestPrintStatus(t *testing.T) { for _, test := range tests { testutil.Run(t, test.description, func(t *testutil.T) { out := new(bytes.Buffer) + event.InitializeState(latest.Pipeline{}, "test", true, true, true) actual := printStatus(test.rs, out) t.CheckDeepEqual(test.expectedOut, out.String()) t.CheckDeepEqual(test.expected, actual) @@ -402,8 +402,8 @@ func TestPrintStatus(t *testing.T) { } } -func withStatus(d *resource.Deployment, details string, err error) *resource.Deployment { - d.UpdateStatus(details, err) +func withStatus(d *resource.Deployment, ae *proto.ActionableErr) *resource.Deployment { + d.UpdateStatus(ae) return d } @@ -446,7 +446,7 @@ func TestResourceMarkProcessed(t *testing.T) { { description: "when deployment failed, counter is updated", c: newCounter(10), - err: errors.New("some err"), + err: errors.New("some ae"), expected: counter{total: 10, failed: 1, pending: 9}, }, { diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go index fb136cb0a6b..2f7bbed87b2 100644 --- a/pkg/skaffold/event/event.go +++ b/pkg/skaffold/event/event.go @@ -217,9 +217,9 @@ func StatusCheckEventInProgress(s string) { }) } -func ResourceStatusCheckEventCompleted(r string, statusCode proto.StatusCode, err error) { - if err != nil { - resourceStatusCheckEventFailed(r, statusCode, err) +func ResourceStatusCheckEventCompleted(r string, ae *proto.ActionableErr) { + if ae.ErrCode != proto.StatusCode_STATUSCHECK_SUCCESS { + resourceStatusCheckEventFailed(r, ae) return } resourceStatusCheckEventSucceeded(r) @@ -234,24 +234,23 @@ func resourceStatusCheckEventSucceeded(r string) { }) } -func resourceStatusCheckEventFailed(r string, statusCode proto.StatusCode, err error) { +func resourceStatusCheckEventFailed(r string, ae *proto.ActionableErr) { handler.handleResourceStatusCheckEvent(&proto.ResourceStatusCheckEvent{ - Resource: r, - Status: Failed, - Err: err.Error(), - StatusCode: statusCode, - ActionableErr: &proto.ActionableErr{ - ErrCode: statusCode, - Message: err.Error(), - }}) + Resource: r, + Status: Failed, + Err: ae.Message, + StatusCode: ae.ErrCode, + ActionableErr: ae, + }) } -func ResourceStatusCheckEventUpdated(r string, statusCode proto.StatusCode, status string) { +func ResourceStatusCheckEventUpdated(r string, ae *proto.ActionableErr) { handler.handleResourceStatusCheckEvent(&proto.ResourceStatusCheckEvent{ - Resource: r, - Status: InProgress, - Message: status, - StatusCode: statusCode, + Resource: r, + Status: InProgress, + Message: ae.Message, + StatusCode: ae.ErrCode, + ActionableErr: ae, }) } diff --git a/pkg/skaffold/event/event_test.go b/pkg/skaffold/event/event_test.go index 734961ca253..d279c6b1a3e 100644 --- a/pkg/skaffold/event/event_test.go +++ b/pkg/skaffold/event/event_test.go @@ -221,7 +221,10 @@ func TestResourceStatusCheckEventUpdated(t *testing.T) { } wait(t, func() bool { return handler.getState().StatusCheckState.Status == NotStarted }) - ResourceStatusCheckEventUpdated("ns:pod/foo", 509, "img pull error") + ResourceStatusCheckEventUpdated("ns:pod/foo", &proto.ActionableErr{ + ErrCode: 509, + Message: "image pull error", + }) wait(t, func() bool { return handler.getState().StatusCheckState.Resources["ns:pod/foo"] == InProgress }) } @@ -245,7 +248,10 @@ func TestResourceStatusCheckEventFailed(t *testing.T) { } wait(t, func() bool { return handler.getState().StatusCheckState.Status == NotStarted }) - resourceStatusCheckEventFailed("ns:pod/foo", 309, errors.New("one or more deployments failed")) + resourceStatusCheckEventFailed("ns:pod/foo", &proto.ActionableErr{ + ErrCode: 309, + Message: "one or more deployments failed", + }) wait(t, func() bool { return handler.getState().StatusCheckState.Resources["ns:pod/foo"] == Failed }) } diff --git a/proto/skaffold.pb.go b/proto/skaffold.pb.go index 08b37aadd7f..9971281e486 100644 --- a/proto/skaffold.pb.go +++ b/proto/skaffold.pb.go @@ -264,6 +264,10 @@ const ( StatusCode_DEVINIT_REGISTER_DEPLOY_DEPS StatusCode = 703 // Failed to configure watcher for Skaffold configuration file. StatusCode_DEVINIT_REGISTER_CONFIG_DEP StatusCode = 704 + // User cancelled the skaffold dev run + StatusCode_STATUSCHECK_CONTEXT_CANCELLED StatusCode = 800 + // Deadline for status check exceeded + StatusCode_STATUSCHECK_DEADLINE_EXCEEDED StatusCode = 801 ) var StatusCode_name = map[int32]string{ @@ -304,6 +308,8 @@ var StatusCode_name = map[int32]string{ 702: "DEVINIT_REGISTER_TEST_DEPS", 703: "DEVINIT_REGISTER_DEPLOY_DEPS", 704: "DEVINIT_REGISTER_CONFIG_DEP", + 800: "STATUSCHECK_CONTEXT_CANCELLED", + 801: "STATUSCHECK_DEADLINE_EXCEEDED", } var StatusCode_value = map[string]int32{ @@ -344,6 +350,8 @@ var StatusCode_value = map[string]int32{ "DEVINIT_REGISTER_TEST_DEPS": 702, "DEVINIT_REGISTER_DEPLOY_DEPS": 703, "DEVINIT_REGISTER_CONFIG_DEP": 704, + "STATUSCHECK_CONTEXT_CANCELLED": 800, + "STATUSCHECK_DEADLINE_EXCEEDED": 801, } func (x StatusCode) String() string { @@ -2325,170 +2333,172 @@ func init() { func init() { proto.RegisterFile("skaffold.proto", fileDescriptor_4f2d38e344f9dbf5) } var fileDescriptor_4f2d38e344f9dbf5 = []byte{ - // 2600 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x4d, 0x90, 0x1b, 0x47, - 0x15, 0x5e, 0x69, 0xa4, 0x5d, 0xe9, 0xed, 0x8f, 0xc7, 0x6d, 0xaf, 0xad, 0xc8, 0x8e, 0xbd, 0x19, - 0xec, 0x8d, 0xb3, 0x09, 0xbb, 0x71, 0x4c, 0x51, 0xc1, 0x24, 0x50, 0xda, 0xd1, 0x78, 0x35, 0x5e, - 0xed, 0x68, 0xab, 0x35, 0x4a, 0x70, 0xaa, 0x28, 0xd5, 0x58, 0xea, 0x55, 0x54, 0xd6, 0x6a, 0xc4, - 0xcc, 0xc8, 0x61, 0x2f, 0x1c, 0xb8, 0x72, 0x01, 0x42, 0xf8, 0x2b, 0x0e, 0x5c, 0xb8, 0x85, 0xc0, - 0x95, 0xa2, 0x20, 0xdc, 0x80, 0x33, 0x55, 0x54, 0x71, 0xa4, 0x2a, 0x1c, 0xb8, 0x27, 0xfc, 0x53, - 0x45, 0xf5, 0xdf, 0x4c, 0x8f, 0x7e, 0xbc, 0xd9, 0xca, 0x81, 0xd3, 0xaa, 0x5f, 0x7f, 0xef, 0xb7, - 0x5f, 0xbf, 0xf7, 0xa6, 0x17, 0xd6, 0xc2, 0x47, 0xde, 0xd1, 0x91, 0x3f, 0xe8, 0x6e, 0x8f, 0x02, - 0x3f, 0xf2, 0x51, 0x9e, 0xfd, 0x29, 0x5f, 0xed, 0xf9, 0x7e, 0x6f, 0x40, 0x76, 0xbc, 0x51, 0x7f, - 0xc7, 0x1b, 0x0e, 0xfd, 0xc8, 0x8b, 0xfa, 0xfe, 0x30, 0xe4, 0xa0, 0xf2, 0x75, 0xb1, 0xcb, 0x56, - 0x0f, 0xc7, 0x47, 0x3b, 0x51, 0xff, 0x98, 0x84, 0x91, 0x77, 0x3c, 0x12, 0x80, 0x2b, 0x93, 0x00, - 0x72, 0x3c, 0x8a, 0x4e, 0xf8, 0xa6, 0x71, 0x07, 0x56, 0x9b, 0x91, 0x17, 0x11, 0x4c, 0xc2, 0x91, - 0x3f, 0x0c, 0x09, 0x32, 0x20, 0x1f, 0x52, 0x42, 0x29, 0xb3, 0x91, 0xb9, 0xb5, 0xfc, 0xd2, 0x0a, - 0xc7, 0x6d, 0x73, 0x10, 0xdf, 0x32, 0xae, 0x42, 0x21, 0xc6, 0xeb, 0xa0, 0x1d, 0x87, 0x3d, 0x86, - 0x2e, 0x62, 0xfa, 0xd3, 0x78, 0x1a, 0x96, 0x30, 0xf9, 0xca, 0x98, 0x84, 0x11, 0x42, 0x90, 0x1b, - 0x7a, 0xc7, 0x44, 0xec, 0xb2, 0xdf, 0xc6, 0x3b, 0x39, 0xc8, 0x33, 0x69, 0xe8, 0x36, 0xc0, 0xc3, - 0x71, 0x7f, 0xd0, 0x6d, 0x2a, 0xfa, 0xce, 0x0b, 0x7d, 0xbb, 0xf1, 0x06, 0x56, 0x40, 0xe8, 0x33, - 0xb0, 0xdc, 0x25, 0xa3, 0x81, 0x7f, 0xc2, 0x79, 0xb2, 0x8c, 0x07, 0x09, 0x9e, 0x6a, 0xb2, 0x83, - 0x55, 0x18, 0xaa, 0xc1, 0xda, 0x91, 0x1f, 0xbc, 0xe5, 0x05, 0x5d, 0xd2, 0x3d, 0xf4, 0x83, 0x28, - 0x2c, 0xe5, 0x36, 0xb4, 0x5b, 0xcb, 0x2f, 0x6d, 0xa8, 0xce, 0x6d, 0xdf, 0x4b, 0x41, 0xac, 0x61, - 0x14, 0x9c, 0xe0, 0x09, 0x3e, 0x64, 0x82, 0x4e, 0x43, 0x30, 0x0e, 0xcd, 0x37, 0x49, 0xe7, 0x11, - 0x37, 0x22, 0xcf, 0x8c, 0xb8, 0xac, 0xc8, 0x52, 0xb7, 0xf1, 0x14, 0x03, 0xba, 0x0b, 0xab, 0x47, - 0xfd, 0x01, 0x69, 0x9e, 0x0c, 0x3b, 0x5c, 0xc2, 0x22, 0x93, 0x70, 0x51, 0x48, 0xb8, 0xa7, 0xee, - 0xe1, 0x34, 0x14, 0x1d, 0xc2, 0x85, 0x2e, 0x79, 0x38, 0xee, 0xf5, 0xfa, 0xc3, 0x9e, 0xe9, 0x0f, - 0x23, 0xaf, 0x3f, 0x24, 0x41, 0x58, 0x5a, 0x62, 0xfe, 0x5c, 0x8b, 0x03, 0x31, 0x89, 0xb0, 0x1e, - 0x93, 0x61, 0x84, 0x67, 0xb1, 0xa2, 0xe7, 0xa1, 0x70, 0x4c, 0x22, 0xaf, 0xeb, 0x45, 0x5e, 0xa9, - 0xc0, 0x0c, 0x39, 0x27, 0xc4, 0x1c, 0x08, 0x32, 0x8e, 0x01, 0xe5, 0x26, 0x5c, 0x98, 0x11, 0x26, - 0x9a, 0x04, 0x8f, 0xc8, 0x09, 0x3b, 0xc2, 0x3c, 0xa6, 0x3f, 0xd1, 0x26, 0xe4, 0x1f, 0x7b, 0x83, - 0xb1, 0x3c, 0x22, 0x5d, 0x88, 0xa4, 0x3c, 0xdc, 0x16, 0xbe, 0x7d, 0x37, 0xfb, 0x72, 0xe6, 0x7e, - 0xae, 0xa0, 0xe9, 0x39, 0xe3, 0x2f, 0x19, 0x28, 0x48, 0x8d, 0x68, 0x0b, 0xf2, 0xec, 0xd4, 0x45, - 0x56, 0x5c, 0x54, 0xb3, 0x22, 0x36, 0x8b, 0x43, 0xd0, 0xa7, 0x61, 0x91, 0x1f, 0xb6, 0xd0, 0xb5, - 0x9e, 0x4a, 0x87, 0x18, 0x2d, 0x40, 0xe8, 0x8b, 0x00, 0x5e, 0xb7, 0xdb, 0xa7, 0x57, 0xc8, 0x1b, - 0x94, 0x3a, 0x2c, 0x70, 0xd7, 0x27, 0x3c, 0xde, 0xae, 0xc4, 0x08, 0x9e, 0x07, 0x0a, 0x4b, 0xf9, - 0x55, 0x38, 0x37, 0xb1, 0xad, 0xfa, 0x5f, 0xe4, 0xfe, 0x5f, 0x54, 0xfd, 0x2f, 0x2a, 0xde, 0x1a, - 0x1f, 0x65, 0x61, 0x35, 0xe5, 0x07, 0x7a, 0x01, 0xce, 0x0f, 0xc7, 0xc7, 0x0f, 0x49, 0xd0, 0x38, - 0xaa, 0x04, 0x51, 0xff, 0xc8, 0xeb, 0x44, 0xa1, 0x88, 0xe5, 0xf4, 0x06, 0x7a, 0x15, 0x0a, 0xcc, - 0x6f, 0x7a, 0xec, 0x59, 0x66, 0xfd, 0x33, 0xb3, 0xa2, 0xb3, 0x6d, 0x1f, 0x7b, 0x3d, 0xb2, 0xcb, - 0x91, 0x38, 0x66, 0x41, 0x37, 0x20, 0x17, 0x9d, 0x8c, 0x48, 0x49, 0xdb, 0xc8, 0xdc, 0x5a, 0x8b, - 0xcf, 0x85, 0xe1, 0xdc, 0x93, 0x11, 0xc1, 0x6c, 0x17, 0x55, 0x67, 0x04, 0xe9, 0xc6, 0x4c, 0x35, - 0x4f, 0x8a, 0x54, 0x1d, 0x56, 0x54, 0x2b, 0xd0, 0xa6, 0xd0, 0x9d, 0x61, 0xba, 0x91, 0x2a, 0x8f, - 0x04, 0x8a, 0xf6, 0x8b, 0x90, 0xef, 0xf8, 0xe3, 0x61, 0xc4, 0x82, 0x97, 0xc7, 0x7c, 0xf1, 0x49, - 0xe3, 0xfe, 0xdb, 0x0c, 0xac, 0xa5, 0x53, 0x02, 0xbd, 0x02, 0x45, 0x9e, 0x14, 0x34, 0x96, 0x99, - 0x89, 0x2b, 0xa4, 0x22, 0xc5, 0x92, 0x04, 0x38, 0x61, 0x40, 0x2f, 0xc0, 0x52, 0x67, 0x30, 0x0e, - 0x23, 0x12, 0x30, 0x65, 0x89, 0x43, 0x26, 0xa7, 0x32, 0x87, 0x24, 0xa4, 0x6c, 0x43, 0x41, 0x0a, - 0x41, 0xcf, 0xa6, 0xe2, 0x70, 0x21, 0xa5, 0xf2, 0xf4, 0x40, 0x18, 0xef, 0x66, 0x00, 0x92, 0xfa, - 0x88, 0xbe, 0x00, 0x45, 0x4f, 0x49, 0x1b, 0xb5, 0xb0, 0x25, 0xa8, 0xed, 0x38, 0x81, 0xf8, 0x31, - 0x25, 0x2c, 0x68, 0x03, 0x96, 0xbd, 0x71, 0xe4, 0xbb, 0x41, 0xbf, 0xd7, 0x13, 0xbe, 0x14, 0xb0, - 0x4a, 0x2a, 0xbf, 0x02, 0x6b, 0x69, 0xf6, 0x33, 0x05, 0x7e, 0x0f, 0x96, 0x95, 0xca, 0x8c, 0x2e, - 0xc1, 0x22, 0xaf, 0x88, 0x82, 0x5b, 0xac, 0x4e, 0x37, 0xc3, 0x78, 0x2f, 0x03, 0xfa, 0x64, 0x79, - 0x9d, 0x2b, 0xae, 0x0a, 0xc5, 0x80, 0x84, 0xfe, 0x38, 0xe8, 0x10, 0x79, 0x4f, 0x36, 0xe7, 0x94, - 0xe8, 0x6d, 0x2c, 0x81, 0x22, 0x36, 0x31, 0x23, 0xf5, 0x3c, 0xbd, 0x79, 0x26, 0xcf, 0x6d, 0x58, - 0x4d, 0x15, 0xf3, 0x4f, 0xe0, 0xfb, 0x9f, 0x73, 0x90, 0x67, 0x85, 0x13, 0xbd, 0x08, 0x45, 0x5a, - 0x8e, 0xd9, 0x42, 0x94, 0x47, 0x5d, 0x29, 0x5f, 0x8c, 0x5e, 0x5b, 0xc0, 0x09, 0x08, 0xdd, 0x11, - 0x7d, 0x96, 0xb3, 0x64, 0xa7, 0xfb, 0xac, 0xe4, 0x51, 0x60, 0xe8, 0xb3, 0xb2, 0xd3, 0x72, 0x2e, - 0x6d, 0x46, 0xa7, 0x95, 0x6c, 0x2a, 0x90, 0x9a, 0x37, 0x92, 0x45, 0xbe, 0x94, 0x9b, 0x5d, 0xfc, - 0xa9, 0x79, 0x31, 0x08, 0x59, 0xa9, 0x9e, 0xca, 0x19, 0xe7, 0xf6, 0x54, 0xc9, 0x3f, 0xc5, 0x82, - 0xbe, 0x0c, 0x25, 0x79, 0x6e, 0x93, 0x78, 0xd1, 0x60, 0x65, 0x95, 0xc7, 0x73, 0x60, 0xb5, 0x05, - 0x3c, 0x57, 0x04, 0x7a, 0x25, 0x69, 0xda, 0x5c, 0xe6, 0xd2, 0xcc, 0xa6, 0x2d, 0x05, 0xa5, 0xc1, - 0xe8, 0x0d, 0xb8, 0xdc, 0x9d, 0xdd, 0x94, 0x45, 0xcf, 0x3d, 0xa5, 0x75, 0xd7, 0x16, 0xf0, 0x3c, - 0x01, 0xe8, 0x73, 0xb0, 0xd2, 0x25, 0x8f, 0xeb, 0xbe, 0x3f, 0xe2, 0x02, 0x8b, 0x4c, 0x60, 0x52, - 0x55, 0x92, 0xad, 0xda, 0x02, 0x4e, 0x41, 0x77, 0x57, 0x00, 0x08, 0xfd, 0xd1, 0xa6, 0xd5, 0xc6, - 0x18, 0xc0, 0x8a, 0x8a, 0x46, 0x57, 0xa1, 0xd8, 0x8f, 0x48, 0xc0, 0xa6, 0x4d, 0xd1, 0x8f, 0x12, - 0x82, 0x92, 0xcb, 0xd9, 0x54, 0x2e, 0x6f, 0x82, 0x46, 0x82, 0x40, 0x24, 0x8c, 0x0c, 0x4f, 0xa5, - 0xc3, 0xca, 0xf6, 0xc3, 0x01, 0xb1, 0x82, 0x00, 0x53, 0x80, 0xf1, 0x8d, 0x0c, 0xac, 0xa6, 0xc8, - 0xe8, 0x79, 0x58, 0x22, 0x41, 0x60, 0xfa, 0x5d, 0x59, 0x19, 0xcf, 0xa7, 0xcf, 0xdf, 0xef, 0x12, - 0x2c, 0x11, 0xa8, 0x04, 0x4b, 0xc7, 0x24, 0x0c, 0xbd, 0x9e, 0xbc, 0x77, 0x72, 0x89, 0xee, 0xc0, - 0x72, 0x38, 0xee, 0xf5, 0x48, 0xc8, 0xa6, 0xe4, 0x92, 0xc6, 0xee, 0x7e, 0x2c, 0x2a, 0xde, 0xc1, - 0x2a, 0xca, 0x70, 0xa0, 0x18, 0xdf, 0x1e, 0x7a, 0xa3, 0x09, 0xbd, 0xec, 0xe2, 0x96, 0xf2, 0x45, - 0x6a, 0x50, 0xca, 0x9e, 0x32, 0x28, 0x19, 0xbf, 0x94, 0x35, 0x9a, 0x4b, 0x2c, 0x43, 0x41, 0x16, - 0x5c, 0x21, 0x34, 0x5e, 0xcf, 0x0d, 0xa4, 0x9e, 0x04, 0xb2, 0xc8, 0x42, 0xa6, 0x06, 0x28, 0x77, - 0x6a, 0x80, 0xee, 0xc2, 0xaa, 0xa7, 0x86, 0x57, 0xdc, 0xa9, 0xd9, 0x27, 0x92, 0x86, 0x1a, 0x3f, - 0xce, 0xc8, 0x9a, 0xcd, 0xcd, 0x9f, 0x57, 0xb7, 0x84, 0x89, 0xd9, 0x99, 0x26, 0x6a, 0x67, 0x37, - 0x31, 0xf7, 0xf1, 0x4d, 0x7c, 0x3f, 0xdd, 0x0c, 0x9e, 0x6c, 0xe7, 0xfc, 0x64, 0xf9, 0x3f, 0x06, - 0xf9, 0xaf, 0x19, 0x28, 0xcd, 0x2b, 0x45, 0x34, 0x61, 0x64, 0x29, 0x92, 0x09, 0x23, 0xd7, 0x73, - 0x13, 0x46, 0xf1, 0x52, 0x9b, 0xe9, 0x65, 0x2e, 0xf1, 0xf2, 0x36, 0x40, 0x18, 0xfb, 0xc3, 0xac, - 0x9e, 0xe9, 0xa8, 0x02, 0x9a, 0xf6, 0x75, 0xf1, 0xe3, 0xfb, 0xfa, 0x93, 0x2c, 0x14, 0xe3, 0xf2, - 0x4f, 0x0b, 0xcb, 0xc0, 0xef, 0x78, 0x03, 0x4a, 0x91, 0x85, 0x25, 0x26, 0xa0, 0x6b, 0x00, 0x01, - 0x39, 0xf6, 0x23, 0xc2, 0xb6, 0xf9, 0xe4, 0xa3, 0x50, 0xa8, 0x9b, 0x23, 0xbf, 0xeb, 0xd0, 0xef, - 0x4a, 0xe1, 0xa6, 0x58, 0xa2, 0x1b, 0xb0, 0xda, 0x91, 0xb5, 0x91, 0xed, 0x73, 0x87, 0xd3, 0x44, - 0xaa, 0x9d, 0x7e, 0x88, 0x86, 0x23, 0xaf, 0xc3, 0x3d, 0x2f, 0xe2, 0x84, 0x40, 0x03, 0x4f, 0x5b, - 0x13, 0x63, 0x5f, 0xe4, 0x81, 0x97, 0x6b, 0x64, 0xc0, 0x8a, 0x3c, 0x04, 0x3a, 0xa4, 0xb1, 0x16, - 0x50, 0xc4, 0x29, 0x9a, 0x8a, 0x61, 0x32, 0x0a, 0x69, 0x0c, 0x93, 0x53, 0x82, 0x25, 0xaf, 0xdb, - 0x0d, 0x48, 0x18, 0xb2, 0x62, 0x5d, 0xc4, 0x72, 0x69, 0xfc, 0x31, 0x93, 0x8c, 0x0c, 0x71, 0xac, - 0x68, 0x2b, 0x31, 0xd9, 0x18, 0x28, 0x62, 0x15, 0x13, 0x68, 0xa5, 0xea, 0x1f, 0x27, 0x69, 0xcd, - 0x17, 0x4a, 0x82, 0x68, 0xb3, 0xae, 0x6b, 0x6e, 0x66, 0xb2, 0xe7, 0xcf, 0x9e, 0xec, 0x67, 0x48, - 0x80, 0x0f, 0xb3, 0x70, 0x79, 0x4e, 0x6f, 0x7b, 0xd2, 0xad, 0x95, 0x07, 0x9d, 0x3d, 0xe5, 0xa0, - 0xb5, 0x53, 0x0f, 0x3a, 0x37, 0xe3, 0xa0, 0xe3, 0x92, 0x9c, 0x9f, 0x28, 0xc9, 0x25, 0x58, 0x0a, - 0xc6, 0xc3, 0xa8, 0x1f, 0xe7, 0x80, 0x5c, 0xd2, 0xe4, 0x7c, 0xcb, 0x0f, 0x1e, 0xf5, 0x87, 0xbd, - 0x6a, 0x3f, 0x10, 0x09, 0xa0, 0x50, 0x90, 0x03, 0xc0, 0xfa, 0x34, 0x7f, 0x66, 0x28, 0xb0, 0xde, - 0xb3, 0xfd, 0xe4, 0xde, 0xce, 0xe9, 0xca, 0xa3, 0x83, 0x22, 0x81, 0x7e, 0xf4, 0x4c, 0x6c, 0x9f, - 0x36, 0x81, 0xae, 0xaa, 0x13, 0xe8, 0xd7, 0xa0, 0x50, 0xf7, 0x7b, 0x9c, 0xef, 0x65, 0x28, 0xc6, - 0x4f, 0x43, 0x62, 0x70, 0x2c, 0x6f, 0xf3, 0xb7, 0xa1, 0x6d, 0xf9, 0x36, 0xb4, 0xed, 0x4a, 0x04, - 0x4e, 0xc0, 0xc8, 0x80, 0x3c, 0x51, 0x66, 0x47, 0xf9, 0x26, 0x24, 0x3e, 0xe4, 0x49, 0xba, 0x67, - 0x6a, 0x4a, 0xcf, 0x34, 0xee, 0xc2, 0xf9, 0x56, 0x48, 0x02, 0x7b, 0x18, 0x51, 0xa8, 0x78, 0x15, - 0xba, 0x09, 0x8b, 0x7d, 0x46, 0x10, 0x56, 0xac, 0x0a, 0x79, 0x02, 0x25, 0x36, 0x8d, 0xcf, 0xc3, - 0x9a, 0x98, 0x7e, 0x25, 0xe3, 0x73, 0xe9, 0xb7, 0x29, 0x39, 0xe2, 0x08, 0x54, 0xea, 0x89, 0xea, - 0x36, 0xac, 0xa8, 0x64, 0x54, 0x86, 0x25, 0xc2, 0x92, 0x91, 0x3f, 0x29, 0x14, 0x6a, 0x0b, 0x58, - 0x12, 0x76, 0xf3, 0xa0, 0x3d, 0xf6, 0x06, 0xc6, 0x7d, 0x58, 0xe4, 0x16, 0x50, 0x5f, 0x92, 0xd7, - 0x87, 0x82, 0x7c, 0x67, 0x40, 0x90, 0x0b, 0x4f, 0x86, 0x1d, 0x31, 0x9d, 0xb3, 0xdf, 0x34, 0x75, - 0xc5, 0xdb, 0x83, 0xc6, 0xa8, 0x62, 0x65, 0x74, 0x00, 0x92, 0x49, 0x03, 0xbd, 0x0a, 0x6b, 0xc9, - 0xac, 0xa1, 0xcc, 0x37, 0xeb, 0x53, 0x43, 0x09, 0xbb, 0x70, 0x13, 0x60, 0xaa, 0x84, 0x5f, 0x26, - 0x59, 0xef, 0xf9, 0x6a, 0xcb, 0x87, 0x65, 0xe5, 0xdb, 0x19, 0x95, 0xe0, 0x62, 0xcb, 0xd9, 0x77, - 0x1a, 0xaf, 0x3b, 0xed, 0xdd, 0x96, 0x5d, 0xaf, 0x5a, 0xb8, 0xed, 0x3e, 0x38, 0xb4, 0xf4, 0x05, - 0xb4, 0x04, 0xda, 0x7d, 0x7b, 0x57, 0xcf, 0xa0, 0x22, 0xe4, 0x77, 0x2b, 0x6f, 0x58, 0x75, 0x3d, - 0x8b, 0xd6, 0x00, 0x18, 0xea, 0xb0, 0x62, 0xee, 0x37, 0x75, 0x0d, 0x01, 0x2c, 0x9a, 0xad, 0xa6, - 0xdb, 0x38, 0xd0, 0x73, 0xf4, 0xf7, 0x7e, 0xc5, 0xb1, 0xf7, 0x1b, 0x7a, 0x9e, 0xfe, 0xae, 0x36, - 0xcc, 0x7d, 0x0b, 0xeb, 0x8b, 0x5b, 0x55, 0x28, 0xc6, 0x0f, 0x05, 0xe8, 0x12, 0xa0, 0x94, 0x3a, - 0xa9, 0x6c, 0x19, 0x96, 0xcc, 0x7a, 0xab, 0xe9, 0x5a, 0x58, 0xcf, 0x50, 0xcd, 0x7b, 0xe6, 0xae, - 0x9e, 0xa5, 0x9a, 0xeb, 0x0d, 0xb3, 0x52, 0xd7, 0xb5, 0xad, 0x06, 0x1d, 0x33, 0x93, 0x4f, 0x5d, - 0xf4, 0x14, 0xac, 0x4b, 0x41, 0x55, 0xeb, 0xb0, 0xde, 0x78, 0x90, 0x18, 0x5e, 0x80, 0x5c, 0xcd, - 0xaa, 0x1f, 0xe8, 0x19, 0xb4, 0x0a, 0xc5, 0x7d, 0x66, 0x9e, 0xfd, 0x86, 0xa5, 0x67, 0xa9, 0x92, - 0xfd, 0xd6, 0xae, 0x65, 0xba, 0x54, 0xa0, 0x0d, 0xcb, 0xca, 0x27, 0xb7, 0x1a, 0x07, 0x61, 0x88, - 0x14, 0xb7, 0x02, 0x85, 0x03, 0xdb, 0xb1, 0x29, 0xa7, 0xb0, 0x6d, 0xdf, 0xe2, 0xb6, 0x35, 0xdc, - 0x9a, 0x85, 0x75, 0x6d, 0xeb, 0x47, 0x45, 0x80, 0xa4, 0xf4, 0xa1, 0x45, 0xc8, 0x36, 0xf6, 0xf5, - 0x05, 0x54, 0x82, 0x0b, 0x4d, 0xb7, 0xe2, 0xb6, 0x9a, 0x66, 0xcd, 0x32, 0xf7, 0xdb, 0xcd, 0x96, - 0x69, 0x5a, 0xcd, 0xa6, 0xfe, 0xbb, 0x0c, 0x42, 0xb0, 0xca, 0xbd, 0x97, 0xb4, 0xdf, 0x67, 0xd0, - 0x55, 0x28, 0x71, 0xda, 0x61, 0xab, 0x59, 0x6b, 0x57, 0x18, 0xbd, 0x5d, 0xb5, 0x1c, 0xdb, 0xaa, - 0xea, 0x04, 0x5d, 0x81, 0xcb, 0x62, 0x17, 0x37, 0xee, 0x5b, 0xa6, 0xdb, 0x76, 0x1a, 0x6e, 0xfb, - 0x5e, 0xa3, 0xe5, 0x54, 0xf5, 0x23, 0x74, 0x1d, 0xca, 0xaa, 0x22, 0xfb, 0xa0, 0xb2, 0x67, 0xb5, - 0x0f, 0x5b, 0xf5, 0x7a, 0xdb, 0xc2, 0x58, 0x7f, 0x37, 0x8b, 0x3e, 0x05, 0xd7, 0x54, 0x80, 0xd9, - 0x70, 0xdc, 0x8a, 0xed, 0x58, 0xb8, 0x6d, 0x62, 0xab, 0xe2, 0xda, 0xce, 0x9e, 0xfe, 0xd3, 0x2c, - 0x32, 0xe0, 0x69, 0x15, 0x84, 0x5b, 0x8e, 0x02, 0xa4, 0x82, 0xde, 0xcb, 0xa2, 0x9b, 0xb0, 0x31, - 0x5b, 0x90, 0x6b, 0xe1, 0x03, 0xdb, 0xa9, 0xb8, 0x56, 0x55, 0xff, 0x59, 0x16, 0x3d, 0x0f, 0x9b, - 0x2a, 0x8c, 0x1f, 0xd0, 0x81, 0xe5, 0xb8, 0x6d, 0xdc, 0xa8, 0xd7, 0x1b, 0x2d, 0xb7, 0x7d, 0x68, - 0x39, 0x55, 0xaa, 0xf7, 0xe7, 0x4f, 0x90, 0x89, 0xad, 0xa6, 0x5b, 0xc1, 0xcc, 0xbc, 0x0f, 0xa6, - 0x60, 0x4e, 0xa3, 0x6a, 0xb5, 0x0f, 0xac, 0x83, 0x06, 0x7e, 0xd0, 0x3e, 0xc4, 0x56, 0xb3, 0xd9, - 0xc2, 0x96, 0xfe, 0x4d, 0x6d, 0xd2, 0x55, 0x06, 0xab, 0xda, 0xcd, 0xfd, 0x04, 0xf4, 0x2d, 0x0d, - 0x3d, 0x07, 0x37, 0xa6, 0x40, 0x8e, 0xe5, 0xbe, 0xde, 0xc0, 0xfb, 0xed, 0x96, 0x53, 0x79, 0xad, - 0x62, 0xd7, 0x2b, 0xbb, 0x75, 0x4b, 0xff, 0xb6, 0x36, 0x19, 0x15, 0x06, 0x3d, 0xb4, 0xab, 0x89, - 0xb8, 0xb7, 0x67, 0xeb, 0x6c, 0x39, 0x74, 0x55, 0x6d, 0x71, 0x41, 0xdf, 0xd1, 0xd0, 0x33, 0x70, - 0x75, 0x06, 0x08, 0x5b, 0x15, 0xb3, 0xc6, 0x20, 0xef, 0x68, 0x93, 0xe7, 0xc8, 0xcd, 0x6a, 0xb8, - 0x6d, 0x6c, 0x55, 0xaa, 0x0f, 0xf4, 0xef, 0x4e, 0x19, 0x73, 0xaf, 0x62, 0xd7, 0xad, 0x6a, 0x5b, - 0x28, 0xa2, 0x71, 0xfa, 0x9e, 0x86, 0xca, 0xb0, 0xae, 0x62, 0x5a, 0x4e, 0xcd, 0xaa, 0xd4, 0xdd, - 0xda, 0x03, 0xfd, 0xfb, 0x1a, 0x7a, 0x16, 0x0c, 0x75, 0x4f, 0x5c, 0x06, 0x1a, 0x72, 0xc7, 0x32, - 0x5d, 0xbb, 0xe1, 0xb0, 0x73, 0xfe, 0xc1, 0x94, 0x47, 0x12, 0x48, 0x1d, 0xdf, 0xb7, 0xeb, 0x75, - 0xab, 0xaa, 0xff, 0x50, 0xa3, 0x59, 0x2c, 0xaf, 0x8c, 0x85, 0x71, 0x03, 0xeb, 0x1f, 0x6a, 0x93, - 0x39, 0x2f, 0xf6, 0xf5, 0x8f, 0x34, 0xb4, 0x09, 0xcf, 0xcc, 0xd8, 0x99, 0x88, 0xd3, 0xdf, 0x34, - 0xb4, 0x05, 0x37, 0x67, 0xa7, 0xc3, 0xeb, 0x15, 0x9b, 0xe6, 0x42, 0x2c, 0xf3, 0xef, 0x1a, 0xba, - 0x06, 0x4f, 0xcd, 0x92, 0x69, 0xbd, 0x66, 0x39, 0xae, 0xfe, 0x5f, 0x0d, 0x5d, 0x80, 0x35, 0x9e, - 0x7b, 0x31, 0xd3, 0x3f, 0x34, 0x74, 0x1e, 0x56, 0x9a, 0x0f, 0x1c, 0x33, 0x26, 0xfd, 0x53, 0x4b, - 0xee, 0xa3, 0xa4, 0xfd, 0x4b, 0x43, 0x17, 0xe1, 0x5c, 0xd5, 0x7a, 0xcd, 0x76, 0x6c, 0x37, 0xa6, - 0xfe, 0x9b, 0x51, 0xcd, 0xba, 0x55, 0x71, 0x5a, 0x87, 0x31, 0xf5, 0x3f, 0x8c, 0xca, 0x44, 0x32, - 0x34, 0x8f, 0xc5, 0x9f, 0x72, 0x68, 0x03, 0xae, 0x48, 0x09, 0xd8, 0xda, 0xb3, 0x59, 0x4d, 0xe1, - 0x6a, 0xaa, 0xd6, 0x61, 0x53, 0xff, 0x55, 0x9e, 0x1e, 0xf8, 0x14, 0xc2, 0xb5, 0x9a, 0x2e, 0x07, - 0xfc, 0x3a, 0x4f, 0x93, 0x66, 0x0a, 0x20, 0x3c, 0x62, 0x90, 0xf7, 0xf3, 0x33, 0xb5, 0x98, 0x0d, - 0xe7, 0x9e, 0xbd, 0x47, 0x21, 0xfa, 0x6f, 0xf2, 0x5b, 0x4f, 0xc1, 0x5a, 0xba, 0x57, 0xd0, 0x22, - 0xe6, 0xd8, 0x75, 0x7d, 0xe1, 0xa5, 0x5f, 0xe4, 0xe1, 0x5c, 0x53, 0xfc, 0xfb, 0xa8, 0x49, 0x82, - 0xc7, 0xfd, 0x0e, 0x41, 0x26, 0x14, 0xf6, 0x48, 0x24, 0x9e, 0x9e, 0xa6, 0x5a, 0xbd, 0x75, 0x3c, - 0x8a, 0x4e, 0xca, 0xa9, 0x7f, 0xf0, 0x18, 0xe7, 0xbf, 0xfe, 0x87, 0x0f, 0xde, 0xce, 0x2e, 0xa3, - 0xe2, 0xce, 0xe3, 0xdb, 0x3b, 0xac, 0x93, 0xa2, 0x3d, 0x28, 0xb0, 0x46, 0x5f, 0xf7, 0x7b, 0x48, - 0x7e, 0xf0, 0xca, 0x99, 0xa2, 0x3c, 0x49, 0x30, 0xd6, 0x99, 0x80, 0x73, 0x68, 0x95, 0x0a, 0xe0, - 0x6f, 0x0b, 0x03, 0xbf, 0x77, 0x2b, 0xf3, 0x62, 0x06, 0xed, 0xc1, 0x22, 0x13, 0x14, 0xce, 0xb5, - 0x65, 0x4a, 0x1a, 0x62, 0xd2, 0x56, 0x10, 0xc4, 0xd2, 0xc2, 0x17, 0x33, 0xe8, 0x4b, 0xb0, 0x64, - 0x7d, 0x95, 0x74, 0xc6, 0x11, 0x41, 0x25, 0xc1, 0x31, 0x35, 0x64, 0x94, 0xe7, 0xe8, 0x30, 0xae, - 0x30, 0x91, 0xeb, 0xc6, 0x32, 0x13, 0xc9, 0xc5, 0xdc, 0x15, 0x23, 0x07, 0xf2, 0xa0, 0x58, 0x19, - 0x47, 0x3e, 0x6b, 0x72, 0x68, 0x3d, 0x3d, 0x5e, 0x9c, 0x26, 0xf8, 0x26, 0x13, 0x7c, 0xbd, 0x7c, - 0x89, 0x0a, 0x66, 0x13, 0xc3, 0x8e, 0x37, 0x8e, 0xfc, 0xb6, 0xd4, 0xc1, 0x07, 0x13, 0xd4, 0x86, - 0x02, 0x55, 0x41, 0x07, 0xfc, 0xb3, 0x6a, 0xb8, 0xc1, 0x34, 0x5c, 0x2b, 0xaf, 0xb3, 0xc3, 0x39, - 0x19, 0x76, 0x66, 0x2a, 0xe8, 0x00, 0x50, 0x05, 0xbc, 0xc5, 0x9e, 0x55, 0xc5, 0x26, 0x53, 0xb1, - 0x51, 0xbe, 0x4c, 0x55, 0xf0, 0x59, 0x66, 0xa6, 0x92, 0x3a, 0x2c, 0xd6, 0xbc, 0x61, 0x77, 0x40, - 0x50, 0x6a, 0x18, 0x9c, 0x2b, 0xf7, 0x2a, 0x93, 0x7b, 0xc9, 0x38, 0x9f, 0x1c, 0xe4, 0xce, 0x9b, - 0x4c, 0xc0, 0xdd, 0xcc, 0xd6, 0xc3, 0x45, 0x86, 0xbe, 0xf3, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xf7, 0xa1, 0x48, 0x69, 0x00, 0x1d, 0x00, 0x00, + // 2635 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x59, 0x4d, 0x6c, 0x1b, 0xc7, + 0x15, 0x16, 0xb9, 0x24, 0x45, 0x3e, 0xfd, 0x78, 0x35, 0xb6, 0x6c, 0x86, 0x76, 0x6c, 0x65, 0x6b, + 0x2b, 0x8e, 0x92, 0x4a, 0x71, 0x5c, 0x14, 0xa9, 0x9b, 0xb4, 0xa0, 0x76, 0xc7, 0xe2, 0x5a, 0xd4, + 0x52, 0x18, 0x2e, 0x93, 0x38, 0x40, 0x41, 0xac, 0xc9, 0x15, 0x43, 0x98, 0xe2, 0xb2, 0xbb, 0x4b, + 0xa7, 0xba, 0xf4, 0xd0, 0x6b, 0x2f, 0x6d, 0xd3, 0xf4, 0xef, 0x94, 0x1e, 0x7a, 0x4b, 0xd3, 0x5e, + 0x8b, 0xa2, 0x4d, 0x6f, 0x6d, 0xcf, 0x05, 0x0a, 0xf4, 0x58, 0xc0, 0x3d, 0xf4, 0x9e, 0xf4, 0xbf, + 0x40, 0x31, 0x3f, 0xbb, 0x3b, 0xcb, 0x1f, 0x2b, 0x42, 0x0e, 0x3d, 0x89, 0xf3, 0xe6, 0x7b, 0xbf, + 0xf3, 0xe6, 0xbd, 0xb7, 0x23, 0x58, 0x0d, 0x1e, 0x3a, 0x47, 0x47, 0xde, 0xa0, 0xbb, 0x3d, 0xf2, + 0xbd, 0xd0, 0x43, 0x79, 0xf6, 0xa7, 0x72, 0xa5, 0xe7, 0x79, 0xbd, 0x81, 0xbb, 0xe3, 0x8c, 0xfa, + 0x3b, 0xce, 0x70, 0xe8, 0x85, 0x4e, 0xd8, 0xf7, 0x86, 0x01, 0x07, 0x55, 0xae, 0x89, 0x5d, 0xb6, + 0x7a, 0x30, 0x3e, 0xda, 0x09, 0xfb, 0xc7, 0x6e, 0x10, 0x3a, 0xc7, 0x23, 0x01, 0xb8, 0x3c, 0x09, + 0x70, 0x8f, 0x47, 0xe1, 0x09, 0xdf, 0xd4, 0x6e, 0xc3, 0x4a, 0x33, 0x74, 0x42, 0x97, 0xb8, 0xc1, + 0xc8, 0x1b, 0x06, 0x2e, 0xd2, 0x20, 0x1f, 0x50, 0x42, 0x39, 0xb3, 0x91, 0xb9, 0xb9, 0xf4, 0xd2, + 0x32, 0xc7, 0x6d, 0x73, 0x10, 0xdf, 0xd2, 0xae, 0x40, 0x31, 0xc6, 0xab, 0xa0, 0x1c, 0x07, 0x3d, + 0x86, 0x2e, 0x11, 0xfa, 0x53, 0x7b, 0x1a, 0x16, 0x89, 0xfb, 0xd5, 0xb1, 0x1b, 0x84, 0x08, 0x41, + 0x6e, 0xe8, 0x1c, 0xbb, 0x62, 0x97, 0xfd, 0xd6, 0xde, 0xcd, 0x41, 0x9e, 0x49, 0x43, 0xb7, 0x00, + 0x1e, 0x8c, 0xfb, 0x83, 0x6e, 0x53, 0xd2, 0xb7, 0x26, 0xf4, 0xed, 0xc6, 0x1b, 0x44, 0x02, 0xa1, + 0xcf, 0xc1, 0x52, 0xd7, 0x1d, 0x0d, 0xbc, 0x13, 0xce, 0x93, 0x65, 0x3c, 0x48, 0xf0, 0x18, 0xc9, + 0x0e, 0x91, 0x61, 0xa8, 0x06, 0xab, 0x47, 0x9e, 0xff, 0xb6, 0xe3, 0x77, 0xdd, 0xee, 0xa1, 0xe7, + 0x87, 0x41, 0x39, 0xb7, 0xa1, 0xdc, 0x5c, 0x7a, 0x69, 0x43, 0x76, 0x6e, 0xfb, 0x6e, 0x0a, 0x82, + 0x87, 0xa1, 0x7f, 0x42, 0x26, 0xf8, 0x90, 0x0e, 0x2a, 0x0d, 0xc1, 0x38, 0xd0, 0xdf, 0x72, 0x3b, + 0x0f, 0xb9, 0x11, 0x79, 0x66, 0xc4, 0x25, 0x49, 0x96, 0xbc, 0x4d, 0xa6, 0x18, 0xd0, 0x1d, 0x58, + 0x39, 0xea, 0x0f, 0xdc, 0xe6, 0xc9, 0xb0, 0xc3, 0x25, 0x14, 0x98, 0x84, 0x0b, 0x42, 0xc2, 0x5d, + 0x79, 0x8f, 0xa4, 0xa1, 0xe8, 0x10, 0xce, 0x77, 0xdd, 0x07, 0xe3, 0x5e, 0xaf, 0x3f, 0xec, 0xe9, + 0xde, 0x30, 0x74, 0xfa, 0x43, 0xd7, 0x0f, 0xca, 0x8b, 0xcc, 0x9f, 0xab, 0x71, 0x20, 0x26, 0x11, + 0xf8, 0x91, 0x3b, 0x0c, 0xc9, 0x2c, 0x56, 0xf4, 0x3c, 0x14, 0x8f, 0xdd, 0xd0, 0xe9, 0x3a, 0xa1, + 0x53, 0x2e, 0x32, 0x43, 0xce, 0x09, 0x31, 0x07, 0x82, 0x4c, 0x62, 0x40, 0xa5, 0x09, 0xe7, 0x67, + 0x84, 0x89, 0x26, 0xc1, 0x43, 0xf7, 0x84, 0x1d, 0x61, 0x9e, 0xd0, 0x9f, 0x68, 0x13, 0xf2, 0x8f, + 0x9c, 0xc1, 0x38, 0x3a, 0x22, 0x55, 0x88, 0xa4, 0x3c, 0xdc, 0x16, 0xbe, 0x7d, 0x27, 0xfb, 0x72, + 0xe6, 0x5e, 0xae, 0xa8, 0xa8, 0x39, 0xed, 0x2f, 0x19, 0x28, 0x46, 0x1a, 0xd1, 0x16, 0xe4, 0xd9, + 0xa9, 0x8b, 0xac, 0xb8, 0x20, 0x67, 0x45, 0x6c, 0x16, 0x87, 0xa0, 0xcf, 0x42, 0x81, 0x1f, 0xb6, + 0xd0, 0xb5, 0x9e, 0x4a, 0x87, 0x18, 0x2d, 0x40, 0xe8, 0xcb, 0x00, 0x4e, 0xb7, 0xdb, 0xa7, 0x57, + 0xc8, 0x19, 0x94, 0x3b, 0x2c, 0x70, 0xd7, 0x26, 0x3c, 0xde, 0xae, 0xc6, 0x08, 0x9e, 0x07, 0x12, + 0x4b, 0xe5, 0x55, 0x38, 0x37, 0xb1, 0x2d, 0xfb, 0x5f, 0xe2, 0xfe, 0x5f, 0x90, 0xfd, 0x2f, 0x49, + 0xde, 0x6a, 0x1f, 0x67, 0x61, 0x25, 0xe5, 0x07, 0x7a, 0x01, 0xd6, 0x86, 0xe3, 0xe3, 0x07, 0xae, + 0xdf, 0x38, 0xaa, 0xfa, 0x61, 0xff, 0xc8, 0xe9, 0x84, 0x81, 0x88, 0xe5, 0xf4, 0x06, 0x7a, 0x15, + 0x8a, 0xcc, 0x6f, 0x7a, 0xec, 0x59, 0x66, 0xfd, 0x33, 0xb3, 0xa2, 0xb3, 0x6d, 0x1e, 0x3b, 0x3d, + 0x77, 0x97, 0x23, 0x49, 0xcc, 0x82, 0xae, 0x43, 0x2e, 0x3c, 0x19, 0xb9, 0x65, 0x65, 0x23, 0x73, + 0x73, 0x35, 0x3e, 0x17, 0x86, 0xb3, 0x4f, 0x46, 0x2e, 0x61, 0xbb, 0xc8, 0x98, 0x11, 0xa4, 0xeb, + 0x33, 0xd5, 0x3c, 0x29, 0x52, 0x75, 0x58, 0x96, 0xad, 0x40, 0x9b, 0x42, 0x77, 0x86, 0xe9, 0x46, + 0xb2, 0x3c, 0xd7, 0x97, 0xb4, 0x5f, 0x80, 0x7c, 0xc7, 0x1b, 0x0f, 0x43, 0x16, 0xbc, 0x3c, 0xe1, + 0x8b, 0x4f, 0x1b, 0xf7, 0xdf, 0x66, 0x60, 0x35, 0x9d, 0x12, 0xe8, 0x15, 0x28, 0xf1, 0xa4, 0xa0, + 0xb1, 0xcc, 0x4c, 0x5c, 0x21, 0x19, 0x29, 0x96, 0xae, 0x4f, 0x12, 0x06, 0xf4, 0x02, 0x2c, 0x76, + 0x06, 0xe3, 0x20, 0x74, 0x7d, 0xa6, 0x2c, 0x71, 0x48, 0xe7, 0x54, 0xe6, 0x50, 0x04, 0xa9, 0x98, + 0x50, 0x8c, 0x84, 0xa0, 0x67, 0x53, 0x71, 0x38, 0x9f, 0x52, 0x79, 0x7a, 0x20, 0xb4, 0xf7, 0x33, + 0x00, 0x49, 0x7d, 0x44, 0x5f, 0x82, 0x92, 0x23, 0xa5, 0x8d, 0x5c, 0xd8, 0x12, 0xd4, 0x76, 0x9c, + 0x40, 0xfc, 0x98, 0x12, 0x16, 0xb4, 0x01, 0x4b, 0xce, 0x38, 0xf4, 0x6c, 0xbf, 0xdf, 0xeb, 0x09, + 0x5f, 0x8a, 0x44, 0x26, 0x55, 0x5e, 0x81, 0xd5, 0x34, 0xfb, 0x99, 0x02, 0xbf, 0x07, 0x4b, 0x52, + 0x65, 0x46, 0x17, 0xa1, 0xc0, 0x2b, 0xa2, 0xe0, 0x16, 0xab, 0xd3, 0xcd, 0xd0, 0x3e, 0xc8, 0x80, + 0x3a, 0x59, 0x5e, 0xe7, 0x8a, 0x33, 0xa0, 0xe4, 0xbb, 0x81, 0x37, 0xf6, 0x3b, 0x6e, 0x74, 0x4f, + 0x36, 0xe7, 0x94, 0xe8, 0x6d, 0x12, 0x01, 0x45, 0x6c, 0x62, 0x46, 0xea, 0x79, 0x7a, 0xf3, 0x4c, + 0x9e, 0x9b, 0xb0, 0x92, 0x2a, 0xe6, 0x9f, 0xc2, 0xf7, 0x3f, 0xe7, 0x20, 0xcf, 0x0a, 0x27, 0x7a, + 0x11, 0x4a, 0xb4, 0x1c, 0xb3, 0x85, 0x28, 0x8f, 0xaa, 0x54, 0xbe, 0x18, 0xbd, 0xb6, 0x40, 0x12, + 0x10, 0xba, 0x2d, 0xfa, 0x2c, 0x67, 0xc9, 0x4e, 0xf7, 0xd9, 0x88, 0x47, 0x82, 0xa1, 0xcf, 0x47, + 0x9d, 0x96, 0x73, 0x29, 0x33, 0x3a, 0x6d, 0xc4, 0x26, 0x03, 0xa9, 0x79, 0xa3, 0xa8, 0xc8, 0x97, + 0x73, 0xb3, 0x8b, 0x3f, 0x35, 0x2f, 0x06, 0x21, 0x9c, 0xea, 0xa9, 0x9c, 0x71, 0x6e, 0x4f, 0x8d, + 0xf8, 0xa7, 0x58, 0xd0, 0x57, 0xa0, 0x1c, 0x9d, 0xdb, 0x24, 0x5e, 0x34, 0xd8, 0xa8, 0xca, 0x93, + 0x39, 0xb0, 0xda, 0x02, 0x99, 0x2b, 0x02, 0xbd, 0x92, 0x34, 0x6d, 0x2e, 0x73, 0x71, 0x66, 0xd3, + 0x8e, 0x04, 0xa5, 0xc1, 0xe8, 0x4d, 0xb8, 0xd4, 0x9d, 0xdd, 0x94, 0x45, 0xcf, 0x3d, 0xa5, 0x75, + 0xd7, 0x16, 0xc8, 0x3c, 0x01, 0xe8, 0x0b, 0xb0, 0xdc, 0x75, 0x1f, 0xd5, 0x3d, 0x6f, 0xc4, 0x05, + 0x96, 0x98, 0xc0, 0xa4, 0xaa, 0x24, 0x5b, 0xb5, 0x05, 0x92, 0x82, 0xee, 0x2e, 0x03, 0xb8, 0xf4, + 0x47, 0x9b, 0x56, 0x1b, 0x6d, 0x00, 0xcb, 0x32, 0x1a, 0x5d, 0x81, 0x52, 0x3f, 0x74, 0x7d, 0x36, + 0x6d, 0x8a, 0x7e, 0x94, 0x10, 0xa4, 0x5c, 0xce, 0xa6, 0x72, 0x79, 0x13, 0x14, 0xd7, 0xf7, 0x45, + 0xc2, 0x44, 0xe1, 0xa9, 0x76, 0x58, 0xd9, 0x7e, 0x30, 0x70, 0xb1, 0xef, 0x13, 0x0a, 0xd0, 0xbe, + 0x99, 0x81, 0x95, 0x14, 0x19, 0x3d, 0x0f, 0x8b, 0xae, 0xef, 0xeb, 0x5e, 0x37, 0xaa, 0x8c, 0x6b, + 0xe9, 0xf3, 0xf7, 0xba, 0x2e, 0x89, 0x10, 0xa8, 0x0c, 0x8b, 0xc7, 0x6e, 0x10, 0x38, 0xbd, 0xe8, + 0xde, 0x45, 0x4b, 0x74, 0x1b, 0x96, 0x82, 0x71, 0xaf, 0xe7, 0x06, 0x6c, 0x4a, 0x2e, 0x2b, 0xec, + 0xee, 0xc7, 0xa2, 0xe2, 0x1d, 0x22, 0xa3, 0x34, 0x0b, 0x4a, 0xf1, 0xed, 0xa1, 0x37, 0xda, 0xa5, + 0x97, 0x5d, 0xdc, 0x52, 0xbe, 0x48, 0x0d, 0x4a, 0xd9, 0x53, 0x06, 0x25, 0xed, 0x97, 0x51, 0x8d, + 0xe6, 0x12, 0x2b, 0x50, 0x8c, 0x0a, 0xae, 0x10, 0x1a, 0xaf, 0xe7, 0x06, 0x52, 0x4d, 0x02, 0x59, + 0x62, 0x21, 0x93, 0x03, 0x94, 0x3b, 0x35, 0x40, 0x77, 0x60, 0xc5, 0x91, 0xc3, 0x2b, 0xee, 0xd4, + 0xec, 0x13, 0x49, 0x43, 0xb5, 0xf7, 0x32, 0x51, 0xcd, 0xe6, 0xe6, 0xcf, 0xab, 0x5b, 0xc2, 0xc4, + 0xec, 0x4c, 0x13, 0x95, 0xb3, 0x9b, 0x98, 0xfb, 0xe4, 0x26, 0x7e, 0x98, 0x6e, 0x06, 0x4f, 0xb6, + 0x73, 0x7e, 0xb2, 0xfc, 0x1f, 0x83, 0xfc, 0xd7, 0x0c, 0x94, 0xe7, 0x95, 0x22, 0x9a, 0x30, 0x51, + 0x29, 0x8a, 0x12, 0x26, 0x5a, 0xcf, 0x4d, 0x18, 0xc9, 0x4b, 0x65, 0xa6, 0x97, 0xb9, 0xc4, 0xcb, + 0x5b, 0x00, 0x41, 0xec, 0x0f, 0xb3, 0x7a, 0xa6, 0xa3, 0x12, 0x68, 0xda, 0xd7, 0xc2, 0x27, 0xf7, + 0xf5, 0x27, 0x59, 0x28, 0xc5, 0xe5, 0x9f, 0x16, 0x96, 0x81, 0xd7, 0x71, 0x06, 0x94, 0x12, 0x15, + 0x96, 0x98, 0x80, 0xae, 0x02, 0xf8, 0xee, 0xb1, 0x17, 0xba, 0x6c, 0x9b, 0x4f, 0x3e, 0x12, 0x85, + 0xba, 0x39, 0xf2, 0xba, 0x16, 0xfd, 0xae, 0x14, 0x6e, 0x8a, 0x25, 0xba, 0x0e, 0x2b, 0x9d, 0xa8, + 0x36, 0xb2, 0x7d, 0xee, 0x70, 0x9a, 0x48, 0xb5, 0xd3, 0x0f, 0xd1, 0x60, 0xe4, 0x74, 0xb8, 0xe7, + 0x25, 0x92, 0x10, 0x68, 0xe0, 0x69, 0x6b, 0x62, 0xec, 0x05, 0x1e, 0xf8, 0x68, 0x8d, 0x34, 0x58, + 0x8e, 0x0e, 0x81, 0x0e, 0x69, 0xac, 0x05, 0x94, 0x48, 0x8a, 0x26, 0x63, 0x98, 0x8c, 0x62, 0x1a, + 0xc3, 0xe4, 0x94, 0x61, 0xd1, 0xe9, 0x76, 0x7d, 0x37, 0x08, 0x58, 0xb1, 0x2e, 0x91, 0x68, 0xa9, + 0xfd, 0x31, 0x93, 0x8c, 0x0c, 0x71, 0xac, 0x68, 0x2b, 0xd1, 0xd9, 0x18, 0x28, 0x62, 0x15, 0x13, + 0x68, 0xa5, 0xea, 0x1f, 0x27, 0x69, 0xcd, 0x17, 0x52, 0x82, 0x28, 0xb3, 0xae, 0x6b, 0x6e, 0x66, + 0xb2, 0xe7, 0xcf, 0x9e, 0xec, 0x67, 0x48, 0x80, 0x8f, 0xb2, 0x70, 0x69, 0x4e, 0x6f, 0x7b, 0xd2, + 0xad, 0x8d, 0x0e, 0x3a, 0x7b, 0xca, 0x41, 0x2b, 0xa7, 0x1e, 0x74, 0x6e, 0xc6, 0x41, 0xc7, 0x25, + 0x39, 0x3f, 0x51, 0x92, 0xcb, 0xb0, 0xe8, 0x8f, 0x87, 0x61, 0x3f, 0xce, 0x81, 0x68, 0x49, 0x93, + 0xf3, 0x6d, 0xcf, 0x7f, 0xd8, 0x1f, 0xf6, 0x8c, 0xbe, 0x2f, 0x12, 0x40, 0xa2, 0x20, 0x0b, 0x80, + 0xf5, 0x69, 0xfe, 0xcc, 0x50, 0x64, 0xbd, 0x67, 0xfb, 0xc9, 0xbd, 0x9d, 0xd3, 0xa5, 0x47, 0x07, + 0x49, 0x02, 0xfd, 0xe8, 0x99, 0xd8, 0x3e, 0x6d, 0x02, 0x5d, 0x91, 0x27, 0xd0, 0xaf, 0x43, 0xb1, + 0xee, 0xf5, 0x38, 0xdf, 0xcb, 0x50, 0x8a, 0x9f, 0x86, 0xc4, 0xe0, 0x58, 0xd9, 0xe6, 0x6f, 0x43, + 0xdb, 0xd1, 0xdb, 0xd0, 0xb6, 0x1d, 0x21, 0x48, 0x02, 0x46, 0x1a, 0xe4, 0x5d, 0x69, 0x76, 0x8c, + 0xde, 0x84, 0xc4, 0x87, 0xbc, 0x9b, 0xee, 0x99, 0x8a, 0xd4, 0x33, 0xb5, 0x3b, 0xb0, 0xd6, 0x0a, + 0x5c, 0xdf, 0x1c, 0x86, 0x14, 0x2a, 0x5e, 0x85, 0x6e, 0x40, 0xa1, 0xcf, 0x08, 0xc2, 0x8a, 0x15, + 0x21, 0x4f, 0xa0, 0xc4, 0xa6, 0xf6, 0x45, 0x58, 0x15, 0xd3, 0x6f, 0xc4, 0xf8, 0x5c, 0xfa, 0x6d, + 0x2a, 0x1a, 0x71, 0x04, 0x2a, 0xf5, 0x44, 0x75, 0x0b, 0x96, 0x65, 0x32, 0xaa, 0xc0, 0xa2, 0xcb, + 0x92, 0x91, 0x3f, 0x29, 0x14, 0x6b, 0x0b, 0x24, 0x22, 0xec, 0xe6, 0x41, 0x79, 0xe4, 0x0c, 0xb4, + 0x7b, 0x50, 0xe0, 0x16, 0x50, 0x5f, 0x92, 0xd7, 0x87, 0x62, 0xf4, 0xce, 0x80, 0x20, 0x17, 0x9c, + 0x0c, 0x3b, 0x62, 0x3a, 0x67, 0xbf, 0x69, 0xea, 0x8a, 0xb7, 0x07, 0x85, 0x51, 0xc5, 0x4a, 0xeb, + 0x00, 0x24, 0x93, 0x06, 0x7a, 0x15, 0x56, 0x93, 0x59, 0x43, 0x9a, 0x6f, 0xd6, 0xa7, 0x86, 0x12, + 0x76, 0xe1, 0x26, 0xc0, 0x54, 0x09, 0xbf, 0x4c, 0x51, 0xbd, 0xe7, 0xab, 0x2d, 0x0f, 0x96, 0xa4, + 0x6f, 0x67, 0x54, 0x86, 0x0b, 0x2d, 0x6b, 0xdf, 0x6a, 0xbc, 0x6e, 0xb5, 0x77, 0x5b, 0x66, 0xdd, + 0xc0, 0xa4, 0x6d, 0xdf, 0x3f, 0xc4, 0xea, 0x02, 0x5a, 0x04, 0xe5, 0x9e, 0xb9, 0xab, 0x66, 0x50, + 0x09, 0xf2, 0xbb, 0xd5, 0x37, 0x71, 0x5d, 0xcd, 0xa2, 0x55, 0x00, 0x86, 0x3a, 0xac, 0xea, 0xfb, + 0x4d, 0x55, 0x41, 0x00, 0x05, 0xbd, 0xd5, 0xb4, 0x1b, 0x07, 0x6a, 0x8e, 0xfe, 0xde, 0xaf, 0x5a, + 0xe6, 0x7e, 0x43, 0xcd, 0xd3, 0xdf, 0x46, 0x43, 0xdf, 0xc7, 0x44, 0x2d, 0x6c, 0x19, 0x50, 0x8a, + 0x1f, 0x0a, 0xd0, 0x45, 0x40, 0x29, 0x75, 0x91, 0xb2, 0x25, 0x58, 0xd4, 0xeb, 0xad, 0xa6, 0x8d, + 0x89, 0x9a, 0xa1, 0x9a, 0xf7, 0xf4, 0x5d, 0x35, 0x4b, 0x35, 0xd7, 0x1b, 0x7a, 0xb5, 0xae, 0x2a, + 0x5b, 0x0d, 0x3a, 0x66, 0x26, 0x9f, 0xba, 0xe8, 0x29, 0x58, 0x8f, 0x04, 0x19, 0xf8, 0xb0, 0xde, + 0xb8, 0x9f, 0x18, 0x5e, 0x84, 0x5c, 0x0d, 0xd7, 0x0f, 0xd4, 0x0c, 0x5a, 0x81, 0xd2, 0x3e, 0x33, + 0xcf, 0x7c, 0x13, 0xab, 0x59, 0xaa, 0x64, 0xbf, 0xb5, 0x8b, 0x75, 0x9b, 0x0a, 0x34, 0x61, 0x49, + 0xfa, 0xe4, 0x96, 0xe3, 0x20, 0x0c, 0x89, 0xc4, 0x2d, 0x43, 0xf1, 0xc0, 0xb4, 0x4c, 0xca, 0x29, + 0x6c, 0xdb, 0xc7, 0xdc, 0xb6, 0x86, 0x5d, 0xc3, 0x44, 0x55, 0xb6, 0x1e, 0x97, 0x00, 0x92, 0xd2, + 0x87, 0x0a, 0x90, 0x6d, 0xec, 0xab, 0x0b, 0xa8, 0x0c, 0xe7, 0x9b, 0x76, 0xd5, 0x6e, 0x35, 0xf5, + 0x1a, 0xd6, 0xf7, 0xdb, 0xcd, 0x96, 0xae, 0xe3, 0x66, 0x53, 0xfd, 0x5d, 0x06, 0x21, 0x58, 0xe1, + 0xde, 0x47, 0xb4, 0xdf, 0x67, 0xd0, 0x15, 0x28, 0x73, 0xda, 0x61, 0xab, 0x59, 0x6b, 0x57, 0x19, + 0xbd, 0x6d, 0x60, 0xcb, 0xc4, 0x86, 0xea, 0xa2, 0xcb, 0x70, 0x49, 0xec, 0x92, 0xc6, 0x3d, 0xac, + 0xdb, 0x6d, 0xab, 0x61, 0xb7, 0xef, 0x36, 0x5a, 0x96, 0xa1, 0x1e, 0xa1, 0x6b, 0x50, 0x91, 0x15, + 0x99, 0x07, 0xd5, 0x3d, 0xdc, 0x3e, 0x6c, 0xd5, 0xeb, 0x6d, 0x4c, 0x88, 0xfa, 0x7e, 0x16, 0x7d, + 0x06, 0xae, 0xca, 0x00, 0xbd, 0x61, 0xd9, 0x55, 0xd3, 0xc2, 0xa4, 0xad, 0x13, 0x5c, 0xb5, 0x4d, + 0x6b, 0x4f, 0xfd, 0x69, 0x16, 0x69, 0xf0, 0xb4, 0x0c, 0x22, 0x2d, 0x4b, 0x02, 0x52, 0x41, 0x1f, + 0x64, 0xd1, 0x0d, 0xd8, 0x98, 0x2d, 0xc8, 0xc6, 0xe4, 0xc0, 0xb4, 0xaa, 0x36, 0x36, 0xd4, 0x9f, + 0x65, 0xd1, 0xf3, 0xb0, 0x29, 0xc3, 0xf8, 0x01, 0x1d, 0x60, 0xcb, 0x6e, 0x93, 0x46, 0xbd, 0xde, + 0x68, 0xd9, 0xed, 0x43, 0x6c, 0x19, 0x54, 0xef, 0xcf, 0x9f, 0x20, 0x93, 0xe0, 0xa6, 0x5d, 0x25, + 0xcc, 0xbc, 0xc7, 0x53, 0x30, 0xab, 0x61, 0xe0, 0xf6, 0x01, 0x3e, 0x68, 0x90, 0xfb, 0xed, 0x43, + 0x82, 0x9b, 0xcd, 0x16, 0xc1, 0xea, 0xb7, 0x94, 0x49, 0x57, 0x19, 0xcc, 0x30, 0x9b, 0xfb, 0x09, + 0xe8, 0xdb, 0x0a, 0x7a, 0x0e, 0xae, 0x4f, 0x81, 0x2c, 0x6c, 0xbf, 0xde, 0x20, 0xfb, 0xed, 0x96, + 0x55, 0x7d, 0xad, 0x6a, 0xd6, 0xab, 0xbb, 0x75, 0xac, 0x7e, 0x47, 0x99, 0x8c, 0x0a, 0x83, 0x1e, + 0x9a, 0x46, 0x22, 0xee, 0x9d, 0xd9, 0x3a, 0x5b, 0x16, 0x5d, 0x19, 0x2d, 0x2e, 0xe8, 0xbb, 0x0a, + 0x7a, 0x06, 0xae, 0xcc, 0x00, 0x11, 0x5c, 0xd5, 0x6b, 0x0c, 0xf2, 0xae, 0x32, 0x79, 0x8e, 0xdc, + 0xac, 0x86, 0xdd, 0x26, 0xb8, 0x6a, 0xdc, 0x57, 0xbf, 0x37, 0x65, 0xcc, 0xdd, 0xaa, 0x59, 0xc7, + 0x46, 0x5b, 0x28, 0xa2, 0x71, 0xfa, 0xbe, 0x82, 0x2a, 0xb0, 0x2e, 0x63, 0x5a, 0x56, 0x0d, 0x57, + 0xeb, 0x76, 0xed, 0xbe, 0xfa, 0x03, 0x05, 0x3d, 0x0b, 0x9a, 0xbc, 0x27, 0x2e, 0x03, 0x0d, 0xb9, + 0x85, 0x75, 0xdb, 0x6c, 0x58, 0xec, 0x9c, 0x7f, 0x38, 0xe5, 0x51, 0x04, 0xa4, 0x8e, 0xef, 0x9b, + 0xf5, 0x3a, 0x36, 0xd4, 0x1f, 0x29, 0x34, 0x8b, 0xa3, 0x2b, 0x83, 0x09, 0x69, 0x10, 0xf5, 0x23, + 0x65, 0x32, 0xe7, 0xc5, 0xbe, 0xfa, 0xb1, 0x82, 0x36, 0xe1, 0x99, 0x19, 0x3b, 0x13, 0x71, 0xfa, + 0x9b, 0x82, 0xb6, 0xe0, 0xc6, 0xec, 0x74, 0x78, 0xbd, 0x6a, 0xd2, 0x5c, 0x88, 0x65, 0xfe, 0x5d, + 0x41, 0x57, 0xe1, 0xa9, 0x59, 0x32, 0xf1, 0x6b, 0xd8, 0xb2, 0xd5, 0xff, 0x2a, 0xe8, 0x3c, 0xac, + 0xf2, 0xdc, 0x8b, 0x99, 0xfe, 0xa1, 0xa0, 0x35, 0x58, 0x6e, 0xde, 0xb7, 0xf4, 0x98, 0xf4, 0x4f, + 0x25, 0xb9, 0x8f, 0x11, 0xed, 0x5f, 0x0a, 0xba, 0x00, 0xe7, 0x0c, 0xfc, 0x9a, 0x69, 0x99, 0x76, + 0x4c, 0xfd, 0x37, 0xa3, 0xea, 0x75, 0x5c, 0xb5, 0x5a, 0x87, 0x31, 0xf5, 0x3f, 0x8c, 0xca, 0x44, + 0x32, 0x34, 0x8f, 0xc5, 0x9f, 0x72, 0x68, 0x03, 0x2e, 0x47, 0x12, 0x08, 0xde, 0x33, 0x59, 0x4d, + 0xe1, 0x6a, 0x0c, 0x7c, 0xd8, 0x54, 0x7f, 0x95, 0xa7, 0x07, 0x3e, 0x85, 0xb0, 0x71, 0xd3, 0xe6, + 0x80, 0x5f, 0xe7, 0x69, 0xd2, 0x4c, 0x01, 0x84, 0x47, 0x0c, 0xf2, 0x61, 0x7e, 0xa6, 0x16, 0xbd, + 0x61, 0xdd, 0x35, 0xf7, 0x28, 0x44, 0xfd, 0x4d, 0x7e, 0x32, 0x6b, 0x68, 0x44, 0xf1, 0x1b, 0x76, + 0x5b, 0xaf, 0x5a, 0x3a, 0x66, 0x67, 0xf9, 0x5e, 0x61, 0x12, 0x63, 0xe0, 0xaa, 0x51, 0x37, 0x2d, + 0xdc, 0xc6, 0x6f, 0xe8, 0x18, 0x1b, 0xd8, 0x50, 0x7f, 0x5c, 0xd8, 0x7a, 0x0a, 0x56, 0xd3, 0x3d, + 0x87, 0x16, 0x43, 0xcb, 0xac, 0xab, 0x0b, 0x2f, 0xfd, 0x22, 0x0f, 0xe7, 0x9a, 0xe2, 0xdf, 0x50, + 0x4d, 0xd7, 0x7f, 0xd4, 0xef, 0xb8, 0x48, 0x87, 0xe2, 0x9e, 0x1b, 0x8a, 0x27, 0xac, 0xa9, 0x91, + 0x01, 0x1f, 0x8f, 0xc2, 0x93, 0x4a, 0xea, 0x1f, 0x45, 0xda, 0xda, 0x37, 0xfe, 0xf0, 0xf8, 0x9d, + 0xec, 0x12, 0x2a, 0xed, 0x3c, 0xba, 0xb5, 0xc3, 0x3a, 0x32, 0xda, 0x83, 0x22, 0x1b, 0x18, 0xea, + 0x5e, 0x0f, 0x45, 0x1f, 0xce, 0xd1, 0x6c, 0x52, 0x99, 0x24, 0x68, 0xeb, 0x4c, 0xc0, 0x39, 0xb4, + 0x42, 0x05, 0xf0, 0x37, 0x8a, 0x81, 0xd7, 0xbb, 0x99, 0x79, 0x31, 0x83, 0xf6, 0xa0, 0xc0, 0x04, + 0x05, 0x73, 0x6d, 0x99, 0x92, 0x86, 0x98, 0xb4, 0x65, 0x04, 0xb1, 0xb4, 0xe0, 0xc5, 0x0c, 0x7a, + 0x03, 0x16, 0xf1, 0xd7, 0xdc, 0xce, 0x38, 0x74, 0x51, 0x59, 0x70, 0x4c, 0x0d, 0x2b, 0x95, 0x39, + 0x3a, 0xb4, 0xcb, 0x4c, 0xe4, 0xba, 0xb6, 0xc4, 0x44, 0x72, 0x31, 0x77, 0xc4, 0xe8, 0x82, 0x1c, + 0x28, 0x55, 0xc7, 0xa1, 0xc7, 0x9a, 0x25, 0x5a, 0x4f, 0x8f, 0x29, 0xa7, 0x09, 0xbe, 0xc1, 0x04, + 0x5f, 0xab, 0x5c, 0xa4, 0x82, 0xd9, 0xe4, 0xb1, 0xe3, 0x8c, 0x43, 0xaf, 0x1d, 0xe9, 0xe0, 0x03, + 0x0e, 0x6a, 0x43, 0x91, 0xaa, 0xa0, 0x1f, 0x0a, 0x67, 0xd5, 0x70, 0x9d, 0x69, 0xb8, 0x5a, 0x59, + 0x67, 0x87, 0x73, 0x32, 0xec, 0xcc, 0x54, 0xd0, 0x01, 0xa0, 0x0a, 0x78, 0xab, 0x3e, 0xab, 0x8a, + 0x4d, 0xa6, 0x62, 0xa3, 0x72, 0x89, 0xaa, 0xe0, 0x33, 0xd1, 0x4c, 0x25, 0x75, 0x28, 0xd4, 0x9c, + 0x61, 0x77, 0xe0, 0xa2, 0xd4, 0x50, 0x39, 0x57, 0xee, 0x15, 0x26, 0xf7, 0xa2, 0xb6, 0x96, 0x1c, + 0xe4, 0xce, 0x5b, 0x4c, 0xc0, 0x9d, 0xcc, 0xd6, 0x83, 0x02, 0x43, 0xdf, 0xfe, 0x5f, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x0d, 0xe9, 0x7f, 0x4a, 0x48, 0x1d, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/skaffold.proto b/proto/skaffold.proto index 42e985633b1..da3e9931fae 100644 --- a/proto/skaffold.proto +++ b/proto/skaffold.proto @@ -472,6 +472,14 @@ enum StatusCode { DEVINIT_REGISTER_DEPLOY_DEPS = 703; // Failed to configure watcher for Skaffold configuration file. DEVINIT_REGISTER_CONFIG_DEP = 704; + + // Timeout or User Cancellation Errors + + // User cancelled the skaffold dev run + STATUSCHECK_CONTEXT_CANCELLED = 800; + + // Deadline for status check exceeded + STATUSCHECK_DEADLINE_EXCEEDED = 801; } // Enum for Suggestion codes