From 5ec9838f037920662c820f372ab6025601a2f4f7 Mon Sep 17 00:00:00 2001 From: tejal29 Date: Mon, 27 Apr 2020 22:48:42 -0700 Subject: [PATCH 1/9] Add to indicate start and end of skaffold dev iterations --- docs/content/en/api/skaffold.swagger.json | 127 +++++- docs/content/en/docs/references/api/grpc.md | 31 +- pkg/skaffold/errors/errors.go | 15 +- pkg/skaffold/event/event.go | 39 ++ pkg/skaffold/runner/dev.go | 21 +- proto/skaffold.pb.go | 407 +++++++++++++------- proto/skaffold.proto | 36 +- 7 files changed, 504 insertions(+), 172 deletions(-) diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json index 21c45e4b738..0e9a351b5da 100644 --- a/docs/content/en/api/skaffold.swagger.json +++ b/docs/content/en/api/skaffold.swagger.json @@ -97,7 +97,7 @@ }, { "name": "event.buildEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", @@ -116,9 +116,15 @@ "STATUS_CHECK_NODE_UNSCHEDULABLE", "STATUS_CHECK_NODE_UNREACHABLE", "STATUS_CHECK_NODE_NOT_READY", + "ErrorCode_UNKNOWN", "STATUS_CHECK_UNKNOWN", "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN" + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + "FILE_SYNC_INIT_ERROR", + "DEV_REGISTER_BUILD_DEPS", + "DEV_REGISTER_TEST_DEPS", + "DEV_REGISTER_DEPLOY_DEPS", + "DEV_REGISTER_CONFIG_DEP" ], "default": "COULD_NOT_DETERMINE" }, @@ -136,7 +142,7 @@ }, { "name": "event.deployEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", @@ -155,9 +161,15 @@ "STATUS_CHECK_NODE_UNSCHEDULABLE", "STATUS_CHECK_NODE_UNREACHABLE", "STATUS_CHECK_NODE_NOT_READY", + "ErrorCode_UNKNOWN", "STATUS_CHECK_UNKNOWN", "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN" + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + "FILE_SYNC_INIT_ERROR", + "DEV_REGISTER_BUILD_DEPS", + "DEV_REGISTER_TEST_DEPS", + "DEV_REGISTER_DEPLOY_DEPS", + "DEV_REGISTER_CONFIG_DEP" ], "default": "COULD_NOT_DETERMINE" }, @@ -237,7 +249,7 @@ }, { "name": "event.statusCheckEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", @@ -256,9 +268,15 @@ "STATUS_CHECK_NODE_UNSCHEDULABLE", "STATUS_CHECK_NODE_UNREACHABLE", "STATUS_CHECK_NODE_NOT_READY", + "ErrorCode_UNKNOWN", "STATUS_CHECK_UNKNOWN", "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN" + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + "FILE_SYNC_INIT_ERROR", + "DEV_REGISTER_BUILD_DEPS", + "DEV_REGISTER_TEST_DEPS", + "DEV_REGISTER_DEPLOY_DEPS", + "DEV_REGISTER_CONFIG_DEP" ], "default": "COULD_NOT_DETERMINE" }, @@ -313,7 +331,7 @@ }, { "name": "event.fileSyncEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", @@ -332,9 +350,15 @@ "STATUS_CHECK_NODE_UNSCHEDULABLE", "STATUS_CHECK_NODE_UNREACHABLE", "STATUS_CHECK_NODE_NOT_READY", + "ErrorCode_UNKNOWN", "STATUS_CHECK_UNKNOWN", "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN" + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + "FILE_SYNC_INIT_ERROR", + "DEV_REGISTER_BUILD_DEPS", + "DEV_REGISTER_TEST_DEPS", + "DEV_REGISTER_DEPLOY_DEPS", + "DEV_REGISTER_CONFIG_DEP" ], "default": "COULD_NOT_DETERMINE" }, @@ -380,6 +404,58 @@ "required": false, "type": "string" }, + { + "name": "event.devLoopEvent.iteration", + "in": "query", + "required": false, + "type": "integer", + "format": "int32" + }, + { + "name": "event.devLoopEvent.status", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "event.devLoopEvent.err", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "event.devLoopEvent.errCode", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "COULD_NOT_DETERMINE", + "STATUS_CHECK_NO_ERROR", + "STATUS_CHECK_IMAGE_PULL_ERR", + "STATUS_CHECK_CONTAINER_CREATING", + "STATUS_CHECK_RUN_CONTAINER_ERR", + "STATUS_CHECK_CONTAINER_TERMINATED", + "STATUS_CHECK_CONTAINER_RESTARTING", + "STATUS_CHECK_NODE_MEMORY_PRESSURE", + "STATUS_CHECK_NODE_DISK_PRESSURE", + "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", + "STATUS_CHECK_NODE_PID_PRESSURE", + "STATUS_CHECK_NODE_UNSCHEDULABLE", + "STATUS_CHECK_NODE_UNREACHABLE", + "STATUS_CHECK_NODE_NOT_READY", + "ErrorCode_UNKNOWN", + "STATUS_CHECK_UNKNOWN", + "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + "FILE_SYNC_INIT_ERROR", + "DEV_REGISTER_BUILD_DEPS", + "DEV_REGISTER_TEST_DEPS", + "DEV_REGISTER_DEPLOY_DEPS", + "DEV_REGISTER_CONFIG_DEP" + ], + "default": "COULD_NOT_DETERMINE" + }, { "name": "entry", "in": "query", @@ -681,6 +757,25 @@ "default": "UNKNOWN_DEPLOYER_TYPE", "description": "Enum indicating deploy tools used\n- UNKNOWN_DEPLOYER_TYPE: Could not determine Deployer Type\n - HELM: Helm Deployer\n - KUSTOMIZE: Kustomize Deployer\n - KUBECTL: Kubectl Deployer" }, + "protoDevLoopEvent": { + "type": "object", + "properties": { + "iteration": { + "type": "integer", + "format": "int32" + }, + "status": { + "type": "string" + }, + "err": { + "type": "string" + }, + "errCode": { + "$ref": "#/definitions/protoErrorCode" + } + }, + "description": "`DevLoopEvent` marks the start and end of a dev loop." + }, "protoErrorCode": { "type": "string", "enum": [ @@ -698,12 +793,23 @@ "STATUS_CHECK_NODE_UNSCHEDULABLE", "STATUS_CHECK_NODE_UNREACHABLE", "STATUS_CHECK_NODE_NOT_READY", + "ErrorCode_UNKNOWN", "STATUS_CHECK_UNKNOWN", "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN" + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + "FILE_SYNC_INIT_ERROR", + "DEV_REGISTER_BUILD_DEPS", + "DEV_REGISTER_TEST_DEPS", + "DEV_REGISTER_DEPLOY_DEPS", + "DEV_REGISTER_CONFIG_DEP" ], "default": "COULD_NOT_DETERMINE", +<<<<<<< HEAD "description": "Enum for error codes\n- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason" +======= + "description": "- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": "Enum for error codes" +>>>>>>> 118d52ef4... Add to indicate start and end of skaffold dev iterations }, "protoEvent": { "type": "object", @@ -731,6 +837,9 @@ }, "debuggingContainerEvent": { "$ref": "#/definitions/protoDebuggingContainerEvent" + }, + "devLoopEvent": { + "$ref": "#/definitions/protoDevLoopEvent" } }, "description": "`Event` describes an event in the Skaffold process.\nIt is one of MetaEvent, BuildEvent, DeployEvent, PortEvent, StatusCheckEvent, ResourceStatusCheckEvent, FileSyncEvent, or DebuggingContainerEvent." diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md index 0ef4365f64d..a509a15bf9b 100644 --- a/docs/content/en/docs/references/api/grpc.md +++ b/docs/content/en/docs/references/api/grpc.md @@ -252,6 +252,24 @@ anytime a deployment starts or completes, successfully or not. + +#### DevLoopEvent +`DevLoopEvent` marks the start and end of a dev loop. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| iteration | [int32](#int32) | | dev loop iteration | +| status | [string](#string) | | dev loop status oneof: In Progress, Completed, Failed | +| err | [string](#string) | | error when current dev loop has failed. | +| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | + + + + + + + #### Event `Event` describes an event in the Skaffold process. @@ -268,6 +286,7 @@ It is one of MetaEvent, BuildEvent, DeployEvent, PortEvent, StatusCheckEvent, Re | resourceStatusCheckEvent | [ResourceStatusCheckEvent](#proto.ResourceStatusCheckEvent) | | indicates progress for each kubernetes deployment. | | fileSyncEvent | [FileSyncEvent](#proto.FileSyncEvent) | | describes the sync status. | | debuggingContainerEvent | [DebuggingContainerEvent](#proto.DebuggingContainerEvent) | | describes the appearance or disappearance of a debugging container | +| devLoopEvent | [DevLoopEvent](#proto.DevLoopEvent) | | describes a start and end of a dev loop. | @@ -665,9 +684,15 @@ Enum for error codes | STATUS_CHECK_NODE_UNSCHEDULABLE | 404 | Node unschedulable error | | STATUS_CHECK_NODE_UNREACHABLE | 405 | Node unreachable error | | STATUS_CHECK_NODE_NOT_READY | 406 | Node not ready error | -| STATUS_CHECK_UNKNOWN | 501 | Status Check error unknown | -| STATUS_CHECK_UNKNOWN_UNSCHEDULABLE | 502 | Container is unschedulable due to unknown reasons | -| STATUS_CHECK_CONTAINER_WAITING_UNKNOWN | 503 | Container is waiting due to unknown reason | +| ErrorCode_UNKNOWN | 501 | Unknown Error Codes | +| STATUS_CHECK_UNKNOWN | 502 | Status Check error unknown | +| STATUS_CHECK_UNKNOWN_UNSCHEDULABLE | 503 | Container is unschedulable due to unknown reasons | +| STATUS_CHECK_CONTAINER_WAITING_UNKNOWN | 504 | Container is waiting due to unknown reason | +| FILE_SYNC_INIT_ERROR | 601 | File Sync Initialize failure | +| DEV_REGISTER_BUILD_DEPS | 701 | Failed to configure watcher for build dependencies in dev loop | +| DEV_REGISTER_TEST_DEPS | 702 | Failed to configure watcher for test dependencies in dev loop | +| DEV_REGISTER_DEPLOY_DEPS | 703 | Failed to configure watcher for deploy dependencies in dev loop | +| DEV_REGISTER_CONFIG_DEP | 704 | Failed to configure watcher for Skaffold configuration file. | diff --git a/pkg/skaffold/errors/errors.go b/pkg/skaffold/errors/errors.go index ed44690f9a9..3dd6cd755d1 100644 --- a/pkg/skaffold/errors/errors.go +++ b/pkg/skaffold/errors/errors.go @@ -21,14 +21,15 @@ import ( ) const ( - Build = phase("Build") - Deploy = phase("Deploy") - StatusCheck = phase("StatusCheck") - FileSync = phase("FileSync") + Build = Phase("Build") + Deploy = Phase("Deploy") + StatusCheck = Phase("StatusCheck") + FileSync = Phase("FileSync") + Dev = Phase("Dev") ) -type phase string +type Phase string -func ErrorCodeFromError(_ error, _ phase) proto.ErrorCode { - return proto.ErrorCode_COULD_NOT_DETERMINE +func ErrorCodeFromError(_ error, _ Phase) proto.ErrorCode { + return proto.ErrorCode_ErrorCode_UNKNOWN } diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go index 346cb03251b..f302dc09d3c 100644 --- a/pkg/skaffold/event/event.go +++ b/pkg/skaffold/event/event.go @@ -248,6 +248,27 @@ func BuildComplete(imageName string) { handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Complete}) } +// DevLoopInProgress notifies that a dev loop has been started. +func DevLoopInProgress(i int) { + handler.handleDevLoopEvent(&proto.DevLoopEvent{Iteration: int32(i), Status: InProgress}) +} + +// DevLoopFailed notifies that a dev loop has failed with an error code +func DevLoopFailedWithErrorCode(i int, err error, errCode proto.ErrorCode) { + handler.handleDevLoopEvent(&proto.DevLoopEvent{Iteration: int32(i), Status: Failed, Err: err.Error(), ErrCode: errCode}) +} + +// DevLoopFailed notifies that a dev loop has failed in a given phase +func DevLoopFailedInPhase(i int, err error, phase sErrors.Phase) { + errCode := sErrors.ErrorCodeFromError(err, phase) + DevLoopFailedWithErrorCode(i, err, errCode) +} + +// DevLoopComplete notifies that a dev loop has completed. +func DevLoopComplete(i int) { + handler.handleDevLoopEvent(&proto.DevLoopEvent{Iteration: int32(i), Status: Succeeded}) +} + // FileSyncInProgress notifies that a file sync has been started. func FileSyncInProgress(fileCount int, image string) { handler.handleFileSyncEvent(&proto.FileSyncEvent{FileCount: int32(fileCount), Image: image, Status: InProgress}) @@ -357,6 +378,14 @@ func (ev *eventHandler) handleBuildEvent(e *proto.BuildEvent) { }) } +func (ev *eventHandler) handleDevLoopEvent(e *proto.DevLoopEvent) { + go ev.handle(&proto.Event{ + EventType: &proto.Event_DevLoopEvent{ + DevLoopEvent: e, + }, + }) +} + func (ev *eventHandler) handleFileSyncEvent(e *proto.FileSyncEvent) { go ev.handle(&proto.Event{ EventType: &proto.Event_FileSyncEvent{ @@ -493,6 +522,16 @@ func (ev *eventHandler) handle(event *proto.Event) { case Terminated: logEntry.Entry = fmt.Sprintf("Debuggable container terminated pod/%s:%s (%s)", de.PodName, de.ContainerName, de.Namespace) } + case *proto.Event_DevLoopEvent: + de := e.DevLoopEvent + switch de.Status { + case InProgress: + logEntry.Entry = fmt.Sprintf("Dev Iteration %d in progress", de.Iteration) + case Succeeded: + logEntry.Entry = fmt.Sprintf("Dev Iteration %d successful", de.Iteration) + default: + logEntry.Entry = fmt.Sprintf("Dev Iteration %d failed with error code %v", de.Iteration, de.ErrCode) + } default: return } diff --git a/pkg/skaffold/runner/dev.go b/pkg/skaffold/runner/dev.go index 0aaed205088..c000779c65e 100644 --- a/pkg/skaffold/runner/dev.go +++ b/pkg/skaffold/runner/dev.go @@ -27,14 +27,17 @@ import ( "github.com/GoogleContainerTools/skaffold/pkg/skaffold/build" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/color" + sErrors "github.com/GoogleContainerTools/skaffold/pkg/skaffold/errors" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/event" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/filemon" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/sync" + "github.com/GoogleContainerTools/skaffold/proto" ) // ErrorConfigurationChanged is a special error that's returned when the skaffold configuration was changed. var ErrorConfigurationChanged = errors.New("configuration changed") +var iteration = 1 var ( // For testing @@ -60,7 +63,8 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { // if any action is going to be performed, reset the monitor's changed component tracker for debouncing defer r.monitor.Reset() defer r.listener.LogWatchToUser(out) - + event.DevLoopInProgress(iteration) + defer func() { iteration++ }() if needsSync { defer func() { r.changeSet.resetSync() @@ -75,6 +79,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { if err := r.syncer.Sync(ctx, s); err != nil { logrus.Warnln("Skipping deploy due to sync error:", err) fileSyncFailed(fileCount, s.Image, err) + event.DevLoopFailedInPhase(iteration, err, sErrors.FileSync) return nil } @@ -91,6 +96,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { if _, err := r.BuildAndTest(ctx, out, r.changeSet.needsRebuild); err != nil { logrus.Warnln("Skipping deploy due to error:", err) + event.DevLoopFailedInPhase(iteration, err, sErrors.Build) return nil } } @@ -105,13 +111,14 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { r.forwarderManager.Stop() if err := r.Deploy(ctx, out, r.builds); err != nil { logrus.Warnln("Skipping deploy due to error:", err) + event.DevLoopFailedInPhase(iteration, err, sErrors.Deploy) return nil } if err := r.forwarderManager.Start(ctx); err != nil { logrus.Warnln("Port forwarding failed:", err) } } - + event.DevLoopComplete(iteration) r.logger.Unmute() return nil } @@ -119,6 +126,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { // Dev watches for changes and runs the skaffold build and deploy // config until interrupted by the user. func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*latest.Artifact) error { + event.DevLoopInProgress(0) r.createLogger(out, artifacts) defer r.logger.Stop() @@ -160,6 +168,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la } }, ); err != nil { + event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_BUILD_DEPS) return fmt.Errorf("watching files for artifact %q: %w", artifact.ImageName, err) } } @@ -170,6 +179,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la r.tester.TestDependencies, func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { + event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_TEST_DEPS) return fmt.Errorf("watching test files: %w", err) } @@ -178,6 +188,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la r.deployer.Dependencies, func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { + event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_DEPLOY_DEPS) return fmt.Errorf("watching files for deployer: %w", err) } @@ -186,6 +197,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la func() ([]string, error) { return []string{r.runCtx.Opts.ConfigurationFile}, nil }, func(filemon.Events) { r.changeSet.needsReload = true }, ); err != nil { + event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_CONFIG_DEP) return fmt.Errorf("watching skaffold configuration %q: %w", r.runCtx.Opts.ConfigurationFile, err) } @@ -193,11 +205,13 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Init Sync State if err := sync.Init(ctx, artifacts); err != nil { + event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_FILE_SYNC_INIT_ERROR) return fmt.Errorf("exiting dev mode because initializing sync state failed: %w", err) } // First build if _, err := r.BuildAndTest(ctx, out, artifacts); err != nil { + event.DevLoopFailedInPhase(0, err, sErrors.Build) return fmt.Errorf("exiting dev mode because first build failed: %w", err) } @@ -206,6 +220,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // First deploy if err := r.Deploy(ctx, out, r.builds); err != nil { + event.DevLoopFailedInPhase(0, err, sErrors.Deploy) return fmt.Errorf("exiting dev mode because first deploy failed: %w", err) } @@ -222,6 +237,6 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la return fmt.Errorf("starting logger: %w", err) } } - + event.DevLoopComplete(0) return r.listener.WatchForChanges(ctx, out, r.doDev) } diff --git a/proto/skaffold.pb.go b/proto/skaffold.pb.go index 8c76839d79e..28f52b3c16a 100644 --- a/proto/skaffold.pb.go +++ b/proto/skaffold.pb.go @@ -215,12 +215,24 @@ const ( ErrorCode_STATUS_CHECK_NODE_UNREACHABLE ErrorCode = 405 // Node not ready error ErrorCode_STATUS_CHECK_NODE_NOT_READY ErrorCode = 406 + // Unknown Error Codes + ErrorCode_ErrorCode_UNKNOWN ErrorCode = 501 // Status Check error unknown - ErrorCode_STATUS_CHECK_UNKNOWN ErrorCode = 501 + ErrorCode_STATUS_CHECK_UNKNOWN ErrorCode = 502 // Container is unschedulable due to unknown reasons - ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE ErrorCode = 502 + ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE ErrorCode = 503 // Container is waiting due to unknown reason - ErrorCode_STATUS_CHECK_CONTAINER_WAITING_UNKNOWN ErrorCode = 503 + ErrorCode_STATUS_CHECK_CONTAINER_WAITING_UNKNOWN ErrorCode = 504 + // File Sync Initialize failure + ErrorCode_FILE_SYNC_INIT_ERROR ErrorCode = 601 + // Failed to configure watcher for build dependencies in dev loop + ErrorCode_DEV_REGISTER_BUILD_DEPS ErrorCode = 701 + // Failed to configure watcher for test dependencies in dev loop + ErrorCode_DEV_REGISTER_TEST_DEPS ErrorCode = 702 + // Failed to configure watcher for deploy dependencies in dev loop + ErrorCode_DEV_REGISTER_DEPLOY_DEPS ErrorCode = 703 + // Failed to configure watcher for Skaffold configuration file. + ErrorCode_DEV_REGISTER_CONFIG_DEP ErrorCode = 704 ) var ErrorCode_name = map[int32]string{ @@ -238,9 +250,15 @@ var ErrorCode_name = map[int32]string{ 404: "STATUS_CHECK_NODE_UNSCHEDULABLE", 405: "STATUS_CHECK_NODE_UNREACHABLE", 406: "STATUS_CHECK_NODE_NOT_READY", - 501: "STATUS_CHECK_UNKNOWN", - 502: "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - 503: "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + 501: "ErrorCode_UNKNOWN", + 502: "STATUS_CHECK_UNKNOWN", + 503: "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", + 504: "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + 601: "FILE_SYNC_INIT_ERROR", + 701: "DEV_REGISTER_BUILD_DEPS", + 702: "DEV_REGISTER_TEST_DEPS", + 703: "DEV_REGISTER_DEPLOY_DEPS", + 704: "DEV_REGISTER_CONFIG_DEP", } var ErrorCode_value = map[string]int32{ @@ -258,9 +276,15 @@ var ErrorCode_value = map[string]int32{ "STATUS_CHECK_NODE_UNSCHEDULABLE": 404, "STATUS_CHECK_NODE_UNREACHABLE": 405, "STATUS_CHECK_NODE_NOT_READY": 406, - "STATUS_CHECK_UNKNOWN": 501, - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE": 502, - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN": 503, + "ErrorCode_UNKNOWN": 501, + "STATUS_CHECK_UNKNOWN": 502, + "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE": 503, + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN": 504, + "FILE_SYNC_INIT_ERROR": 601, + "DEV_REGISTER_BUILD_DEPS": 701, + "DEV_REGISTER_TEST_DEPS": 702, + "DEV_REGISTER_DEPLOY_DEPS": 703, + "DEV_REGISTER_CONFIG_DEP": 704, } func (x ErrorCode) String() string { @@ -930,6 +954,7 @@ type Event struct { // *Event_ResourceStatusCheckEvent // *Event_FileSyncEvent // *Event_DebuggingContainerEvent + // *Event_DevLoopEvent EventType isEvent_EventType `protobuf_oneof:"event_type"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -997,6 +1022,10 @@ type Event_DebuggingContainerEvent struct { DebuggingContainerEvent *DebuggingContainerEvent `protobuf:"bytes,8,opt,name=debuggingContainerEvent,proto3,oneof"` } +type Event_DevLoopEvent struct { + DevLoopEvent *DevLoopEvent `protobuf:"bytes,9,opt,name=devLoopEvent,proto3,oneof"` +} + func (*Event_MetaEvent) isEvent_EventType() {} func (*Event_BuildEvent) isEvent_EventType() {} @@ -1013,6 +1042,8 @@ func (*Event_FileSyncEvent) isEvent_EventType() {} func (*Event_DebuggingContainerEvent) isEvent_EventType() {} +func (*Event_DevLoopEvent) isEvent_EventType() {} + func (m *Event) GetEventType() isEvent_EventType { if m != nil { return m.EventType @@ -1076,6 +1107,13 @@ func (m *Event) GetDebuggingContainerEvent() *DebuggingContainerEvent { return nil } +func (m *Event) GetDevLoopEvent() *DevLoopEvent { + if x, ok := m.GetEventType().(*Event_DevLoopEvent); ok { + return x.DevLoopEvent + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Event) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -1087,9 +1125,74 @@ func (*Event) XXX_OneofWrappers() []interface{} { (*Event_ResourceStatusCheckEvent)(nil), (*Event_FileSyncEvent)(nil), (*Event_DebuggingContainerEvent)(nil), + (*Event_DevLoopEvent)(nil), } } +// `DevLoopEvent` marks the start and end of a dev loop. +type DevLoopEvent struct { + Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + Err string `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` + ErrCode ErrorCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DevLoopEvent) Reset() { *m = DevLoopEvent{} } +func (m *DevLoopEvent) String() string { return proto.CompactTextString(m) } +func (*DevLoopEvent) ProtoMessage() {} +func (*DevLoopEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_4f2d38e344f9dbf5, []int{12} +} + +func (m *DevLoopEvent) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DevLoopEvent.Unmarshal(m, b) +} +func (m *DevLoopEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DevLoopEvent.Marshal(b, m, deterministic) +} +func (m *DevLoopEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_DevLoopEvent.Merge(m, src) +} +func (m *DevLoopEvent) XXX_Size() int { + return xxx_messageInfo_DevLoopEvent.Size(m) +} +func (m *DevLoopEvent) XXX_DiscardUnknown() { + xxx_messageInfo_DevLoopEvent.DiscardUnknown(m) +} + +var xxx_messageInfo_DevLoopEvent proto.InternalMessageInfo + +func (m *DevLoopEvent) GetIteration() int32 { + if m != nil { + return m.Iteration + } + return 0 +} + +func (m *DevLoopEvent) GetStatus() string { + if m != nil { + return m.Status + } + return "" +} + +func (m *DevLoopEvent) GetErr() string { + if m != nil { + return m.Err + } + return "" +} + +func (m *DevLoopEvent) GetErrCode() ErrorCode { + if m != nil { + return m.ErrCode + } + return ErrorCode_COULD_NOT_DETERMINE +} + // `MetaEvent` provides general information regarding Skaffold type MetaEvent struct { // entry, for example: `"Starting Skaffold: {Version:v0.39.0-16-g5bb7c9e0 ConfigVersion:skaffold/v1 GitVersion: GitCommit:5bb7c9e078e4d522a5ffc42a2f1274fd17d75902 GitTreeState:dirty BuildDate01:29Z GoVersion:go1.13rc1 Compiler:gc Platform:linux/amd64}"` @@ -1105,7 +1208,7 @@ func (m *MetaEvent) Reset() { *m = MetaEvent{} } func (m *MetaEvent) String() string { return proto.CompactTextString(m) } func (*MetaEvent) ProtoMessage() {} func (*MetaEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{12} + return fileDescriptor_4f2d38e344f9dbf5, []int{13} } func (m *MetaEvent) XXX_Unmarshal(b []byte) error { @@ -1156,7 +1259,7 @@ func (m *BuildEvent) Reset() { *m = BuildEvent{} } func (m *BuildEvent) String() string { return proto.CompactTextString(m) } func (*BuildEvent) ProtoMessage() {} func (*BuildEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{13} + return fileDescriptor_4f2d38e344f9dbf5, []int{14} } func (m *BuildEvent) XXX_Unmarshal(b []byte) error { @@ -1220,7 +1323,7 @@ func (m *DeployEvent) Reset() { *m = DeployEvent{} } func (m *DeployEvent) String() string { return proto.CompactTextString(m) } func (*DeployEvent) ProtoMessage() {} func (*DeployEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{14} + return fileDescriptor_4f2d38e344f9dbf5, []int{15} } func (m *DeployEvent) XXX_Unmarshal(b []byte) error { @@ -1277,7 +1380,7 @@ func (m *StatusCheckEvent) Reset() { *m = StatusCheckEvent{} } func (m *StatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*StatusCheckEvent) ProtoMessage() {} func (*StatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{15} + return fileDescriptor_4f2d38e344f9dbf5, []int{16} } func (m *StatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1345,7 +1448,7 @@ func (m *ResourceStatusCheckEvent) Reset() { *m = ResourceStatusCheckEve func (m *ResourceStatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*ResourceStatusCheckEvent) ProtoMessage() {} func (*ResourceStatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{16} + return fileDescriptor_4f2d38e344f9dbf5, []int{17} } func (m *ResourceStatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1414,7 +1517,7 @@ func (m *PortEvent) Reset() { *m = PortEvent{} } func (m *PortEvent) String() string { return proto.CompactTextString(m) } func (*PortEvent) ProtoMessage() {} func (*PortEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{17} + return fileDescriptor_4f2d38e344f9dbf5, []int{18} } func (m *PortEvent) XXX_Unmarshal(b []byte) error { @@ -1514,7 +1617,7 @@ func (m *FileSyncEvent) Reset() { *m = FileSyncEvent{} } func (m *FileSyncEvent) String() string { return proto.CompactTextString(m) } func (*FileSyncEvent) ProtoMessage() {} func (*FileSyncEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{18} + return fileDescriptor_4f2d38e344f9dbf5, []int{19} } func (m *FileSyncEvent) XXX_Unmarshal(b []byte) error { @@ -1589,7 +1692,7 @@ func (m *DebuggingContainerEvent) Reset() { *m = DebuggingContainerEvent func (m *DebuggingContainerEvent) String() string { return proto.CompactTextString(m) } func (*DebuggingContainerEvent) ProtoMessage() {} func (*DebuggingContainerEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{19} + return fileDescriptor_4f2d38e344f9dbf5, []int{20} } func (m *DebuggingContainerEvent) XXX_Unmarshal(b []byte) error { @@ -1680,7 +1783,7 @@ func (m *LogEntry) Reset() { *m = LogEntry{} } func (m *LogEntry) String() string { return proto.CompactTextString(m) } func (*LogEntry) ProtoMessage() {} func (*LogEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{20} + return fileDescriptor_4f2d38e344f9dbf5, []int{21} } func (m *LogEntry) XXX_Unmarshal(b []byte) error { @@ -1733,7 +1836,7 @@ func (m *UserIntentRequest) Reset() { *m = UserIntentRequest{} } func (m *UserIntentRequest) String() string { return proto.CompactTextString(m) } func (*UserIntentRequest) ProtoMessage() {} func (*UserIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{21} + return fileDescriptor_4f2d38e344f9dbf5, []int{22} } func (m *UserIntentRequest) XXX_Unmarshal(b []byte) error { @@ -1775,7 +1878,7 @@ func (m *Intent) Reset() { *m = Intent{} } func (m *Intent) String() string { return proto.CompactTextString(m) } func (*Intent) ProtoMessage() {} func (*Intent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{22} + return fileDescriptor_4f2d38e344f9dbf5, []int{23} } func (m *Intent) XXX_Unmarshal(b []byte) error { @@ -1842,6 +1945,7 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "proto.StatusCheckState.ResourcesEntry") proto.RegisterType((*FileSyncState)(nil), "proto.FileSyncState") proto.RegisterType((*Event)(nil), "proto.Event") + proto.RegisterType((*DevLoopEvent)(nil), "proto.DevLoopEvent") proto.RegisterType((*MetaEvent)(nil), "proto.MetaEvent") proto.RegisterType((*BuildEvent)(nil), "proto.BuildEvent") proto.RegisterType((*DeployEvent)(nil), "proto.DeployEvent") @@ -1859,133 +1963,142 @@ func init() { func init() { proto.RegisterFile("skaffold.proto", fileDescriptor_4f2d38e344f9dbf5) } var fileDescriptor_4f2d38e344f9dbf5 = []byte{ - // 2015 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4b, 0x73, 0x1b, 0xc7, - 0x11, 0xd6, 0x62, 0xf1, 0xda, 0xe6, 0x43, 0xcb, 0x11, 0x69, 0xc1, 0x10, 0x2d, 0x31, 0x1b, 0x89, - 0x52, 0xd1, 0x0e, 0x28, 0x4b, 0xa9, 0x94, 0x8a, 0xa5, 0x24, 0x05, 0x2e, 0xd6, 0x04, 0x04, 0x70, - 0xc1, 0x1a, 0x00, 0x51, 0xa4, 0xaa, 0x14, 0x6a, 0x09, 0x0c, 0x61, 0x94, 0x00, 0x2c, 0xb2, 0xbb, - 0x90, 0xc3, 0x1c, 0x7c, 0xf0, 0x31, 0x27, 0x27, 0x8e, 0x53, 0x95, 0x1f, 0x90, 0x9c, 0x12, 0xe7, - 0x67, 0x24, 0xf7, 0xfc, 0x05, 0xe7, 0x94, 0x6b, 0x1e, 0x95, 0x5b, 0x6a, 0x1e, 0xbb, 0x3b, 0x8b, - 0x07, 0x59, 0x2e, 0x9f, 0xb0, 0x33, 0xfd, 0xf5, 0xd7, 0x3d, 0x3d, 0x3d, 0xdd, 0x33, 0x80, 0x4d, - 0xff, 0x8d, 0x73, 0x71, 0xe1, 0x8e, 0xfa, 0xa5, 0xa9, 0xe7, 0x06, 0x2e, 0xca, 0xb0, 0x9f, 0xe2, - 0xee, 0xc0, 0x75, 0x07, 0x23, 0x72, 0xe8, 0x4c, 0x87, 0x87, 0xce, 0x64, 0xe2, 0x06, 0x4e, 0x30, - 0x74, 0x27, 0x3e, 0x07, 0x15, 0xef, 0x09, 0x29, 0x1b, 0x9d, 0xcf, 0x2e, 0x0e, 0x83, 0xe1, 0x98, - 0xf8, 0x81, 0x33, 0x9e, 0x0a, 0xc0, 0x9d, 0x79, 0x00, 0x19, 0x4f, 0x83, 0x4b, 0x2e, 0x34, 0x9e, - 0xc2, 0x46, 0x2b, 0x70, 0x02, 0x82, 0x89, 0x3f, 0x75, 0x27, 0x3e, 0x41, 0x06, 0x64, 0x7c, 0x3a, - 0x51, 0x50, 0xf6, 0x94, 0x47, 0x6b, 0x4f, 0xd6, 0x39, 0xae, 0xc4, 0x41, 0x5c, 0x64, 0xec, 0x42, - 0x3e, 0xc2, 0xeb, 0xa0, 0x8e, 0xfd, 0x01, 0x43, 0x6b, 0x98, 0x7e, 0x1a, 0xef, 0x41, 0x0e, 0x93, - 0x9f, 0xcf, 0x88, 0x1f, 0x20, 0x04, 0xe9, 0x89, 0x33, 0x26, 0x42, 0xca, 0xbe, 0x8d, 0x2f, 0xd3, - 0x90, 0x61, 0x6c, 0xe8, 0x43, 0x80, 0xf3, 0xd9, 0x70, 0xd4, 0x6f, 0x49, 0xf6, 0xb6, 0x84, 0xbd, - 0xe3, 0x48, 0x80, 0x25, 0x10, 0xfa, 0x3e, 0xac, 0xf5, 0xc9, 0x74, 0xe4, 0x5e, 0x72, 0x9d, 0x14, - 0xd3, 0x41, 0x42, 0xa7, 0x12, 0x4b, 0xb0, 0x0c, 0x43, 0x55, 0xd8, 0xbc, 0x70, 0xbd, 0x4f, 0x1c, - 0xaf, 0x4f, 0xfa, 0x67, 0xae, 0x17, 0xf8, 0x85, 0xf4, 0x9e, 0xfa, 0x68, 0xed, 0xc9, 0x9e, 0xbc, - 0xb8, 0xd2, 0x47, 0x09, 0x88, 0x35, 0x09, 0xbc, 0x4b, 0x3c, 0xa7, 0x87, 0x4c, 0xd0, 0x69, 0x08, - 0x66, 0xbe, 0xf9, 0x31, 0xe9, 0xbd, 0xe1, 0x4e, 0x64, 0x98, 0x13, 0xb7, 0x25, 0x2e, 0x59, 0x8c, - 0x17, 0x14, 0xd0, 0x11, 0x6c, 0x5c, 0x0c, 0x47, 0xa4, 0x75, 0x39, 0xe9, 0x71, 0x86, 0x2c, 0x63, - 0xd8, 0x16, 0x0c, 0x1f, 0xc9, 0x32, 0x9c, 0x84, 0xa2, 0x33, 0xb8, 0xd5, 0x27, 0xe7, 0xb3, 0xc1, - 0x60, 0x38, 0x19, 0x98, 0xee, 0x24, 0x70, 0x86, 0x13, 0xe2, 0xf9, 0x85, 0x1c, 0x5b, 0xcf, 0xdd, - 0x28, 0x10, 0xf3, 0x08, 0xeb, 0x2d, 0x99, 0x04, 0x78, 0x99, 0x2a, 0x7a, 0x1f, 0xf2, 0x63, 0x12, - 0x38, 0x7d, 0x27, 0x70, 0x0a, 0x79, 0xe6, 0xc8, 0x4d, 0x41, 0x73, 0x2a, 0xa6, 0x71, 0x04, 0x28, - 0xb6, 0xe0, 0xd6, 0x92, 0x30, 0xd1, 0x24, 0x78, 0x43, 0x2e, 0xd9, 0x16, 0x66, 0x30, 0xfd, 0x44, - 0xfb, 0x90, 0x79, 0xeb, 0x8c, 0x66, 0xe1, 0x16, 0xe9, 0x82, 0x92, 0xea, 0x70, 0x5f, 0xb8, 0xf8, - 0x28, 0xf5, 0x4c, 0x79, 0x91, 0xce, 0xab, 0x7a, 0xda, 0xf8, 0x87, 0x02, 0xf9, 0xd0, 0x22, 0x3a, - 0x80, 0x0c, 0xdb, 0x75, 0x91, 0x15, 0xdb, 0x72, 0x56, 0x44, 0x6e, 0x71, 0x08, 0xfa, 0x1e, 0x64, - 0xf9, 0x66, 0x0b, 0x5b, 0x3b, 0x89, 0x74, 0x88, 0xd0, 0x02, 0x84, 0x7e, 0x0c, 0xe0, 0xf4, 0xfb, - 0x43, 0x7a, 0x84, 0x9c, 0x51, 0xa1, 0xc7, 0x02, 0x77, 0x6f, 0x6e, 0xc5, 0xa5, 0x72, 0x84, 0xe0, - 0x79, 0x20, 0xa9, 0x14, 0x7f, 0x08, 0x37, 0xe7, 0xc4, 0xf2, 0xfa, 0x35, 0xbe, 0xfe, 0x6d, 0x79, - 0xfd, 0x9a, 0xb4, 0x5a, 0xe3, 0x9f, 0x29, 0xd8, 0x48, 0xac, 0x03, 0x7d, 0x00, 0x5b, 0x93, 0xd9, - 0xf8, 0x9c, 0x78, 0xcd, 0x8b, 0xb2, 0x17, 0x0c, 0x2f, 0x9c, 0x5e, 0xe0, 0x8b, 0x58, 0x2e, 0x0a, - 0xd0, 0x33, 0xc8, 0xb3, 0x75, 0xd3, 0x6d, 0x4f, 0x31, 0xef, 0x77, 0x97, 0x45, 0x87, 0x8f, 0x88, - 0x87, 0x23, 0x34, 0xba, 0x0f, 0xe9, 0xe0, 0x72, 0x4a, 0x0a, 0xea, 0x9e, 0xf2, 0x68, 0x33, 0xda, - 0x12, 0x86, 0x6b, 0x5f, 0x4e, 0x09, 0x66, 0x52, 0x54, 0x59, 0x12, 0x9f, 0xfb, 0x4b, 0x2d, 0x5c, - 0x15, 0xa4, 0x13, 0xc8, 0x09, 0x07, 0xd0, 0xbe, 0x30, 0xab, 0x30, 0xb3, 0x48, 0xa6, 0x22, 0x9e, - 0x64, 0x78, 0x1b, 0x32, 0x3d, 0x77, 0x36, 0x09, 0x58, 0xc8, 0x32, 0x98, 0x0f, 0xbe, 0x6d, 0xb4, - 0xff, 0xaa, 0xc0, 0x66, 0x32, 0x11, 0xd0, 0x73, 0xd0, 0x78, 0x2a, 0xd0, 0x08, 0x2a, 0x73, 0x07, - 0x47, 0x46, 0x8a, 0x21, 0xf1, 0x70, 0xac, 0x80, 0x3e, 0x80, 0x5c, 0x6f, 0x34, 0xf3, 0x03, 0xe2, - 0x31, 0x63, 0xf1, 0x82, 0x4c, 0x3e, 0xcb, 0x16, 0x14, 0x42, 0x8a, 0x35, 0xc8, 0x87, 0x24, 0xe8, - 0x61, 0x22, 0x0e, 0xb7, 0x12, 0x26, 0xaf, 0x0f, 0x84, 0xf1, 0x2b, 0x05, 0x20, 0xae, 0x8a, 0xe8, - 0x47, 0xa0, 0x39, 0x52, 0xb2, 0xc8, 0xe5, 0x2c, 0x46, 0x95, 0xa2, 0xb4, 0xe1, 0x3b, 0x14, 0xab, - 0x14, 0x9f, 0xc3, 0x66, 0x52, 0xf8, 0x8d, 0xc2, 0xfa, 0x00, 0xd6, 0xa4, 0x6a, 0x8b, 0xde, 0x81, - 0x2c, 0xaf, 0x72, 0x42, 0x5b, 0x8c, 0x8c, 0xaf, 0x14, 0xd0, 0xe7, 0x0b, 0xe2, 0x2a, 0x30, 0xaa, - 0x80, 0xe6, 0x11, 0xdf, 0x9d, 0x79, 0x3d, 0x12, 0x66, 0xf6, 0xfe, 0x8a, 0xa2, 0x5a, 0xc2, 0x21, - 0x50, 0xac, 0x2b, 0x52, 0xa4, 0xeb, 0x4a, 0x0a, 0xbf, 0xd1, 0xba, 0x1e, 0xc2, 0x46, 0xa2, 0xfc, - 0xae, 0x5c, 0xd9, 0x1f, 0xd3, 0x90, 0x61, 0x85, 0x0c, 0x3d, 0x06, 0x8d, 0x96, 0x47, 0x36, 0x10, - 0xe5, 0x4a, 0x97, 0xca, 0x09, 0x9b, 0xaf, 0xde, 0xc0, 0x31, 0x08, 0x3d, 0x15, 0x7d, 0x8f, 0xab, - 0xa4, 0x16, 0xfb, 0x5e, 0xa8, 0x23, 0xc1, 0xd0, 0x0f, 0xc2, 0xce, 0xc7, 0xb5, 0xd4, 0x25, 0x9d, - 0x2f, 0x54, 0x93, 0x81, 0xd4, 0xbd, 0x69, 0x58, 0x74, 0x0b, 0xe9, 0xe5, 0xc5, 0x98, 0xba, 0x17, - 0x81, 0x90, 0x95, 0xe8, 0x71, 0x5c, 0x71, 0x65, 0x8f, 0x0b, 0xf5, 0x17, 0x54, 0xd0, 0xcf, 0xa0, - 0x10, 0xee, 0xca, 0x3c, 0x5e, 0x34, 0xbc, 0xb0, 0xea, 0xe2, 0x15, 0xb0, 0xea, 0x0d, 0xbc, 0x92, - 0x02, 0x3d, 0x8f, 0x9b, 0x28, 0xe7, 0xcc, 0x2d, 0x6d, 0xa2, 0x21, 0x51, 0x12, 0x8c, 0x5e, 0xc3, - 0xed, 0xfe, 0xf2, 0x26, 0x29, 0x7a, 0xe0, 0x35, 0xad, 0xb4, 0x7a, 0x03, 0xaf, 0x22, 0x38, 0x5e, - 0x07, 0x20, 0xf4, 0xa3, 0x4b, 0x0f, 0xb3, 0x61, 0x83, 0x16, 0xa5, 0x01, 0x4d, 0x3c, 0x42, 0x73, - 0x52, 0x24, 0x13, 0x1f, 0x24, 0x3a, 0x70, 0xea, 0x9a, 0x0e, 0x6c, 0x7c, 0x2a, 0xaa, 0x00, 0x27, - 0x2c, 0x42, 0x3e, 0x3c, 0xd2, 0x82, 0x33, 0x1a, 0x4b, 0xa9, 0x9b, 0x4a, 0x9c, 0x33, 0x1d, 0x54, - 0xe2, 0x79, 0x2c, 0x83, 0x34, 0x4c, 0x3f, 0xd1, 0x01, 0xe4, 0x88, 0xe7, 0x99, 0x6e, 0x9f, 0xb0, - 0x0c, 0x89, 0x7b, 0x83, 0xe5, 0x79, 0x2e, 0x9b, 0xc7, 0x21, 0xc0, 0xe8, 0x85, 0x27, 0x9f, 0x3b, - 0xb0, 0xea, 0x30, 0x0b, 0x23, 0xa9, 0xa5, 0x46, 0xd4, 0xeb, 0x8c, 0x7c, 0x96, 0xac, 0x1b, 0x57, - 0x9b, 0x2a, 0x40, 0x6e, 0x4c, 0x7c, 0xdf, 0x19, 0x84, 0xe7, 0x39, 0x1c, 0x7e, 0xcb, 0x95, 0xfe, - 0x12, 0x0a, 0xab, 0x32, 0x93, 0xc6, 0x3d, 0xcc, 0xcc, 0x30, 0xee, 0xe1, 0x78, 0x65, 0xdc, 0x25, - 0x3f, 0xd5, 0xa5, 0x7e, 0xa6, 0x23, 0x3f, 0x8d, 0x3f, 0xa4, 0x40, 0x8b, 0x8e, 0x27, 0xda, 0x05, - 0x6d, 0xe4, 0xf6, 0x9c, 0x11, 0x9d, 0x11, 0x17, 0x83, 0x78, 0x02, 0xdd, 0x05, 0xf0, 0xc8, 0xd8, - 0x0d, 0x08, 0x13, 0xf3, 0x9e, 0x21, 0xcd, 0x50, 0xbb, 0x53, 0xb7, 0x6f, 0xd3, 0x7b, 0xb8, 0xb0, - 0x2b, 0x86, 0xe8, 0x3e, 0x6c, 0xf4, 0xc2, 0xdc, 0x65, 0x72, 0xee, 0x41, 0x72, 0x92, 0x5a, 0xa7, - 0x17, 0x77, 0x7f, 0xea, 0xf4, 0xf8, 0x65, 0x57, 0xc3, 0xf1, 0x04, 0x8d, 0x04, 0x2d, 0x1d, 0x4c, - 0x3d, 0xcb, 0x23, 0x11, 0x8e, 0x91, 0x01, 0xeb, 0x61, 0x54, 0x68, 0x7b, 0x63, 0x47, 0x54, 0xc3, - 0x89, 0x39, 0x19, 0xc3, 0x38, 0xf2, 0x49, 0x0c, 0xe3, 0x29, 0x40, 0xce, 0xe9, 0xf7, 0x3d, 0xe2, - 0xfb, 0x05, 0x8d, 0xaf, 0x40, 0x0c, 0x8d, 0xdf, 0x2b, 0x71, 0xc1, 0x8e, 0x62, 0x45, 0x8f, 0xba, - 0xc9, 0x1a, 0xa8, 0x88, 0x55, 0x34, 0x41, 0x0f, 0xe0, 0x70, 0x1c, 0x67, 0x0a, 0x1f, 0x48, 0x3b, - 0xa6, 0x2e, 0x4b, 0xe2, 0xf4, 0xd2, 0xfc, 0xc9, 0x5c, 0x97, 0x3f, 0xff, 0x4a, 0xc1, 0xed, 0x15, - 0xe5, 0xe3, 0xaa, 0x5c, 0x0e, 0xf7, 0x2a, 0x75, 0xcd, 0x5e, 0xa9, 0xd7, 0xee, 0x55, 0x7a, 0xc9, - 0x5e, 0x45, 0xd5, 0x22, 0x33, 0x57, 0x2d, 0x0a, 0x90, 0xf3, 0x66, 0x13, 0xfa, 0x76, 0x14, 0xdb, - 0x18, 0x0e, 0x69, 0x7e, 0x7d, 0xe2, 0x7a, 0x6f, 0x86, 0x93, 0x41, 0x65, 0xe8, 0x89, 0x3d, 0x94, - 0x66, 0x90, 0x0d, 0xc0, 0x4a, 0x21, 0x7f, 0x59, 0xe5, 0x59, 0xe3, 0x2e, 0x5d, 0x5d, 0x3e, 0xf9, - 0xbc, 0xf4, 0xce, 0x92, 0x18, 0xe8, 0x8d, 0x6f, 0x4e, 0x7c, 0x5d, 0x0b, 0xdf, 0x90, 0x5b, 0xf8, - 0xa7, 0x90, 0x6f, 0xb8, 0x03, 0xae, 0xf7, 0x0c, 0xb4, 0xe8, 0x35, 0x2c, 0x7a, 0x73, 0xb1, 0xc4, - 0x9f, 0xc3, 0xa5, 0xf0, 0x39, 0x5c, 0x6a, 0x87, 0x08, 0x1c, 0x83, 0xe9, 0x33, 0x98, 0x48, 0xed, - 0x39, 0x7c, 0x06, 0x8b, 0xb7, 0x0b, 0x49, 0x56, 0x73, 0x55, 0xaa, 0xe6, 0xc6, 0x11, 0x6c, 0x75, - 0x7c, 0xe2, 0xd5, 0x26, 0x01, 0x85, 0x8a, 0x87, 0xf0, 0x03, 0xc8, 0x0e, 0xd9, 0x84, 0xf0, 0x62, - 0x43, 0xf0, 0x09, 0x94, 0x10, 0x1a, 0x2f, 0x20, 0xcb, 0x67, 0x28, 0x77, 0xfc, 0x00, 0xca, 0x87, - 0x4f, 0x1d, 0x04, 0x69, 0xff, 0x72, 0xd2, 0x63, 0x4e, 0xe5, 0x31, 0xfb, 0xa6, 0xa9, 0x24, 0x9e, - 0x3f, 0x2a, 0x9b, 0x15, 0xa3, 0x03, 0x17, 0xd6, 0xa4, 0x3b, 0x36, 0x2a, 0xc0, 0x76, 0xc7, 0xae, - 0xdb, 0xcd, 0x97, 0x76, 0xf7, 0xb8, 0x53, 0x6b, 0x54, 0x2c, 0xdc, 0x6d, 0xbf, 0x3a, 0xb3, 0xf4, - 0x1b, 0x28, 0x07, 0xea, 0x8b, 0xda, 0xb1, 0xae, 0x20, 0x0d, 0x32, 0xc7, 0xe5, 0xd7, 0x56, 0x43, - 0x4f, 0xa1, 0x4d, 0x00, 0x86, 0x3a, 0x2b, 0x9b, 0xf5, 0x96, 0xae, 0x22, 0x80, 0xac, 0xd9, 0x69, - 0xb5, 0x9b, 0xa7, 0x7a, 0x9a, 0x7e, 0xd7, 0xcb, 0x76, 0xad, 0xde, 0xd4, 0x33, 0xf4, 0xbb, 0xd2, - 0x34, 0xeb, 0x16, 0xd6, 0xb3, 0x07, 0x15, 0xd0, 0xa2, 0xb7, 0x04, 0x7a, 0x07, 0x50, 0xc2, 0x5c, - 0x68, 0x6c, 0x0d, 0x72, 0x66, 0xa3, 0xd3, 0x6a, 0x5b, 0x58, 0x57, 0xa8, 0xe5, 0x13, 0xf3, 0x58, - 0x4f, 0x51, 0xcb, 0x8d, 0xa6, 0x59, 0x6e, 0xe8, 0xea, 0x41, 0x13, 0xd6, 0xe5, 0x2b, 0x31, 0x7a, - 0x17, 0x76, 0x42, 0xa2, 0x8a, 0x75, 0xd6, 0x68, 0xbe, 0x8a, 0x1d, 0xcf, 0x43, 0xba, 0x6a, 0x35, - 0x4e, 0x75, 0x05, 0x6d, 0x80, 0x56, 0x67, 0xee, 0xd5, 0x5e, 0x5b, 0x7a, 0x8a, 0x1a, 0xa9, 0x77, - 0x8e, 0x2d, 0xb3, 0x4d, 0x09, 0x6b, 0xb0, 0x26, 0x5d, 0xcd, 0xe5, 0x38, 0x08, 0x47, 0x42, 0xba, - 0x75, 0xc8, 0x9f, 0xd6, 0xec, 0x1a, 0xd5, 0x14, 0xbe, 0xd5, 0x2d, 0xee, 0x5b, 0xb3, 0x5d, 0xb5, - 0xb0, 0xae, 0x1e, 0xfc, 0x2f, 0x0d, 0x5a, 0x74, 0xd0, 0xd1, 0x6d, 0xb8, 0x65, 0x36, 0x3b, 0x8d, - 0x4a, 0xd7, 0x6e, 0xb6, 0xbb, 0x15, 0xab, 0x6d, 0xe1, 0xd3, 0x9a, 0x4d, 0x89, 0x8a, 0xb0, 0xd3, - 0x6a, 0x97, 0xdb, 0x9d, 0x56, 0xd7, 0xac, 0x5a, 0x66, 0xbd, 0x6b, 0x37, 0xbb, 0x16, 0xc6, 0x4d, - 0xac, 0xff, 0x4d, 0x41, 0x7b, 0x70, 0x27, 0x21, 0xab, 0x9d, 0x96, 0x4f, 0xac, 0xee, 0x59, 0xa7, - 0xd1, 0xa0, 0x18, 0xfd, 0x4f, 0x29, 0x74, 0x1f, 0xee, 0x25, 0x10, 0x66, 0xd3, 0x6e, 0x97, 0x6b, - 0xb6, 0x85, 0xbb, 0x26, 0xb6, 0xca, 0xed, 0x9a, 0x7d, 0xa2, 0xff, 0x39, 0x85, 0xbe, 0x0b, 0x77, - 0x13, 0x28, 0xdc, 0xb1, 0x25, 0x24, 0xa5, 0xfa, 0x2a, 0x85, 0xf6, 0xe1, 0x3b, 0x2b, 0xa8, 0xb8, - 0xb3, 0xe5, 0xb6, 0x55, 0xd1, 0xff, 0x72, 0x15, 0x0e, 0x5b, 0xad, 0x76, 0x19, 0x33, 0xa3, 0x5f, - 0x2f, 0xe2, 0xec, 0x66, 0xc5, 0xea, 0x9e, 0x5a, 0xa7, 0x4d, 0xfc, 0xaa, 0x7b, 0x86, 0xad, 0x56, - 0xab, 0x83, 0x2d, 0xfd, 0x73, 0x75, 0x61, 0x09, 0x0c, 0x57, 0xa9, 0xb5, 0xea, 0x31, 0xea, 0xd7, - 0x2a, 0x3a, 0x80, 0x07, 0x8b, 0x28, 0xdb, 0x6a, 0xbf, 0x6c, 0xe2, 0x7a, 0xb7, 0x63, 0x97, 0x7f, - 0x52, 0xae, 0x35, 0xca, 0xc7, 0x0d, 0x4b, 0xff, 0x8d, 0xba, 0xb0, 0x5c, 0x86, 0x3d, 0xab, 0x55, - 0x62, 0xc2, 0x2f, 0x56, 0x98, 0xed, 0xd8, 0x2d, 0xb3, 0x6a, 0x55, 0x3a, 0x9c, 0xea, 0xb7, 0x2a, - 0x32, 0xe0, 0xbd, 0x65, 0x28, 0x6c, 0x95, 0xcd, 0x2a, 0xc3, 0x7c, 0xa9, 0x2e, 0xec, 0x12, 0x77, - 0xad, 0xd9, 0xee, 0x62, 0xab, 0x5c, 0x79, 0xa5, 0xff, 0x4e, 0x45, 0xef, 0xc2, 0x76, 0x02, 0x21, - 0x72, 0x4a, 0xff, 0xb7, 0x8a, 0x1e, 0x82, 0xb1, 0x4c, 0x34, 0xe7, 0xc9, 0x7f, 0x54, 0xf4, 0x3e, - 0xec, 0xaf, 0x08, 0xfb, 0xcb, 0x72, 0x8d, 0xc6, 0x3c, 0x62, 0xfd, 0xaf, 0xfa, 0xe4, 0x73, 0x15, - 0x6e, 0xb6, 0xc4, 0xdf, 0x83, 0x2d, 0xe2, 0xbd, 0x1d, 0xf6, 0x08, 0x32, 0x21, 0x7f, 0x42, 0x02, - 0xf1, 0x50, 0x59, 0xa8, 0x6b, 0xd6, 0x78, 0x1a, 0x5c, 0x16, 0x13, 0x7f, 0xe0, 0x19, 0x5b, 0x9f, - 0xfd, 0xfd, 0xeb, 0x2f, 0x52, 0x6b, 0x48, 0x3b, 0x7c, 0xfb, 0xe1, 0x21, 0xfb, 0x33, 0x0f, 0x9d, - 0x40, 0x9e, 0x55, 0xb5, 0x86, 0x3b, 0x40, 0xe1, 0xbd, 0x33, 0x2c, 0xa0, 0xc5, 0xf9, 0x09, 0x63, - 0x87, 0x11, 0xdc, 0x44, 0x1b, 0x94, 0x80, 0x5f, 0x73, 0x47, 0xee, 0xe0, 0x91, 0xf2, 0x58, 0x41, - 0x27, 0x90, 0x65, 0x44, 0xfe, 0x4a, 0x5f, 0x16, 0xd8, 0x10, 0x63, 0x5b, 0x47, 0x10, 0xb1, 0xf9, - 0x8f, 0x15, 0xf4, 0x53, 0xc8, 0x59, 0xbf, 0x20, 0xbd, 0x59, 0x40, 0x50, 0x41, 0x68, 0x2c, 0x54, - 0xd4, 0xe2, 0x0a, 0x1b, 0xc6, 0x1d, 0x46, 0xb9, 0x63, 0xac, 0x31, 0x4a, 0x4e, 0x73, 0x24, 0xea, - 0x2b, 0x6a, 0x40, 0xb6, 0xea, 0x4c, 0xfa, 0x23, 0x82, 0x12, 0x05, 0x7d, 0x25, 0xd9, 0x2e, 0x23, - 0x7b, 0xc7, 0xd8, 0x8a, 0xfd, 0x3b, 0xfc, 0x98, 0x11, 0x1c, 0x29, 0x07, 0xe7, 0x59, 0x86, 0x7e, - 0xfa, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0x57, 0x1e, 0x3a, 0xb7, 0x15, 0x00, 0x00, + // 2147 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xc9, 0x93, 0x1b, 0x49, + 0xd5, 0xb7, 0x54, 0xda, 0xea, 0xf5, 0xe2, 0xea, 0x74, 0xdb, 0xd6, 0xc8, 0xed, 0xe5, 0xab, 0xcf, + 0x5b, 0xf4, 0x0c, 0xdd, 0x1e, 0x9b, 0x20, 0x8c, 0xc3, 0x40, 0xa8, 0x4b, 0xe9, 0x56, 0x59, 0xea, + 0x52, 0x47, 0xaa, 0x34, 0xc6, 0x8e, 0x20, 0x14, 0x65, 0x29, 0x5b, 0xa3, 0xb0, 0xa4, 0x12, 0x55, + 0x25, 0x0f, 0xcd, 0x61, 0x0e, 0x3e, 0x72, 0x1a, 0x18, 0x86, 0x08, 0xee, 0x70, 0x83, 0xe1, 0x2f, + 0x60, 0xb9, 0xc1, 0x9d, 0x13, 0x47, 0x22, 0x86, 0x13, 0x57, 0xb6, 0x23, 0x91, 0x4b, 0x6d, 0x5a, + 0xdc, 0x31, 0x31, 0xc1, 0x49, 0x95, 0xf9, 0x7e, 0xef, 0xf7, 0x5e, 0xbe, 0x7c, 0xf9, 0x32, 0x9f, + 0x60, 0xd3, 0x7f, 0xe5, 0x9c, 0x9c, 0xb8, 0xa3, 0xfe, 0xde, 0xd4, 0x73, 0x03, 0x17, 0xe5, 0xf9, + 0x4f, 0x65, 0x67, 0xe0, 0xba, 0x83, 0x11, 0xdd, 0x77, 0xa6, 0xc3, 0x7d, 0x67, 0x32, 0x71, 0x03, + 0x27, 0x18, 0xba, 0x13, 0x5f, 0x80, 0x2a, 0xd7, 0xa5, 0x94, 0x8f, 0x5e, 0xce, 0x4e, 0xf6, 0x83, + 0xe1, 0x98, 0xfa, 0x81, 0x33, 0x9e, 0x4a, 0xc0, 0x95, 0x79, 0x00, 0x1d, 0x4f, 0x83, 0x53, 0x21, + 0xd4, 0x1f, 0xc0, 0x46, 0x3b, 0x70, 0x02, 0x4a, 0xa8, 0x3f, 0x75, 0x27, 0x3e, 0x45, 0x3a, 0xe4, + 0x7d, 0x36, 0x51, 0xce, 0xdc, 0xc8, 0xdc, 0x5d, 0xbb, 0xbf, 0x2e, 0x70, 0x7b, 0x02, 0x24, 0x44, + 0xfa, 0x0e, 0x94, 0x22, 0xbc, 0x06, 0xca, 0xd8, 0x1f, 0x70, 0xb4, 0x4a, 0xd8, 0xa7, 0x7e, 0x15, + 0x8a, 0x84, 0x7e, 0x7f, 0x46, 0xfd, 0x00, 0x21, 0xc8, 0x4d, 0x9c, 0x31, 0x95, 0x52, 0xfe, 0xad, + 0x7f, 0x96, 0x83, 0x3c, 0x67, 0x43, 0xef, 0x03, 0xbc, 0x9c, 0x0d, 0x47, 0xfd, 0x76, 0xc2, 0xde, + 0x96, 0xb4, 0x77, 0x10, 0x09, 0x48, 0x02, 0x84, 0xbe, 0x0e, 0x6b, 0x7d, 0x3a, 0x1d, 0xb9, 0xa7, + 0x42, 0x27, 0xcb, 0x75, 0x90, 0xd4, 0xa9, 0xc5, 0x12, 0x92, 0x84, 0xa1, 0x3a, 0x6c, 0x9e, 0xb8, + 0xde, 0x47, 0x8e, 0xd7, 0xa7, 0xfd, 0x63, 0xd7, 0x0b, 0xfc, 0x72, 0xee, 0x86, 0x72, 0x77, 0xed, + 0xfe, 0x8d, 0xe4, 0xe2, 0xf6, 0x9e, 0xa4, 0x20, 0x78, 0x12, 0x78, 0xa7, 0x64, 0x4e, 0x0f, 0x19, + 0xa0, 0xb1, 0x10, 0xcc, 0x7c, 0xe3, 0x43, 0xda, 0x7b, 0x25, 0x9c, 0xc8, 0x73, 0x27, 0x2e, 0x27, + 0xb8, 0x92, 0x62, 0xb2, 0xa0, 0x80, 0x1e, 0xc1, 0xc6, 0xc9, 0x70, 0x44, 0xdb, 0xa7, 0x93, 0x9e, + 0x60, 0x28, 0x70, 0x86, 0x6d, 0xc9, 0xf0, 0x24, 0x29, 0x23, 0x69, 0x28, 0x3a, 0x86, 0x0b, 0x7d, + 0xfa, 0x72, 0x36, 0x18, 0x0c, 0x27, 0x03, 0xc3, 0x9d, 0x04, 0xce, 0x70, 0x42, 0x3d, 0xbf, 0x5c, + 0xe4, 0xeb, 0xb9, 0x16, 0x05, 0x62, 0x1e, 0x81, 0x5f, 0xd3, 0x49, 0x40, 0x96, 0xa9, 0xa2, 0x77, + 0xa1, 0x34, 0xa6, 0x81, 0xd3, 0x77, 0x02, 0xa7, 0x5c, 0xe2, 0x8e, 0x9c, 0x97, 0x34, 0x47, 0x72, + 0x9a, 0x44, 0x80, 0x4a, 0x1b, 0x2e, 0x2c, 0x09, 0x13, 0x4b, 0x82, 0x57, 0xf4, 0x94, 0x6f, 0x61, + 0x9e, 0xb0, 0x4f, 0x74, 0x1b, 0xf2, 0xaf, 0x9d, 0xd1, 0x2c, 0xdc, 0x22, 0x4d, 0x52, 0x32, 0x1d, + 0xe1, 0x8b, 0x10, 0x3f, 0xca, 0x3e, 0xcc, 0x3c, 0xcd, 0x95, 0x14, 0x2d, 0xa7, 0xff, 0x2d, 0x03, + 0xa5, 0xd0, 0x22, 0xda, 0x85, 0x3c, 0xdf, 0x75, 0x99, 0x15, 0xdb, 0xc9, 0xac, 0x88, 0xdc, 0x12, + 0x10, 0xf4, 0x35, 0x28, 0x88, 0xcd, 0x96, 0xb6, 0x2e, 0xa6, 0xd2, 0x21, 0x42, 0x4b, 0x10, 0xfa, + 0x0e, 0x80, 0xd3, 0xef, 0x0f, 0xd9, 0x11, 0x72, 0x46, 0xe5, 0x1e, 0x0f, 0xdc, 0xf5, 0xb9, 0x15, + 0xef, 0x55, 0x23, 0x84, 0xc8, 0x83, 0x84, 0x4a, 0xe5, 0x5b, 0x70, 0x7e, 0x4e, 0x9c, 0x5c, 0xbf, + 0x2a, 0xd6, 0xbf, 0x9d, 0x5c, 0xbf, 0x9a, 0x58, 0xad, 0xfe, 0xf7, 0x2c, 0x6c, 0xa4, 0xd6, 0x81, + 0xde, 0x83, 0xad, 0xc9, 0x6c, 0xfc, 0x92, 0x7a, 0xad, 0x93, 0xaa, 0x17, 0x0c, 0x4f, 0x9c, 0x5e, + 0xe0, 0xcb, 0x58, 0x2e, 0x0a, 0xd0, 0x43, 0x28, 0xf1, 0x75, 0xb3, 0x6d, 0xcf, 0x72, 0xef, 0x77, + 0x96, 0x45, 0x47, 0x8c, 0xa8, 0x47, 0x22, 0x34, 0xba, 0x09, 0xb9, 0xe0, 0x74, 0x4a, 0xcb, 0xca, + 0x8d, 0xcc, 0xdd, 0xcd, 0x68, 0x4b, 0x38, 0xce, 0x3e, 0x9d, 0x52, 0xc2, 0xa5, 0xa8, 0xb6, 0x24, + 0x3e, 0x37, 0x97, 0x5a, 0x78, 0x5b, 0x90, 0x0e, 0xa1, 0x28, 0x1d, 0x40, 0xb7, 0xa5, 0xd9, 0x0c, + 0x37, 0x8b, 0x92, 0x54, 0xd4, 0x4b, 0x18, 0xde, 0x86, 0x7c, 0xcf, 0x9d, 0x4d, 0x02, 0x1e, 0xb2, + 0x3c, 0x11, 0x83, 0xaf, 0x1a, 0xed, 0x3f, 0x66, 0x60, 0x33, 0x9d, 0x08, 0xe8, 0x31, 0xa8, 0x22, + 0x15, 0x58, 0x04, 0x33, 0x73, 0x07, 0x27, 0x89, 0x94, 0x43, 0xea, 0x91, 0x58, 0x01, 0xbd, 0x07, + 0xc5, 0xde, 0x68, 0xe6, 0x07, 0xd4, 0xe3, 0xc6, 0xe2, 0x05, 0x19, 0x62, 0x96, 0x2f, 0x28, 0x84, + 0x54, 0x4c, 0x28, 0x85, 0x24, 0xe8, 0x4e, 0x2a, 0x0e, 0x17, 0x52, 0x26, 0xcf, 0x0e, 0x84, 0xfe, + 0xa3, 0x0c, 0x40, 0x5c, 0x15, 0xd1, 0xb7, 0x41, 0x75, 0x12, 0xc9, 0x92, 0x2c, 0x67, 0x31, 0x6a, + 0x2f, 0x4a, 0x1b, 0xb1, 0x43, 0xb1, 0x4a, 0xe5, 0x31, 0x6c, 0xa6, 0x85, 0x5f, 0x2a, 0xac, 0xb7, + 0x60, 0x2d, 0x51, 0x6d, 0xd1, 0x25, 0x28, 0x88, 0x2a, 0x27, 0xb5, 0xe5, 0x48, 0xff, 0x3c, 0x03, + 0xda, 0x7c, 0x41, 0x5c, 0x05, 0x46, 0x35, 0x50, 0x3d, 0xea, 0xbb, 0x33, 0xaf, 0x47, 0xc3, 0xcc, + 0xbe, 0xbd, 0xa2, 0xa8, 0xee, 0x91, 0x10, 0x28, 0xd7, 0x15, 0x29, 0xb2, 0x75, 0xa5, 0x85, 0x5f, + 0x6a, 0x5d, 0x77, 0x60, 0x23, 0x55, 0x7e, 0x57, 0xae, 0xec, 0xaf, 0x39, 0xc8, 0xf3, 0x42, 0x86, + 0xee, 0x81, 0xca, 0xca, 0x23, 0x1f, 0xc8, 0x72, 0xa5, 0x25, 0xca, 0x09, 0x9f, 0xaf, 0x9f, 0x23, + 0x31, 0x08, 0x3d, 0x90, 0xf7, 0x9e, 0x50, 0xc9, 0x2e, 0xde, 0x7b, 0xa1, 0x4e, 0x02, 0x86, 0xbe, + 0x11, 0xde, 0x7c, 0x42, 0x4b, 0x59, 0x72, 0xf3, 0x85, 0x6a, 0x49, 0x20, 0x73, 0x6f, 0x1a, 0x16, + 0xdd, 0x72, 0x6e, 0x79, 0x31, 0x66, 0xee, 0x45, 0x20, 0x84, 0x53, 0x77, 0x9c, 0x50, 0x5c, 0x79, + 0xc7, 0x85, 0xfa, 0x0b, 0x2a, 0xe8, 0x7b, 0x50, 0x0e, 0x77, 0x65, 0x1e, 0x2f, 0x2f, 0xbc, 0xb0, + 0xea, 0x92, 0x15, 0xb0, 0xfa, 0x39, 0xb2, 0x92, 0x02, 0x3d, 0x8e, 0x2f, 0x51, 0xc1, 0x59, 0x5c, + 0x7a, 0x89, 0x86, 0x44, 0x69, 0x30, 0x7a, 0x01, 0x97, 0xfb, 0xcb, 0x2f, 0x49, 0x79, 0x07, 0x9e, + 0x71, 0x95, 0xd6, 0xcf, 0x91, 0x55, 0x04, 0xe8, 0x9b, 0xb0, 0xde, 0xa7, 0xaf, 0x9b, 0xae, 0x3b, + 0x15, 0x84, 0x2a, 0x27, 0x8c, 0xcf, 0x7b, 0x2c, 0xaa, 0x9f, 0x23, 0x29, 0xe8, 0xc1, 0x3a, 0x00, + 0x65, 0x1f, 0x5d, 0x56, 0x07, 0xf4, 0x37, 0x19, 0x58, 0x4f, 0xc2, 0xd1, 0x0e, 0xa8, 0xc3, 0x80, + 0x7a, 0xfc, 0xf9, 0x27, 0x2f, 0x88, 0x78, 0x22, 0x91, 0xaa, 0xd9, 0xd4, 0xb9, 0xd2, 0x40, 0xa1, + 0x9e, 0xc7, 0x33, 0x46, 0x25, 0xec, 0x13, 0xed, 0x42, 0x91, 0x7a, 0x9e, 0xe1, 0xf6, 0x29, 0xcf, + 0x88, 0xf8, 0x2e, 0xc0, 0x9e, 0xe7, 0xf2, 0x79, 0x12, 0x02, 0x74, 0x0b, 0xd4, 0x28, 0x8d, 0xd9, + 0xc1, 0xa1, 0xec, 0x4c, 0xc9, 0xc3, 0x20, 0x06, 0xa9, 0x17, 0x44, 0xf6, 0x8c, 0x17, 0x84, 0xfe, + 0xb1, 0xac, 0x62, 0x82, 0xb0, 0x02, 0xa5, 0xb0, 0x24, 0x49, 0xce, 0x68, 0xfc, 0x3f, 0x5a, 0x4f, + 0x2f, 0xac, 0x5c, 0xc2, 0x81, 0x55, 0xc5, 0x48, 0x1a, 0xc9, 0x2e, 0x35, 0xa2, 0x9c, 0x65, 0xe4, + 0x4d, 0xba, 0xee, 0xbd, 0xdd, 0x54, 0x19, 0x8a, 0x63, 0xea, 0xfb, 0xce, 0x20, 0xac, 0x47, 0xe1, + 0xf0, 0x2b, 0xae, 0xf4, 0x87, 0x50, 0x5e, 0x75, 0xb2, 0x58, 0xdc, 0xc3, 0x93, 0x15, 0xc6, 0x3d, + 0x1c, 0xaf, 0x8c, 0x7b, 0xc2, 0x4f, 0x65, 0xa9, 0x9f, 0xb9, 0xc8, 0x4f, 0xfd, 0x97, 0x59, 0x50, + 0xa3, 0xf2, 0xc2, 0xf2, 0x76, 0xe4, 0xf6, 0x9c, 0x11, 0x9b, 0x09, 0xf3, 0x36, 0x9a, 0x40, 0xd7, + 0x00, 0x3c, 0x3a, 0x76, 0x03, 0xca, 0xc5, 0xe2, 0xce, 0x4b, 0xcc, 0x30, 0xbb, 0x53, 0xb7, 0x6f, + 0xb1, 0x3e, 0x42, 0xda, 0x95, 0x43, 0x74, 0x13, 0x36, 0x7a, 0xe1, 0xd9, 0xe3, 0x72, 0xe1, 0x41, + 0x7a, 0x92, 0x59, 0x67, 0x8d, 0x87, 0x3f, 0x75, 0x7a, 0xe2, 0xb1, 0xae, 0x92, 0x78, 0x82, 0x45, + 0x82, 0x95, 0x3e, 0xae, 0x5e, 0x10, 0x91, 0x08, 0xc7, 0x48, 0x87, 0xf5, 0x30, 0x2a, 0xec, 0x7a, + 0xe6, 0x25, 0x46, 0x25, 0xa9, 0xb9, 0x24, 0x86, 0x73, 0x94, 0xd2, 0x18, 0xce, 0x53, 0x86, 0xa2, + 0xd3, 0xef, 0x7b, 0xd4, 0xf7, 0x79, 0x31, 0x50, 0x49, 0x38, 0xd4, 0x7f, 0x9e, 0x89, 0x2f, 0x9c, + 0x28, 0x56, 0xac, 0x54, 0x19, 0xfc, 0x01, 0x20, 0x63, 0x15, 0x4d, 0xb0, 0x03, 0x38, 0x1c, 0xc7, + 0x99, 0x22, 0x06, 0x89, 0x1d, 0x53, 0x96, 0x25, 0x71, 0x6e, 0x69, 0xfe, 0xe4, 0xcf, 0xca, 0x9f, + 0x7f, 0x64, 0xe1, 0xf2, 0x8a, 0xf2, 0xf7, 0xb6, 0x5c, 0x0e, 0xf7, 0x2a, 0x7b, 0xc6, 0x5e, 0x29, + 0x67, 0xee, 0x55, 0x6e, 0xc9, 0x5e, 0x45, 0xd5, 0x22, 0x3f, 0x57, 0x2d, 0xca, 0x50, 0xf4, 0x66, + 0x13, 0xd6, 0xfb, 0xca, 0x6d, 0x0c, 0x87, 0x2c, 0xbf, 0x3e, 0x72, 0xbd, 0x57, 0xc3, 0xc9, 0xa0, + 0x36, 0xf4, 0xe4, 0x1e, 0x26, 0x66, 0x90, 0x05, 0xc0, 0x4b, 0xb9, 0xe8, 0x0c, 0x4b, 0xfc, 0xe1, + 0xb1, 0xf7, 0xf6, 0xf2, 0x2f, 0xe6, 0x13, 0x7d, 0x62, 0x82, 0x81, 0xbd, 0x58, 0xe7, 0xc4, 0x67, + 0x3d, 0x41, 0x36, 0x92, 0x4f, 0x90, 0x8f, 0xa1, 0xd4, 0x74, 0x07, 0x42, 0xef, 0x21, 0xa8, 0x51, + 0x37, 0x2f, 0xdf, 0x16, 0x95, 0x3d, 0xd1, 0xce, 0xef, 0x85, 0xed, 0xfc, 0x9e, 0x1d, 0x22, 0x48, + 0x0c, 0x66, 0x6d, 0x3c, 0x4d, 0x3c, 0x2f, 0xc2, 0x36, 0x5e, 0xf6, 0x5e, 0x34, 0x5d, 0xcd, 0x95, + 0x44, 0x35, 0xd7, 0x1f, 0xc1, 0x56, 0xc7, 0xa7, 0x9e, 0x39, 0x09, 0x18, 0x54, 0x36, 0xf2, 0xb7, + 0xa0, 0x30, 0xe4, 0x13, 0xd2, 0x8b, 0x0d, 0xc9, 0x27, 0x51, 0x52, 0xa8, 0x3f, 0x85, 0x82, 0x98, + 0x61, 0xdc, 0x71, 0x03, 0x57, 0x0a, 0x5b, 0x35, 0x04, 0x39, 0xff, 0x74, 0xd2, 0xe3, 0x4e, 0x95, + 0x08, 0xff, 0x66, 0xa9, 0x24, 0xdb, 0x37, 0x85, 0xcf, 0xca, 0xd1, 0xae, 0x0b, 0x6b, 0x89, 0x1e, + 0x01, 0x95, 0x61, 0xbb, 0x63, 0x35, 0xac, 0xd6, 0x33, 0xab, 0x7b, 0xd0, 0x31, 0x9b, 0x35, 0x4c, + 0xba, 0xf6, 0xf3, 0x63, 0xac, 0x9d, 0x43, 0x45, 0x50, 0x9e, 0x9a, 0x07, 0x5a, 0x06, 0xa9, 0x90, + 0x3f, 0xa8, 0xbe, 0xc0, 0x4d, 0x2d, 0x8b, 0x36, 0x01, 0x38, 0xea, 0xb8, 0x6a, 0x34, 0xda, 0x9a, + 0x82, 0x00, 0x0a, 0x46, 0xa7, 0x6d, 0xb7, 0x8e, 0xb4, 0x1c, 0xfb, 0x6e, 0x54, 0x2d, 0xb3, 0xd1, + 0xd2, 0xf2, 0xec, 0xbb, 0xd6, 0x32, 0x1a, 0x98, 0x68, 0x85, 0xdd, 0x1a, 0xa8, 0x51, 0x2f, 0x84, + 0x2e, 0x01, 0x4a, 0x99, 0x0b, 0x8d, 0xad, 0x41, 0xd1, 0x68, 0x76, 0xda, 0x36, 0x26, 0x5a, 0x86, + 0x59, 0x3e, 0x34, 0x0e, 0xb4, 0x2c, 0xb3, 0xdc, 0x6c, 0x19, 0xd5, 0xa6, 0xa6, 0xec, 0xb6, 0xd8, + 0x9d, 0x1d, 0x3f, 0xe9, 0xd1, 0x3b, 0x70, 0x31, 0x24, 0xaa, 0xe1, 0xe3, 0x66, 0xeb, 0x79, 0xec, + 0x78, 0x09, 0x72, 0x75, 0xdc, 0x3c, 0xd2, 0x32, 0x68, 0x03, 0xd4, 0x06, 0x77, 0xcf, 0x7c, 0x81, + 0xb5, 0x2c, 0x33, 0xd2, 0xe8, 0x1c, 0x60, 0xc3, 0x66, 0x84, 0x26, 0xac, 0x25, 0x5a, 0x8b, 0x64, + 0x1c, 0xa4, 0x23, 0x21, 0xdd, 0x3a, 0x94, 0x8e, 0x4c, 0xcb, 0x64, 0x9a, 0xd2, 0xb7, 0x06, 0x16, + 0xbe, 0xb5, 0xec, 0x3a, 0x26, 0x9a, 0xb2, 0xfb, 0x8b, 0x02, 0xa8, 0xd1, 0x41, 0x47, 0x97, 0xe1, + 0x82, 0xd1, 0xea, 0x34, 0x6b, 0x5d, 0xab, 0x65, 0x77, 0x6b, 0xd8, 0xc6, 0xe4, 0xc8, 0xb4, 0x18, + 0x51, 0x05, 0x2e, 0xb6, 0xed, 0xaa, 0xdd, 0x69, 0x77, 0x8d, 0x3a, 0x36, 0x1a, 0x5d, 0xab, 0xd5, + 0xc5, 0x84, 0xb4, 0x88, 0xf6, 0xa7, 0x0c, 0xba, 0x01, 0x57, 0x52, 0x32, 0xf3, 0xa8, 0x7a, 0x88, + 0xbb, 0xc7, 0x9d, 0x66, 0x93, 0x61, 0xb4, 0x5f, 0x65, 0xd1, 0x4d, 0xb8, 0x9e, 0x42, 0x18, 0x2d, + 0xcb, 0xae, 0x9a, 0x16, 0x26, 0x5d, 0x83, 0xe0, 0xaa, 0x6d, 0x5a, 0x87, 0xda, 0xaf, 0xb3, 0xe8, + 0xff, 0xe1, 0x5a, 0x0a, 0x45, 0x3a, 0x56, 0x02, 0xc9, 0xa8, 0x3e, 0xcf, 0xa2, 0xdb, 0xf0, 0x7f, + 0x2b, 0xa8, 0x84, 0xb3, 0x55, 0x1b, 0xd7, 0xb4, 0xdf, 0xbc, 0x0d, 0x47, 0x70, 0xdb, 0xae, 0x12, + 0x6e, 0xf4, 0x8b, 0x45, 0x9c, 0xd5, 0xaa, 0xe1, 0xee, 0x11, 0x3e, 0x6a, 0x91, 0xe7, 0xdd, 0x63, + 0x82, 0xdb, 0xed, 0x0e, 0xc1, 0xda, 0x27, 0xca, 0xc2, 0x12, 0x38, 0xae, 0x66, 0xb6, 0x1b, 0x31, + 0xea, 0xc7, 0x0a, 0xda, 0x85, 0x5b, 0x8b, 0x28, 0x0b, 0xdb, 0xcf, 0x5a, 0xa4, 0xd1, 0xed, 0x58, + 0xd5, 0x0f, 0xaa, 0x66, 0xb3, 0x7a, 0xd0, 0xc4, 0xda, 0x4f, 0x94, 0x85, 0xe5, 0x72, 0xec, 0xb1, + 0x59, 0x8b, 0x09, 0x3f, 0x5d, 0x61, 0xb6, 0x63, 0xb5, 0x8d, 0x3a, 0xae, 0x75, 0x04, 0xd5, 0x4f, + 0x15, 0xa4, 0xc3, 0xd5, 0x65, 0x28, 0x82, 0xab, 0x46, 0x9d, 0x63, 0x3e, 0x53, 0x16, 0x76, 0x49, + 0xb8, 0xd6, 0xb2, 0xbb, 0x04, 0x57, 0x6b, 0xcf, 0xb5, 0x9f, 0x29, 0xe8, 0x12, 0x6c, 0x45, 0x99, + 0xd0, 0x95, 0x09, 0xa5, 0xfd, 0x53, 0x41, 0xef, 0xc0, 0x76, 0x4a, 0x33, 0x14, 0xfd, 0x4b, 0x41, + 0x77, 0x40, 0x5f, 0x26, 0x9a, 0xf3, 0xf0, 0xdf, 0x0a, 0x7a, 0x17, 0x6e, 0xaf, 0xd8, 0x8e, 0x67, + 0x55, 0x93, 0xed, 0x45, 0xc4, 0xfa, 0x1f, 0x6e, 0xf0, 0x89, 0xd9, 0xc4, 0xdd, 0xf6, 0x73, 0xcb, + 0xe8, 0x9a, 0x96, 0x69, 0xcb, 0x5c, 0xfb, 0x4b, 0x0e, 0xed, 0xc0, 0xe5, 0x1a, 0xfe, 0xa0, 0x4b, + 0xf0, 0xa1, 0xc9, 0xf3, 0x5c, 0x1c, 0xc4, 0x1a, 0x3e, 0x6e, 0x6b, 0xbf, 0xcd, 0xa3, 0x2b, 0x70, + 0x29, 0x25, 0xb5, 0x71, 0xdb, 0x16, 0xc2, 0xdf, 0xe5, 0xd1, 0x55, 0x28, 0xa7, 0x84, 0xe2, 0xe8, + 0x09, 0xf1, 0xef, 0xf3, 0x0b, 0xcc, 0x46, 0xcb, 0x7a, 0x62, 0x1e, 0x32, 0xb1, 0xf6, 0x87, 0xfc, + 0xfd, 0x4f, 0x14, 0x38, 0xdf, 0x96, 0xff, 0xc4, 0xb6, 0xa9, 0xf7, 0x7a, 0xd8, 0xa3, 0xc8, 0x80, + 0xd2, 0x21, 0x0d, 0x64, 0x4f, 0xb8, 0x50, 0x82, 0xf1, 0x78, 0x1a, 0x9c, 0x56, 0x52, 0xff, 0x95, + 0xea, 0x5b, 0x6f, 0xfe, 0xfc, 0xc5, 0xa7, 0xd9, 0x35, 0xa4, 0xee, 0xbf, 0x7e, 0x7f, 0x9f, 0xff, + 0x6f, 0x8a, 0x0e, 0xa1, 0xc4, 0x0b, 0x70, 0xd3, 0x1d, 0xa0, 0xf0, 0x89, 0x1c, 0xd6, 0xfa, 0xca, + 0xfc, 0x84, 0x7e, 0x91, 0x13, 0x9c, 0x47, 0x1b, 0x8c, 0x40, 0xb4, 0x05, 0x23, 0x77, 0x70, 0x37, + 0x73, 0x2f, 0x83, 0x0e, 0xa1, 0xc0, 0x89, 0xfc, 0x95, 0xbe, 0x2c, 0xb0, 0x21, 0xce, 0xb6, 0x8e, + 0x20, 0x62, 0xf3, 0xef, 0x65, 0xd0, 0x77, 0xa1, 0x88, 0x7f, 0x40, 0x7b, 0xb3, 0x80, 0xa2, 0xb2, + 0xd4, 0x58, 0x28, 0xfe, 0x95, 0x15, 0x36, 0xf4, 0x2b, 0x9c, 0xf2, 0xa2, 0xbe, 0xc6, 0x29, 0x05, + 0xcd, 0x23, 0x79, 0x15, 0xa0, 0x26, 0x14, 0xea, 0xce, 0xa4, 0x3f, 0xa2, 0x28, 0x75, 0xf7, 0xac, + 0x24, 0xdb, 0xe1, 0x64, 0x97, 0xf4, 0xad, 0xd8, 0xbf, 0xfd, 0x0f, 0x39, 0xc1, 0xa3, 0xcc, 0xee, + 0xcb, 0x02, 0x47, 0x3f, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x86, 0x5b, 0x80, 0xa1, 0x22, + 0x17, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/skaffold.proto b/proto/skaffold.proto index 8d41529abbe..db4294c9be6 100644 --- a/proto/skaffold.proto +++ b/proto/skaffold.proto @@ -104,9 +104,18 @@ message Event { ResourceStatusCheckEvent resourceStatusCheckEvent = 6; // indicates progress for each kubernetes deployment. FileSyncEvent fileSyncEvent = 7; // describes the sync status. DebuggingContainerEvent debuggingContainerEvent = 8; // describes the appearance or disappearance of a debugging container + DevLoopEvent devLoopEvent = 9; // describes a start and end of a dev loop. } } +// `DevLoopEvent` marks the start and end of a dev loop. +message DevLoopEvent { + int32 iteration = 1; // dev loop iteration + string status = 2; // dev loop status oneof: In Progress, Completed, Failed + string err = 3; // error when current dev loop has failed. + ErrorCode errCode = 4; // error code representing the error +} + // `MetaEvent` provides general information regarding Skaffold message MetaEvent { // entry, for example: `"Starting Skaffold: {Version:v0.39.0-16-g5bb7c9e0 ConfigVersion:skaffold/v1 GitVersion: GitCommit:5bb7c9e078e4d522a5ffc42a2f1274fd17d75902 GitTreeState:dirty BuildDate01:29Z GoVersion:go1.13rc1 Compiler:gc Platform:linux/amd64}"` @@ -344,11 +353,32 @@ enum ErrorCode { STATUS_CHECK_NODE_NOT_READY= 406; // Unknown Error Codes + ErrorCode_UNKNOWN = 501; // Status Check error unknown - STATUS_CHECK_UNKNOWN = 501; + STATUS_CHECK_UNKNOWN = 502; // Container is unschedulable due to unknown reasons - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE = 502; + STATUS_CHECK_UNKNOWN_UNSCHEDULABLE = 503; // Container is waiting due to unknown reason - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN = 503; + STATUS_CHECK_CONTAINER_WAITING_UNKNOWN = 504; + + + + // FILE_SYNC Failures + + // File Sync Initialize failure + FILE_SYNC_INIT_ERROR = 601; + + + // Dev Monitor Errors + + // Failed to configure watcher for build dependencies in dev loop + DEV_REGISTER_BUILD_DEPS = 701; + // Failed to configure watcher for test dependencies in dev loop + DEV_REGISTER_TEST_DEPS = 702; + // Failed to configure watcher for deploy dependencies in dev loop + DEV_REGISTER_DEPLOY_DEPS = 703; + // Failed to configure watcher for Skaffold configuration file. + DEV_REGISTER_CONFIG_DEP = 704; + } \ No newline at end of file From ffb0ef8d18d4c1f7928e6de92164e449bc1970e4 Mon Sep 17 00:00:00 2001 From: tejal29 Date: Tue, 28 Apr 2020 22:01:44 -0700 Subject: [PATCH 2/9] Add ActionableErr proto to DevLoop Event --- docs/content/en/api/skaffold.swagger.json | 47 ++- docs/content/en/docs/references/api/grpc.md | 20 +- integration/rpc_test.go | 2 +- pkg/skaffold/errors/errors.go | 2 +- pkg/skaffold/event/event.go | 26 +- pkg/skaffold/runner/dev.go | 20 +- proto/skaffold.pb.go | 366 +++++++++++--------- proto/skaffold.proto | 11 +- 8 files changed, 300 insertions(+), 194 deletions(-) diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json index 0e9a351b5da..62fcfbc83d1 100644 --- a/docs/content/en/api/skaffold.swagger.json +++ b/docs/content/en/api/skaffold.swagger.json @@ -418,13 +418,7 @@ "type": "string" }, { - "name": "event.devLoopEvent.err", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "event.devLoopEvent.errCode", + "name": "event.devLoopEvent.err.errCode", "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, @@ -456,6 +450,22 @@ ], "default": "COULD_NOT_DETERMINE" }, + { + "name": "event.devLoopEvent.err.message", + "in": "query", + "required": false, + "type": "string" + }, + { + "name": "event.devLoopEvent.err.suggestions", + "in": "query", + "required": false, + "type": "array", + "items": { + "type": "string" + }, + "collectionFormat": "multi" + }, { "name": "entry", "in": "query", @@ -582,6 +592,24 @@ } } }, + "protoActionableErr": { + "type": "object", + "properties": { + "errCode": { + "$ref": "#/definitions/protoErrorCode" + }, + "message": { + "type": "string" + }, + "suggestions": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "description": "`ErrDef` defines an error occurred along with an optional suggestions" + }, "protoBuildEvent": { "type": "object", "properties": { @@ -768,10 +796,7 @@ "type": "string" }, "err": { - "type": "string" - }, - "errCode": { - "$ref": "#/definitions/protoErrorCode" + "$ref": "#/definitions/protoActionableErr" } }, "description": "`DevLoopEvent` marks the start and end of a dev loop." diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md index a509a15bf9b..e27d7166c2e 100644 --- a/docs/content/en/docs/references/api/grpc.md +++ b/docs/content/en/docs/references/api/grpc.md @@ -49,6 +49,23 @@ Describes all the methods for the Skaffold API + +#### ActionableErr +`ErrDef` defines an error occurred along with an optional suggestions + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | +| message | [string](#string) | | message describing the error. | +| suggestions | [string](#string) | repeated | a list of suggestions for the error. | + + + + + + + #### BuildEvent `BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not. @@ -261,8 +278,7 @@ anytime a deployment starts or completes, successfully or not. | ----- | ---- | ----- | ----------- | | iteration | [int32](#int32) | | dev loop iteration | | status | [string](#string) | | dev loop status oneof: In Progress, Completed, Failed | -| err | [string](#string) | | error when current dev loop has failed. | -| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | +| err | [ActionableErr](#proto.ActionableErr) | | actionable error message | diff --git a/integration/rpc_test.go b/integration/rpc_test.go index dc17952b07e..d99591f8708 100644 --- a/integration/rpc_test.go +++ b/integration/rpc_test.go @@ -40,7 +40,7 @@ import ( var ( connectionRetries = 2 readRetries = 20 - numLogEntries = 5 + numLogEntries = 7 waitTime = 1 * time.Second ) diff --git a/pkg/skaffold/errors/errors.go b/pkg/skaffold/errors/errors.go index 3dd6cd755d1..a939532d10a 100644 --- a/pkg/skaffold/errors/errors.go +++ b/pkg/skaffold/errors/errors.go @@ -30,6 +30,6 @@ const ( type Phase string -func ErrorCodeFromError(_ error, _ Phase) proto.ErrorCode { +func ErrorCodeFromError(_ Phase, _ error) proto.ErrorCode { return proto.ErrorCode_ErrorCode_UNKNOWN } diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go index f302dc09d3c..c4b99561911 100644 --- a/pkg/skaffold/event/event.go +++ b/pkg/skaffold/event/event.go @@ -166,7 +166,7 @@ func DeployInProgress() { // DeployFailed notifies that non-fatal errors were encountered during a deployment. func DeployFailed(err error) { - errCode := sErrors.ErrorCodeFromError(err, sErrors.Deploy) + errCode := sErrors.ErrorCodeFromError(sErrors.Deploy, err) handler.handleDeployEvent(&proto.DeployEvent{Status: Failed, Err: err.Error(), ErrCode: errCode}) } @@ -182,7 +182,7 @@ func StatusCheckEventSucceeded() { } func StatusCheckEventFailed(err error) { - errCode := sErrors.ErrorCodeFromError(err, sErrors.StatusCheck) + errCode := sErrors.ErrorCodeFromError(sErrors.StatusCheck, err) handler.handleStatusCheckEvent(&proto.StatusCheckEvent{ Status: Failed, Err: err.Error(), @@ -239,7 +239,7 @@ func BuildInProgress(imageName string) { // BuildFailed notifies that a build has failed. func BuildFailed(imageName string, err error) { - errCode := sErrors.ErrorCodeFromError(err, sErrors.Build) + errCode := sErrors.ErrorCodeFromError(sErrors.Build, err) handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Failed, Err: err.Error(), ErrCode: errCode}) } @@ -254,14 +254,20 @@ func DevLoopInProgress(i int) { } // DevLoopFailed notifies that a dev loop has failed with an error code -func DevLoopFailedWithErrorCode(i int, err error, errCode proto.ErrorCode) { - handler.handleDevLoopEvent(&proto.DevLoopEvent{Iteration: int32(i), Status: Failed, Err: err.Error(), ErrCode: errCode}) +func DevLoopFailedWithErrorCode(i int, errCode proto.ErrorCode, err error) { + handler.handleDevLoopEvent(&proto.DevLoopEvent{ + Iteration: int32(i), + Status: Failed, + Err: &proto.ActionableErr{ + ErrCode: errCode, + Message: err.Error(), + }}) } // DevLoopFailed notifies that a dev loop has failed in a given phase -func DevLoopFailedInPhase(i int, err error, phase sErrors.Phase) { - errCode := sErrors.ErrorCodeFromError(err, phase) - DevLoopFailedWithErrorCode(i, err, errCode) +func DevLoopFailedInPhase(iteration int, phase sErrors.Phase, err error) { + errCode := sErrors.ErrorCodeFromError(phase, err) + DevLoopFailedWithErrorCode(iteration, errCode, err) } // DevLoopComplete notifies that a dev loop has completed. @@ -276,7 +282,7 @@ func FileSyncInProgress(fileCount int, image string) { // FileSyncFailed notifies that a file sync has failed. func FileSyncFailed(fileCount int, image string, err error) { - errCode := sErrors.ErrorCodeFromError(err, sErrors.FileSync) + errCode := sErrors.ErrorCodeFromError(sErrors.FileSync, err) handler.handleFileSyncEvent(&proto.FileSyncEvent{FileCount: int32(fileCount), Image: image, Status: Failed, Err: err.Error(), ErrCode: errCode}) } @@ -530,7 +536,7 @@ func (ev *eventHandler) handle(event *proto.Event) { case Succeeded: logEntry.Entry = fmt.Sprintf("Dev Iteration %d successful", de.Iteration) default: - logEntry.Entry = fmt.Sprintf("Dev Iteration %d failed with error code %v", de.Iteration, de.ErrCode) + logEntry.Entry = fmt.Sprintf("Dev Iteration %d failed with error code %v", de.Iteration, de.Err.ErrCode) } default: return diff --git a/pkg/skaffold/runner/dev.go b/pkg/skaffold/runner/dev.go index c000779c65e..6188a51c0a4 100644 --- a/pkg/skaffold/runner/dev.go +++ b/pkg/skaffold/runner/dev.go @@ -79,7 +79,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { if err := r.syncer.Sync(ctx, s); err != nil { logrus.Warnln("Skipping deploy due to sync error:", err) fileSyncFailed(fileCount, s.Image, err) - event.DevLoopFailedInPhase(iteration, err, sErrors.FileSync) + event.DevLoopFailedInPhase(iteration, sErrors.FileSync, err) return nil } @@ -96,7 +96,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { if _, err := r.BuildAndTest(ctx, out, r.changeSet.needsRebuild); err != nil { logrus.Warnln("Skipping deploy due to error:", err) - event.DevLoopFailedInPhase(iteration, err, sErrors.Build) + event.DevLoopFailedInPhase(iteration, sErrors.Build, err) return nil } } @@ -111,7 +111,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { r.forwarderManager.Stop() if err := r.Deploy(ctx, out, r.builds); err != nil { logrus.Warnln("Skipping deploy due to error:", err) - event.DevLoopFailedInPhase(iteration, err, sErrors.Deploy) + event.DevLoopFailedInPhase(iteration, sErrors.Deploy, err) return nil } if err := r.forwarderManager.Start(ctx); err != nil { @@ -168,7 +168,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la } }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_BUILD_DEPS) + event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_BUILD_DEPS, err) return fmt.Errorf("watching files for artifact %q: %w", artifact.ImageName, err) } } @@ -179,7 +179,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la r.tester.TestDependencies, func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_TEST_DEPS) + event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_TEST_DEPS, err) return fmt.Errorf("watching test files: %w", err) } @@ -188,7 +188,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la r.deployer.Dependencies, func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_DEPLOY_DEPS) + event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_DEPLOY_DEPS, err) return fmt.Errorf("watching files for deployer: %w", err) } @@ -197,7 +197,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la func() ([]string, error) { return []string{r.runCtx.Opts.ConfigurationFile}, nil }, func(filemon.Events) { r.changeSet.needsReload = true }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_DEV_REGISTER_CONFIG_DEP) + event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_CONFIG_DEP, err) return fmt.Errorf("watching skaffold configuration %q: %w", r.runCtx.Opts.ConfigurationFile, err) } @@ -205,13 +205,13 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Init Sync State if err := sync.Init(ctx, artifacts); err != nil { - event.DevLoopFailedWithErrorCode(0, err, proto.ErrorCode_FILE_SYNC_INIT_ERROR) + event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_FILE_SYNC_INIT_ERROR, err) return fmt.Errorf("exiting dev mode because initializing sync state failed: %w", err) } // First build if _, err := r.BuildAndTest(ctx, out, artifacts); err != nil { - event.DevLoopFailedInPhase(0, err, sErrors.Build) + event.DevLoopFailedInPhase(0, sErrors.Build, err) return fmt.Errorf("exiting dev mode because first build failed: %w", err) } @@ -220,7 +220,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // First deploy if err := r.Deploy(ctx, out, r.builds); err != nil { - event.DevLoopFailedInPhase(0, err, sErrors.Deploy) + event.DevLoopFailedInPhase(0, sErrors.Deploy, err) return fmt.Errorf("exiting dev mode because first deploy failed: %w", err) } diff --git a/proto/skaffold.pb.go b/proto/skaffold.pb.go index 28f52b3c16a..1086fb52072 100644 --- a/proto/skaffold.pb.go +++ b/proto/skaffold.pb.go @@ -1131,13 +1131,12 @@ func (*Event) XXX_OneofWrappers() []interface{} { // `DevLoopEvent` marks the start and end of a dev loop. type DevLoopEvent struct { - Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - Err string `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` - ErrCode ErrorCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + Err *ActionableErr `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DevLoopEvent) Reset() { *m = DevLoopEvent{} } @@ -1179,20 +1178,69 @@ func (m *DevLoopEvent) GetStatus() string { return "" } -func (m *DevLoopEvent) GetErr() string { +func (m *DevLoopEvent) GetErr() *ActionableErr { if m != nil { return m.Err } - return "" + return nil +} + +// `ErrDef` defines an error occurred along with an optional suggestions +type ActionableErr struct { + ErrCode ErrorCode `protobuf:"varint,1,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Suggestions []string `protobuf:"bytes,3,rep,name=suggestions,proto3" json:"suggestions,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } -func (m *DevLoopEvent) GetErrCode() ErrorCode { +func (m *ActionableErr) Reset() { *m = ActionableErr{} } +func (m *ActionableErr) String() string { return proto.CompactTextString(m) } +func (*ActionableErr) ProtoMessage() {} +func (*ActionableErr) Descriptor() ([]byte, []int) { + return fileDescriptor_4f2d38e344f9dbf5, []int{13} +} + +func (m *ActionableErr) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ActionableErr.Unmarshal(m, b) +} +func (m *ActionableErr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ActionableErr.Marshal(b, m, deterministic) +} +func (m *ActionableErr) XXX_Merge(src proto.Message) { + xxx_messageInfo_ActionableErr.Merge(m, src) +} +func (m *ActionableErr) XXX_Size() int { + return xxx_messageInfo_ActionableErr.Size(m) +} +func (m *ActionableErr) XXX_DiscardUnknown() { + xxx_messageInfo_ActionableErr.DiscardUnknown(m) +} + +var xxx_messageInfo_ActionableErr proto.InternalMessageInfo + +func (m *ActionableErr) GetErrCode() ErrorCode { if m != nil { return m.ErrCode } return ErrorCode_COULD_NOT_DETERMINE } +func (m *ActionableErr) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *ActionableErr) GetSuggestions() []string { + if m != nil { + return m.Suggestions + } + return nil +} + // `MetaEvent` provides general information regarding Skaffold type MetaEvent struct { // entry, for example: `"Starting Skaffold: {Version:v0.39.0-16-g5bb7c9e0 ConfigVersion:skaffold/v1 GitVersion: GitCommit:5bb7c9e078e4d522a5ffc42a2f1274fd17d75902 GitTreeState:dirty BuildDate01:29Z GoVersion:go1.13rc1 Compiler:gc Platform:linux/amd64}"` @@ -1208,7 +1256,7 @@ func (m *MetaEvent) Reset() { *m = MetaEvent{} } func (m *MetaEvent) String() string { return proto.CompactTextString(m) } func (*MetaEvent) ProtoMessage() {} func (*MetaEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{13} + return fileDescriptor_4f2d38e344f9dbf5, []int{14} } func (m *MetaEvent) XXX_Unmarshal(b []byte) error { @@ -1259,7 +1307,7 @@ func (m *BuildEvent) Reset() { *m = BuildEvent{} } func (m *BuildEvent) String() string { return proto.CompactTextString(m) } func (*BuildEvent) ProtoMessage() {} func (*BuildEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{14} + return fileDescriptor_4f2d38e344f9dbf5, []int{15} } func (m *BuildEvent) XXX_Unmarshal(b []byte) error { @@ -1323,7 +1371,7 @@ func (m *DeployEvent) Reset() { *m = DeployEvent{} } func (m *DeployEvent) String() string { return proto.CompactTextString(m) } func (*DeployEvent) ProtoMessage() {} func (*DeployEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{15} + return fileDescriptor_4f2d38e344f9dbf5, []int{16} } func (m *DeployEvent) XXX_Unmarshal(b []byte) error { @@ -1380,7 +1428,7 @@ func (m *StatusCheckEvent) Reset() { *m = StatusCheckEvent{} } func (m *StatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*StatusCheckEvent) ProtoMessage() {} func (*StatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{16} + return fileDescriptor_4f2d38e344f9dbf5, []int{17} } func (m *StatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1448,7 +1496,7 @@ func (m *ResourceStatusCheckEvent) Reset() { *m = ResourceStatusCheckEve func (m *ResourceStatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*ResourceStatusCheckEvent) ProtoMessage() {} func (*ResourceStatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{17} + return fileDescriptor_4f2d38e344f9dbf5, []int{18} } func (m *ResourceStatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1517,7 +1565,7 @@ func (m *PortEvent) Reset() { *m = PortEvent{} } func (m *PortEvent) String() string { return proto.CompactTextString(m) } func (*PortEvent) ProtoMessage() {} func (*PortEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{18} + return fileDescriptor_4f2d38e344f9dbf5, []int{19} } func (m *PortEvent) XXX_Unmarshal(b []byte) error { @@ -1617,7 +1665,7 @@ func (m *FileSyncEvent) Reset() { *m = FileSyncEvent{} } func (m *FileSyncEvent) String() string { return proto.CompactTextString(m) } func (*FileSyncEvent) ProtoMessage() {} func (*FileSyncEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{19} + return fileDescriptor_4f2d38e344f9dbf5, []int{20} } func (m *FileSyncEvent) XXX_Unmarshal(b []byte) error { @@ -1692,7 +1740,7 @@ func (m *DebuggingContainerEvent) Reset() { *m = DebuggingContainerEvent func (m *DebuggingContainerEvent) String() string { return proto.CompactTextString(m) } func (*DebuggingContainerEvent) ProtoMessage() {} func (*DebuggingContainerEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{20} + return fileDescriptor_4f2d38e344f9dbf5, []int{21} } func (m *DebuggingContainerEvent) XXX_Unmarshal(b []byte) error { @@ -1783,7 +1831,7 @@ func (m *LogEntry) Reset() { *m = LogEntry{} } func (m *LogEntry) String() string { return proto.CompactTextString(m) } func (*LogEntry) ProtoMessage() {} func (*LogEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{21} + return fileDescriptor_4f2d38e344f9dbf5, []int{22} } func (m *LogEntry) XXX_Unmarshal(b []byte) error { @@ -1836,7 +1884,7 @@ func (m *UserIntentRequest) Reset() { *m = UserIntentRequest{} } func (m *UserIntentRequest) String() string { return proto.CompactTextString(m) } func (*UserIntentRequest) ProtoMessage() {} func (*UserIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{22} + return fileDescriptor_4f2d38e344f9dbf5, []int{23} } func (m *UserIntentRequest) XXX_Unmarshal(b []byte) error { @@ -1878,7 +1926,7 @@ func (m *Intent) Reset() { *m = Intent{} } func (m *Intent) String() string { return proto.CompactTextString(m) } func (*Intent) ProtoMessage() {} func (*Intent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{23} + return fileDescriptor_4f2d38e344f9dbf5, []int{24} } func (m *Intent) XXX_Unmarshal(b []byte) error { @@ -1946,6 +1994,7 @@ func init() { proto.RegisterType((*FileSyncState)(nil), "proto.FileSyncState") proto.RegisterType((*Event)(nil), "proto.Event") proto.RegisterType((*DevLoopEvent)(nil), "proto.DevLoopEvent") + proto.RegisterType((*ActionableErr)(nil), "proto.ActionableErr") proto.RegisterType((*MetaEvent)(nil), "proto.MetaEvent") proto.RegisterType((*BuildEvent)(nil), "proto.BuildEvent") proto.RegisterType((*DeployEvent)(nil), "proto.DeployEvent") @@ -1963,142 +2012,145 @@ func init() { func init() { proto.RegisterFile("skaffold.proto", fileDescriptor_4f2d38e344f9dbf5) } var fileDescriptor_4f2d38e344f9dbf5 = []byte{ - // 2147 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x58, 0xc9, 0x93, 0x1b, 0x49, - 0xd5, 0xb7, 0x54, 0xda, 0xea, 0xf5, 0xe2, 0xea, 0x74, 0xdb, 0xd6, 0xc8, 0xed, 0xe5, 0xab, 0xcf, - 0x5b, 0xf4, 0x0c, 0xdd, 0x1e, 0x9b, 0x20, 0x8c, 0xc3, 0x40, 0xa8, 0x4b, 0xe9, 0x56, 0x59, 0xea, - 0x52, 0x47, 0xaa, 0x34, 0xc6, 0x8e, 0x20, 0x14, 0x65, 0x29, 0x5b, 0xa3, 0xb0, 0xa4, 0x12, 0x55, - 0x25, 0x0f, 0xcd, 0x61, 0x0e, 0x3e, 0x72, 0x1a, 0x18, 0x86, 0x08, 0xee, 0x70, 0x83, 0xe1, 0x2f, - 0x60, 0xb9, 0xc1, 0x9d, 0x13, 0x47, 0x22, 0x86, 0x13, 0x57, 0xb6, 0x23, 0x91, 0x4b, 0x6d, 0x5a, - 0xdc, 0x31, 0x31, 0xc1, 0x49, 0x95, 0xf9, 0x7e, 0xef, 0xf7, 0x5e, 0xbe, 0x7c, 0xf9, 0x32, 0x9f, - 0x60, 0xd3, 0x7f, 0xe5, 0x9c, 0x9c, 0xb8, 0xa3, 0xfe, 0xde, 0xd4, 0x73, 0x03, 0x17, 0xe5, 0xf9, - 0x4f, 0x65, 0x67, 0xe0, 0xba, 0x83, 0x11, 0xdd, 0x77, 0xa6, 0xc3, 0x7d, 0x67, 0x32, 0x71, 0x03, - 0x27, 0x18, 0xba, 0x13, 0x5f, 0x80, 0x2a, 0xd7, 0xa5, 0x94, 0x8f, 0x5e, 0xce, 0x4e, 0xf6, 0x83, - 0xe1, 0x98, 0xfa, 0x81, 0x33, 0x9e, 0x4a, 0xc0, 0x95, 0x79, 0x00, 0x1d, 0x4f, 0x83, 0x53, 0x21, - 0xd4, 0x1f, 0xc0, 0x46, 0x3b, 0x70, 0x02, 0x4a, 0xa8, 0x3f, 0x75, 0x27, 0x3e, 0x45, 0x3a, 0xe4, - 0x7d, 0x36, 0x51, 0xce, 0xdc, 0xc8, 0xdc, 0x5d, 0xbb, 0xbf, 0x2e, 0x70, 0x7b, 0x02, 0x24, 0x44, - 0xfa, 0x0e, 0x94, 0x22, 0xbc, 0x06, 0xca, 0xd8, 0x1f, 0x70, 0xb4, 0x4a, 0xd8, 0xa7, 0x7e, 0x15, - 0x8a, 0x84, 0x7e, 0x7f, 0x46, 0xfd, 0x00, 0x21, 0xc8, 0x4d, 0x9c, 0x31, 0x95, 0x52, 0xfe, 0xad, - 0x7f, 0x96, 0x83, 0x3c, 0x67, 0x43, 0xef, 0x03, 0xbc, 0x9c, 0x0d, 0x47, 0xfd, 0x76, 0xc2, 0xde, - 0x96, 0xb4, 0x77, 0x10, 0x09, 0x48, 0x02, 0x84, 0xbe, 0x0e, 0x6b, 0x7d, 0x3a, 0x1d, 0xb9, 0xa7, - 0x42, 0x27, 0xcb, 0x75, 0x90, 0xd4, 0xa9, 0xc5, 0x12, 0x92, 0x84, 0xa1, 0x3a, 0x6c, 0x9e, 0xb8, - 0xde, 0x47, 0x8e, 0xd7, 0xa7, 0xfd, 0x63, 0xd7, 0x0b, 0xfc, 0x72, 0xee, 0x86, 0x72, 0x77, 0xed, - 0xfe, 0x8d, 0xe4, 0xe2, 0xf6, 0x9e, 0xa4, 0x20, 0x78, 0x12, 0x78, 0xa7, 0x64, 0x4e, 0x0f, 0x19, - 0xa0, 0xb1, 0x10, 0xcc, 0x7c, 0xe3, 0x43, 0xda, 0x7b, 0x25, 0x9c, 0xc8, 0x73, 0x27, 0x2e, 0x27, - 0xb8, 0x92, 0x62, 0xb2, 0xa0, 0x80, 0x1e, 0xc1, 0xc6, 0xc9, 0x70, 0x44, 0xdb, 0xa7, 0x93, 0x9e, - 0x60, 0x28, 0x70, 0x86, 0x6d, 0xc9, 0xf0, 0x24, 0x29, 0x23, 0x69, 0x28, 0x3a, 0x86, 0x0b, 0x7d, - 0xfa, 0x72, 0x36, 0x18, 0x0c, 0x27, 0x03, 0xc3, 0x9d, 0x04, 0xce, 0x70, 0x42, 0x3d, 0xbf, 0x5c, - 0xe4, 0xeb, 0xb9, 0x16, 0x05, 0x62, 0x1e, 0x81, 0x5f, 0xd3, 0x49, 0x40, 0x96, 0xa9, 0xa2, 0x77, - 0xa1, 0x34, 0xa6, 0x81, 0xd3, 0x77, 0x02, 0xa7, 0x5c, 0xe2, 0x8e, 0x9c, 0x97, 0x34, 0x47, 0x72, - 0x9a, 0x44, 0x80, 0x4a, 0x1b, 0x2e, 0x2c, 0x09, 0x13, 0x4b, 0x82, 0x57, 0xf4, 0x94, 0x6f, 0x61, - 0x9e, 0xb0, 0x4f, 0x74, 0x1b, 0xf2, 0xaf, 0x9d, 0xd1, 0x2c, 0xdc, 0x22, 0x4d, 0x52, 0x32, 0x1d, - 0xe1, 0x8b, 0x10, 0x3f, 0xca, 0x3e, 0xcc, 0x3c, 0xcd, 0x95, 0x14, 0x2d, 0xa7, 0xff, 0x2d, 0x03, - 0xa5, 0xd0, 0x22, 0xda, 0x85, 0x3c, 0xdf, 0x75, 0x99, 0x15, 0xdb, 0xc9, 0xac, 0x88, 0xdc, 0x12, - 0x10, 0xf4, 0x35, 0x28, 0x88, 0xcd, 0x96, 0xb6, 0x2e, 0xa6, 0xd2, 0x21, 0x42, 0x4b, 0x10, 0xfa, - 0x0e, 0x80, 0xd3, 0xef, 0x0f, 0xd9, 0x11, 0x72, 0x46, 0xe5, 0x1e, 0x0f, 0xdc, 0xf5, 0xb9, 0x15, - 0xef, 0x55, 0x23, 0x84, 0xc8, 0x83, 0x84, 0x4a, 0xe5, 0x5b, 0x70, 0x7e, 0x4e, 0x9c, 0x5c, 0xbf, - 0x2a, 0xd6, 0xbf, 0x9d, 0x5c, 0xbf, 0x9a, 0x58, 0xad, 0xfe, 0xf7, 0x2c, 0x6c, 0xa4, 0xd6, 0x81, - 0xde, 0x83, 0xad, 0xc9, 0x6c, 0xfc, 0x92, 0x7a, 0xad, 0x93, 0xaa, 0x17, 0x0c, 0x4f, 0x9c, 0x5e, - 0xe0, 0xcb, 0x58, 0x2e, 0x0a, 0xd0, 0x43, 0x28, 0xf1, 0x75, 0xb3, 0x6d, 0xcf, 0x72, 0xef, 0x77, - 0x96, 0x45, 0x47, 0x8c, 0xa8, 0x47, 0x22, 0x34, 0xba, 0x09, 0xb9, 0xe0, 0x74, 0x4a, 0xcb, 0xca, - 0x8d, 0xcc, 0xdd, 0xcd, 0x68, 0x4b, 0x38, 0xce, 0x3e, 0x9d, 0x52, 0xc2, 0xa5, 0xa8, 0xb6, 0x24, - 0x3e, 0x37, 0x97, 0x5a, 0x78, 0x5b, 0x90, 0x0e, 0xa1, 0x28, 0x1d, 0x40, 0xb7, 0xa5, 0xd9, 0x0c, - 0x37, 0x8b, 0x92, 0x54, 0xd4, 0x4b, 0x18, 0xde, 0x86, 0x7c, 0xcf, 0x9d, 0x4d, 0x02, 0x1e, 0xb2, - 0x3c, 0x11, 0x83, 0xaf, 0x1a, 0xed, 0x3f, 0x66, 0x60, 0x33, 0x9d, 0x08, 0xe8, 0x31, 0xa8, 0x22, - 0x15, 0x58, 0x04, 0x33, 0x73, 0x07, 0x27, 0x89, 0x94, 0x43, 0xea, 0x91, 0x58, 0x01, 0xbd, 0x07, - 0xc5, 0xde, 0x68, 0xe6, 0x07, 0xd4, 0xe3, 0xc6, 0xe2, 0x05, 0x19, 0x62, 0x96, 0x2f, 0x28, 0x84, - 0x54, 0x4c, 0x28, 0x85, 0x24, 0xe8, 0x4e, 0x2a, 0x0e, 0x17, 0x52, 0x26, 0xcf, 0x0e, 0x84, 0xfe, - 0xa3, 0x0c, 0x40, 0x5c, 0x15, 0xd1, 0xb7, 0x41, 0x75, 0x12, 0xc9, 0x92, 0x2c, 0x67, 0x31, 0x6a, - 0x2f, 0x4a, 0x1b, 0xb1, 0x43, 0xb1, 0x4a, 0xe5, 0x31, 0x6c, 0xa6, 0x85, 0x5f, 0x2a, 0xac, 0xb7, - 0x60, 0x2d, 0x51, 0x6d, 0xd1, 0x25, 0x28, 0x88, 0x2a, 0x27, 0xb5, 0xe5, 0x48, 0xff, 0x3c, 0x03, - 0xda, 0x7c, 0x41, 0x5c, 0x05, 0x46, 0x35, 0x50, 0x3d, 0xea, 0xbb, 0x33, 0xaf, 0x47, 0xc3, 0xcc, - 0xbe, 0xbd, 0xa2, 0xa8, 0xee, 0x91, 0x10, 0x28, 0xd7, 0x15, 0x29, 0xb2, 0x75, 0xa5, 0x85, 0x5f, - 0x6a, 0x5d, 0x77, 0x60, 0x23, 0x55, 0x7e, 0x57, 0xae, 0xec, 0xaf, 0x39, 0xc8, 0xf3, 0x42, 0x86, - 0xee, 0x81, 0xca, 0xca, 0x23, 0x1f, 0xc8, 0x72, 0xa5, 0x25, 0xca, 0x09, 0x9f, 0xaf, 0x9f, 0x23, - 0x31, 0x08, 0x3d, 0x90, 0xf7, 0x9e, 0x50, 0xc9, 0x2e, 0xde, 0x7b, 0xa1, 0x4e, 0x02, 0x86, 0xbe, - 0x11, 0xde, 0x7c, 0x42, 0x4b, 0x59, 0x72, 0xf3, 0x85, 0x6a, 0x49, 0x20, 0x73, 0x6f, 0x1a, 0x16, - 0xdd, 0x72, 0x6e, 0x79, 0x31, 0x66, 0xee, 0x45, 0x20, 0x84, 0x53, 0x77, 0x9c, 0x50, 0x5c, 0x79, - 0xc7, 0x85, 0xfa, 0x0b, 0x2a, 0xe8, 0x7b, 0x50, 0x0e, 0x77, 0x65, 0x1e, 0x2f, 0x2f, 0xbc, 0xb0, - 0xea, 0x92, 0x15, 0xb0, 0xfa, 0x39, 0xb2, 0x92, 0x02, 0x3d, 0x8e, 0x2f, 0x51, 0xc1, 0x59, 0x5c, - 0x7a, 0x89, 0x86, 0x44, 0x69, 0x30, 0x7a, 0x01, 0x97, 0xfb, 0xcb, 0x2f, 0x49, 0x79, 0x07, 0x9e, - 0x71, 0x95, 0xd6, 0xcf, 0x91, 0x55, 0x04, 0xe8, 0x9b, 0xb0, 0xde, 0xa7, 0xaf, 0x9b, 0xae, 0x3b, - 0x15, 0x84, 0x2a, 0x27, 0x8c, 0xcf, 0x7b, 0x2c, 0xaa, 0x9f, 0x23, 0x29, 0xe8, 0xc1, 0x3a, 0x00, - 0x65, 0x1f, 0x5d, 0x56, 0x07, 0xf4, 0x37, 0x19, 0x58, 0x4f, 0xc2, 0xd1, 0x0e, 0xa8, 0xc3, 0x80, - 0x7a, 0xfc, 0xf9, 0x27, 0x2f, 0x88, 0x78, 0x22, 0x91, 0xaa, 0xd9, 0xd4, 0xb9, 0xd2, 0x40, 0xa1, - 0x9e, 0xc7, 0x33, 0x46, 0x25, 0xec, 0x13, 0xed, 0x42, 0x91, 0x7a, 0x9e, 0xe1, 0xf6, 0x29, 0xcf, - 0x88, 0xf8, 0x2e, 0xc0, 0x9e, 0xe7, 0xf2, 0x79, 0x12, 0x02, 0x74, 0x0b, 0xd4, 0x28, 0x8d, 0xd9, - 0xc1, 0xa1, 0xec, 0x4c, 0xc9, 0xc3, 0x20, 0x06, 0xa9, 0x17, 0x44, 0xf6, 0x8c, 0x17, 0x84, 0xfe, - 0xb1, 0xac, 0x62, 0x82, 0xb0, 0x02, 0xa5, 0xb0, 0x24, 0x49, 0xce, 0x68, 0xfc, 0x3f, 0x5a, 0x4f, - 0x2f, 0xac, 0x5c, 0xc2, 0x81, 0x55, 0xc5, 0x48, 0x1a, 0xc9, 0x2e, 0x35, 0xa2, 0x9c, 0x65, 0xe4, - 0x4d, 0xba, 0xee, 0xbd, 0xdd, 0x54, 0x19, 0x8a, 0x63, 0xea, 0xfb, 0xce, 0x20, 0xac, 0x47, 0xe1, - 0xf0, 0x2b, 0xae, 0xf4, 0x87, 0x50, 0x5e, 0x75, 0xb2, 0x58, 0xdc, 0xc3, 0x93, 0x15, 0xc6, 0x3d, - 0x1c, 0xaf, 0x8c, 0x7b, 0xc2, 0x4f, 0x65, 0xa9, 0x9f, 0xb9, 0xc8, 0x4f, 0xfd, 0x97, 0x59, 0x50, - 0xa3, 0xf2, 0xc2, 0xf2, 0x76, 0xe4, 0xf6, 0x9c, 0x11, 0x9b, 0x09, 0xf3, 0x36, 0x9a, 0x40, 0xd7, - 0x00, 0x3c, 0x3a, 0x76, 0x03, 0xca, 0xc5, 0xe2, 0xce, 0x4b, 0xcc, 0x30, 0xbb, 0x53, 0xb7, 0x6f, - 0xb1, 0x3e, 0x42, 0xda, 0x95, 0x43, 0x74, 0x13, 0x36, 0x7a, 0xe1, 0xd9, 0xe3, 0x72, 0xe1, 0x41, - 0x7a, 0x92, 0x59, 0x67, 0x8d, 0x87, 0x3f, 0x75, 0x7a, 0xe2, 0xb1, 0xae, 0x92, 0x78, 0x82, 0x45, - 0x82, 0x95, 0x3e, 0xae, 0x5e, 0x10, 0x91, 0x08, 0xc7, 0x48, 0x87, 0xf5, 0x30, 0x2a, 0xec, 0x7a, - 0xe6, 0x25, 0x46, 0x25, 0xa9, 0xb9, 0x24, 0x86, 0x73, 0x94, 0xd2, 0x18, 0xce, 0x53, 0x86, 0xa2, - 0xd3, 0xef, 0x7b, 0xd4, 0xf7, 0x79, 0x31, 0x50, 0x49, 0x38, 0xd4, 0x7f, 0x9e, 0x89, 0x2f, 0x9c, - 0x28, 0x56, 0xac, 0x54, 0x19, 0xfc, 0x01, 0x20, 0x63, 0x15, 0x4d, 0xb0, 0x03, 0x38, 0x1c, 0xc7, - 0x99, 0x22, 0x06, 0x89, 0x1d, 0x53, 0x96, 0x25, 0x71, 0x6e, 0x69, 0xfe, 0xe4, 0xcf, 0xca, 0x9f, - 0x7f, 0x64, 0xe1, 0xf2, 0x8a, 0xf2, 0xf7, 0xb6, 0x5c, 0x0e, 0xf7, 0x2a, 0x7b, 0xc6, 0x5e, 0x29, - 0x67, 0xee, 0x55, 0x6e, 0xc9, 0x5e, 0x45, 0xd5, 0x22, 0x3f, 0x57, 0x2d, 0xca, 0x50, 0xf4, 0x66, - 0x13, 0xd6, 0xfb, 0xca, 0x6d, 0x0c, 0x87, 0x2c, 0xbf, 0x3e, 0x72, 0xbd, 0x57, 0xc3, 0xc9, 0xa0, - 0x36, 0xf4, 0xe4, 0x1e, 0x26, 0x66, 0x90, 0x05, 0xc0, 0x4b, 0xb9, 0xe8, 0x0c, 0x4b, 0xfc, 0xe1, - 0xb1, 0xf7, 0xf6, 0xf2, 0x2f, 0xe6, 0x13, 0x7d, 0x62, 0x82, 0x81, 0xbd, 0x58, 0xe7, 0xc4, 0x67, - 0x3d, 0x41, 0x36, 0x92, 0x4f, 0x90, 0x8f, 0xa1, 0xd4, 0x74, 0x07, 0x42, 0xef, 0x21, 0xa8, 0x51, - 0x37, 0x2f, 0xdf, 0x16, 0x95, 0x3d, 0xd1, 0xce, 0xef, 0x85, 0xed, 0xfc, 0x9e, 0x1d, 0x22, 0x48, - 0x0c, 0x66, 0x6d, 0x3c, 0x4d, 0x3c, 0x2f, 0xc2, 0x36, 0x5e, 0xf6, 0x5e, 0x34, 0x5d, 0xcd, 0x95, - 0x44, 0x35, 0xd7, 0x1f, 0xc1, 0x56, 0xc7, 0xa7, 0x9e, 0x39, 0x09, 0x18, 0x54, 0x36, 0xf2, 0xb7, - 0xa0, 0x30, 0xe4, 0x13, 0xd2, 0x8b, 0x0d, 0xc9, 0x27, 0x51, 0x52, 0xa8, 0x3f, 0x85, 0x82, 0x98, - 0x61, 0xdc, 0x71, 0x03, 0x57, 0x0a, 0x5b, 0x35, 0x04, 0x39, 0xff, 0x74, 0xd2, 0xe3, 0x4e, 0x95, - 0x08, 0xff, 0x66, 0xa9, 0x24, 0xdb, 0x37, 0x85, 0xcf, 0xca, 0xd1, 0xae, 0x0b, 0x6b, 0x89, 0x1e, - 0x01, 0x95, 0x61, 0xbb, 0x63, 0x35, 0xac, 0xd6, 0x33, 0xab, 0x7b, 0xd0, 0x31, 0x9b, 0x35, 0x4c, - 0xba, 0xf6, 0xf3, 0x63, 0xac, 0x9d, 0x43, 0x45, 0x50, 0x9e, 0x9a, 0x07, 0x5a, 0x06, 0xa9, 0x90, - 0x3f, 0xa8, 0xbe, 0xc0, 0x4d, 0x2d, 0x8b, 0x36, 0x01, 0x38, 0xea, 0xb8, 0x6a, 0x34, 0xda, 0x9a, - 0x82, 0x00, 0x0a, 0x46, 0xa7, 0x6d, 0xb7, 0x8e, 0xb4, 0x1c, 0xfb, 0x6e, 0x54, 0x2d, 0xb3, 0xd1, - 0xd2, 0xf2, 0xec, 0xbb, 0xd6, 0x32, 0x1a, 0x98, 0x68, 0x85, 0xdd, 0x1a, 0xa8, 0x51, 0x2f, 0x84, - 0x2e, 0x01, 0x4a, 0x99, 0x0b, 0x8d, 0xad, 0x41, 0xd1, 0x68, 0x76, 0xda, 0x36, 0x26, 0x5a, 0x86, - 0x59, 0x3e, 0x34, 0x0e, 0xb4, 0x2c, 0xb3, 0xdc, 0x6c, 0x19, 0xd5, 0xa6, 0xa6, 0xec, 0xb6, 0xd8, - 0x9d, 0x1d, 0x3f, 0xe9, 0xd1, 0x3b, 0x70, 0x31, 0x24, 0xaa, 0xe1, 0xe3, 0x66, 0xeb, 0x79, 0xec, - 0x78, 0x09, 0x72, 0x75, 0xdc, 0x3c, 0xd2, 0x32, 0x68, 0x03, 0xd4, 0x06, 0x77, 0xcf, 0x7c, 0x81, - 0xb5, 0x2c, 0x33, 0xd2, 0xe8, 0x1c, 0x60, 0xc3, 0x66, 0x84, 0x26, 0xac, 0x25, 0x5a, 0x8b, 0x64, - 0x1c, 0xa4, 0x23, 0x21, 0xdd, 0x3a, 0x94, 0x8e, 0x4c, 0xcb, 0x64, 0x9a, 0xd2, 0xb7, 0x06, 0x16, - 0xbe, 0xb5, 0xec, 0x3a, 0x26, 0x9a, 0xb2, 0xfb, 0x8b, 0x02, 0xa8, 0xd1, 0x41, 0x47, 0x97, 0xe1, - 0x82, 0xd1, 0xea, 0x34, 0x6b, 0x5d, 0xab, 0x65, 0x77, 0x6b, 0xd8, 0xc6, 0xe4, 0xc8, 0xb4, 0x18, - 0x51, 0x05, 0x2e, 0xb6, 0xed, 0xaa, 0xdd, 0x69, 0x77, 0x8d, 0x3a, 0x36, 0x1a, 0x5d, 0xab, 0xd5, - 0xc5, 0x84, 0xb4, 0x88, 0xf6, 0xa7, 0x0c, 0xba, 0x01, 0x57, 0x52, 0x32, 0xf3, 0xa8, 0x7a, 0x88, - 0xbb, 0xc7, 0x9d, 0x66, 0x93, 0x61, 0xb4, 0x5f, 0x65, 0xd1, 0x4d, 0xb8, 0x9e, 0x42, 0x18, 0x2d, - 0xcb, 0xae, 0x9a, 0x16, 0x26, 0x5d, 0x83, 0xe0, 0xaa, 0x6d, 0x5a, 0x87, 0xda, 0xaf, 0xb3, 0xe8, - 0xff, 0xe1, 0x5a, 0x0a, 0x45, 0x3a, 0x56, 0x02, 0xc9, 0xa8, 0x3e, 0xcf, 0xa2, 0xdb, 0xf0, 0x7f, - 0x2b, 0xa8, 0x84, 0xb3, 0x55, 0x1b, 0xd7, 0xb4, 0xdf, 0xbc, 0x0d, 0x47, 0x70, 0xdb, 0xae, 0x12, - 0x6e, 0xf4, 0x8b, 0x45, 0x9c, 0xd5, 0xaa, 0xe1, 0xee, 0x11, 0x3e, 0x6a, 0x91, 0xe7, 0xdd, 0x63, - 0x82, 0xdb, 0xed, 0x0e, 0xc1, 0xda, 0x27, 0xca, 0xc2, 0x12, 0x38, 0xae, 0x66, 0xb6, 0x1b, 0x31, - 0xea, 0xc7, 0x0a, 0xda, 0x85, 0x5b, 0x8b, 0x28, 0x0b, 0xdb, 0xcf, 0x5a, 0xa4, 0xd1, 0xed, 0x58, - 0xd5, 0x0f, 0xaa, 0x66, 0xb3, 0x7a, 0xd0, 0xc4, 0xda, 0x4f, 0x94, 0x85, 0xe5, 0x72, 0xec, 0xb1, - 0x59, 0x8b, 0x09, 0x3f, 0x5d, 0x61, 0xb6, 0x63, 0xb5, 0x8d, 0x3a, 0xae, 0x75, 0x04, 0xd5, 0x4f, - 0x15, 0xa4, 0xc3, 0xd5, 0x65, 0x28, 0x82, 0xab, 0x46, 0x9d, 0x63, 0x3e, 0x53, 0x16, 0x76, 0x49, - 0xb8, 0xd6, 0xb2, 0xbb, 0x04, 0x57, 0x6b, 0xcf, 0xb5, 0x9f, 0x29, 0xe8, 0x12, 0x6c, 0x45, 0x99, - 0xd0, 0x95, 0x09, 0xa5, 0xfd, 0x53, 0x41, 0xef, 0xc0, 0x76, 0x4a, 0x33, 0x14, 0xfd, 0x4b, 0x41, - 0x77, 0x40, 0x5f, 0x26, 0x9a, 0xf3, 0xf0, 0xdf, 0x0a, 0x7a, 0x17, 0x6e, 0xaf, 0xd8, 0x8e, 0x67, - 0x55, 0x93, 0xed, 0x45, 0xc4, 0xfa, 0x1f, 0x6e, 0xf0, 0x89, 0xd9, 0xc4, 0xdd, 0xf6, 0x73, 0xcb, - 0xe8, 0x9a, 0x96, 0x69, 0xcb, 0x5c, 0xfb, 0x4b, 0x0e, 0xed, 0xc0, 0xe5, 0x1a, 0xfe, 0xa0, 0x4b, - 0xf0, 0xa1, 0xc9, 0xf3, 0x5c, 0x1c, 0xc4, 0x1a, 0x3e, 0x6e, 0x6b, 0xbf, 0xcd, 0xa3, 0x2b, 0x70, - 0x29, 0x25, 0xb5, 0x71, 0xdb, 0x16, 0xc2, 0xdf, 0xe5, 0xd1, 0x55, 0x28, 0xa7, 0x84, 0xe2, 0xe8, - 0x09, 0xf1, 0xef, 0xf3, 0x0b, 0xcc, 0x46, 0xcb, 0x7a, 0x62, 0x1e, 0x32, 0xb1, 0xf6, 0x87, 0xfc, - 0xfd, 0x4f, 0x14, 0x38, 0xdf, 0x96, 0xff, 0xc4, 0xb6, 0xa9, 0xf7, 0x7a, 0xd8, 0xa3, 0xc8, 0x80, - 0xd2, 0x21, 0x0d, 0x64, 0x4f, 0xb8, 0x50, 0x82, 0xf1, 0x78, 0x1a, 0x9c, 0x56, 0x52, 0xff, 0x95, - 0xea, 0x5b, 0x6f, 0xfe, 0xfc, 0xc5, 0xa7, 0xd9, 0x35, 0xa4, 0xee, 0xbf, 0x7e, 0x7f, 0x9f, 0xff, - 0x6f, 0x8a, 0x0e, 0xa1, 0xc4, 0x0b, 0x70, 0xd3, 0x1d, 0xa0, 0xf0, 0x89, 0x1c, 0xd6, 0xfa, 0xca, - 0xfc, 0x84, 0x7e, 0x91, 0x13, 0x9c, 0x47, 0x1b, 0x8c, 0x40, 0xb4, 0x05, 0x23, 0x77, 0x70, 0x37, - 0x73, 0x2f, 0x83, 0x0e, 0xa1, 0xc0, 0x89, 0xfc, 0x95, 0xbe, 0x2c, 0xb0, 0x21, 0xce, 0xb6, 0x8e, - 0x20, 0x62, 0xf3, 0xef, 0x65, 0xd0, 0x77, 0xa1, 0x88, 0x7f, 0x40, 0x7b, 0xb3, 0x80, 0xa2, 0xb2, - 0xd4, 0x58, 0x28, 0xfe, 0x95, 0x15, 0x36, 0xf4, 0x2b, 0x9c, 0xf2, 0xa2, 0xbe, 0xc6, 0x29, 0x05, - 0xcd, 0x23, 0x79, 0x15, 0xa0, 0x26, 0x14, 0xea, 0xce, 0xa4, 0x3f, 0xa2, 0x28, 0x75, 0xf7, 0xac, - 0x24, 0xdb, 0xe1, 0x64, 0x97, 0xf4, 0xad, 0xd8, 0xbf, 0xfd, 0x0f, 0x39, 0xc1, 0xa3, 0xcc, 0xee, - 0xcb, 0x02, 0x47, 0x3f, 0xf8, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x86, 0x5b, 0x80, 0xa1, 0x22, - 0x17, 0x00, 0x00, + // 2194 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, + 0x11, 0x36, 0x39, 0x7c, 0x4d, 0xe9, 0xe1, 0x51, 0x5b, 0xb6, 0xb9, 0xb4, 0x6c, 0x2b, 0x13, 0x5b, + 0x36, 0xb4, 0x1b, 0xc9, 0x6b, 0x07, 0x81, 0x63, 0x38, 0x09, 0xa8, 0xe1, 0x58, 0x1c, 0x93, 0x1a, + 0x0a, 0x4d, 0x72, 0x1d, 0x1b, 0x08, 0x88, 0x11, 0xd9, 0xe2, 0x12, 0x26, 0x39, 0xcc, 0xcc, 0xd0, + 0x8e, 0x72, 0xd8, 0xc3, 0x1e, 0x73, 0xda, 0x64, 0xb3, 0x01, 0x72, 0x4f, 0x6e, 0xc9, 0xe6, 0x17, + 0xe4, 0x71, 0x4b, 0xee, 0x39, 0xe5, 0x18, 0x60, 0x73, 0xca, 0x35, 0xaf, 0x63, 0xd0, 0xaf, 0x79, + 0xf0, 0x21, 0x61, 0xb1, 0x27, 0xb2, 0xab, 0xbe, 0xfa, 0xaa, 0xba, 0xba, 0xba, 0xba, 0x7b, 0x60, + 0xdd, 0x7f, 0xed, 0x9c, 0x9e, 0xba, 0xc3, 0xde, 0xde, 0xc4, 0x73, 0x03, 0x17, 0x65, 0xd9, 0x4f, + 0x69, 0xab, 0xef, 0xba, 0xfd, 0x21, 0xd9, 0x77, 0x26, 0x83, 0x7d, 0x67, 0x3c, 0x76, 0x03, 0x27, + 0x18, 0xb8, 0x63, 0x9f, 0x83, 0x4a, 0xb7, 0x85, 0x96, 0x8d, 0x4e, 0xa6, 0xa7, 0xfb, 0xc1, 0x60, + 0x44, 0xfc, 0xc0, 0x19, 0x4d, 0x04, 0xe0, 0xc6, 0x2c, 0x80, 0x8c, 0x26, 0xc1, 0x19, 0x57, 0xea, + 0x8f, 0x60, 0xad, 0x19, 0x38, 0x01, 0xc1, 0xc4, 0x9f, 0xb8, 0x63, 0x9f, 0x20, 0x1d, 0xb2, 0x3e, + 0x15, 0x14, 0x53, 0xdb, 0xa9, 0xfb, 0x2b, 0x0f, 0x57, 0x39, 0x6e, 0x8f, 0x83, 0xb8, 0x4a, 0xdf, + 0x82, 0x42, 0x88, 0xd7, 0x40, 0x19, 0xf9, 0x7d, 0x86, 0x56, 0x31, 0xfd, 0xab, 0xdf, 0x84, 0x3c, + 0x26, 0x3f, 0x9c, 0x12, 0x3f, 0x40, 0x08, 0x32, 0x63, 0x67, 0x44, 0x84, 0x96, 0xfd, 0xd7, 0x3f, + 0xcb, 0x40, 0x96, 0xb1, 0xa1, 0xf7, 0x01, 0x4e, 0xa6, 0x83, 0x61, 0xaf, 0x19, 0xf3, 0xb7, 0x21, + 0xfc, 0x1d, 0x84, 0x0a, 0x1c, 0x03, 0xa1, 0x6f, 0xc2, 0x4a, 0x8f, 0x4c, 0x86, 0xee, 0x19, 0xb7, + 0x49, 0x33, 0x1b, 0x24, 0x6c, 0x2a, 0x91, 0x06, 0xc7, 0x61, 0xa8, 0x0a, 0xeb, 0xa7, 0xae, 0xf7, + 0xd6, 0xf1, 0x7a, 0xa4, 0x77, 0xec, 0x7a, 0x81, 0x5f, 0xcc, 0x6c, 0x2b, 0xf7, 0x57, 0x1e, 0x6e, + 0xc7, 0x27, 0xb7, 0xf7, 0x2c, 0x01, 0x31, 0xc7, 0x81, 0x77, 0x86, 0x67, 0xec, 0x90, 0x01, 0x1a, + 0x4d, 0xc1, 0xd4, 0x37, 0x3e, 0x24, 0xdd, 0xd7, 0x3c, 0x88, 0x2c, 0x0b, 0xe2, 0x7a, 0x8c, 0x2b, + 0xae, 0xc6, 0x73, 0x06, 0xe8, 0x09, 0xac, 0x9d, 0x0e, 0x86, 0xa4, 0x79, 0x36, 0xee, 0x72, 0x86, + 0x1c, 0x63, 0xd8, 0x14, 0x0c, 0xcf, 0xe2, 0x3a, 0x9c, 0x84, 0xa2, 0x63, 0xb8, 0xd2, 0x23, 0x27, + 0xd3, 0x7e, 0x7f, 0x30, 0xee, 0x1b, 0xee, 0x38, 0x70, 0x06, 0x63, 0xe2, 0xf9, 0xc5, 0x3c, 0x9b, + 0xcf, 0xad, 0x30, 0x11, 0xb3, 0x08, 0xf3, 0x0d, 0x19, 0x07, 0x78, 0x91, 0x29, 0x7a, 0x17, 0x0a, + 0x23, 0x12, 0x38, 0x3d, 0x27, 0x70, 0x8a, 0x05, 0x16, 0xc8, 0x65, 0x41, 0x73, 0x24, 0xc4, 0x38, + 0x04, 0x94, 0x9a, 0x70, 0x65, 0x41, 0x9a, 0x68, 0x11, 0xbc, 0x26, 0x67, 0x6c, 0x09, 0xb3, 0x98, + 0xfe, 0x45, 0x3b, 0x90, 0x7d, 0xe3, 0x0c, 0xa7, 0x72, 0x89, 0x34, 0x41, 0x49, 0x6d, 0x78, 0x2c, + 0x5c, 0xfd, 0x24, 0xfd, 0x38, 0xf5, 0x3c, 0x53, 0x50, 0xb4, 0x8c, 0xfe, 0x8f, 0x14, 0x14, 0xa4, + 0x47, 0xb4, 0x0b, 0x59, 0xb6, 0xea, 0xa2, 0x2a, 0x36, 0xe3, 0x55, 0x11, 0x86, 0xc5, 0x21, 0xe8, + 0x1b, 0x90, 0xe3, 0x8b, 0x2d, 0x7c, 0x5d, 0x4d, 0x94, 0x43, 0x88, 0x16, 0x20, 0xf4, 0x3d, 0x00, + 0xa7, 0xd7, 0x1b, 0xd0, 0x2d, 0xe4, 0x0c, 0x8b, 0x5d, 0x96, 0xb8, 0xdb, 0x33, 0x33, 0xde, 0x2b, + 0x87, 0x08, 0x5e, 0x07, 0x31, 0x93, 0xd2, 0x77, 0xe0, 0xf2, 0x8c, 0x3a, 0x3e, 0x7f, 0x95, 0xcf, + 0x7f, 0x33, 0x3e, 0x7f, 0x35, 0x36, 0x5b, 0xfd, 0x9f, 0x69, 0x58, 0x4b, 0xcc, 0x03, 0xbd, 0x07, + 0x1b, 0xe3, 0xe9, 0xe8, 0x84, 0x78, 0x8d, 0xd3, 0xb2, 0x17, 0x0c, 0x4e, 0x9d, 0x6e, 0xe0, 0x8b, + 0x5c, 0xce, 0x2b, 0xd0, 0x63, 0x28, 0xb0, 0x79, 0xd3, 0x65, 0x4f, 0xb3, 0xe8, 0xb7, 0x16, 0x65, + 0x87, 0x8f, 0x88, 0x87, 0x43, 0x34, 0xba, 0x03, 0x99, 0xe0, 0x6c, 0x42, 0x8a, 0xca, 0x76, 0xea, + 0xfe, 0x7a, 0xb8, 0x24, 0x0c, 0xd7, 0x3a, 0x9b, 0x10, 0xcc, 0xb4, 0xa8, 0xb2, 0x20, 0x3f, 0x77, + 0x16, 0x7a, 0x38, 0x2f, 0x49, 0x87, 0x90, 0x17, 0x01, 0xa0, 0x1d, 0xe1, 0x36, 0xc5, 0xdc, 0xa2, + 0x38, 0x15, 0xf1, 0x62, 0x8e, 0x37, 0x21, 0xdb, 0x75, 0xa7, 0xe3, 0x80, 0xa5, 0x2c, 0x8b, 0xf9, + 0xe0, 0xab, 0x66, 0xfb, 0xcf, 0x29, 0x58, 0x4f, 0x16, 0x02, 0x7a, 0x0a, 0x2a, 0x2f, 0x05, 0x9a, + 0xc1, 0xd4, 0xcc, 0xc6, 0x89, 0x23, 0xc5, 0x90, 0x78, 0x38, 0x32, 0x40, 0xef, 0x41, 0xbe, 0x3b, + 0x9c, 0xfa, 0x01, 0xf1, 0x98, 0xb3, 0x68, 0x42, 0x06, 0x97, 0xb2, 0x09, 0x49, 0x48, 0xc9, 0x82, + 0x82, 0x24, 0x41, 0xf7, 0x12, 0x79, 0xb8, 0x92, 0x70, 0x79, 0x71, 0x22, 0xf4, 0x9f, 0xa4, 0x00, + 0xa2, 0xae, 0x88, 0xbe, 0x0b, 0xaa, 0x13, 0x2b, 0x96, 0x78, 0x3b, 0x8b, 0x50, 0x7b, 0x61, 0xd9, + 0xf0, 0x15, 0x8a, 0x4c, 0x4a, 0x4f, 0x61, 0x3d, 0xa9, 0xfc, 0x52, 0x69, 0xbd, 0x0b, 0x2b, 0xb1, + 0x6e, 0x8b, 0xae, 0x41, 0x8e, 0x77, 0x39, 0x61, 0x2d, 0x46, 0xfa, 0xe7, 0x29, 0xd0, 0x66, 0x1b, + 0xe2, 0x32, 0x30, 0xaa, 0x80, 0xea, 0x11, 0xdf, 0x9d, 0x7a, 0x5d, 0x22, 0x2b, 0x7b, 0x67, 0x49, + 0x53, 0xdd, 0xc3, 0x12, 0x28, 0xe6, 0x15, 0x1a, 0xd2, 0x79, 0x25, 0x95, 0x5f, 0x6a, 0x5e, 0xf7, + 0x60, 0x2d, 0xd1, 0x7e, 0x97, 0xce, 0xec, 0xef, 0x19, 0xc8, 0xb2, 0x46, 0x86, 0x1e, 0x80, 0x4a, + 0xdb, 0x23, 0x1b, 0x88, 0x76, 0xa5, 0xc5, 0xda, 0x09, 0x93, 0x57, 0x2f, 0xe1, 0x08, 0x84, 0x1e, + 0x89, 0x73, 0x8f, 0x9b, 0xa4, 0xe7, 0xcf, 0x3d, 0x69, 0x13, 0x83, 0xa1, 0x6f, 0xc9, 0x93, 0x8f, + 0x5b, 0x29, 0x0b, 0x4e, 0x3e, 0x69, 0x16, 0x07, 0xd2, 0xf0, 0x26, 0xb2, 0xe9, 0x16, 0x33, 0x8b, + 0x9b, 0x31, 0x0d, 0x2f, 0x04, 0x21, 0x33, 0x71, 0xc6, 0x71, 0xc3, 0xa5, 0x67, 0x9c, 0xb4, 0x9f, + 0x33, 0x41, 0x3f, 0x80, 0xa2, 0x5c, 0x95, 0x59, 0xbc, 0x38, 0xf0, 0x64, 0xd7, 0xc5, 0x4b, 0x60, + 0xd5, 0x4b, 0x78, 0x29, 0x05, 0x7a, 0x1a, 0x1d, 0xa2, 0x9c, 0x33, 0xbf, 0xf0, 0x10, 0x95, 0x44, + 0x49, 0x30, 0x7a, 0x05, 0xd7, 0x7b, 0x8b, 0x0f, 0x49, 0x71, 0x06, 0x5e, 0x70, 0x94, 0x56, 0x2f, + 0xe1, 0x65, 0x04, 0xe8, 0xdb, 0xb0, 0xda, 0x23, 0x6f, 0xea, 0xae, 0x3b, 0xe1, 0x84, 0x2a, 0x23, + 0x8c, 0xf6, 0x7b, 0xa4, 0xaa, 0x5e, 0xc2, 0x09, 0xe8, 0xc1, 0x2a, 0x00, 0xa1, 0x7f, 0x3a, 0xb4, + 0x0f, 0xe8, 0x43, 0x58, 0x8d, 0xa3, 0xd1, 0x16, 0xa8, 0x83, 0x80, 0x78, 0xec, 0xf6, 0x27, 0xce, + 0x87, 0x48, 0x10, 0xab, 0xd4, 0x74, 0x62, 0x5b, 0xed, 0x80, 0x42, 0x3c, 0x4f, 0x14, 0x8c, 0x4c, + 0x4f, 0xb9, 0xcb, 0x1a, 0xea, 0xc9, 0x90, 0x98, 0x9e, 0x87, 0x29, 0x40, 0x7f, 0x0b, 0x6b, 0x09, + 0x29, 0xda, 0x85, 0x3c, 0xf1, 0x3c, 0xc3, 0xed, 0xc9, 0x96, 0x25, 0xeb, 0xc6, 0xf4, 0x3c, 0x97, + 0xc9, 0xb1, 0x04, 0xa0, 0x22, 0xe4, 0x47, 0xc4, 0xf7, 0x9d, 0xbe, 0xdc, 0x53, 0x72, 0x88, 0xb6, + 0x61, 0xc5, 0x9f, 0xf6, 0xfb, 0xc4, 0x67, 0x77, 0xd6, 0xa2, 0xb2, 0xad, 0xdc, 0x57, 0x71, 0x5c, + 0xa4, 0xdb, 0xa0, 0x86, 0x1b, 0x85, 0x6e, 0x4d, 0x42, 0x77, 0xad, 0xd8, 0x6e, 0x7c, 0x90, 0xb8, + 0xa3, 0xa4, 0x2f, 0xb8, 0xa3, 0xe8, 0x1f, 0x89, 0x3e, 0xc9, 0x09, 0x4b, 0x50, 0x90, 0x4d, 0x4f, + 0x70, 0x86, 0xe3, 0xa5, 0x29, 0xd3, 0xa2, 0x94, 0xa9, 0x2c, 0x39, 0xf1, 0x5c, 0x64, 0x2e, 0xc8, + 0x85, 0xde, 0x95, 0xbd, 0x91, 0x07, 0xb0, 0xac, 0xdd, 0x09, 0x27, 0xe9, 0x85, 0x4e, 0x94, 0x8b, + 0x9c, 0x7c, 0x9c, 0xec, 0xac, 0xe7, 0xbb, 0x5a, 0xbe, 0x3a, 0x5f, 0x6d, 0xa6, 0x3f, 0x86, 0xe2, + 0xb2, 0xbd, 0x4b, 0xf3, 0x2e, 0xf7, 0xae, 0xcc, 0xbb, 0x1c, 0x2f, 0xcd, 0x7b, 0x2c, 0x4e, 0x65, + 0x61, 0x9c, 0x99, 0x30, 0x4e, 0xfd, 0xd7, 0x69, 0x50, 0xc3, 0x06, 0x46, 0xb7, 0xc6, 0xd0, 0xed, + 0x3a, 0x43, 0x2a, 0x91, 0x5b, 0x23, 0x14, 0xa0, 0x5b, 0x00, 0x1e, 0x19, 0xb9, 0x01, 0x61, 0x6a, + 0x7e, 0xaa, 0xc6, 0x24, 0xd4, 0xef, 0xc4, 0xed, 0xd9, 0xf4, 0xa5, 0x22, 0xfc, 0x8a, 0x21, 0xba, + 0x03, 0x6b, 0x5d, 0xb9, 0xbb, 0x99, 0x9e, 0x47, 0x90, 0x14, 0x52, 0xef, 0xf4, 0x69, 0xe3, 0x4f, + 0x9c, 0x2e, 0x7f, 0x0e, 0xa8, 0x38, 0x12, 0xd0, 0x4c, 0xd0, 0xe6, 0xca, 0xcc, 0x73, 0x3c, 0x13, + 0x72, 0x8c, 0x74, 0x58, 0x95, 0x59, 0xa1, 0x17, 0x00, 0xd6, 0xc4, 0x54, 0x9c, 0x90, 0xc5, 0x31, + 0x8c, 0xa3, 0x90, 0xc4, 0x30, 0x9e, 0x22, 0xe4, 0x9d, 0x5e, 0xcf, 0x23, 0xbe, 0xcf, 0xda, 0x8d, + 0x8a, 0xe5, 0x50, 0xff, 0x65, 0x2a, 0x3a, 0xd2, 0xc2, 0x5c, 0xd1, 0x66, 0x68, 0xb0, 0x2b, 0x86, + 0xc8, 0x55, 0x28, 0xa0, 0x1b, 0x70, 0x30, 0x8a, 0x2a, 0x85, 0x0f, 0x62, 0x2b, 0xa6, 0x2c, 0x2a, + 0xe2, 0xcc, 0xc2, 0xfa, 0xc9, 0x5e, 0x54, 0x3f, 0xff, 0x4a, 0xc3, 0xf5, 0x25, 0x0d, 0xf6, 0xbc, + 0x5a, 0x96, 0x6b, 0x95, 0xbe, 0x60, 0xad, 0x94, 0x0b, 0xd7, 0x2a, 0xb3, 0x60, 0xad, 0xc2, 0x6e, + 0x91, 0x9d, 0xe9, 0x16, 0x45, 0xc8, 0x7b, 0xd3, 0x31, 0x7d, 0x5d, 0x8b, 0x65, 0x94, 0x43, 0x5a, + 0x5f, 0x6f, 0x5d, 0xef, 0xf5, 0x60, 0xdc, 0xaf, 0x0c, 0x3c, 0xb1, 0x86, 0x31, 0x09, 0xb2, 0x01, + 0xd8, 0x61, 0xc1, 0xdf, 0x9e, 0x05, 0x76, 0xb5, 0xd9, 0x3b, 0xff, 0x80, 0xe1, 0xf2, 0xd8, 0x4b, + 0x34, 0xc6, 0x40, 0xef, 0xc4, 0x33, 0xea, 0x8b, 0x2e, 0x39, 0x6b, 0xf1, 0x4b, 0xce, 0x47, 0x50, + 0xa8, 0xbb, 0x7d, 0x6e, 0xf7, 0x18, 0xd4, 0xf0, 0x7b, 0x81, 0xb8, 0xbd, 0x94, 0xf6, 0xf8, 0x07, + 0x83, 0x3d, 0xf9, 0xc1, 0x60, 0xaf, 0x25, 0x11, 0x38, 0x02, 0x23, 0x1d, 0xb2, 0x24, 0x76, 0x81, + 0x91, 0x1f, 0x0a, 0xc4, 0xeb, 0x8e, 0x24, 0xbb, 0xb9, 0x12, 0xeb, 0xe6, 0xfa, 0x13, 0xd8, 0x68, + 0xfb, 0xc4, 0xb3, 0xc6, 0x01, 0x85, 0x8a, 0x4f, 0x05, 0x77, 0x21, 0x37, 0x60, 0x02, 0x11, 0xc5, + 0x9a, 0xe0, 0x13, 0x28, 0xa1, 0xd4, 0x9f, 0x43, 0x8e, 0x4b, 0x28, 0x77, 0xf4, 0x44, 0x2c, 0xc8, + 0xc7, 0x20, 0x82, 0x8c, 0x7f, 0x36, 0xee, 0xb2, 0xa0, 0x0a, 0x98, 0xfd, 0xa7, 0xa5, 0x24, 0x1e, + 0x88, 0x0a, 0x93, 0x8a, 0xd1, 0xae, 0x0b, 0x2b, 0xb1, 0x57, 0x08, 0x2a, 0xc2, 0x66, 0xdb, 0xae, + 0xd9, 0x8d, 0x17, 0x76, 0xe7, 0xa0, 0x6d, 0xd5, 0x2b, 0x26, 0xee, 0xb4, 0x5e, 0x1e, 0x9b, 0xda, + 0x25, 0x94, 0x07, 0xe5, 0xb9, 0x75, 0xa0, 0xa5, 0x90, 0x0a, 0xd9, 0x83, 0xf2, 0x2b, 0xb3, 0xae, + 0xa5, 0xd1, 0x3a, 0x00, 0x43, 0x1d, 0x97, 0x8d, 0x5a, 0x53, 0x53, 0x10, 0x40, 0xce, 0x68, 0x37, + 0x5b, 0x8d, 0x23, 0x2d, 0x43, 0xff, 0xd7, 0xca, 0xb6, 0x55, 0x6b, 0x68, 0x59, 0xfa, 0xbf, 0xd2, + 0x30, 0x6a, 0x26, 0xd6, 0x72, 0xbb, 0x15, 0x50, 0xc3, 0xd7, 0x16, 0xba, 0x06, 0x28, 0xe1, 0x4e, + 0x3a, 0x5b, 0x81, 0xbc, 0x51, 0x6f, 0x37, 0x5b, 0x26, 0xd6, 0x52, 0xd4, 0xf3, 0xa1, 0x71, 0xa0, + 0xa5, 0xa9, 0xe7, 0x7a, 0xc3, 0x28, 0xd7, 0x35, 0x65, 0xb7, 0x41, 0xaf, 0x05, 0xd1, 0xa3, 0x01, + 0xbd, 0x03, 0x57, 0x25, 0x51, 0xc5, 0x3c, 0xae, 0x37, 0x5e, 0x46, 0x81, 0x17, 0x20, 0x53, 0x35, + 0xeb, 0x47, 0x5a, 0x0a, 0xad, 0x81, 0x5a, 0x63, 0xe1, 0x59, 0xaf, 0x4c, 0x2d, 0x4d, 0x9d, 0xd4, + 0xda, 0x07, 0xa6, 0xd1, 0xa2, 0x84, 0x16, 0xac, 0xc4, 0x1e, 0x2f, 0xf1, 0x3c, 0x88, 0x40, 0x24, + 0xdd, 0x2a, 0x14, 0x8e, 0x2c, 0xdb, 0xa2, 0x96, 0x22, 0xb6, 0x9a, 0xc9, 0x63, 0x6b, 0xb4, 0xaa, + 0x26, 0xd6, 0x94, 0xdd, 0x5f, 0xe5, 0x40, 0x0d, 0x37, 0x3a, 0xba, 0x0e, 0x57, 0x8c, 0x46, 0xbb, + 0x5e, 0xe9, 0xd8, 0x8d, 0x56, 0xa7, 0x62, 0xb6, 0x4c, 0x7c, 0x64, 0xd9, 0x94, 0xa8, 0x04, 0x57, + 0x9b, 0xad, 0x72, 0xab, 0xdd, 0xec, 0x18, 0x55, 0xd3, 0xa8, 0x75, 0xec, 0x46, 0xc7, 0xc4, 0xb8, + 0x81, 0xb5, 0xbf, 0xa4, 0xd0, 0x36, 0xdc, 0x48, 0xe8, 0xac, 0xa3, 0xf2, 0xa1, 0xd9, 0x39, 0x6e, + 0xd7, 0xeb, 0x14, 0xa3, 0xfd, 0x26, 0x8d, 0xee, 0xc0, 0xed, 0x04, 0xc2, 0x68, 0xd8, 0xad, 0xb2, + 0x65, 0x9b, 0xb8, 0x63, 0x60, 0xb3, 0xdc, 0xb2, 0xec, 0x43, 0xed, 0xb7, 0x69, 0xf4, 0x75, 0xb8, + 0x95, 0x40, 0xe1, 0xb6, 0x1d, 0x43, 0x52, 0xaa, 0xcf, 0xd3, 0x68, 0x07, 0xbe, 0xb6, 0x84, 0x8a, + 0x07, 0x5b, 0x6e, 0x99, 0x15, 0xed, 0x77, 0xe7, 0xe1, 0xb0, 0xd9, 0x6c, 0x95, 0x31, 0x73, 0xfa, + 0xc5, 0x3c, 0xce, 0x6e, 0x54, 0xcc, 0xce, 0x91, 0x79, 0xd4, 0xc0, 0x2f, 0x3b, 0xc7, 0xd8, 0x6c, + 0x36, 0xdb, 0xd8, 0xd4, 0x3e, 0x51, 0xe6, 0xa6, 0xc0, 0x70, 0x15, 0xab, 0x59, 0x8b, 0x50, 0x3f, + 0x55, 0xd0, 0x2e, 0xdc, 0x9d, 0x47, 0xd9, 0x66, 0xeb, 0x45, 0x03, 0xd7, 0x3a, 0x6d, 0xbb, 0xfc, + 0x41, 0xd9, 0xaa, 0x97, 0x0f, 0xea, 0xa6, 0xf6, 0x33, 0x65, 0x6e, 0xba, 0x0c, 0x7b, 0x6c, 0x55, + 0x22, 0xc2, 0x4f, 0x97, 0xb8, 0x6d, 0xdb, 0x4d, 0xa3, 0x6a, 0x56, 0xda, 0x9c, 0xea, 0xe7, 0x0a, + 0xd2, 0xe1, 0xe6, 0x22, 0x14, 0x36, 0xcb, 0x46, 0x95, 0x61, 0x3e, 0x53, 0xe6, 0x56, 0x89, 0x87, + 0xd6, 0x68, 0x75, 0xb0, 0x59, 0xae, 0xbc, 0xd4, 0x7e, 0xa1, 0xa0, 0x6b, 0xb0, 0x11, 0x56, 0x42, + 0x47, 0x14, 0x94, 0xf6, 0x6f, 0x05, 0xbd, 0x03, 0x9b, 0x09, 0x4b, 0xa9, 0xfa, 0x8f, 0x82, 0xee, + 0x81, 0xbe, 0x48, 0x35, 0x13, 0xe1, 0x7f, 0x15, 0xf4, 0x2e, 0xec, 0x2c, 0x59, 0x8e, 0x17, 0x65, + 0x8b, 0xae, 0x45, 0xc8, 0xfa, 0x3f, 0xe6, 0xf0, 0x99, 0x55, 0x37, 0x3b, 0xcd, 0x97, 0xb6, 0xd1, + 0xb1, 0x6c, 0xab, 0x25, 0x6a, 0xed, 0x6f, 0x19, 0xb4, 0x05, 0xd7, 0x2b, 0xe6, 0x07, 0x1d, 0x6c, + 0x1e, 0x5a, 0xac, 0xce, 0xf9, 0x46, 0xac, 0x98, 0xc7, 0x4d, 0xed, 0xf7, 0x59, 0x74, 0x03, 0xae, + 0x25, 0xb4, 0x2d, 0xb3, 0xd9, 0xe2, 0xca, 0x3f, 0x64, 0xd1, 0x4d, 0x28, 0x26, 0x94, 0x7c, 0xeb, + 0x71, 0xf5, 0x1f, 0xb3, 0x73, 0xcc, 0x46, 0xc3, 0x7e, 0x66, 0x1d, 0x52, 0xb5, 0xf6, 0xa7, 0xec, + 0xc3, 0x4f, 0x14, 0xb8, 0xdc, 0x14, 0xdf, 0x7a, 0x9b, 0xc4, 0x7b, 0x33, 0xe8, 0x12, 0x64, 0x40, + 0xe1, 0x90, 0x04, 0xe2, 0xd5, 0x39, 0xd7, 0x82, 0xcd, 0xd1, 0x24, 0x38, 0x2b, 0x25, 0xbe, 0xc6, + 0xea, 0x1b, 0x1f, 0xff, 0xf5, 0x8b, 0x4f, 0xd3, 0x2b, 0x48, 0xdd, 0x7f, 0xf3, 0xfe, 0x3e, 0xfb, + 0x32, 0x8b, 0x0e, 0xa1, 0xc0, 0x1a, 0x70, 0xdd, 0xed, 0x23, 0x79, 0x45, 0x96, 0xbd, 0xbe, 0x34, + 0x2b, 0xd0, 0xaf, 0x32, 0x82, 0xcb, 0x68, 0x8d, 0x12, 0xf0, 0x87, 0xc7, 0xd0, 0xed, 0xdf, 0x4f, + 0x3d, 0x48, 0xa1, 0x43, 0xc8, 0x31, 0x22, 0x7f, 0x69, 0x2c, 0x73, 0x6c, 0x88, 0xb1, 0xad, 0x22, + 0x08, 0xd9, 0xfc, 0x07, 0x29, 0xf4, 0x7d, 0xc8, 0x9b, 0x3f, 0x22, 0xdd, 0x69, 0x40, 0x50, 0x51, + 0x58, 0xcc, 0x35, 0xff, 0xd2, 0x12, 0x1f, 0xfa, 0x0d, 0x46, 0x79, 0x55, 0x5f, 0x61, 0x94, 0x9c, + 0xe6, 0x89, 0x38, 0x0a, 0x50, 0x1d, 0x72, 0x55, 0x67, 0xdc, 0x1b, 0x12, 0x94, 0x38, 0x7b, 0x96, + 0x92, 0x6d, 0x31, 0xb2, 0x6b, 0xfa, 0x46, 0x14, 0xdf, 0xfe, 0x87, 0x8c, 0xe0, 0x49, 0x6a, 0xf7, + 0x24, 0xc7, 0xd0, 0x8f, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x52, 0x0f, 0xa4, 0x27, 0x84, 0x17, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/skaffold.proto b/proto/skaffold.proto index db4294c9be6..e306555e747 100644 --- a/proto/skaffold.proto +++ b/proto/skaffold.proto @@ -112,10 +112,17 @@ message Event { message DevLoopEvent { int32 iteration = 1; // dev loop iteration string status = 2; // dev loop status oneof: In Progress, Completed, Failed - string err = 3; // error when current dev loop has failed. - ErrorCode errCode = 4; // error code representing the error + ActionableErr err = 3; // actionable error message + } +// `ErrDef` defines an error occurred along with an optional suggestions +message ActionableErr { + ErrorCode errCode = 1; // error code representing the error + string message = 2; // message describing the error. + repeated string suggestions = 3; // a list of suggestions for the error. + +} // `MetaEvent` provides general information regarding Skaffold message MetaEvent { // entry, for example: `"Starting Skaffold: {Version:v0.39.0-16-g5bb7c9e0 ConfigVersion:skaffold/v1 GitVersion: GitCommit:5bb7c9e078e4d522a5ffc42a2f1274fd17d75902 GitTreeState:dirty BuildDate01:29Z GoVersion:go1.13rc1 Compiler:gc Platform:linux/amd64}"` From 56ebbaabace932c91d32c3277efe1e17622a38ca Mon Sep 17 00:00:00 2001 From: tejal29 Date: Wed, 29 Apr 2020 09:53:08 -0700 Subject: [PATCH 3/9] Add test for dev loop entries --- integration/rpc_test.go | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/integration/rpc_test.go b/integration/rpc_test.go index d99591f8708..c1f27e1ca82 100644 --- a/integration/rpc_test.go +++ b/integration/rpc_test.go @@ -111,7 +111,7 @@ func TestEventsRPC(t *testing.T) { break } } - metaEntries, buildEntries, deployEntries := 0, 0, 0 + metaEntries, buildEntries, deployEntries, devLoopEntries := 0, 0, 0, 0 for _, entry := range logEntries { switch entry.Event.GetEventType().(type) { case *proto.Event_MetaEvent: @@ -123,14 +123,18 @@ func TestEventsRPC(t *testing.T) { case *proto.Event_DeployEvent: deployEntries++ t.Logf("deploy event %d: %v", deployEntries, entry.Event) + case *proto.Event_DevLoopEvent: + devLoopEntries++ + t.Logf("devloop event event %d: %v", devLoopEntries, entry.Event) default: t.Logf("unknown event: %v", entry.Event) } } - // make sure we have exactly 1 meta entry, 2 deploy entries and 2 build entries + // make sure we have exactly 1 meta entry, 2 deploy entries and 2 build entries and 2 devLoopEntries testutil.CheckDeepEqual(t, 1, metaEntries) testutil.CheckDeepEqual(t, 2, deployEntries) testutil.CheckDeepEqual(t, 2, buildEntries) + testutil.CheckDeepEqual(t, 2, devLoopEntries) } func TestEventLogHTTP(t *testing.T) { @@ -197,22 +201,30 @@ func TestEventLogHTTP(t *testing.T) { } } - metaEntries, buildEntries, deployEntries := 0, 0, 0 + metaEntries, buildEntries, deployEntries, devLoopEntries := 0, 0, 0, 0 for _, entry := range logEntries { switch entry.Event.GetEventType().(type) { case *proto.Event_MetaEvent: metaEntries++ + t.Logf("meta event %d: %v", metaEntries, entry.Event) case *proto.Event_BuildEvent: buildEntries++ + t.Logf("build event %d: %v", buildEntries, entry.Event) case *proto.Event_DeployEvent: deployEntries++ + t.Logf("deploy event %d: %v", deployEntries, entry.Event) + case *proto.Event_DevLoopEvent: + devLoopEntries++ + t.Logf("devloop event event %d: %v", devLoopEntries, entry.Event) default: + t.Logf("unknown event: %v", entry.Event) } } - // make sure we have exactly 1 meta entry, 2 deploy entries and 2 build entries + // make sure we have exactly 1 meta entry, 2 deploy entries, 2 build entries and 2 devLoopEntries testutil.CheckDeepEqual(t, 1, metaEntries) testutil.CheckDeepEqual(t, 2, deployEntries) testutil.CheckDeepEqual(t, 2, buildEntries) + testutil.CheckDeepEqual(t, 2, devLoopEntries) }) } } @@ -341,8 +353,7 @@ func setupSkaffoldWithArgs(t *testing.T, args ...string) { // start a skaffold dev loop on an example ns, _ := SetupNamespace(t) - // Disable caching to ensure we get a "build in progress" event each time. - skaffold.Dev(append([]string{"--cache-artifacts=false"}, args...)...).InDir("testdata/dev").InNs(ns.Name).RunBackground(t) + skaffold.Dev(args...).InDir("testdata/dev").InNs(ns.Name).RunBackground(t) t.Cleanup(func() { Run(t, "testdata/dev", "rm", "foo") From 75fe5a9efb0e15d4d26c776e565e937ae7eb516d Mon Sep 17 00:00:00 2001 From: tejal29 Date: Wed, 29 Apr 2020 13:52:07 -0700 Subject: [PATCH 4/9] add more information for proto marshall error --- integration/rpc_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/rpc_test.go b/integration/rpc_test.go index c1f27e1ca82..405649f369b 100644 --- a/integration/rpc_test.go +++ b/integration/rpc_test.go @@ -191,7 +191,7 @@ func TestEventLogHTTP(t *testing.T) { entryStr = strings.Replace(entryStr, "{\"result\":", "", 1) entryStr = entryStr[:len(entryStr)-1] if err := jsonpb.UnmarshalString(entryStr, &entry); err != nil { - t.Errorf("error converting http response to proto: %s", err.Error()) + t.Errorf("error converting http response %s to proto: %s", entryStr, err.Error()) } numEntries++ logEntries = append(logEntries, entry) From 9cb82be833452570784ffb5ea09b580464bc967f Mon Sep 17 00:00:00 2001 From: tejal29 Date: Thu, 30 Apr 2020 16:55:44 -0700 Subject: [PATCH 5/9] add skaffold end session event --- cmd/skaffold/app/cmd/cmd.go | 2 +- cmd/skaffold/app/cmd/commands.go | 8 +- docs/content/en/api/skaffold.swagger.json | 143 ++++- docs/content/en/docs/references/api/grpc.md | 56 +- pkg/diag/validator/pod.go | 6 +- pkg/diag/validator/pod_test.go | 4 +- pkg/skaffold/event/event.go | 31 +- pkg/skaffold/runner/changeset.go | 14 + pkg/skaffold/runner/dev.go | 10 +- proto/skaffold.pb.go | 544 ++++++++++++++------ proto/skaffold.proto | 38 +- 11 files changed, 658 insertions(+), 198 deletions(-) diff --git a/cmd/skaffold/app/cmd/cmd.go b/cmd/skaffold/app/cmd/cmd.go index f985515655c..780826ed1c2 100644 --- a/cmd/skaffold/app/cmd/cmd.go +++ b/cmd/skaffold/app/cmd/cmd.go @@ -47,7 +47,7 @@ var ( func NewSkaffoldCommand(out, err io.Writer) *cobra.Command { updateMsg := make(chan string) - var shutdownAPIServer func() error + var shutdownAPIServer func() error rootCmd := &cobra.Command{ Use: "skaffold", diff --git a/cmd/skaffold/app/cmd/commands.go b/cmd/skaffold/app/cmd/commands.go index 6ec396a8094..e90ae70f6f3 100644 --- a/cmd/skaffold/app/cmd/commands.go +++ b/cmd/skaffold/app/cmd/commands.go @@ -23,6 +23,8 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" + + "github.com/GoogleContainerTools/skaffold/pkg/skaffold/event" ) // Builder is used to build cobra commands. @@ -94,7 +96,11 @@ func (b *builder) ExactArgs(argCount int, action func(context.Context, io.Writer func (b *builder) NoArgs(action func(context.Context, io.Writer) error) *cobra.Command { b.cmd.Args = cobra.NoArgs b.cmd.RunE = func(*cobra.Command, []string) error { - return action(b.cmd.Context(), b.cmd.OutOrStdout()) + err := action(b.cmd.Context(), b.cmd.OutOrStdout()) + // The actual error code will be passed in + // https://github.com/GoogleContainerTools/skaffold/pull/4045 + event.EndSessionEvent(1) + return err } return &b.cmd } diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json index 62fcfbc83d1..affb1f30895 100644 --- a/docs/content/en/api/skaffold.swagger.json +++ b/docs/content/en/api/skaffold.swagger.json @@ -97,13 +97,13 @@ }, { "name": "event.buildEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", + "SUCCESS", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -142,13 +142,13 @@ }, { "name": "event.deployEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", + "SUCCESS", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -249,13 +249,13 @@ }, { "name": "event.statusCheckEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", + "SUCCESS", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -331,13 +331,13 @@ }, { "name": "event.fileSyncEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", + "SUCCESS", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -411,6 +411,22 @@ "type": "integer", "format": "int32" }, + { + "name": "event.devLoopEvent.changeType", + "description": " - INITIAL_LOOP: First iteration\n - BUILD: Indicates build dependency change\n - TEST: Indicates test dependency change\n - DEPLOY: Indicates deploy dependency change\n - CONFIG: Indicates skaffold config change\n - SYNC: Indicates sync dependency change", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "INITIAL_LOOP", + "BUILD", + "TEST", + "DEPLOY", + "CONFIG", + "SYNC" + ], + "default": "INITIAL_LOOP" + }, { "name": "event.devLoopEvent.status", "in": "query", @@ -419,13 +435,13 @@ }, { "name": "event.devLoopEvent.err.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", + "SUCCESS", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -466,6 +482,45 @@ }, "collectionFormat": "multi" }, + { + "name": "event.endEvent.errCode", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "in": "query", + "required": false, + "type": "string", + "enum": [ + "COULD_NOT_DETERMINE", + "SUCCESS", + "STATUS_CHECK_IMAGE_PULL_ERR", + "STATUS_CHECK_CONTAINER_CREATING", + "STATUS_CHECK_RUN_CONTAINER_ERR", + "STATUS_CHECK_CONTAINER_TERMINATED", + "STATUS_CHECK_CONTAINER_RESTARTING", + "STATUS_CHECK_NODE_MEMORY_PRESSURE", + "STATUS_CHECK_NODE_DISK_PRESSURE", + "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", + "STATUS_CHECK_NODE_PID_PRESSURE", + "STATUS_CHECK_NODE_UNSCHEDULABLE", + "STATUS_CHECK_NODE_UNREACHABLE", + "STATUS_CHECK_NODE_NOT_READY", + "ErrorCode_UNKNOWN", + "STATUS_CHECK_UNKNOWN", + "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", + "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", + "FILE_SYNC_INIT_ERROR", + "DEV_REGISTER_BUILD_DEPS", + "DEV_REGISTER_TEST_DEPS", + "DEV_REGISTER_DEPLOY_DEPS", + "DEV_REGISTER_CONFIG_DEP" + ], + "default": "COULD_NOT_DETERMINE" + }, + { + "name": "event.endEvent.errMsg", + "in": "query", + "required": false, + "type": "string" + }, { "name": "entry", "in": "query", @@ -589,6 +644,9 @@ "count": { "type": "integer", "format": "int32" + }, + "changeType": { + "$ref": "#/definitions/protoChangeType" } } }, @@ -691,6 +749,20 @@ "default": "UNKNOWN_BUILDER_TYPE", "description": "Enum indicating builders used\n- UNKNOWN_BUILDER_TYPE: Could not determine builder type\n - JIB: JIB Builder\n - BAZEL: Bazel Builder\n - BUILDPACKS: Buildpacks Builder\n - CUSTOM: Custom Builder\n - KANIKO: Kaniko Builder\n - DOCKER: Docker Builder" }, + "protoChangeType": { + "type": "string", + "enum": [ + "INITIAL_LOOP", + "BUILD", + "TEST", + "DEPLOY", + "CONFIG", + "SYNC" + ], + "default": "INITIAL_LOOP", + "description": "- INITIAL_LOOP: First iteration\n - BUILD: Indicates build dependency change\n - TEST: Indicates test dependency change\n - DEPLOY: Indicates deploy dependency change\n - CONFIG: Indicates skaffold config change\n - SYNC: Indicates sync dependency change", + "description": "Enum for indicating which dependency change triggered the dev loop" + }, "protoClusterType": { "type": "string", "enum": [ @@ -785,6 +857,21 @@ "default": "UNKNOWN_DEPLOYER_TYPE", "description": "Enum indicating deploy tools used\n- UNKNOWN_DEPLOYER_TYPE: Could not determine Deployer Type\n - HELM: Helm Deployer\n - KUSTOMIZE: Kustomize Deployer\n - KUBECTL: Kubectl Deployer" }, + "protoDevLoop": { + "type": "object", + "properties": { + "iteration": { + "type": "integer", + "format": "int32" + }, + "changeType": { + "$ref": "#/definitions/protoChangeType" + }, + "errCode": { + "$ref": "#/definitions/protoErrorCode" + } + } + }, "protoDevLoopEvent": { "type": "object", "properties": { @@ -792,6 +879,9 @@ "type": "integer", "format": "int32" }, + "changeType": { + "$ref": "#/definitions/protoChangeType" + }, "status": { "type": "string" }, @@ -801,11 +891,29 @@ }, "description": "`DevLoopEvent` marks the start and end of a dev loop." }, + "protoEndEvent": { + "type": "object", + "properties": { + "errCode": { + "$ref": "#/definitions/protoErrorCode" + }, + "errMsg": { + "type": "string" + }, + "loops": { + "type": "array", + "items": { + "$ref": "#/definitions/protoDevLoop" + } + } + }, + "description": "`EndEvent` is the last event indicating skaffold session ended." + }, "protoErrorCode": { "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", + "SUCCESS", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -829,10 +937,14 @@ "DEV_REGISTER_CONFIG_DEP" ], "default": "COULD_NOT_DETERMINE", +<<<<<<< HEAD <<<<<<< HEAD "description": "Enum for error codes\n- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason" ======= "description": "- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", +======= + "description": "- COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", +>>>>>>> ca8075742... add skaffold end session event "description": "Enum for error codes" >>>>>>> 118d52ef4... Add to indicate start and end of skaffold dev iterations }, @@ -865,6 +977,9 @@ }, "devLoopEvent": { "$ref": "#/definitions/protoDevLoopEvent" + }, + "endEvent": { + "$ref": "#/definitions/protoEndEvent" } }, "description": "`Event` describes an event in the Skaffold process.\nIt is one of MetaEvent, BuildEvent, DeployEvent, PortEvent, StatusCheckEvent, ResourceStatusCheckEvent, FileSyncEvent, or DebuggingContainerEvent." @@ -1048,6 +1163,12 @@ }, "metadata": { "$ref": "#/definitions/protoMetadata" + }, + "loops": { + "type": "array", + "items": { + "$ref": "#/definitions/protoDevLoop" + } } }, "description": "`State` represents the current state of the Skaffold components" diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md index e27d7166c2e..b93e0b82bb7 100644 --- a/docs/content/en/docs/references/api/grpc.md +++ b/docs/content/en/docs/references/api/grpc.md @@ -247,6 +247,7 @@ anytime a deployment starts or completes, successfully or not. | ----- | ---- | ----- | ----------- | | type | [DeployerType](#proto.DeployerType) | | | | count | [int32](#int32) | | | +| changeType | [ChangeType](#proto.ChangeType) | | | @@ -269,6 +270,23 @@ anytime a deployment starts or completes, successfully or not. + +#### DevLoop + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| iteration | [int32](#int32) | | dev loop iteration | +| changeType | [ChangeType](#proto.ChangeType) | | Change type which triggered this loop | +| errCode | [ErrorCode](#proto.ErrorCode) | | actionable error message | + + + + + + + #### DevLoopEvent `DevLoopEvent` marks the start and end of a dev loop. @@ -277,6 +295,7 @@ anytime a deployment starts or completes, successfully or not. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | iteration | [int32](#int32) | | dev loop iteration | +| changeType | [ChangeType](#proto.ChangeType) | | | | status | [string](#string) | | dev loop status oneof: In Progress, Completed, Failed | | err | [ActionableErr](#proto.ActionableErr) | | actionable error message | @@ -286,6 +305,23 @@ anytime a deployment starts or completes, successfully or not. + +#### EndEvent +`EndEvent` is the last event indicating skaffold session ended. + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| errCode | [ErrorCode](#proto.ErrorCode) | | | +| errMsg | [string](#string) | | | +| loops | [DevLoop](#proto.DevLoop) | repeated | | + + + + + + + #### Event `Event` describes an event in the Skaffold process. @@ -303,6 +339,7 @@ It is one of MetaEvent, BuildEvent, DeployEvent, PortEvent, StatusCheckEvent, Re | fileSyncEvent | [FileSyncEvent](#proto.FileSyncEvent) | | describes the sync status. | | debuggingContainerEvent | [DebuggingContainerEvent](#proto.DebuggingContainerEvent) | | describes the appearance or disappearance of a debugging container | | devLoopEvent | [DevLoopEvent](#proto.DevLoopEvent) | | describes a start and end of a dev loop. | +| endEvent | [EndEvent](#proto.EndEvent) | | | @@ -516,6 +553,7 @@ will be sent with the new status. | fileSyncState | [FileSyncState](#proto.FileSyncState) | | | | debuggingContainers | [DebuggingContainerEvent](#proto.DebuggingContainerEvent) | repeated | | | metadata | [Metadata](#proto.Metadata) | | | +| loops | [DevLoop](#proto.DevLoop) | repeated | | @@ -651,6 +689,22 @@ Enum indicating builders used + + +### ChangeType +Enum for indicating which dependency change triggered the dev loop + +| Name | Number | Description | +| ---- | ------ | ----------- | +| INITIAL_LOOP | 0 | First iteration | +| BUILD | 1 | Indicates build dependency change | +| TEST | 2 | Indicates test dependency change | +| DEPLOY | 3 | Indicates deploy dependency change | +| CONFIG | 4 | Indicates skaffold config change | +| SYNC | 5 | Indicates sync dependency change | + + + ### ClusterType @@ -687,7 +741,7 @@ Enum for error codes | Name | Number | Description | | ---- | ------ | ----------- | | COULD_NOT_DETERMINE | 0 | Could not determine error | -| STATUS_CHECK_NO_ERROR | 200 | Status Check Success | +| SUCCESS | 200 | Status Check Success | | STATUS_CHECK_IMAGE_PULL_ERR | 300 | Container image pull error | | STATUS_CHECK_CONTAINER_CREATING | 301 | Container creating error | | STATUS_CHECK_RUN_CONTAINER_ERR | 302 | Container run error | diff --git a/pkg/diag/validator/pod.go b/pkg/diag/validator/pod.go index 1c09f79f054..a1e5b62e59e 100644 --- a/pkg/diag/validator/pod.go +++ b/pkg/diag/validator/pod.go @@ -100,7 +100,7 @@ func getContainerStatus(pod *v1.Pod) (proto.ErrorCode, error) { } } } - return proto.ErrorCode_STATUS_CHECK_NO_ERROR, nil + return proto.ErrorCode_SUCCESS, nil } func getWaitingContainerStatus(cs []v1.ContainerStatus) (proto.ErrorCode, error) { @@ -114,7 +114,7 @@ func getWaitingContainerStatus(cs []v1.ContainerStatus) (proto.ErrorCode, error) } } // No waiting or terminated containers, pod should be in good health. - return proto.ErrorCode_STATUS_CHECK_NO_ERROR, nil + return proto.ErrorCode_SUCCESS, nil } func getTolerationsDetails(reason string, message string) (proto.ErrorCode, error) { @@ -219,7 +219,7 @@ func newPodStatus(n string, ns string, p string) *podStatus { name: n, namespace: ns, phase: p, - errCode: proto.ErrorCode_STATUS_CHECK_NO_ERROR, + errCode: proto.ErrorCode_SUCCESS, } } diff --git a/pkg/diag/validator/pod_test.go b/pkg/diag/validator/pod_test.go index cd7b20fccdd..a1806d3bd98 100644 --- a/pkg/diag/validator/pod_test.go +++ b/pkg/diag/validator/pod_test.go @@ -88,7 +88,7 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "", "foo", "Succeeded", nil, - proto.ErrorCode_STATUS_CHECK_NO_ERROR)}, + proto.ErrorCode_SUCCESS)}, }, { description: "pod is in Stable State", @@ -109,7 +109,7 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "", "foo", "Running", nil, - proto.ErrorCode_STATUS_CHECK_NO_ERROR)}, + proto.ErrorCode_SUCCESS)}, }, { description: "pod condition unknown", diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go index c4b99561911..1a5e609e044 100644 --- a/pkg/skaffold/event/event.go +++ b/pkg/skaffold/event/event.go @@ -249,8 +249,12 @@ func BuildComplete(imageName string) { } // DevLoopInProgress notifies that a dev loop has been started. -func DevLoopInProgress(i int) { - handler.handleDevLoopEvent(&proto.DevLoopEvent{Iteration: int32(i), Status: InProgress}) +func DevLoopInProgress(i int, depType proto.ChangeType) { + handler.handleDevLoopEvent(&proto.DevLoopEvent{ + Iteration: int32(i), + ChangeType: depType, + Status: InProgress, + }) } // DevLoopFailed notifies that a dev loop has failed with an error code @@ -415,6 +419,18 @@ func LogMetaEvent() { }) } +// EndSessionEvent notifies that that skaffold session has ended and describes it +func EndSessionEvent(errorCode proto.ErrorCode) { + go handler.handle(&proto.Event{ + EventType: &proto.Event_EndEvent{ + EndEvent: &proto.EndEvent{ + ErrCode: errorCode, + Loops: handler.state.Loops, + }, + }, + }) +} + func (ev *eventHandler) handle(event *proto.Event) { logEntry := &proto.LogEntry{ Timestamp: ptypes.TimestampNow(), @@ -530,14 +546,24 @@ func (ev *eventHandler) handle(event *proto.Event) { } case *proto.Event_DevLoopEvent: de := e.DevLoopEvent + ev.stateLock.Lock() switch de.Status { case InProgress: + ev.state.Loops = append(ev.state.Loops, &proto.DevLoop{ + Iteration: de.Iteration, + ChangeType: de.ChangeType, + }) logEntry.Entry = fmt.Sprintf("Dev Iteration %d in progress", de.Iteration) case Succeeded: + ev.state.Loops[int(de.Iteration)].ErrCode = proto.ErrorCode_SUCCESS logEntry.Entry = fmt.Sprintf("Dev Iteration %d successful", de.Iteration) default: + ev.state.Loops[int(de.Iteration)].ErrCode = de.Err.ErrCode logEntry.Entry = fmt.Sprintf("Dev Iteration %d failed with error code %v", de.Iteration, de.Err.ErrCode) } + ev.stateLock.Unlock() + case *proto.Event_EndEvent: + logEntry.Entry = fmt.Sprintf("Skaffold end event with %d dev loops", len(e.EndEvent.Loops)) default: return } @@ -552,6 +578,7 @@ func ResetStateOnBuild() { builds[k] = NotStarted } newState := emptyStateWithArtifacts(builds, handler.getState().Metadata) + newState.Loops = handler.getState().Loops handler.setState(newState) } diff --git a/pkg/skaffold/runner/changeset.go b/pkg/skaffold/runner/changeset.go index d2b18133fd1..701af2d46fa 100644 --- a/pkg/skaffold/runner/changeset.go +++ b/pkg/skaffold/runner/changeset.go @@ -19,6 +19,7 @@ package runner import ( "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/sync" + "github.com/GoogleContainerTools/skaffold/proto" ) type changeSet struct { @@ -28,6 +29,7 @@ type changeSet struct { resyncTracker map[string]*sync.Item needsRedeploy bool needsReload bool + changeType proto.ChangeType } func (c *changeSet) AddRebuild(a *latest.Artifact) { @@ -37,6 +39,7 @@ func (c *changeSet) AddRebuild(a *latest.Artifact) { c.rebuildTracker[a.ImageName] = a c.needsRebuild = append(c.needsRebuild, a) c.needsRedeploy = true + c.changeType = proto.ChangeType_BUILD } func (c *changeSet) AddResync(s *sync.Item) { @@ -45,6 +48,17 @@ func (c *changeSet) AddResync(s *sync.Item) { } c.resyncTracker[s.Image] = s c.needsResync = append(c.needsResync, s) + c.changeType = proto.ChangeType_SYNC +} + +func (c *changeSet) AddRedeploy(ct proto.ChangeType) { + c.needsRedeploy = true + c.changeType = ct +} + +func (c *changeSet) NeedsReload() { + c.needsReload = true + c.changeType = proto.ChangeType_CONFIG } func (c *changeSet) resetBuild() { diff --git a/pkg/skaffold/runner/dev.go b/pkg/skaffold/runner/dev.go index 6188a51c0a4..c2b41d32eb7 100644 --- a/pkg/skaffold/runner/dev.go +++ b/pkg/skaffold/runner/dev.go @@ -63,7 +63,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { // if any action is going to be performed, reset the monitor's changed component tracker for debouncing defer r.monitor.Reset() defer r.listener.LogWatchToUser(out) - event.DevLoopInProgress(iteration) + event.DevLoopInProgress(iteration, r.changeSet.changeType) defer func() { iteration++ }() if needsSync { defer func() { @@ -126,7 +126,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { // Dev watches for changes and runs the skaffold build and deploy // config until interrupted by the user. func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*latest.Artifact) error { - event.DevLoopInProgress(0) + event.DevLoopInProgress(0, proto.ChangeType_INITIAL_LOOP) r.createLogger(out, artifacts) defer r.logger.Stop() @@ -177,7 +177,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Watch test configuration if err := r.monitor.Register( r.tester.TestDependencies, - func(filemon.Events) { r.changeSet.needsRedeploy = true }, + func(filemon.Events) { r.changeSet.AddRedeploy(proto.ChangeType_TEST) }, ); err != nil { event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_TEST_DEPS, err) return fmt.Errorf("watching test files: %w", err) @@ -186,7 +186,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Watch deployment configuration if err := r.monitor.Register( r.deployer.Dependencies, - func(filemon.Events) { r.changeSet.needsRedeploy = true }, + func(filemon.Events) { r.changeSet.AddRedeploy(proto.ChangeType_DEPLOY) }, ); err != nil { event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_DEPLOY_DEPS, err) return fmt.Errorf("watching files for deployer: %w", err) @@ -195,7 +195,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Watch Skaffold configuration if err := r.monitor.Register( func() ([]string, error) { return []string{r.runCtx.Opts.ConfigurationFile}, nil }, - func(filemon.Events) { r.changeSet.needsReload = true }, + func(filemon.Events) { r.changeSet.NeedsReload() }, ); err != nil { event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_CONFIG_DEP, err) return fmt.Errorf("watching skaffold configuration %q: %w", r.runCtx.Opts.ConfigurationFile, err) diff --git a/proto/skaffold.pb.go b/proto/skaffold.pb.go index 1086fb52072..a0316f44f6c 100644 --- a/proto/skaffold.pb.go +++ b/proto/skaffold.pb.go @@ -147,6 +147,50 @@ func (DeployerType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_4f2d38e344f9dbf5, []int{2} } +// Enum for indicating which dependency change triggered the dev loop +type ChangeType int32 + +const ( + // First iteration + ChangeType_INITIAL_LOOP ChangeType = 0 + // Indicates build dependency change + ChangeType_BUILD ChangeType = 1 + // Indicates test dependency change + ChangeType_TEST ChangeType = 2 + // Indicates deploy dependency change + ChangeType_DEPLOY ChangeType = 3 + // Indicates skaffold config change + ChangeType_CONFIG ChangeType = 4 + // Indicates sync dependency change + ChangeType_SYNC ChangeType = 5 +) + +var ChangeType_name = map[int32]string{ + 0: "INITIAL_LOOP", + 1: "BUILD", + 2: "TEST", + 3: "DEPLOY", + 4: "CONFIG", + 5: "SYNC", +} + +var ChangeType_value = map[string]int32{ + "INITIAL_LOOP": 0, + "BUILD": 1, + "TEST": 2, + "DEPLOY": 3, + "CONFIG": 4, + "SYNC": 5, +} + +func (x ChangeType) String() string { + return proto.EnumName(ChangeType_name, int32(x)) +} + +func (ChangeType) EnumDescriptor() ([]byte, []int) { + return fileDescriptor_4f2d38e344f9dbf5, []int{3} +} + // Enum indicating cluster type the application is deployed to type ClusterType int32 @@ -180,7 +224,7 @@ func (x ClusterType) String() string { } func (ClusterType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{3} + return fileDescriptor_4f2d38e344f9dbf5, []int{4} } // Enum for error codes @@ -190,7 +234,7 @@ const ( // Could not determine error ErrorCode_COULD_NOT_DETERMINE ErrorCode = 0 // Status Check Success - ErrorCode_STATUS_CHECK_NO_ERROR ErrorCode = 200 + ErrorCode_SUCCESS ErrorCode = 200 // Container image pull error ErrorCode_STATUS_CHECK_IMAGE_PULL_ERR ErrorCode = 300 // Container creating error @@ -237,7 +281,7 @@ const ( var ErrorCode_name = map[int32]string{ 0: "COULD_NOT_DETERMINE", - 200: "STATUS_CHECK_NO_ERROR", + 200: "SUCCESS", 300: "STATUS_CHECK_IMAGE_PULL_ERR", 301: "STATUS_CHECK_CONTAINER_CREATING", 302: "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -263,7 +307,7 @@ var ErrorCode_name = map[int32]string{ var ErrorCode_value = map[string]int32{ "COULD_NOT_DETERMINE": 0, - "STATUS_CHECK_NO_ERROR": 200, + "SUCCESS": 200, "STATUS_CHECK_IMAGE_PULL_ERR": 300, "STATUS_CHECK_CONTAINER_CREATING": 301, "STATUS_CHECK_RUN_CONTAINER_ERR": 302, @@ -292,7 +336,7 @@ func (x ErrorCode) String() string { } func (ErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{4} + return fileDescriptor_4f2d38e344f9dbf5, []int{5} } type StateResponse struct { @@ -421,6 +465,7 @@ type State struct { FileSyncState *FileSyncState `protobuf:"bytes,6,opt,name=fileSyncState,proto3" json:"fileSyncState,omitempty"` DebuggingContainers []*DebuggingContainerEvent `protobuf:"bytes,7,rep,name=debuggingContainers,proto3" json:"debuggingContainers,omitempty"` Metadata *Metadata `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` + Loops []*DevLoop `protobuf:"bytes,9,rep,name=loops,proto3" json:"loops,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -500,6 +545,68 @@ func (m *State) GetMetadata() *Metadata { return nil } +func (m *State) GetLoops() []*DevLoop { + if m != nil { + return m.Loops + } + return nil +} + +type DevLoop struct { + Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` + ChangeType ChangeType `protobuf:"varint,2,opt,name=changeType,proto3,enum=proto.ChangeType" json:"changeType,omitempty"` + ErrCode ErrorCode `protobuf:"varint,3,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DevLoop) Reset() { *m = DevLoop{} } +func (m *DevLoop) String() string { return proto.CompactTextString(m) } +func (*DevLoop) ProtoMessage() {} +func (*DevLoop) Descriptor() ([]byte, []int) { + return fileDescriptor_4f2d38e344f9dbf5, []int{4} +} + +func (m *DevLoop) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_DevLoop.Unmarshal(m, b) +} +func (m *DevLoop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_DevLoop.Marshal(b, m, deterministic) +} +func (m *DevLoop) XXX_Merge(src proto.Message) { + xxx_messageInfo_DevLoop.Merge(m, src) +} +func (m *DevLoop) XXX_Size() int { + return xxx_messageInfo_DevLoop.Size(m) +} +func (m *DevLoop) XXX_DiscardUnknown() { + xxx_messageInfo_DevLoop.DiscardUnknown(m) +} + +var xxx_messageInfo_DevLoop proto.InternalMessageInfo + +func (m *DevLoop) GetIteration() int32 { + if m != nil { + return m.Iteration + } + return 0 +} + +func (m *DevLoop) GetChangeType() ChangeType { + if m != nil { + return m.ChangeType + } + return ChangeType_INITIAL_LOOP +} + +func (m *DevLoop) GetErrCode() ErrorCode { + if m != nil { + return m.ErrCode + } + return ErrorCode_COULD_NOT_DETERMINE +} + type Metadata struct { Build *BuildMetadata `protobuf:"bytes,1,opt,name=build,proto3" json:"build,omitempty"` Deploy *DeployMetadata `protobuf:"bytes,2,opt,name=deploy,proto3" json:"deploy,omitempty"` @@ -514,7 +621,7 @@ func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{4} + return fileDescriptor_4f2d38e344f9dbf5, []int{5} } func (m *Metadata) XXX_Unmarshal(b []byte) error { @@ -571,7 +678,7 @@ func (m *BuildMetadata) Reset() { *m = BuildMetadata{} } func (m *BuildMetadata) String() string { return proto.CompactTextString(m) } func (*BuildMetadata) ProtoMessage() {} func (*BuildMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{5} + return fileDescriptor_4f2d38e344f9dbf5, []int{6} } func (m *BuildMetadata) XXX_Unmarshal(b []byte) error { @@ -632,7 +739,7 @@ func (m *BuildMetadata_Builder) Reset() { *m = BuildMetadata_Builder{} } func (m *BuildMetadata_Builder) String() string { return proto.CompactTextString(m) } func (*BuildMetadata_Builder) ProtoMessage() {} func (*BuildMetadata_Builder) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{5, 0} + return fileDescriptor_4f2d38e344f9dbf5, []int{6, 0} } func (m *BuildMetadata_Builder) XXX_Unmarshal(b []byte) error { @@ -679,7 +786,7 @@ func (m *DeployMetadata) Reset() { *m = DeployMetadata{} } func (m *DeployMetadata) String() string { return proto.CompactTextString(m) } func (*DeployMetadata) ProtoMessage() {} func (*DeployMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{6} + return fileDescriptor_4f2d38e344f9dbf5, []int{7} } func (m *DeployMetadata) XXX_Unmarshal(b []byte) error { @@ -717,6 +824,7 @@ func (m *DeployMetadata) GetCluster() ClusterType { type DeployMetadata_Deployer struct { Type DeployerType `protobuf:"varint,1,opt,name=type,proto3,enum=proto.DeployerType" json:"type,omitempty"` Count int32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` + ChangeType ChangeType `protobuf:"varint,3,opt,name=changeType,proto3,enum=proto.ChangeType" json:"changeType,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -726,7 +834,7 @@ func (m *DeployMetadata_Deployer) Reset() { *m = DeployMetadata_Deployer func (m *DeployMetadata_Deployer) String() string { return proto.CompactTextString(m) } func (*DeployMetadata_Deployer) ProtoMessage() {} func (*DeployMetadata_Deployer) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{6, 0} + return fileDescriptor_4f2d38e344f9dbf5, []int{7, 0} } func (m *DeployMetadata_Deployer) XXX_Unmarshal(b []byte) error { @@ -761,6 +869,13 @@ func (m *DeployMetadata_Deployer) GetCount() int32 { return 0 } +func (m *DeployMetadata_Deployer) GetChangeType() ChangeType { + if m != nil { + return m.ChangeType + } + return ChangeType_INITIAL_LOOP +} + // `BuildState` maps Skaffold artifacts to their current build states type BuildState struct { // A map of `artifact name -> build-state`. @@ -780,7 +895,7 @@ func (m *BuildState) Reset() { *m = BuildState{} } func (m *BuildState) String() string { return proto.CompactTextString(m) } func (*BuildState) ProtoMessage() {} func (*BuildState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{7} + return fileDescriptor_4f2d38e344f9dbf5, []int{8} } func (m *BuildState) XXX_Unmarshal(b []byte) error { @@ -820,7 +935,7 @@ func (m *DeployState) Reset() { *m = DeployState{} } func (m *DeployState) String() string { return proto.CompactTextString(m) } func (*DeployState) ProtoMessage() {} func (*DeployState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{8} + return fileDescriptor_4f2d38e344f9dbf5, []int{9} } func (m *DeployState) XXX_Unmarshal(b []byte) error { @@ -867,7 +982,7 @@ func (m *StatusCheckState) Reset() { *m = StatusCheckState{} } func (m *StatusCheckState) String() string { return proto.CompactTextString(m) } func (*StatusCheckState) ProtoMessage() {} func (*StatusCheckState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{9} + return fileDescriptor_4f2d38e344f9dbf5, []int{10} } func (m *StatusCheckState) XXX_Unmarshal(b []byte) error { @@ -914,7 +1029,7 @@ func (m *FileSyncState) Reset() { *m = FileSyncState{} } func (m *FileSyncState) String() string { return proto.CompactTextString(m) } func (*FileSyncState) ProtoMessage() {} func (*FileSyncState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{10} + return fileDescriptor_4f2d38e344f9dbf5, []int{11} } func (m *FileSyncState) XXX_Unmarshal(b []byte) error { @@ -955,6 +1070,7 @@ type Event struct { // *Event_FileSyncEvent // *Event_DebuggingContainerEvent // *Event_DevLoopEvent + // *Event_EndEvent EventType isEvent_EventType `protobuf_oneof:"event_type"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -965,7 +1081,7 @@ func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{11} + return fileDescriptor_4f2d38e344f9dbf5, []int{12} } func (m *Event) XXX_Unmarshal(b []byte) error { @@ -1026,6 +1142,10 @@ type Event_DevLoopEvent struct { DevLoopEvent *DevLoopEvent `protobuf:"bytes,9,opt,name=devLoopEvent,proto3,oneof"` } +type Event_EndEvent struct { + EndEvent *EndEvent `protobuf:"bytes,10,opt,name=endEvent,proto3,oneof"` +} + func (*Event_MetaEvent) isEvent_EventType() {} func (*Event_BuildEvent) isEvent_EventType() {} @@ -1044,6 +1164,8 @@ func (*Event_DebuggingContainerEvent) isEvent_EventType() {} func (*Event_DevLoopEvent) isEvent_EventType() {} +func (*Event_EndEvent) isEvent_EventType() {} + func (m *Event) GetEventType() isEvent_EventType { if m != nil { return m.EventType @@ -1114,6 +1236,13 @@ func (m *Event) GetDevLoopEvent() *DevLoopEvent { return nil } +func (m *Event) GetEndEvent() *EndEvent { + if x, ok := m.GetEventType().(*Event_EndEvent); ok { + return x.EndEvent + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*Event) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -1126,14 +1255,72 @@ func (*Event) XXX_OneofWrappers() []interface{} { (*Event_FileSyncEvent)(nil), (*Event_DebuggingContainerEvent)(nil), (*Event_DevLoopEvent)(nil), + (*Event_EndEvent)(nil), + } +} + +// `EndEvent` is the last event indicating skaffold session ended. +type EndEvent struct { + ErrCode ErrorCode `protobuf:"varint,1,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` + ErrMsg string `protobuf:"bytes,2,opt,name=errMsg,proto3" json:"errMsg,omitempty"` + Loops []*DevLoop `protobuf:"bytes,3,rep,name=loops,proto3" json:"loops,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *EndEvent) Reset() { *m = EndEvent{} } +func (m *EndEvent) String() string { return proto.CompactTextString(m) } +func (*EndEvent) ProtoMessage() {} +func (*EndEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_4f2d38e344f9dbf5, []int{13} +} + +func (m *EndEvent) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_EndEvent.Unmarshal(m, b) +} +func (m *EndEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_EndEvent.Marshal(b, m, deterministic) +} +func (m *EndEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_EndEvent.Merge(m, src) +} +func (m *EndEvent) XXX_Size() int { + return xxx_messageInfo_EndEvent.Size(m) +} +func (m *EndEvent) XXX_DiscardUnknown() { + xxx_messageInfo_EndEvent.DiscardUnknown(m) +} + +var xxx_messageInfo_EndEvent proto.InternalMessageInfo + +func (m *EndEvent) GetErrCode() ErrorCode { + if m != nil { + return m.ErrCode + } + return ErrorCode_COULD_NOT_DETERMINE +} + +func (m *EndEvent) GetErrMsg() string { + if m != nil { + return m.ErrMsg } + return "" +} + +func (m *EndEvent) GetLoops() []*DevLoop { + if m != nil { + return m.Loops + } + return nil } // `DevLoopEvent` marks the start and end of a dev loop. type DevLoopEvent struct { Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - Err *ActionableErr `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` + ChangeType ChangeType `protobuf:"varint,2,opt,name=changeType,proto3,enum=proto.ChangeType" json:"changeType,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Err *ActionableErr `protobuf:"bytes,4,opt,name=err,proto3" json:"err,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1143,7 +1330,7 @@ func (m *DevLoopEvent) Reset() { *m = DevLoopEvent{} } func (m *DevLoopEvent) String() string { return proto.CompactTextString(m) } func (*DevLoopEvent) ProtoMessage() {} func (*DevLoopEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{12} + return fileDescriptor_4f2d38e344f9dbf5, []int{14} } func (m *DevLoopEvent) XXX_Unmarshal(b []byte) error { @@ -1171,6 +1358,13 @@ func (m *DevLoopEvent) GetIteration() int32 { return 0 } +func (m *DevLoopEvent) GetChangeType() ChangeType { + if m != nil { + return m.ChangeType + } + return ChangeType_INITIAL_LOOP +} + func (m *DevLoopEvent) GetStatus() string { if m != nil { return m.Status @@ -1199,7 +1393,7 @@ func (m *ActionableErr) Reset() { *m = ActionableErr{} } func (m *ActionableErr) String() string { return proto.CompactTextString(m) } func (*ActionableErr) ProtoMessage() {} func (*ActionableErr) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{13} + return fileDescriptor_4f2d38e344f9dbf5, []int{15} } func (m *ActionableErr) XXX_Unmarshal(b []byte) error { @@ -1256,7 +1450,7 @@ func (m *MetaEvent) Reset() { *m = MetaEvent{} } func (m *MetaEvent) String() string { return proto.CompactTextString(m) } func (*MetaEvent) ProtoMessage() {} func (*MetaEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{14} + return fileDescriptor_4f2d38e344f9dbf5, []int{16} } func (m *MetaEvent) XXX_Unmarshal(b []byte) error { @@ -1307,7 +1501,7 @@ func (m *BuildEvent) Reset() { *m = BuildEvent{} } func (m *BuildEvent) String() string { return proto.CompactTextString(m) } func (*BuildEvent) ProtoMessage() {} func (*BuildEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{15} + return fileDescriptor_4f2d38e344f9dbf5, []int{17} } func (m *BuildEvent) XXX_Unmarshal(b []byte) error { @@ -1371,7 +1565,7 @@ func (m *DeployEvent) Reset() { *m = DeployEvent{} } func (m *DeployEvent) String() string { return proto.CompactTextString(m) } func (*DeployEvent) ProtoMessage() {} func (*DeployEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{16} + return fileDescriptor_4f2d38e344f9dbf5, []int{18} } func (m *DeployEvent) XXX_Unmarshal(b []byte) error { @@ -1428,7 +1622,7 @@ func (m *StatusCheckEvent) Reset() { *m = StatusCheckEvent{} } func (m *StatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*StatusCheckEvent) ProtoMessage() {} func (*StatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{17} + return fileDescriptor_4f2d38e344f9dbf5, []int{19} } func (m *StatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1496,7 +1690,7 @@ func (m *ResourceStatusCheckEvent) Reset() { *m = ResourceStatusCheckEve func (m *ResourceStatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*ResourceStatusCheckEvent) ProtoMessage() {} func (*ResourceStatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{18} + return fileDescriptor_4f2d38e344f9dbf5, []int{20} } func (m *ResourceStatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1565,7 +1759,7 @@ func (m *PortEvent) Reset() { *m = PortEvent{} } func (m *PortEvent) String() string { return proto.CompactTextString(m) } func (*PortEvent) ProtoMessage() {} func (*PortEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{19} + return fileDescriptor_4f2d38e344f9dbf5, []int{21} } func (m *PortEvent) XXX_Unmarshal(b []byte) error { @@ -1665,7 +1859,7 @@ func (m *FileSyncEvent) Reset() { *m = FileSyncEvent{} } func (m *FileSyncEvent) String() string { return proto.CompactTextString(m) } func (*FileSyncEvent) ProtoMessage() {} func (*FileSyncEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{20} + return fileDescriptor_4f2d38e344f9dbf5, []int{22} } func (m *FileSyncEvent) XXX_Unmarshal(b []byte) error { @@ -1740,7 +1934,7 @@ func (m *DebuggingContainerEvent) Reset() { *m = DebuggingContainerEvent func (m *DebuggingContainerEvent) String() string { return proto.CompactTextString(m) } func (*DebuggingContainerEvent) ProtoMessage() {} func (*DebuggingContainerEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{21} + return fileDescriptor_4f2d38e344f9dbf5, []int{23} } func (m *DebuggingContainerEvent) XXX_Unmarshal(b []byte) error { @@ -1831,7 +2025,7 @@ func (m *LogEntry) Reset() { *m = LogEntry{} } func (m *LogEntry) String() string { return proto.CompactTextString(m) } func (*LogEntry) ProtoMessage() {} func (*LogEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{22} + return fileDescriptor_4f2d38e344f9dbf5, []int{24} } func (m *LogEntry) XXX_Unmarshal(b []byte) error { @@ -1884,7 +2078,7 @@ func (m *UserIntentRequest) Reset() { *m = UserIntentRequest{} } func (m *UserIntentRequest) String() string { return proto.CompactTextString(m) } func (*UserIntentRequest) ProtoMessage() {} func (*UserIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{23} + return fileDescriptor_4f2d38e344f9dbf5, []int{25} } func (m *UserIntentRequest) XXX_Unmarshal(b []byte) error { @@ -1926,7 +2120,7 @@ func (m *Intent) Reset() { *m = Intent{} } func (m *Intent) String() string { return proto.CompactTextString(m) } func (*Intent) ProtoMessage() {} func (*Intent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{24} + return fileDescriptor_4f2d38e344f9dbf5, []int{26} } func (m *Intent) XXX_Unmarshal(b []byte) error { @@ -1972,6 +2166,7 @@ func init() { proto.RegisterEnum("proto.BuilderType", BuilderType_name, BuilderType_value) proto.RegisterEnum("proto.BuildType", BuildType_name, BuildType_value) proto.RegisterEnum("proto.DeployerType", DeployerType_name, DeployerType_value) + proto.RegisterEnum("proto.ChangeType", ChangeType_name, ChangeType_value) proto.RegisterEnum("proto.ClusterType", ClusterType_name, ClusterType_value) proto.RegisterEnum("proto.ErrorCode", ErrorCode_name, ErrorCode_value) proto.RegisterType((*StateResponse)(nil), "proto.StateResponse") @@ -1979,6 +2174,7 @@ func init() { proto.RegisterType((*Request)(nil), "proto.Request") proto.RegisterType((*State)(nil), "proto.State") proto.RegisterMapType((map[int32]*PortEvent)(nil), "proto.State.ForwardedPortsEntry") + proto.RegisterType((*DevLoop)(nil), "proto.DevLoop") proto.RegisterType((*Metadata)(nil), "proto.Metadata") proto.RegisterMapType((map[string]string)(nil), "proto.Metadata.AdditionalEntry") proto.RegisterType((*BuildMetadata)(nil), "proto.BuildMetadata") @@ -1993,6 +2189,7 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "proto.StatusCheckState.ResourcesEntry") proto.RegisterType((*FileSyncState)(nil), "proto.FileSyncState") proto.RegisterType((*Event)(nil), "proto.Event") + proto.RegisterType((*EndEvent)(nil), "proto.EndEvent") proto.RegisterType((*DevLoopEvent)(nil), "proto.DevLoopEvent") proto.RegisterType((*ActionableErr)(nil), "proto.ActionableErr") proto.RegisterType((*MetaEvent)(nil), "proto.MetaEvent") @@ -2012,145 +2209,154 @@ func init() { func init() { proto.RegisterFile("skaffold.proto", fileDescriptor_4f2d38e344f9dbf5) } var fileDescriptor_4f2d38e344f9dbf5 = []byte{ - // 2194 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, - 0x11, 0x36, 0x39, 0x7c, 0x4d, 0xe9, 0xe1, 0x51, 0x5b, 0xb6, 0xb9, 0xb4, 0x6c, 0x2b, 0x13, 0x5b, - 0x36, 0xb4, 0x1b, 0xc9, 0x6b, 0x07, 0x81, 0x63, 0x38, 0x09, 0xa8, 0xe1, 0x58, 0x1c, 0x93, 0x1a, - 0x0a, 0x4d, 0x72, 0x1d, 0x1b, 0x08, 0x88, 0x11, 0xd9, 0xe2, 0x12, 0x26, 0x39, 0xcc, 0xcc, 0xd0, - 0x8e, 0x72, 0xd8, 0xc3, 0x1e, 0x73, 0xda, 0x64, 0xb3, 0x01, 0x72, 0x4f, 0x6e, 0xc9, 0xe6, 0x17, - 0xe4, 0x71, 0x4b, 0xee, 0x39, 0xe5, 0x18, 0x60, 0x73, 0xca, 0x35, 0xaf, 0x63, 0xd0, 0xaf, 0x79, - 0xf0, 0x21, 0x61, 0xb1, 0x27, 0xb2, 0xab, 0xbe, 0xfa, 0xaa, 0xba, 0xba, 0xba, 0xba, 0x7b, 0x60, - 0xdd, 0x7f, 0xed, 0x9c, 0x9e, 0xba, 0xc3, 0xde, 0xde, 0xc4, 0x73, 0x03, 0x17, 0x65, 0xd9, 0x4f, - 0x69, 0xab, 0xef, 0xba, 0xfd, 0x21, 0xd9, 0x77, 0x26, 0x83, 0x7d, 0x67, 0x3c, 0x76, 0x03, 0x27, - 0x18, 0xb8, 0x63, 0x9f, 0x83, 0x4a, 0xb7, 0x85, 0x96, 0x8d, 0x4e, 0xa6, 0xa7, 0xfb, 0xc1, 0x60, - 0x44, 0xfc, 0xc0, 0x19, 0x4d, 0x04, 0xe0, 0xc6, 0x2c, 0x80, 0x8c, 0x26, 0xc1, 0x19, 0x57, 0xea, - 0x8f, 0x60, 0xad, 0x19, 0x38, 0x01, 0xc1, 0xc4, 0x9f, 0xb8, 0x63, 0x9f, 0x20, 0x1d, 0xb2, 0x3e, - 0x15, 0x14, 0x53, 0xdb, 0xa9, 0xfb, 0x2b, 0x0f, 0x57, 0x39, 0x6e, 0x8f, 0x83, 0xb8, 0x4a, 0xdf, - 0x82, 0x42, 0x88, 0xd7, 0x40, 0x19, 0xf9, 0x7d, 0x86, 0x56, 0x31, 0xfd, 0xab, 0xdf, 0x84, 0x3c, - 0x26, 0x3f, 0x9c, 0x12, 0x3f, 0x40, 0x08, 0x32, 0x63, 0x67, 0x44, 0x84, 0x96, 0xfd, 0xd7, 0x3f, - 0xcb, 0x40, 0x96, 0xb1, 0xa1, 0xf7, 0x01, 0x4e, 0xa6, 0x83, 0x61, 0xaf, 0x19, 0xf3, 0xb7, 0x21, - 0xfc, 0x1d, 0x84, 0x0a, 0x1c, 0x03, 0xa1, 0x6f, 0xc2, 0x4a, 0x8f, 0x4c, 0x86, 0xee, 0x19, 0xb7, - 0x49, 0x33, 0x1b, 0x24, 0x6c, 0x2a, 0x91, 0x06, 0xc7, 0x61, 0xa8, 0x0a, 0xeb, 0xa7, 0xae, 0xf7, - 0xd6, 0xf1, 0x7a, 0xa4, 0x77, 0xec, 0x7a, 0x81, 0x5f, 0xcc, 0x6c, 0x2b, 0xf7, 0x57, 0x1e, 0x6e, - 0xc7, 0x27, 0xb7, 0xf7, 0x2c, 0x01, 0x31, 0xc7, 0x81, 0x77, 0x86, 0x67, 0xec, 0x90, 0x01, 0x1a, - 0x4d, 0xc1, 0xd4, 0x37, 0x3e, 0x24, 0xdd, 0xd7, 0x3c, 0x88, 0x2c, 0x0b, 0xe2, 0x7a, 0x8c, 0x2b, - 0xae, 0xc6, 0x73, 0x06, 0xe8, 0x09, 0xac, 0x9d, 0x0e, 0x86, 0xa4, 0x79, 0x36, 0xee, 0x72, 0x86, - 0x1c, 0x63, 0xd8, 0x14, 0x0c, 0xcf, 0xe2, 0x3a, 0x9c, 0x84, 0xa2, 0x63, 0xb8, 0xd2, 0x23, 0x27, - 0xd3, 0x7e, 0x7f, 0x30, 0xee, 0x1b, 0xee, 0x38, 0x70, 0x06, 0x63, 0xe2, 0xf9, 0xc5, 0x3c, 0x9b, - 0xcf, 0xad, 0x30, 0x11, 0xb3, 0x08, 0xf3, 0x0d, 0x19, 0x07, 0x78, 0x91, 0x29, 0x7a, 0x17, 0x0a, - 0x23, 0x12, 0x38, 0x3d, 0x27, 0x70, 0x8a, 0x05, 0x16, 0xc8, 0x65, 0x41, 0x73, 0x24, 0xc4, 0x38, - 0x04, 0x94, 0x9a, 0x70, 0x65, 0x41, 0x9a, 0x68, 0x11, 0xbc, 0x26, 0x67, 0x6c, 0x09, 0xb3, 0x98, - 0xfe, 0x45, 0x3b, 0x90, 0x7d, 0xe3, 0x0c, 0xa7, 0x72, 0x89, 0x34, 0x41, 0x49, 0x6d, 0x78, 0x2c, - 0x5c, 0xfd, 0x24, 0xfd, 0x38, 0xf5, 0x3c, 0x53, 0x50, 0xb4, 0x8c, 0xfe, 0x8f, 0x14, 0x14, 0xa4, - 0x47, 0xb4, 0x0b, 0x59, 0xb6, 0xea, 0xa2, 0x2a, 0x36, 0xe3, 0x55, 0x11, 0x86, 0xc5, 0x21, 0xe8, - 0x1b, 0x90, 0xe3, 0x8b, 0x2d, 0x7c, 0x5d, 0x4d, 0x94, 0x43, 0x88, 0x16, 0x20, 0xf4, 0x3d, 0x00, - 0xa7, 0xd7, 0x1b, 0xd0, 0x2d, 0xe4, 0x0c, 0x8b, 0x5d, 0x96, 0xb8, 0xdb, 0x33, 0x33, 0xde, 0x2b, - 0x87, 0x08, 0x5e, 0x07, 0x31, 0x93, 0xd2, 0x77, 0xe0, 0xf2, 0x8c, 0x3a, 0x3e, 0x7f, 0x95, 0xcf, - 0x7f, 0x33, 0x3e, 0x7f, 0x35, 0x36, 0x5b, 0xfd, 0x9f, 0x69, 0x58, 0x4b, 0xcc, 0x03, 0xbd, 0x07, - 0x1b, 0xe3, 0xe9, 0xe8, 0x84, 0x78, 0x8d, 0xd3, 0xb2, 0x17, 0x0c, 0x4e, 0x9d, 0x6e, 0xe0, 0x8b, - 0x5c, 0xce, 0x2b, 0xd0, 0x63, 0x28, 0xb0, 0x79, 0xd3, 0x65, 0x4f, 0xb3, 0xe8, 0xb7, 0x16, 0x65, - 0x87, 0x8f, 0x88, 0x87, 0x43, 0x34, 0xba, 0x03, 0x99, 0xe0, 0x6c, 0x42, 0x8a, 0xca, 0x76, 0xea, - 0xfe, 0x7a, 0xb8, 0x24, 0x0c, 0xd7, 0x3a, 0x9b, 0x10, 0xcc, 0xb4, 0xa8, 0xb2, 0x20, 0x3f, 0x77, - 0x16, 0x7a, 0x38, 0x2f, 0x49, 0x87, 0x90, 0x17, 0x01, 0xa0, 0x1d, 0xe1, 0x36, 0xc5, 0xdc, 0xa2, - 0x38, 0x15, 0xf1, 0x62, 0x8e, 0x37, 0x21, 0xdb, 0x75, 0xa7, 0xe3, 0x80, 0xa5, 0x2c, 0x8b, 0xf9, - 0xe0, 0xab, 0x66, 0xfb, 0xcf, 0x29, 0x58, 0x4f, 0x16, 0x02, 0x7a, 0x0a, 0x2a, 0x2f, 0x05, 0x9a, - 0xc1, 0xd4, 0xcc, 0xc6, 0x89, 0x23, 0xc5, 0x90, 0x78, 0x38, 0x32, 0x40, 0xef, 0x41, 0xbe, 0x3b, - 0x9c, 0xfa, 0x01, 0xf1, 0x98, 0xb3, 0x68, 0x42, 0x06, 0x97, 0xb2, 0x09, 0x49, 0x48, 0xc9, 0x82, - 0x82, 0x24, 0x41, 0xf7, 0x12, 0x79, 0xb8, 0x92, 0x70, 0x79, 0x71, 0x22, 0xf4, 0x9f, 0xa4, 0x00, - 0xa2, 0xae, 0x88, 0xbe, 0x0b, 0xaa, 0x13, 0x2b, 0x96, 0x78, 0x3b, 0x8b, 0x50, 0x7b, 0x61, 0xd9, - 0xf0, 0x15, 0x8a, 0x4c, 0x4a, 0x4f, 0x61, 0x3d, 0xa9, 0xfc, 0x52, 0x69, 0xbd, 0x0b, 0x2b, 0xb1, - 0x6e, 0x8b, 0xae, 0x41, 0x8e, 0x77, 0x39, 0x61, 0x2d, 0x46, 0xfa, 0xe7, 0x29, 0xd0, 0x66, 0x1b, - 0xe2, 0x32, 0x30, 0xaa, 0x80, 0xea, 0x11, 0xdf, 0x9d, 0x7a, 0x5d, 0x22, 0x2b, 0x7b, 0x67, 0x49, - 0x53, 0xdd, 0xc3, 0x12, 0x28, 0xe6, 0x15, 0x1a, 0xd2, 0x79, 0x25, 0x95, 0x5f, 0x6a, 0x5e, 0xf7, - 0x60, 0x2d, 0xd1, 0x7e, 0x97, 0xce, 0xec, 0xef, 0x19, 0xc8, 0xb2, 0x46, 0x86, 0x1e, 0x80, 0x4a, - 0xdb, 0x23, 0x1b, 0x88, 0x76, 0xa5, 0xc5, 0xda, 0x09, 0x93, 0x57, 0x2f, 0xe1, 0x08, 0x84, 0x1e, - 0x89, 0x73, 0x8f, 0x9b, 0xa4, 0xe7, 0xcf, 0x3d, 0x69, 0x13, 0x83, 0xa1, 0x6f, 0xc9, 0x93, 0x8f, - 0x5b, 0x29, 0x0b, 0x4e, 0x3e, 0x69, 0x16, 0x07, 0xd2, 0xf0, 0x26, 0xb2, 0xe9, 0x16, 0x33, 0x8b, - 0x9b, 0x31, 0x0d, 0x2f, 0x04, 0x21, 0x33, 0x71, 0xc6, 0x71, 0xc3, 0xa5, 0x67, 0x9c, 0xb4, 0x9f, - 0x33, 0x41, 0x3f, 0x80, 0xa2, 0x5c, 0x95, 0x59, 0xbc, 0x38, 0xf0, 0x64, 0xd7, 0xc5, 0x4b, 0x60, - 0xd5, 0x4b, 0x78, 0x29, 0x05, 0x7a, 0x1a, 0x1d, 0xa2, 0x9c, 0x33, 0xbf, 0xf0, 0x10, 0x95, 0x44, - 0x49, 0x30, 0x7a, 0x05, 0xd7, 0x7b, 0x8b, 0x0f, 0x49, 0x71, 0x06, 0x5e, 0x70, 0x94, 0x56, 0x2f, - 0xe1, 0x65, 0x04, 0xe8, 0xdb, 0xb0, 0xda, 0x23, 0x6f, 0xea, 0xae, 0x3b, 0xe1, 0x84, 0x2a, 0x23, - 0x8c, 0xf6, 0x7b, 0xa4, 0xaa, 0x5e, 0xc2, 0x09, 0xe8, 0xc1, 0x2a, 0x00, 0xa1, 0x7f, 0x3a, 0xb4, - 0x0f, 0xe8, 0x43, 0x58, 0x8d, 0xa3, 0xd1, 0x16, 0xa8, 0x83, 0x80, 0x78, 0xec, 0xf6, 0x27, 0xce, - 0x87, 0x48, 0x10, 0xab, 0xd4, 0x74, 0x62, 0x5b, 0xed, 0x80, 0x42, 0x3c, 0x4f, 0x14, 0x8c, 0x4c, - 0x4f, 0xb9, 0xcb, 0x1a, 0xea, 0xc9, 0x90, 0x98, 0x9e, 0x87, 0x29, 0x40, 0x7f, 0x0b, 0x6b, 0x09, - 0x29, 0xda, 0x85, 0x3c, 0xf1, 0x3c, 0xc3, 0xed, 0xc9, 0x96, 0x25, 0xeb, 0xc6, 0xf4, 0x3c, 0x97, - 0xc9, 0xb1, 0x04, 0xa0, 0x22, 0xe4, 0x47, 0xc4, 0xf7, 0x9d, 0xbe, 0xdc, 0x53, 0x72, 0x88, 0xb6, - 0x61, 0xc5, 0x9f, 0xf6, 0xfb, 0xc4, 0x67, 0x77, 0xd6, 0xa2, 0xb2, 0xad, 0xdc, 0x57, 0x71, 0x5c, - 0xa4, 0xdb, 0xa0, 0x86, 0x1b, 0x85, 0x6e, 0x4d, 0x42, 0x77, 0xad, 0xd8, 0x6e, 0x7c, 0x90, 0xb8, - 0xa3, 0xa4, 0x2f, 0xb8, 0xa3, 0xe8, 0x1f, 0x89, 0x3e, 0xc9, 0x09, 0x4b, 0x50, 0x90, 0x4d, 0x4f, - 0x70, 0x86, 0xe3, 0xa5, 0x29, 0xd3, 0xa2, 0x94, 0xa9, 0x2c, 0x39, 0xf1, 0x5c, 0x64, 0x2e, 0xc8, - 0x85, 0xde, 0x95, 0xbd, 0x91, 0x07, 0xb0, 0xac, 0xdd, 0x09, 0x27, 0xe9, 0x85, 0x4e, 0x94, 0x8b, - 0x9c, 0x7c, 0x9c, 0xec, 0xac, 0xe7, 0xbb, 0x5a, 0xbe, 0x3a, 0x5f, 0x6d, 0xa6, 0x3f, 0x86, 0xe2, - 0xb2, 0xbd, 0x4b, 0xf3, 0x2e, 0xf7, 0xae, 0xcc, 0xbb, 0x1c, 0x2f, 0xcd, 0x7b, 0x2c, 0x4e, 0x65, - 0x61, 0x9c, 0x99, 0x30, 0x4e, 0xfd, 0xd7, 0x69, 0x50, 0xc3, 0x06, 0x46, 0xb7, 0xc6, 0xd0, 0xed, - 0x3a, 0x43, 0x2a, 0x91, 0x5b, 0x23, 0x14, 0xa0, 0x5b, 0x00, 0x1e, 0x19, 0xb9, 0x01, 0x61, 0x6a, - 0x7e, 0xaa, 0xc6, 0x24, 0xd4, 0xef, 0xc4, 0xed, 0xd9, 0xf4, 0xa5, 0x22, 0xfc, 0x8a, 0x21, 0xba, - 0x03, 0x6b, 0x5d, 0xb9, 0xbb, 0x99, 0x9e, 0x47, 0x90, 0x14, 0x52, 0xef, 0xf4, 0x69, 0xe3, 0x4f, - 0x9c, 0x2e, 0x7f, 0x0e, 0xa8, 0x38, 0x12, 0xd0, 0x4c, 0xd0, 0xe6, 0xca, 0xcc, 0x73, 0x3c, 0x13, - 0x72, 0x8c, 0x74, 0x58, 0x95, 0x59, 0xa1, 0x17, 0x00, 0xd6, 0xc4, 0x54, 0x9c, 0x90, 0xc5, 0x31, - 0x8c, 0xa3, 0x90, 0xc4, 0x30, 0x9e, 0x22, 0xe4, 0x9d, 0x5e, 0xcf, 0x23, 0xbe, 0xcf, 0xda, 0x8d, - 0x8a, 0xe5, 0x50, 0xff, 0x65, 0x2a, 0x3a, 0xd2, 0xc2, 0x5c, 0xd1, 0x66, 0x68, 0xb0, 0x2b, 0x86, - 0xc8, 0x55, 0x28, 0xa0, 0x1b, 0x70, 0x30, 0x8a, 0x2a, 0x85, 0x0f, 0x62, 0x2b, 0xa6, 0x2c, 0x2a, - 0xe2, 0xcc, 0xc2, 0xfa, 0xc9, 0x5e, 0x54, 0x3f, 0xff, 0x4a, 0xc3, 0xf5, 0x25, 0x0d, 0xf6, 0xbc, - 0x5a, 0x96, 0x6b, 0x95, 0xbe, 0x60, 0xad, 0x94, 0x0b, 0xd7, 0x2a, 0xb3, 0x60, 0xad, 0xc2, 0x6e, - 0x91, 0x9d, 0xe9, 0x16, 0x45, 0xc8, 0x7b, 0xd3, 0x31, 0x7d, 0x5d, 0x8b, 0x65, 0x94, 0x43, 0x5a, - 0x5f, 0x6f, 0x5d, 0xef, 0xf5, 0x60, 0xdc, 0xaf, 0x0c, 0x3c, 0xb1, 0x86, 0x31, 0x09, 0xb2, 0x01, - 0xd8, 0x61, 0xc1, 0xdf, 0x9e, 0x05, 0x76, 0xb5, 0xd9, 0x3b, 0xff, 0x80, 0xe1, 0xf2, 0xd8, 0x4b, - 0x34, 0xc6, 0x40, 0xef, 0xc4, 0x33, 0xea, 0x8b, 0x2e, 0x39, 0x6b, 0xf1, 0x4b, 0xce, 0x47, 0x50, - 0xa8, 0xbb, 0x7d, 0x6e, 0xf7, 0x18, 0xd4, 0xf0, 0x7b, 0x81, 0xb8, 0xbd, 0x94, 0xf6, 0xf8, 0x07, - 0x83, 0x3d, 0xf9, 0xc1, 0x60, 0xaf, 0x25, 0x11, 0x38, 0x02, 0x23, 0x1d, 0xb2, 0x24, 0x76, 0x81, - 0x91, 0x1f, 0x0a, 0xc4, 0xeb, 0x8e, 0x24, 0xbb, 0xb9, 0x12, 0xeb, 0xe6, 0xfa, 0x13, 0xd8, 0x68, - 0xfb, 0xc4, 0xb3, 0xc6, 0x01, 0x85, 0x8a, 0x4f, 0x05, 0x77, 0x21, 0x37, 0x60, 0x02, 0x11, 0xc5, - 0x9a, 0xe0, 0x13, 0x28, 0xa1, 0xd4, 0x9f, 0x43, 0x8e, 0x4b, 0x28, 0x77, 0xf4, 0x44, 0x2c, 0xc8, - 0xc7, 0x20, 0x82, 0x8c, 0x7f, 0x36, 0xee, 0xb2, 0xa0, 0x0a, 0x98, 0xfd, 0xa7, 0xa5, 0x24, 0x1e, - 0x88, 0x0a, 0x93, 0x8a, 0xd1, 0xae, 0x0b, 0x2b, 0xb1, 0x57, 0x08, 0x2a, 0xc2, 0x66, 0xdb, 0xae, - 0xd9, 0x8d, 0x17, 0x76, 0xe7, 0xa0, 0x6d, 0xd5, 0x2b, 0x26, 0xee, 0xb4, 0x5e, 0x1e, 0x9b, 0xda, - 0x25, 0x94, 0x07, 0xe5, 0xb9, 0x75, 0xa0, 0xa5, 0x90, 0x0a, 0xd9, 0x83, 0xf2, 0x2b, 0xb3, 0xae, - 0xa5, 0xd1, 0x3a, 0x00, 0x43, 0x1d, 0x97, 0x8d, 0x5a, 0x53, 0x53, 0x10, 0x40, 0xce, 0x68, 0x37, - 0x5b, 0x8d, 0x23, 0x2d, 0x43, 0xff, 0xd7, 0xca, 0xb6, 0x55, 0x6b, 0x68, 0x59, 0xfa, 0xbf, 0xd2, - 0x30, 0x6a, 0x26, 0xd6, 0x72, 0xbb, 0x15, 0x50, 0xc3, 0xd7, 0x16, 0xba, 0x06, 0x28, 0xe1, 0x4e, - 0x3a, 0x5b, 0x81, 0xbc, 0x51, 0x6f, 0x37, 0x5b, 0x26, 0xd6, 0x52, 0xd4, 0xf3, 0xa1, 0x71, 0xa0, - 0xa5, 0xa9, 0xe7, 0x7a, 0xc3, 0x28, 0xd7, 0x35, 0x65, 0xb7, 0x41, 0xaf, 0x05, 0xd1, 0xa3, 0x01, - 0xbd, 0x03, 0x57, 0x25, 0x51, 0xc5, 0x3c, 0xae, 0x37, 0x5e, 0x46, 0x81, 0x17, 0x20, 0x53, 0x35, - 0xeb, 0x47, 0x5a, 0x0a, 0xad, 0x81, 0x5a, 0x63, 0xe1, 0x59, 0xaf, 0x4c, 0x2d, 0x4d, 0x9d, 0xd4, - 0xda, 0x07, 0xa6, 0xd1, 0xa2, 0x84, 0x16, 0xac, 0xc4, 0x1e, 0x2f, 0xf1, 0x3c, 0x88, 0x40, 0x24, - 0xdd, 0x2a, 0x14, 0x8e, 0x2c, 0xdb, 0xa2, 0x96, 0x22, 0xb6, 0x9a, 0xc9, 0x63, 0x6b, 0xb4, 0xaa, - 0x26, 0xd6, 0x94, 0xdd, 0x5f, 0xe5, 0x40, 0x0d, 0x37, 0x3a, 0xba, 0x0e, 0x57, 0x8c, 0x46, 0xbb, - 0x5e, 0xe9, 0xd8, 0x8d, 0x56, 0xa7, 0x62, 0xb6, 0x4c, 0x7c, 0x64, 0xd9, 0x94, 0xa8, 0x04, 0x57, - 0x9b, 0xad, 0x72, 0xab, 0xdd, 0xec, 0x18, 0x55, 0xd3, 0xa8, 0x75, 0xec, 0x46, 0xc7, 0xc4, 0xb8, - 0x81, 0xb5, 0xbf, 0xa4, 0xd0, 0x36, 0xdc, 0x48, 0xe8, 0xac, 0xa3, 0xf2, 0xa1, 0xd9, 0x39, 0x6e, - 0xd7, 0xeb, 0x14, 0xa3, 0xfd, 0x26, 0x8d, 0xee, 0xc0, 0xed, 0x04, 0xc2, 0x68, 0xd8, 0xad, 0xb2, - 0x65, 0x9b, 0xb8, 0x63, 0x60, 0xb3, 0xdc, 0xb2, 0xec, 0x43, 0xed, 0xb7, 0x69, 0xf4, 0x75, 0xb8, - 0x95, 0x40, 0xe1, 0xb6, 0x1d, 0x43, 0x52, 0xaa, 0xcf, 0xd3, 0x68, 0x07, 0xbe, 0xb6, 0x84, 0x8a, - 0x07, 0x5b, 0x6e, 0x99, 0x15, 0xed, 0x77, 0xe7, 0xe1, 0xb0, 0xd9, 0x6c, 0x95, 0x31, 0x73, 0xfa, - 0xc5, 0x3c, 0xce, 0x6e, 0x54, 0xcc, 0xce, 0x91, 0x79, 0xd4, 0xc0, 0x2f, 0x3b, 0xc7, 0xd8, 0x6c, - 0x36, 0xdb, 0xd8, 0xd4, 0x3e, 0x51, 0xe6, 0xa6, 0xc0, 0x70, 0x15, 0xab, 0x59, 0x8b, 0x50, 0x3f, - 0x55, 0xd0, 0x2e, 0xdc, 0x9d, 0x47, 0xd9, 0x66, 0xeb, 0x45, 0x03, 0xd7, 0x3a, 0x6d, 0xbb, 0xfc, - 0x41, 0xd9, 0xaa, 0x97, 0x0f, 0xea, 0xa6, 0xf6, 0x33, 0x65, 0x6e, 0xba, 0x0c, 0x7b, 0x6c, 0x55, - 0x22, 0xc2, 0x4f, 0x97, 0xb8, 0x6d, 0xdb, 0x4d, 0xa3, 0x6a, 0x56, 0xda, 0x9c, 0xea, 0xe7, 0x0a, - 0xd2, 0xe1, 0xe6, 0x22, 0x14, 0x36, 0xcb, 0x46, 0x95, 0x61, 0x3e, 0x53, 0xe6, 0x56, 0x89, 0x87, - 0xd6, 0x68, 0x75, 0xb0, 0x59, 0xae, 0xbc, 0xd4, 0x7e, 0xa1, 0xa0, 0x6b, 0xb0, 0x11, 0x56, 0x42, - 0x47, 0x14, 0x94, 0xf6, 0x6f, 0x05, 0xbd, 0x03, 0x9b, 0x09, 0x4b, 0xa9, 0xfa, 0x8f, 0x82, 0xee, - 0x81, 0xbe, 0x48, 0x35, 0x13, 0xe1, 0x7f, 0x15, 0xf4, 0x2e, 0xec, 0x2c, 0x59, 0x8e, 0x17, 0x65, - 0x8b, 0xae, 0x45, 0xc8, 0xfa, 0x3f, 0xe6, 0xf0, 0x99, 0x55, 0x37, 0x3b, 0xcd, 0x97, 0xb6, 0xd1, - 0xb1, 0x6c, 0xab, 0x25, 0x6a, 0xed, 0x6f, 0x19, 0xb4, 0x05, 0xd7, 0x2b, 0xe6, 0x07, 0x1d, 0x6c, - 0x1e, 0x5a, 0xac, 0xce, 0xf9, 0x46, 0xac, 0x98, 0xc7, 0x4d, 0xed, 0xf7, 0x59, 0x74, 0x03, 0xae, - 0x25, 0xb4, 0x2d, 0xb3, 0xd9, 0xe2, 0xca, 0x3f, 0x64, 0xd1, 0x4d, 0x28, 0x26, 0x94, 0x7c, 0xeb, - 0x71, 0xf5, 0x1f, 0xb3, 0x73, 0xcc, 0x46, 0xc3, 0x7e, 0x66, 0x1d, 0x52, 0xb5, 0xf6, 0xa7, 0xec, - 0xc3, 0x4f, 0x14, 0xb8, 0xdc, 0x14, 0xdf, 0x7a, 0x9b, 0xc4, 0x7b, 0x33, 0xe8, 0x12, 0x64, 0x40, - 0xe1, 0x90, 0x04, 0xe2, 0xd5, 0x39, 0xd7, 0x82, 0xcd, 0xd1, 0x24, 0x38, 0x2b, 0x25, 0xbe, 0xc6, - 0xea, 0x1b, 0x1f, 0xff, 0xf5, 0x8b, 0x4f, 0xd3, 0x2b, 0x48, 0xdd, 0x7f, 0xf3, 0xfe, 0x3e, 0xfb, - 0x32, 0x8b, 0x0e, 0xa1, 0xc0, 0x1a, 0x70, 0xdd, 0xed, 0x23, 0x79, 0x45, 0x96, 0xbd, 0xbe, 0x34, - 0x2b, 0xd0, 0xaf, 0x32, 0x82, 0xcb, 0x68, 0x8d, 0x12, 0xf0, 0x87, 0xc7, 0xd0, 0xed, 0xdf, 0x4f, - 0x3d, 0x48, 0xa1, 0x43, 0xc8, 0x31, 0x22, 0x7f, 0x69, 0x2c, 0x73, 0x6c, 0x88, 0xb1, 0xad, 0x22, - 0x08, 0xd9, 0xfc, 0x07, 0x29, 0xf4, 0x7d, 0xc8, 0x9b, 0x3f, 0x22, 0xdd, 0x69, 0x40, 0x50, 0x51, - 0x58, 0xcc, 0x35, 0xff, 0xd2, 0x12, 0x1f, 0xfa, 0x0d, 0x46, 0x79, 0x55, 0x5f, 0x61, 0x94, 0x9c, - 0xe6, 0x89, 0x38, 0x0a, 0x50, 0x1d, 0x72, 0x55, 0x67, 0xdc, 0x1b, 0x12, 0x94, 0x38, 0x7b, 0x96, - 0x92, 0x6d, 0x31, 0xb2, 0x6b, 0xfa, 0x46, 0x14, 0xdf, 0xfe, 0x87, 0x8c, 0xe0, 0x49, 0x6a, 0xf7, - 0x24, 0xc7, 0xd0, 0x8f, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x52, 0x0f, 0xa4, 0x27, 0x84, 0x17, - 0x00, 0x00, + // 2337 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x8f, 0x1b, 0x49, + 0x15, 0x4f, 0xbb, 0xdd, 0xfe, 0x78, 0xf3, 0x91, 0x9e, 0xca, 0x24, 0xf1, 0x3a, 0x93, 0x0f, 0x9a, + 0x64, 0x12, 0xcd, 0xee, 0xce, 0x64, 0x13, 0x84, 0x42, 0x14, 0x40, 0x9e, 0x76, 0x67, 0xa6, 0x63, + 0x8f, 0x3d, 0xaa, 0xb6, 0x37, 0x24, 0x12, 0xb2, 0x7a, 0xec, 0x1a, 0xc7, 0x8a, 0xed, 0x36, 0xdd, + 0xed, 0x84, 0x41, 0x68, 0x0f, 0x7b, 0xe0, 0xc0, 0x29, 0xb0, 0xb0, 0x12, 0x27, 0x4e, 0xdc, 0x60, + 0xf9, 0x03, 0x10, 0x1f, 0x47, 0xee, 0x9c, 0xb8, 0x2f, 0x27, 0xae, 0x7c, 0x89, 0x13, 0xaa, 0xaf, + 0x76, 0xb7, 0x3f, 0x66, 0x88, 0x76, 0x4f, 0x76, 0xd5, 0xfb, 0xd5, 0xef, 0xbd, 0x7a, 0xef, 0xd5, + 0x7b, 0x55, 0x0d, 0xab, 0xc1, 0x4b, 0xf7, 0xf8, 0xd8, 0xeb, 0x77, 0xb6, 0x47, 0xbe, 0x17, 0x7a, + 0x48, 0x63, 0x3f, 0xc5, 0x8d, 0xae, 0xe7, 0x75, 0xfb, 0x64, 0xc7, 0x1d, 0xf5, 0x76, 0xdc, 0xe1, + 0xd0, 0x0b, 0xdd, 0xb0, 0xe7, 0x0d, 0x03, 0x0e, 0x2a, 0x5e, 0x17, 0x52, 0x36, 0x3a, 0x1a, 0x1f, + 0xef, 0x84, 0xbd, 0x01, 0x09, 0x42, 0x77, 0x30, 0x12, 0x80, 0x2b, 0xd3, 0x00, 0x32, 0x18, 0x85, + 0x27, 0x5c, 0x68, 0xdc, 0x87, 0x15, 0x27, 0x74, 0x43, 0x82, 0x49, 0x30, 0xf2, 0x86, 0x01, 0x41, + 0x06, 0x68, 0x01, 0x9d, 0x28, 0x28, 0x37, 0x94, 0x3b, 0x4b, 0xf7, 0x96, 0x39, 0x6e, 0x9b, 0x83, + 0xb8, 0xc8, 0xd8, 0x80, 0x5c, 0x84, 0xd7, 0x41, 0x1d, 0x04, 0x5d, 0x86, 0xce, 0x63, 0xfa, 0xd7, + 0xb8, 0x0a, 0x59, 0x4c, 0xbe, 0x37, 0x26, 0x41, 0x88, 0x10, 0xa4, 0x87, 0xee, 0x80, 0x08, 0x29, + 0xfb, 0x6f, 0xfc, 0x2e, 0x0d, 0x1a, 0x63, 0x43, 0x1f, 0x00, 0x1c, 0x8d, 0x7b, 0xfd, 0x8e, 0x13, + 0xd3, 0xb7, 0x26, 0xf4, 0xed, 0x46, 0x02, 0x1c, 0x03, 0xa1, 0xaf, 0xc1, 0x52, 0x87, 0x8c, 0xfa, + 0xde, 0x09, 0x5f, 0x93, 0x62, 0x6b, 0x90, 0x58, 0x53, 0x9e, 0x48, 0x70, 0x1c, 0x86, 0xf6, 0x61, + 0xf5, 0xd8, 0xf3, 0x5f, 0xbb, 0x7e, 0x87, 0x74, 0x0e, 0x3d, 0x3f, 0x0c, 0x0a, 0xe9, 0x1b, 0xea, + 0x9d, 0xa5, 0x7b, 0x37, 0xe2, 0x9b, 0xdb, 0x7e, 0x9c, 0x80, 0x58, 0xc3, 0xd0, 0x3f, 0xc1, 0x53, + 0xeb, 0x90, 0x09, 0x3a, 0x75, 0xc1, 0x38, 0x30, 0x5f, 0x90, 0xf6, 0x4b, 0x6e, 0x84, 0xc6, 0x8c, + 0xb8, 0x1c, 0xe3, 0x8a, 0x8b, 0xf1, 0xcc, 0x02, 0xf4, 0x10, 0x56, 0x8e, 0x7b, 0x7d, 0xe2, 0x9c, + 0x0c, 0xdb, 0x9c, 0x21, 0xc3, 0x18, 0xd6, 0x05, 0xc3, 0xe3, 0xb8, 0x0c, 0x27, 0xa1, 0xe8, 0x10, + 0x2e, 0x74, 0xc8, 0xd1, 0xb8, 0xdb, 0xed, 0x0d, 0xbb, 0xa6, 0x37, 0x0c, 0xdd, 0xde, 0x90, 0xf8, + 0x41, 0x21, 0xcb, 0xf6, 0x73, 0x2d, 0x72, 0xc4, 0x34, 0xc2, 0x7a, 0x45, 0x86, 0x21, 0x9e, 0xb7, + 0x14, 0xbd, 0x0b, 0xb9, 0x01, 0x09, 0xdd, 0x8e, 0x1b, 0xba, 0x85, 0x1c, 0x33, 0xe4, 0xbc, 0xa0, + 0x39, 0x10, 0xd3, 0x38, 0x02, 0xa0, 0x9b, 0xa0, 0xf5, 0x3d, 0x6f, 0x14, 0x14, 0xf2, 0x4c, 0xe1, + 0x6a, 0xa4, 0xf0, 0x55, 0xd5, 0xf3, 0x46, 0x98, 0x0b, 0x8b, 0x0e, 0x5c, 0x98, 0xe3, 0x4c, 0x9a, + 0x2a, 0x2f, 0xc9, 0x09, 0x0b, 0xb4, 0x86, 0xe9, 0x5f, 0xb4, 0x09, 0xda, 0x2b, 0xb7, 0x3f, 0x96, + 0x81, 0xd4, 0x05, 0x1d, 0x5d, 0xc3, 0x2d, 0xe6, 0xe2, 0x87, 0xa9, 0x07, 0xca, 0x93, 0x74, 0x4e, + 0xd5, 0xd3, 0xc6, 0x8f, 0x14, 0xc8, 0x0a, 0x6d, 0x68, 0x03, 0xf2, 0xbd, 0x90, 0xf8, 0xec, 0x34, + 0x08, 0xd6, 0xc9, 0x04, 0xcd, 0xae, 0xf6, 0x0b, 0x77, 0xd8, 0x25, 0x8d, 0x93, 0x11, 0x57, 0xb0, + 0x1a, 0x65, 0x97, 0x19, 0x09, 0x70, 0x0c, 0x84, 0xb6, 0x20, 0x4b, 0x7c, 0xdf, 0xf4, 0x3a, 0xa4, + 0xa0, 0x32, 0xbc, 0x34, 0xc8, 0xf2, 0x7d, 0x8f, 0xcd, 0x63, 0x09, 0x30, 0xfe, 0xa6, 0x40, 0x4e, + 0x3a, 0x08, 0x6d, 0x81, 0xc6, 0x92, 0x54, 0x24, 0xf1, 0x7a, 0x3c, 0x89, 0x23, 0x2f, 0x72, 0x08, + 0x7a, 0x1f, 0x32, 0x3c, 0x37, 0xc5, 0xa6, 0x2f, 0x26, 0xb2, 0x37, 0x42, 0x0b, 0x10, 0xfa, 0x36, + 0x80, 0xdb, 0xe9, 0xf4, 0xe8, 0x96, 0xdc, 0x7e, 0xa1, 0xcd, 0xdc, 0x7e, 0x7d, 0x2a, 0x40, 0xdb, + 0xa5, 0x08, 0xc1, 0xd3, 0x36, 0xb6, 0xa4, 0xf8, 0x4d, 0x38, 0x3f, 0x25, 0x8e, 0x07, 0x22, 0xcf, + 0x03, 0xb1, 0x1e, 0x0f, 0x44, 0x3e, 0xe6, 0x76, 0xe3, 0xef, 0x29, 0x58, 0x49, 0xec, 0x03, 0xbd, + 0x07, 0x6b, 0xc3, 0xf1, 0xe0, 0x88, 0xf8, 0xf5, 0xe3, 0x92, 0x1f, 0xf6, 0x8e, 0xdd, 0x76, 0x18, + 0x08, 0xf7, 0xcf, 0x0a, 0xd0, 0x03, 0xc8, 0xb1, 0x7d, 0xd3, 0x2c, 0x4d, 0x31, 0xeb, 0x37, 0xe6, + 0x79, 0x87, 0x8f, 0x88, 0x8f, 0x23, 0x34, 0xba, 0x09, 0xe9, 0x90, 0x86, 0x2e, 0x19, 0x0a, 0x86, + 0x63, 0x91, 0x63, 0x52, 0x54, 0x9e, 0xe3, 0x9f, 0x9b, 0x73, 0x35, 0x9c, 0xe6, 0xa4, 0x3d, 0xc8, + 0x0a, 0x03, 0xd0, 0xa6, 0x50, 0xab, 0x30, 0xb5, 0x28, 0x4e, 0x45, 0xfc, 0x98, 0xe2, 0x75, 0xd0, + 0xda, 0xde, 0x78, 0x18, 0x32, 0x97, 0x69, 0x98, 0x0f, 0xbe, 0xa8, 0xb7, 0xff, 0xab, 0xc0, 0x6a, + 0x32, 0x11, 0xd0, 0x23, 0xc8, 0xf3, 0x54, 0xa0, 0x1e, 0x54, 0xa6, 0xce, 0x79, 0x1c, 0x29, 0x86, + 0xc4, 0xc7, 0x93, 0x05, 0xe8, 0x3d, 0xc8, 0xb6, 0xfb, 0xe3, 0x20, 0x24, 0xbe, 0x38, 0x02, 0x72, + 0x43, 0x26, 0x9f, 0x65, 0x1b, 0x92, 0x90, 0xe2, 0x0f, 0x21, 0x27, 0x49, 0xd0, 0xed, 0x84, 0x1f, + 0x2e, 0x24, 0x54, 0x9e, 0xed, 0x88, 0xa9, 0xe3, 0xa7, 0xfe, 0x1f, 0xc7, 0xcf, 0xf8, 0xb1, 0x02, + 0x30, 0xa9, 0xfb, 0xe8, 0x5b, 0x90, 0x77, 0x63, 0xf9, 0x15, 0x2f, 0xd8, 0x13, 0xd4, 0x76, 0x94, + 0x69, 0x3c, 0xa8, 0x93, 0x25, 0xc5, 0x47, 0xb0, 0x9a, 0x14, 0xbe, 0x55, 0x24, 0x6e, 0xc1, 0x52, + 0xac, 0x9f, 0xa0, 0x4b, 0x90, 0xe1, 0x75, 0x5c, 0xac, 0x16, 0x23, 0xe3, 0x33, 0x05, 0xf4, 0xe9, + 0x92, 0xbf, 0x08, 0x8c, 0xca, 0x90, 0xf7, 0x49, 0xe0, 0x8d, 0xfd, 0x36, 0x91, 0x87, 0x61, 0x73, + 0x41, 0xdb, 0xd8, 0xc6, 0x12, 0x28, 0xf6, 0x15, 0x2d, 0xa4, 0xfb, 0x4a, 0x0a, 0xdf, 0x6a, 0x5f, + 0xb7, 0x61, 0x25, 0xd1, 0x60, 0x16, 0xee, 0xec, 0x8d, 0x06, 0x1a, 0x2b, 0xc2, 0xe8, 0x2e, 0xe4, + 0x69, 0x03, 0x60, 0x03, 0x51, 0xe1, 0xf4, 0x58, 0x05, 0x62, 0xf3, 0xfb, 0xe7, 0xf0, 0x04, 0x84, + 0xee, 0x8b, 0xce, 0xce, 0x97, 0xa4, 0x66, 0x3b, 0xbb, 0x5c, 0x13, 0x83, 0xa1, 0xaf, 0xcb, 0xde, + 0xce, 0x57, 0xa9, 0x73, 0x7a, 0xbb, 0x5c, 0x16, 0x07, 0x52, 0xf3, 0x46, 0xb2, 0x61, 0x14, 0xd2, + 0xf3, 0x1b, 0x09, 0x35, 0x2f, 0x02, 0x21, 0x2b, 0xd1, 0xc5, 0xf9, 0xc2, 0x85, 0x5d, 0x5c, 0xae, + 0x9f, 0x59, 0x82, 0xbe, 0x0b, 0x05, 0x19, 0x95, 0x69, 0xbc, 0x68, 0xe9, 0xb2, 0x50, 0xe3, 0x05, + 0xb0, 0xfd, 0x73, 0x78, 0x21, 0x05, 0x7a, 0x34, 0xb9, 0x26, 0x70, 0xce, 0xec, 0xdc, 0x6b, 0x82, + 0x24, 0x4a, 0x82, 0xd1, 0x73, 0xb8, 0xdc, 0x99, 0x7f, 0x0d, 0x10, 0x5d, 0xfe, 0x8c, 0xcb, 0xc2, + 0xfe, 0x39, 0xbc, 0x88, 0x00, 0x7d, 0x03, 0x96, 0x3b, 0xbc, 0x07, 0x73, 0xc2, 0x3c, 0x23, 0xbc, + 0x90, 0xbc, 0x0c, 0x48, 0x96, 0x04, 0x14, 0xbd, 0x0f, 0x39, 0x32, 0x14, 0x79, 0x01, 0x89, 0xdb, + 0x86, 0x35, 0x8c, 0xb2, 0x22, 0x82, 0xec, 0x2e, 0x03, 0x10, 0xfa, 0xa7, 0x45, 0x2b, 0x8d, 0x11, + 0x42, 0x4e, 0xa2, 0xe2, 0xbd, 0x5a, 0x39, 0xa3, 0x57, 0xd3, 0x14, 0x27, 0xbe, 0x7f, 0x10, 0x74, + 0xc5, 0x71, 0x10, 0xa3, 0xc9, 0x6d, 0x46, 0x3d, 0xe5, 0x36, 0x63, 0xfc, 0x52, 0x81, 0xe5, 0xf8, + 0x9e, 0xbe, 0xfc, 0x7b, 0xc7, 0xe4, 0x08, 0xaa, 0x89, 0x7a, 0xb1, 0x09, 0x2a, 0xf1, 0x7d, 0x91, + 0xd3, 0x32, 0xee, 0xa5, 0x36, 0x6b, 0x2e, 0x47, 0x7d, 0x62, 0xf9, 0x3e, 0xa6, 0x00, 0xe3, 0x35, + 0xac, 0x24, 0x66, 0xdf, 0xca, 0x39, 0x05, 0xc8, 0x0e, 0x48, 0x10, 0xb8, 0x5d, 0x59, 0x2c, 0xe4, + 0x10, 0xdd, 0x80, 0xa5, 0x60, 0xdc, 0xed, 0x92, 0x80, 0x3d, 0x37, 0x98, 0x93, 0xf2, 0x38, 0x3e, + 0x65, 0xd4, 0x20, 0x1f, 0x55, 0x00, 0x5a, 0x73, 0x08, 0x2d, 0x47, 0xa2, 0x8e, 0xf0, 0x41, 0xe2, + 0x7a, 0x99, 0x3a, 0xe3, 0x7a, 0x69, 0x7c, 0x24, 0x1a, 0x00, 0x27, 0x2c, 0x42, 0x4e, 0x56, 0x73, + 0xc1, 0x19, 0x8d, 0x63, 0x2e, 0x4b, 0x25, 0x5c, 0xa6, 0x73, 0x97, 0x71, 0x3f, 0xd2, 0xbf, 0x71, + 0x5f, 0xa4, 0xcf, 0xba, 0xd4, 0xb5, 0x65, 0xd1, 0xe7, 0x06, 0x2c, 0xaa, 0xe3, 0x42, 0x49, 0x6a, + 0xae, 0x92, 0x33, 0x6f, 0x8e, 0x1f, 0x27, 0x5b, 0xc6, 0xe9, 0xaa, 0x16, 0x47, 0xe7, 0x8b, 0xed, + 0xf4, 0x07, 0x50, 0x58, 0x54, 0x94, 0xa8, 0xdf, 0x65, 0x51, 0x92, 0x7e, 0x97, 0xe3, 0x85, 0x7e, + 0x8f, 0xd9, 0xa9, 0xce, 0xb5, 0x33, 0x1d, 0xd9, 0x69, 0xfc, 0x2a, 0x05, 0xf9, 0xa8, 0x32, 0xd3, + 0xd3, 0xd4, 0xf7, 0xda, 0x6e, 0x9f, 0xce, 0xc8, 0xd3, 0x14, 0x4d, 0xa0, 0x6b, 0x00, 0x3e, 0x19, + 0x78, 0x21, 0x61, 0x62, 0x7e, 0xc3, 0x88, 0xcd, 0x50, 0xbd, 0x23, 0xaf, 0x53, 0xa3, 0x8f, 0x4c, + 0xa1, 0x57, 0x0c, 0xd1, 0x4d, 0x58, 0x69, 0xcb, 0xb2, 0xc5, 0xe4, 0xdc, 0x82, 0xe4, 0x24, 0xd5, + 0x4e, 0x5f, 0xa5, 0xc1, 0xc8, 0x6d, 0xf3, 0x97, 0x5c, 0x1e, 0x4f, 0x26, 0xa8, 0x27, 0x68, 0xd7, + 0x60, 0xcb, 0x33, 0xdc, 0x13, 0x72, 0x8c, 0x0c, 0x58, 0x96, 0x5e, 0x61, 0x27, 0x3d, 0xcb, 0xe4, + 0x89, 0xb9, 0x38, 0x86, 0x71, 0xe4, 0x92, 0x18, 0xc6, 0x53, 0x80, 0xac, 0xdb, 0xe9, 0xf8, 0x24, + 0x08, 0x58, 0x1d, 0xcd, 0x63, 0x39, 0x34, 0x7e, 0xa1, 0x4c, 0x7a, 0x75, 0xe4, 0x2b, 0x5a, 0xe5, + 0x4d, 0x76, 0xdd, 0x12, 0xbe, 0x8a, 0x26, 0xe8, 0x01, 0xec, 0x0d, 0x26, 0x99, 0xc2, 0x07, 0x0b, + 0x8b, 0xcb, 0x4c, 0x5c, 0xe2, 0xf9, 0xa3, 0x9d, 0x95, 0x3f, 0xff, 0x48, 0xc1, 0xe5, 0x05, 0x9d, + 0xe3, 0xb4, 0x5c, 0x96, 0xb1, 0x4a, 0x9d, 0x11, 0x2b, 0xf5, 0xcc, 0x58, 0xa5, 0xe7, 0xc4, 0x2a, + 0xaa, 0x16, 0xda, 0x54, 0xb5, 0x28, 0x40, 0xd6, 0x1f, 0x0f, 0xc3, 0x5e, 0x14, 0x46, 0x39, 0xa4, + 0xf9, 0xf5, 0xda, 0xf3, 0x5f, 0xf6, 0x86, 0xdd, 0x72, 0xcf, 0x17, 0x31, 0x8c, 0xcd, 0xa0, 0x1a, + 0x00, 0xeb, 0x82, 0xfc, 0xb3, 0x41, 0x8e, 0xf5, 0x89, 0xed, 0xd3, 0x3b, 0x27, 0x9f, 0x8f, 0x7d, + 0x44, 0x88, 0x31, 0xd0, 0xf7, 0xc1, 0x94, 0xf8, 0xac, 0xdb, 0xdb, 0x4a, 0xfc, 0xf6, 0xf6, 0x11, + 0xe4, 0xaa, 0x5e, 0x97, 0xaf, 0x7b, 0x00, 0xf9, 0xe8, 0x53, 0x8f, 0xb8, 0x96, 0x15, 0xb7, 0xf9, + 0xb7, 0x9e, 0x6d, 0xf9, 0xad, 0x67, 0xbb, 0x21, 0x11, 0x78, 0x02, 0x46, 0x06, 0x68, 0x24, 0x76, + 0x33, 0x93, 0xdf, 0x78, 0xc4, 0x93, 0x9b, 0x24, 0xab, 0xb9, 0x1a, 0xab, 0xe6, 0xc6, 0x43, 0x58, + 0x6b, 0x06, 0xc4, 0xb7, 0x87, 0x21, 0x85, 0x8a, 0xaf, 0x3c, 0xb7, 0x20, 0xd3, 0x63, 0x13, 0xc2, + 0x8a, 0x15, 0xc1, 0x27, 0x50, 0x42, 0x68, 0x3c, 0x81, 0x0c, 0x9f, 0xa1, 0xdc, 0x93, 0xe7, 0x72, + 0x4e, 0x3e, 0x8c, 0x11, 0xa4, 0x83, 0x93, 0x61, 0x9b, 0x19, 0x95, 0xc3, 0xec, 0x3f, 0x4d, 0x25, + 0xf1, 0x58, 0x56, 0xd9, 0xac, 0x18, 0x6d, 0x79, 0xb0, 0x14, 0x7b, 0x91, 0xa1, 0x02, 0xac, 0x37, + 0x6b, 0x95, 0x5a, 0xfd, 0x69, 0xad, 0xb5, 0xdb, 0xb4, 0xab, 0x65, 0x0b, 0xb7, 0x1a, 0xcf, 0x0e, + 0x2d, 0xfd, 0x1c, 0xca, 0x82, 0xfa, 0xc4, 0xde, 0xd5, 0x15, 0x94, 0x07, 0x6d, 0xb7, 0xf4, 0xdc, + 0xaa, 0xea, 0x29, 0xb4, 0x0a, 0xc0, 0x50, 0x87, 0x25, 0xb3, 0xe2, 0xe8, 0x2a, 0x02, 0xc8, 0x98, + 0x4d, 0xa7, 0x51, 0x3f, 0xd0, 0xd3, 0xf4, 0x7f, 0xa5, 0x54, 0xb3, 0x2b, 0x75, 0x5d, 0xa3, 0xff, + 0xcb, 0x75, 0xb3, 0x62, 0x61, 0x3d, 0xb3, 0x55, 0x86, 0x7c, 0xf4, 0xf2, 0x44, 0x97, 0x00, 0x25, + 0xd4, 0x49, 0x65, 0x4b, 0x90, 0x35, 0xab, 0x4d, 0xa7, 0x61, 0x61, 0x5d, 0xa1, 0x9a, 0xf7, 0xcc, + 0x5d, 0x3d, 0x45, 0x35, 0x57, 0xeb, 0x66, 0xa9, 0xaa, 0xab, 0x5b, 0x75, 0x7a, 0x93, 0x98, 0x3c, + 0xa0, 0xd0, 0x3b, 0x70, 0x51, 0x12, 0x95, 0xad, 0xc3, 0x6a, 0xfd, 0xd9, 0xc4, 0xf0, 0x1c, 0xa4, + 0xf7, 0xad, 0xea, 0x81, 0xae, 0xa0, 0x15, 0xc8, 0x57, 0x98, 0x79, 0xf6, 0x73, 0x4b, 0x4f, 0x51, + 0x25, 0x95, 0xe6, 0xae, 0x65, 0x36, 0x28, 0x61, 0x13, 0x60, 0x72, 0xa7, 0x40, 0x3a, 0x2c, 0xdb, + 0x35, 0xbb, 0x61, 0x97, 0xaa, 0xad, 0x6a, 0xbd, 0x7e, 0xa8, 0x9f, 0x63, 0xbb, 0xa6, 0x16, 0xea, + 0x0a, 0x25, 0x6c, 0x58, 0x4e, 0x43, 0x4f, 0xb1, 0x7d, 0x31, 0x6d, 0x62, 0xef, 0xf5, 0xda, 0x63, + 0x7b, 0x4f, 0x4f, 0x53, 0x84, 0xf3, 0xac, 0x66, 0xea, 0xda, 0x96, 0x0d, 0x4b, 0xb1, 0xf7, 0x61, + 0xdc, 0xbd, 0x62, 0x7f, 0xd2, 0xca, 0x65, 0xc8, 0x1d, 0xd8, 0x35, 0x9b, 0x1a, 0x24, 0xb6, 0x5c, + 0xb1, 0xf8, 0x96, 0xeb, 0x8d, 0x7d, 0x0b, 0xeb, 0xea, 0xd6, 0xa7, 0x19, 0xc8, 0x47, 0xf5, 0x03, + 0x5d, 0x86, 0x0b, 0x66, 0xbd, 0x59, 0x2d, 0xb7, 0x6a, 0xf5, 0x46, 0xab, 0x6c, 0x35, 0x2c, 0x7c, + 0x60, 0xd7, 0x38, 0x51, 0xd6, 0x69, 0x9a, 0xa6, 0xe5, 0x38, 0xfa, 0x9f, 0x15, 0x74, 0x03, 0xae, + 0x38, 0x8d, 0x52, 0xa3, 0xe9, 0xb4, 0xcc, 0x7d, 0xcb, 0xac, 0xb4, 0xec, 0x83, 0xd2, 0x9e, 0xd5, + 0x3a, 0x6c, 0x56, 0xab, 0x2d, 0x0b, 0x63, 0xfd, 0xd7, 0x29, 0x74, 0x13, 0xae, 0x27, 0x10, 0x66, + 0xbd, 0xd6, 0x28, 0xd9, 0x35, 0x0b, 0xb7, 0x4c, 0x6c, 0x95, 0x1a, 0x76, 0x6d, 0x4f, 0xff, 0x4d, + 0x0a, 0x7d, 0x15, 0xae, 0x25, 0x50, 0xb8, 0x59, 0x8b, 0x21, 0x29, 0xd5, 0x67, 0x29, 0xb4, 0x09, + 0x5f, 0x59, 0x40, 0xc5, 0xcd, 0x2b, 0x35, 0xac, 0xb2, 0xfe, 0xdb, 0xd3, 0x70, 0xd8, 0x72, 0x1a, + 0x25, 0xcc, 0x94, 0x7e, 0x3e, 0x8b, 0xab, 0xd5, 0xcb, 0x56, 0xeb, 0xc0, 0x3a, 0xa8, 0xe3, 0x67, + 0xad, 0x43, 0x6c, 0x39, 0x4e, 0x13, 0x5b, 0xfa, 0x1b, 0x75, 0x66, 0x0b, 0x0c, 0x57, 0xb6, 0x9d, + 0xca, 0x04, 0xf5, 0x13, 0x15, 0x6d, 0xc1, 0xad, 0x59, 0x54, 0xcd, 0x6a, 0x3c, 0xad, 0xe3, 0x4a, + 0xab, 0x59, 0x2b, 0x7d, 0x58, 0xb2, 0xab, 0xa5, 0xdd, 0xaa, 0xa5, 0xff, 0x54, 0x9d, 0xd9, 0x2e, + 0xc3, 0x1e, 0xda, 0xe5, 0x09, 0xe1, 0x27, 0x0b, 0xd4, 0x36, 0x6b, 0x8e, 0xb9, 0x6f, 0x95, 0x9b, + 0x9c, 0xea, 0x67, 0x2a, 0x32, 0xe0, 0xea, 0x3c, 0x14, 0xb6, 0x4a, 0xe6, 0x3e, 0xc3, 0xfc, 0x5c, + 0x9d, 0x89, 0x12, 0x37, 0xad, 0xde, 0x68, 0x61, 0xab, 0x54, 0x7e, 0xa6, 0x7f, 0xaa, 0xa2, 0x4b, + 0xb0, 0x16, 0xc5, 0xbe, 0x25, 0x52, 0x48, 0xff, 0xa7, 0x8a, 0xde, 0x81, 0xf5, 0xc4, 0x4a, 0x29, + 0xfa, 0x97, 0x8a, 0x6e, 0x83, 0x31, 0x4f, 0x34, 0x65, 0xe1, 0xbf, 0x55, 0xf4, 0x2e, 0x6c, 0x2e, + 0x08, 0xc7, 0xd3, 0x92, 0x4d, 0x63, 0x11, 0xb1, 0xfe, 0x87, 0x29, 0x7c, 0x6c, 0x57, 0xad, 0x16, + 0xcd, 0xef, 0x16, 0x3d, 0x23, 0x34, 0xf8, 0x75, 0xac, 0xff, 0x35, 0x8d, 0x36, 0xe0, 0x72, 0xd9, + 0xfa, 0xb0, 0x85, 0xad, 0x3d, 0x9b, 0x65, 0x36, 0x3f, 0xd1, 0x65, 0xeb, 0xd0, 0xd1, 0x7f, 0xaf, + 0xa1, 0x2b, 0x70, 0x29, 0x21, 0xa5, 0x47, 0x88, 0x0b, 0xff, 0xa0, 0xa1, 0xab, 0x50, 0x48, 0x08, + 0xf9, 0xa9, 0xe2, 0xe2, 0x3f, 0x6a, 0x33, 0xcc, 0xfc, 0xa0, 0x51, 0xb1, 0xfe, 0x27, 0xed, 0xde, + 0x1b, 0x15, 0xce, 0x3b, 0xe2, 0x7b, 0xbf, 0x43, 0xfc, 0x57, 0xbd, 0x36, 0x41, 0x26, 0xe4, 0xf6, + 0x48, 0x28, 0xde, 0xe5, 0x33, 0xb5, 0xdc, 0x1a, 0x8c, 0xc2, 0x93, 0x62, 0xe2, 0x8b, 0xbc, 0xb1, + 0xf6, 0xf1, 0x5f, 0x3e, 0xff, 0x24, 0xb5, 0x84, 0xf2, 0x3b, 0xaf, 0x3e, 0xd8, 0x61, 0x5f, 0xe7, + 0xd1, 0x1e, 0xe4, 0x58, 0x25, 0xaf, 0x7a, 0x5d, 0x24, 0xef, 0xda, 0xb2, 0x69, 0x14, 0xa7, 0x27, + 0x8c, 0x8b, 0x8c, 0xe0, 0x3c, 0x5a, 0xa1, 0x04, 0xfc, 0xad, 0xd5, 0xf7, 0xba, 0x77, 0x94, 0xbb, + 0x0a, 0xda, 0x83, 0x0c, 0x23, 0x0a, 0x16, 0xda, 0x32, 0xc3, 0x86, 0x18, 0xdb, 0x32, 0x82, 0x88, + 0x2d, 0xb8, 0xab, 0xa0, 0xef, 0x40, 0xd6, 0xfa, 0x3e, 0x69, 0x8f, 0x43, 0x82, 0x0a, 0x62, 0xc5, + 0x4c, 0x17, 0x29, 0x2e, 0xd0, 0x61, 0x5c, 0x61, 0x94, 0x17, 0x8d, 0x25, 0x46, 0xc9, 0x69, 0x1e, + 0x8a, 0x9e, 0x82, 0xaa, 0x90, 0xd9, 0x77, 0x87, 0x9d, 0x3e, 0x41, 0x89, 0x26, 0xb6, 0x90, 0x6c, + 0x83, 0x91, 0x5d, 0x32, 0xd6, 0x26, 0xf6, 0xed, 0xbc, 0x60, 0x04, 0x0f, 0x95, 0xad, 0xa3, 0x0c, + 0x43, 0xdf, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x87, 0x47, 0xad, 0x88, 0x19, 0x00, + 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/skaffold.proto b/proto/skaffold.proto index e306555e747..07532506df4 100644 --- a/proto/skaffold.proto +++ b/proto/skaffold.proto @@ -27,6 +27,13 @@ message State { FileSyncState fileSyncState = 6; repeated DebuggingContainerEvent debuggingContainers = 7; Metadata metadata = 8; + repeated DevLoop loops = 9; +} + +message DevLoop { + int32 iteration = 1; // dev loop iteration + ChangeType changeType = 2; // Change type which triggered this loop + ErrorCode errCode = 3; // actionable error message } message Metadata { @@ -52,6 +59,7 @@ message DeployMetadata { message Deployer { DeployerType type = 1; int32 count = 2; + ChangeType changeType = 3; } repeated Deployer deployers = 1; ClusterType cluster = 2; @@ -105,14 +113,22 @@ message Event { FileSyncEvent fileSyncEvent = 7; // describes the sync status. DebuggingContainerEvent debuggingContainerEvent = 8; // describes the appearance or disappearance of a debugging container DevLoopEvent devLoopEvent = 9; // describes a start and end of a dev loop. + EndEvent endEvent = 10; } } +// `EndEvent` is the last event indicating skaffold session ended. +message EndEvent { + ErrorCode errCode = 1; + string errMsg = 2; + repeated DevLoop loops = 3; +} // `DevLoopEvent` marks the start and end of a dev loop. message DevLoopEvent { int32 iteration = 1; // dev loop iteration - string status = 2; // dev loop status oneof: In Progress, Completed, Failed - ActionableErr err = 3; // actionable error message + ChangeType changeType = 2; + string status = 3; // dev loop status oneof: In Progress, Completed, Failed + ActionableErr err = 4; // actionable error message } @@ -306,6 +322,22 @@ enum DeployerType { KUBECTL = 3; } +// Enum for indicating which dependency change triggered the dev loop +enum ChangeType { + // First iteration + INITIAL_LOOP = 0; + // Indicates build dependency change + BUILD = 1; + // Indicates test dependency change + TEST = 2; + // Indicates deploy dependency change + DEPLOY = 3; + // Indicates skaffold config change + CONFIG = 4; + // Indicates sync dependency change + SYNC = 5; +} + // Enum indicating cluster type the application is deployed to enum ClusterType { // Could not determine Cluster Type @@ -326,7 +358,7 @@ enum ErrorCode { // No Error codes // Status Check Success - STATUS_CHECK_NO_ERROR = 200; + SUCCESS = 200; // Container errors From 735e9639b2004b979028b0234341314334a03998 Mon Sep 17 00:00:00 2001 From: tejal29 Date: Fri, 1 May 2020 13:52:58 -0700 Subject: [PATCH 6/9] Revert "add skaffold end session event" This reverts commit ca8075742aa89e54fe36f655eeb32465abed22f5. --- cmd/skaffold/app/cmd/cmd.go | 2 +- cmd/skaffold/app/cmd/commands.go | 8 +- docs/content/en/api/skaffold.swagger.json | 143 +---- docs/content/en/docs/references/api/grpc.md | 56 +- pkg/diag/validator/pod.go | 6 +- pkg/diag/validator/pod_test.go | 4 +- pkg/skaffold/event/event.go | 31 +- pkg/skaffold/runner/changeset.go | 14 - pkg/skaffold/runner/dev.go | 10 +- proto/skaffold.pb.go | 544 ++++++-------------- proto/skaffold.proto | 38 +- 11 files changed, 202 insertions(+), 654 deletions(-) diff --git a/cmd/skaffold/app/cmd/cmd.go b/cmd/skaffold/app/cmd/cmd.go index 780826ed1c2..f985515655c 100644 --- a/cmd/skaffold/app/cmd/cmd.go +++ b/cmd/skaffold/app/cmd/cmd.go @@ -47,7 +47,7 @@ var ( func NewSkaffoldCommand(out, err io.Writer) *cobra.Command { updateMsg := make(chan string) - var shutdownAPIServer func() error + var shutdownAPIServer func() error rootCmd := &cobra.Command{ Use: "skaffold", diff --git a/cmd/skaffold/app/cmd/commands.go b/cmd/skaffold/app/cmd/commands.go index e90ae70f6f3..6ec396a8094 100644 --- a/cmd/skaffold/app/cmd/commands.go +++ b/cmd/skaffold/app/cmd/commands.go @@ -23,8 +23,6 @@ import ( "github.com/spf13/cobra" "github.com/spf13/pflag" - - "github.com/GoogleContainerTools/skaffold/pkg/skaffold/event" ) // Builder is used to build cobra commands. @@ -96,11 +94,7 @@ func (b *builder) ExactArgs(argCount int, action func(context.Context, io.Writer func (b *builder) NoArgs(action func(context.Context, io.Writer) error) *cobra.Command { b.cmd.Args = cobra.NoArgs b.cmd.RunE = func(*cobra.Command, []string) error { - err := action(b.cmd.Context(), b.cmd.OutOrStdout()) - // The actual error code will be passed in - // https://github.com/GoogleContainerTools/skaffold/pull/4045 - event.EndSessionEvent(1) - return err + return action(b.cmd.Context(), b.cmd.OutOrStdout()) } return &b.cmd } diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json index affb1f30895..d5540a480c9 100644 --- a/docs/content/en/api/skaffold.swagger.json +++ b/docs/content/en/api/skaffold.swagger.json @@ -97,13 +97,13 @@ }, { "name": "event.buildEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "SUCCESS", + "STATUS_CHECK_NO_ERROR", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -142,13 +142,13 @@ }, { "name": "event.deployEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "SUCCESS", + "STATUS_CHECK_NO_ERROR", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -249,13 +249,13 @@ }, { "name": "event.statusCheckEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "SUCCESS", + "STATUS_CHECK_NO_ERROR", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -331,13 +331,13 @@ }, { "name": "event.fileSyncEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "SUCCESS", + "STATUS_CHECK_NO_ERROR", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -411,22 +411,6 @@ "type": "integer", "format": "int32" }, - { - "name": "event.devLoopEvent.changeType", - "description": " - INITIAL_LOOP: First iteration\n - BUILD: Indicates build dependency change\n - TEST: Indicates test dependency change\n - DEPLOY: Indicates deploy dependency change\n - CONFIG: Indicates skaffold config change\n - SYNC: Indicates sync dependency change", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "INITIAL_LOOP", - "BUILD", - "TEST", - "DEPLOY", - "CONFIG", - "SYNC" - ], - "default": "INITIAL_LOOP" - }, { "name": "event.devLoopEvent.status", "in": "query", @@ -435,13 +419,13 @@ }, { "name": "event.devLoopEvent.err.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", "in": "query", "required": false, "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "SUCCESS", + "STATUS_CHECK_NO_ERROR", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -482,45 +466,6 @@ }, "collectionFormat": "multi" }, - { - "name": "event.endEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", - "in": "query", - "required": false, - "type": "string", - "enum": [ - "COULD_NOT_DETERMINE", - "SUCCESS", - "STATUS_CHECK_IMAGE_PULL_ERR", - "STATUS_CHECK_CONTAINER_CREATING", - "STATUS_CHECK_RUN_CONTAINER_ERR", - "STATUS_CHECK_CONTAINER_TERMINATED", - "STATUS_CHECK_CONTAINER_RESTARTING", - "STATUS_CHECK_NODE_MEMORY_PRESSURE", - "STATUS_CHECK_NODE_DISK_PRESSURE", - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - "STATUS_CHECK_NODE_PID_PRESSURE", - "STATUS_CHECK_NODE_UNSCHEDULABLE", - "STATUS_CHECK_NODE_UNREACHABLE", - "STATUS_CHECK_NODE_NOT_READY", - "ErrorCode_UNKNOWN", - "STATUS_CHECK_UNKNOWN", - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - "FILE_SYNC_INIT_ERROR", - "DEV_REGISTER_BUILD_DEPS", - "DEV_REGISTER_TEST_DEPS", - "DEV_REGISTER_DEPLOY_DEPS", - "DEV_REGISTER_CONFIG_DEP" - ], - "default": "COULD_NOT_DETERMINE" - }, - { - "name": "event.endEvent.errMsg", - "in": "query", - "required": false, - "type": "string" - }, { "name": "entry", "in": "query", @@ -644,9 +589,6 @@ "count": { "type": "integer", "format": "int32" - }, - "changeType": { - "$ref": "#/definitions/protoChangeType" } } }, @@ -749,20 +691,6 @@ "default": "UNKNOWN_BUILDER_TYPE", "description": "Enum indicating builders used\n- UNKNOWN_BUILDER_TYPE: Could not determine builder type\n - JIB: JIB Builder\n - BAZEL: Bazel Builder\n - BUILDPACKS: Buildpacks Builder\n - CUSTOM: Custom Builder\n - KANIKO: Kaniko Builder\n - DOCKER: Docker Builder" }, - "protoChangeType": { - "type": "string", - "enum": [ - "INITIAL_LOOP", - "BUILD", - "TEST", - "DEPLOY", - "CONFIG", - "SYNC" - ], - "default": "INITIAL_LOOP", - "description": "- INITIAL_LOOP: First iteration\n - BUILD: Indicates build dependency change\n - TEST: Indicates test dependency change\n - DEPLOY: Indicates deploy dependency change\n - CONFIG: Indicates skaffold config change\n - SYNC: Indicates sync dependency change", - "description": "Enum for indicating which dependency change triggered the dev loop" - }, "protoClusterType": { "type": "string", "enum": [ @@ -857,21 +785,6 @@ "default": "UNKNOWN_DEPLOYER_TYPE", "description": "Enum indicating deploy tools used\n- UNKNOWN_DEPLOYER_TYPE: Could not determine Deployer Type\n - HELM: Helm Deployer\n - KUSTOMIZE: Kustomize Deployer\n - KUBECTL: Kubectl Deployer" }, - "protoDevLoop": { - "type": "object", - "properties": { - "iteration": { - "type": "integer", - "format": "int32" - }, - "changeType": { - "$ref": "#/definitions/protoChangeType" - }, - "errCode": { - "$ref": "#/definitions/protoErrorCode" - } - } - }, "protoDevLoopEvent": { "type": "object", "properties": { @@ -879,9 +792,6 @@ "type": "integer", "format": "int32" }, - "changeType": { - "$ref": "#/definitions/protoChangeType" - }, "status": { "type": "string" }, @@ -891,29 +801,11 @@ }, "description": "`DevLoopEvent` marks the start and end of a dev loop." }, - "protoEndEvent": { - "type": "object", - "properties": { - "errCode": { - "$ref": "#/definitions/protoErrorCode" - }, - "errMsg": { - "type": "string" - }, - "loops": { - "type": "array", - "items": { - "$ref": "#/definitions/protoDevLoop" - } - } - }, - "description": "`EndEvent` is the last event indicating skaffold session ended." - }, "protoErrorCode": { "type": "string", "enum": [ "COULD_NOT_DETERMINE", - "SUCCESS", + "STATUS_CHECK_NO_ERROR", "STATUS_CHECK_IMAGE_PULL_ERR", "STATUS_CHECK_CONTAINER_CREATING", "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -938,6 +830,7 @@ ], "default": "COULD_NOT_DETERMINE", <<<<<<< HEAD +<<<<<<< HEAD <<<<<<< HEAD "description": "Enum for error codes\n- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason" ======= @@ -945,6 +838,9 @@ ======= "description": "- COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", >>>>>>> ca8075742... add skaffold end session event +======= + "description": "- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", +>>>>>>> fcd6a6594... Revert "add skaffold end session event" "description": "Enum for error codes" >>>>>>> 118d52ef4... Add to indicate start and end of skaffold dev iterations }, @@ -977,9 +873,6 @@ }, "devLoopEvent": { "$ref": "#/definitions/protoDevLoopEvent" - }, - "endEvent": { - "$ref": "#/definitions/protoEndEvent" } }, "description": "`Event` describes an event in the Skaffold process.\nIt is one of MetaEvent, BuildEvent, DeployEvent, PortEvent, StatusCheckEvent, ResourceStatusCheckEvent, FileSyncEvent, or DebuggingContainerEvent." @@ -1163,12 +1056,6 @@ }, "metadata": { "$ref": "#/definitions/protoMetadata" - }, - "loops": { - "type": "array", - "items": { - "$ref": "#/definitions/protoDevLoop" - } } }, "description": "`State` represents the current state of the Skaffold components" diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md index b93e0b82bb7..e27d7166c2e 100644 --- a/docs/content/en/docs/references/api/grpc.md +++ b/docs/content/en/docs/references/api/grpc.md @@ -247,7 +247,6 @@ anytime a deployment starts or completes, successfully or not. | ----- | ---- | ----- | ----------- | | type | [DeployerType](#proto.DeployerType) | | | | count | [int32](#int32) | | | -| changeType | [ChangeType](#proto.ChangeType) | | | @@ -270,23 +269,6 @@ anytime a deployment starts or completes, successfully or not. - -#### DevLoop - - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| iteration | [int32](#int32) | | dev loop iteration | -| changeType | [ChangeType](#proto.ChangeType) | | Change type which triggered this loop | -| errCode | [ErrorCode](#proto.ErrorCode) | | actionable error message | - - - - - - - #### DevLoopEvent `DevLoopEvent` marks the start and end of a dev loop. @@ -295,7 +277,6 @@ anytime a deployment starts or completes, successfully or not. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | iteration | [int32](#int32) | | dev loop iteration | -| changeType | [ChangeType](#proto.ChangeType) | | | | status | [string](#string) | | dev loop status oneof: In Progress, Completed, Failed | | err | [ActionableErr](#proto.ActionableErr) | | actionable error message | @@ -305,23 +286,6 @@ anytime a deployment starts or completes, successfully or not. - -#### EndEvent -`EndEvent` is the last event indicating skaffold session ended. - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| errCode | [ErrorCode](#proto.ErrorCode) | | | -| errMsg | [string](#string) | | | -| loops | [DevLoop](#proto.DevLoop) | repeated | | - - - - - - - #### Event `Event` describes an event in the Skaffold process. @@ -339,7 +303,6 @@ It is one of MetaEvent, BuildEvent, DeployEvent, PortEvent, StatusCheckEvent, Re | fileSyncEvent | [FileSyncEvent](#proto.FileSyncEvent) | | describes the sync status. | | debuggingContainerEvent | [DebuggingContainerEvent](#proto.DebuggingContainerEvent) | | describes the appearance or disappearance of a debugging container | | devLoopEvent | [DevLoopEvent](#proto.DevLoopEvent) | | describes a start and end of a dev loop. | -| endEvent | [EndEvent](#proto.EndEvent) | | | @@ -553,7 +516,6 @@ will be sent with the new status. | fileSyncState | [FileSyncState](#proto.FileSyncState) | | | | debuggingContainers | [DebuggingContainerEvent](#proto.DebuggingContainerEvent) | repeated | | | metadata | [Metadata](#proto.Metadata) | | | -| loops | [DevLoop](#proto.DevLoop) | repeated | | @@ -689,22 +651,6 @@ Enum indicating builders used - - -### ChangeType -Enum for indicating which dependency change triggered the dev loop - -| Name | Number | Description | -| ---- | ------ | ----------- | -| INITIAL_LOOP | 0 | First iteration | -| BUILD | 1 | Indicates build dependency change | -| TEST | 2 | Indicates test dependency change | -| DEPLOY | 3 | Indicates deploy dependency change | -| CONFIG | 4 | Indicates skaffold config change | -| SYNC | 5 | Indicates sync dependency change | - - - ### ClusterType @@ -741,7 +687,7 @@ Enum for error codes | Name | Number | Description | | ---- | ------ | ----------- | | COULD_NOT_DETERMINE | 0 | Could not determine error | -| SUCCESS | 200 | Status Check Success | +| STATUS_CHECK_NO_ERROR | 200 | Status Check Success | | STATUS_CHECK_IMAGE_PULL_ERR | 300 | Container image pull error | | STATUS_CHECK_CONTAINER_CREATING | 301 | Container creating error | | STATUS_CHECK_RUN_CONTAINER_ERR | 302 | Container run error | diff --git a/pkg/diag/validator/pod.go b/pkg/diag/validator/pod.go index a1e5b62e59e..1c09f79f054 100644 --- a/pkg/diag/validator/pod.go +++ b/pkg/diag/validator/pod.go @@ -100,7 +100,7 @@ func getContainerStatus(pod *v1.Pod) (proto.ErrorCode, error) { } } } - return proto.ErrorCode_SUCCESS, nil + return proto.ErrorCode_STATUS_CHECK_NO_ERROR, nil } func getWaitingContainerStatus(cs []v1.ContainerStatus) (proto.ErrorCode, error) { @@ -114,7 +114,7 @@ func getWaitingContainerStatus(cs []v1.ContainerStatus) (proto.ErrorCode, error) } } // No waiting or terminated containers, pod should be in good health. - return proto.ErrorCode_SUCCESS, nil + return proto.ErrorCode_STATUS_CHECK_NO_ERROR, nil } func getTolerationsDetails(reason string, message string) (proto.ErrorCode, error) { @@ -219,7 +219,7 @@ func newPodStatus(n string, ns string, p string) *podStatus { name: n, namespace: ns, phase: p, - errCode: proto.ErrorCode_SUCCESS, + errCode: proto.ErrorCode_STATUS_CHECK_NO_ERROR, } } diff --git a/pkg/diag/validator/pod_test.go b/pkg/diag/validator/pod_test.go index a1806d3bd98..cd7b20fccdd 100644 --- a/pkg/diag/validator/pod_test.go +++ b/pkg/diag/validator/pod_test.go @@ -88,7 +88,7 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "", "foo", "Succeeded", nil, - proto.ErrorCode_SUCCESS)}, + proto.ErrorCode_STATUS_CHECK_NO_ERROR)}, }, { description: "pod is in Stable State", @@ -109,7 +109,7 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "", "foo", "Running", nil, - proto.ErrorCode_SUCCESS)}, + proto.ErrorCode_STATUS_CHECK_NO_ERROR)}, }, { description: "pod condition unknown", diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go index 1a5e609e044..c4b99561911 100644 --- a/pkg/skaffold/event/event.go +++ b/pkg/skaffold/event/event.go @@ -249,12 +249,8 @@ func BuildComplete(imageName string) { } // DevLoopInProgress notifies that a dev loop has been started. -func DevLoopInProgress(i int, depType proto.ChangeType) { - handler.handleDevLoopEvent(&proto.DevLoopEvent{ - Iteration: int32(i), - ChangeType: depType, - Status: InProgress, - }) +func DevLoopInProgress(i int) { + handler.handleDevLoopEvent(&proto.DevLoopEvent{Iteration: int32(i), Status: InProgress}) } // DevLoopFailed notifies that a dev loop has failed with an error code @@ -419,18 +415,6 @@ func LogMetaEvent() { }) } -// EndSessionEvent notifies that that skaffold session has ended and describes it -func EndSessionEvent(errorCode proto.ErrorCode) { - go handler.handle(&proto.Event{ - EventType: &proto.Event_EndEvent{ - EndEvent: &proto.EndEvent{ - ErrCode: errorCode, - Loops: handler.state.Loops, - }, - }, - }) -} - func (ev *eventHandler) handle(event *proto.Event) { logEntry := &proto.LogEntry{ Timestamp: ptypes.TimestampNow(), @@ -546,24 +530,14 @@ func (ev *eventHandler) handle(event *proto.Event) { } case *proto.Event_DevLoopEvent: de := e.DevLoopEvent - ev.stateLock.Lock() switch de.Status { case InProgress: - ev.state.Loops = append(ev.state.Loops, &proto.DevLoop{ - Iteration: de.Iteration, - ChangeType: de.ChangeType, - }) logEntry.Entry = fmt.Sprintf("Dev Iteration %d in progress", de.Iteration) case Succeeded: - ev.state.Loops[int(de.Iteration)].ErrCode = proto.ErrorCode_SUCCESS logEntry.Entry = fmt.Sprintf("Dev Iteration %d successful", de.Iteration) default: - ev.state.Loops[int(de.Iteration)].ErrCode = de.Err.ErrCode logEntry.Entry = fmt.Sprintf("Dev Iteration %d failed with error code %v", de.Iteration, de.Err.ErrCode) } - ev.stateLock.Unlock() - case *proto.Event_EndEvent: - logEntry.Entry = fmt.Sprintf("Skaffold end event with %d dev loops", len(e.EndEvent.Loops)) default: return } @@ -578,7 +552,6 @@ func ResetStateOnBuild() { builds[k] = NotStarted } newState := emptyStateWithArtifacts(builds, handler.getState().Metadata) - newState.Loops = handler.getState().Loops handler.setState(newState) } diff --git a/pkg/skaffold/runner/changeset.go b/pkg/skaffold/runner/changeset.go index 701af2d46fa..d2b18133fd1 100644 --- a/pkg/skaffold/runner/changeset.go +++ b/pkg/skaffold/runner/changeset.go @@ -19,7 +19,6 @@ package runner import ( "github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest" "github.com/GoogleContainerTools/skaffold/pkg/skaffold/sync" - "github.com/GoogleContainerTools/skaffold/proto" ) type changeSet struct { @@ -29,7 +28,6 @@ type changeSet struct { resyncTracker map[string]*sync.Item needsRedeploy bool needsReload bool - changeType proto.ChangeType } func (c *changeSet) AddRebuild(a *latest.Artifact) { @@ -39,7 +37,6 @@ func (c *changeSet) AddRebuild(a *latest.Artifact) { c.rebuildTracker[a.ImageName] = a c.needsRebuild = append(c.needsRebuild, a) c.needsRedeploy = true - c.changeType = proto.ChangeType_BUILD } func (c *changeSet) AddResync(s *sync.Item) { @@ -48,17 +45,6 @@ func (c *changeSet) AddResync(s *sync.Item) { } c.resyncTracker[s.Image] = s c.needsResync = append(c.needsResync, s) - c.changeType = proto.ChangeType_SYNC -} - -func (c *changeSet) AddRedeploy(ct proto.ChangeType) { - c.needsRedeploy = true - c.changeType = ct -} - -func (c *changeSet) NeedsReload() { - c.needsReload = true - c.changeType = proto.ChangeType_CONFIG } func (c *changeSet) resetBuild() { diff --git a/pkg/skaffold/runner/dev.go b/pkg/skaffold/runner/dev.go index c2b41d32eb7..6188a51c0a4 100644 --- a/pkg/skaffold/runner/dev.go +++ b/pkg/skaffold/runner/dev.go @@ -63,7 +63,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { // if any action is going to be performed, reset the monitor's changed component tracker for debouncing defer r.monitor.Reset() defer r.listener.LogWatchToUser(out) - event.DevLoopInProgress(iteration, r.changeSet.changeType) + event.DevLoopInProgress(iteration) defer func() { iteration++ }() if needsSync { defer func() { @@ -126,7 +126,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { // Dev watches for changes and runs the skaffold build and deploy // config until interrupted by the user. func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*latest.Artifact) error { - event.DevLoopInProgress(0, proto.ChangeType_INITIAL_LOOP) + event.DevLoopInProgress(0) r.createLogger(out, artifacts) defer r.logger.Stop() @@ -177,7 +177,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Watch test configuration if err := r.monitor.Register( r.tester.TestDependencies, - func(filemon.Events) { r.changeSet.AddRedeploy(proto.ChangeType_TEST) }, + func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_TEST_DEPS, err) return fmt.Errorf("watching test files: %w", err) @@ -186,7 +186,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Watch deployment configuration if err := r.monitor.Register( r.deployer.Dependencies, - func(filemon.Events) { r.changeSet.AddRedeploy(proto.ChangeType_DEPLOY) }, + func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_DEPLOY_DEPS, err) return fmt.Errorf("watching files for deployer: %w", err) @@ -195,7 +195,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Watch Skaffold configuration if err := r.monitor.Register( func() ([]string, error) { return []string{r.runCtx.Opts.ConfigurationFile}, nil }, - func(filemon.Events) { r.changeSet.NeedsReload() }, + func(filemon.Events) { r.changeSet.needsReload = true }, ); err != nil { event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_CONFIG_DEP, err) return fmt.Errorf("watching skaffold configuration %q: %w", r.runCtx.Opts.ConfigurationFile, err) diff --git a/proto/skaffold.pb.go b/proto/skaffold.pb.go index a0316f44f6c..1086fb52072 100644 --- a/proto/skaffold.pb.go +++ b/proto/skaffold.pb.go @@ -147,50 +147,6 @@ func (DeployerType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_4f2d38e344f9dbf5, []int{2} } -// Enum for indicating which dependency change triggered the dev loop -type ChangeType int32 - -const ( - // First iteration - ChangeType_INITIAL_LOOP ChangeType = 0 - // Indicates build dependency change - ChangeType_BUILD ChangeType = 1 - // Indicates test dependency change - ChangeType_TEST ChangeType = 2 - // Indicates deploy dependency change - ChangeType_DEPLOY ChangeType = 3 - // Indicates skaffold config change - ChangeType_CONFIG ChangeType = 4 - // Indicates sync dependency change - ChangeType_SYNC ChangeType = 5 -) - -var ChangeType_name = map[int32]string{ - 0: "INITIAL_LOOP", - 1: "BUILD", - 2: "TEST", - 3: "DEPLOY", - 4: "CONFIG", - 5: "SYNC", -} - -var ChangeType_value = map[string]int32{ - "INITIAL_LOOP": 0, - "BUILD": 1, - "TEST": 2, - "DEPLOY": 3, - "CONFIG": 4, - "SYNC": 5, -} - -func (x ChangeType) String() string { - return proto.EnumName(ChangeType_name, int32(x)) -} - -func (ChangeType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{3} -} - // Enum indicating cluster type the application is deployed to type ClusterType int32 @@ -224,7 +180,7 @@ func (x ClusterType) String() string { } func (ClusterType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{4} + return fileDescriptor_4f2d38e344f9dbf5, []int{3} } // Enum for error codes @@ -234,7 +190,7 @@ const ( // Could not determine error ErrorCode_COULD_NOT_DETERMINE ErrorCode = 0 // Status Check Success - ErrorCode_SUCCESS ErrorCode = 200 + ErrorCode_STATUS_CHECK_NO_ERROR ErrorCode = 200 // Container image pull error ErrorCode_STATUS_CHECK_IMAGE_PULL_ERR ErrorCode = 300 // Container creating error @@ -281,7 +237,7 @@ const ( var ErrorCode_name = map[int32]string{ 0: "COULD_NOT_DETERMINE", - 200: "SUCCESS", + 200: "STATUS_CHECK_NO_ERROR", 300: "STATUS_CHECK_IMAGE_PULL_ERR", 301: "STATUS_CHECK_CONTAINER_CREATING", 302: "STATUS_CHECK_RUN_CONTAINER_ERR", @@ -307,7 +263,7 @@ var ErrorCode_name = map[int32]string{ var ErrorCode_value = map[string]int32{ "COULD_NOT_DETERMINE": 0, - "SUCCESS": 200, + "STATUS_CHECK_NO_ERROR": 200, "STATUS_CHECK_IMAGE_PULL_ERR": 300, "STATUS_CHECK_CONTAINER_CREATING": 301, "STATUS_CHECK_RUN_CONTAINER_ERR": 302, @@ -336,7 +292,7 @@ func (x ErrorCode) String() string { } func (ErrorCode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{5} + return fileDescriptor_4f2d38e344f9dbf5, []int{4} } type StateResponse struct { @@ -465,7 +421,6 @@ type State struct { FileSyncState *FileSyncState `protobuf:"bytes,6,opt,name=fileSyncState,proto3" json:"fileSyncState,omitempty"` DebuggingContainers []*DebuggingContainerEvent `protobuf:"bytes,7,rep,name=debuggingContainers,proto3" json:"debuggingContainers,omitempty"` Metadata *Metadata `protobuf:"bytes,8,opt,name=metadata,proto3" json:"metadata,omitempty"` - Loops []*DevLoop `protobuf:"bytes,9,rep,name=loops,proto3" json:"loops,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -545,68 +500,6 @@ func (m *State) GetMetadata() *Metadata { return nil } -func (m *State) GetLoops() []*DevLoop { - if m != nil { - return m.Loops - } - return nil -} - -type DevLoop struct { - Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` - ChangeType ChangeType `protobuf:"varint,2,opt,name=changeType,proto3,enum=proto.ChangeType" json:"changeType,omitempty"` - ErrCode ErrorCode `protobuf:"varint,3,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *DevLoop) Reset() { *m = DevLoop{} } -func (m *DevLoop) String() string { return proto.CompactTextString(m) } -func (*DevLoop) ProtoMessage() {} -func (*DevLoop) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{4} -} - -func (m *DevLoop) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_DevLoop.Unmarshal(m, b) -} -func (m *DevLoop) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_DevLoop.Marshal(b, m, deterministic) -} -func (m *DevLoop) XXX_Merge(src proto.Message) { - xxx_messageInfo_DevLoop.Merge(m, src) -} -func (m *DevLoop) XXX_Size() int { - return xxx_messageInfo_DevLoop.Size(m) -} -func (m *DevLoop) XXX_DiscardUnknown() { - xxx_messageInfo_DevLoop.DiscardUnknown(m) -} - -var xxx_messageInfo_DevLoop proto.InternalMessageInfo - -func (m *DevLoop) GetIteration() int32 { - if m != nil { - return m.Iteration - } - return 0 -} - -func (m *DevLoop) GetChangeType() ChangeType { - if m != nil { - return m.ChangeType - } - return ChangeType_INITIAL_LOOP -} - -func (m *DevLoop) GetErrCode() ErrorCode { - if m != nil { - return m.ErrCode - } - return ErrorCode_COULD_NOT_DETERMINE -} - type Metadata struct { Build *BuildMetadata `protobuf:"bytes,1,opt,name=build,proto3" json:"build,omitempty"` Deploy *DeployMetadata `protobuf:"bytes,2,opt,name=deploy,proto3" json:"deploy,omitempty"` @@ -621,7 +514,7 @@ func (m *Metadata) Reset() { *m = Metadata{} } func (m *Metadata) String() string { return proto.CompactTextString(m) } func (*Metadata) ProtoMessage() {} func (*Metadata) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{5} + return fileDescriptor_4f2d38e344f9dbf5, []int{4} } func (m *Metadata) XXX_Unmarshal(b []byte) error { @@ -678,7 +571,7 @@ func (m *BuildMetadata) Reset() { *m = BuildMetadata{} } func (m *BuildMetadata) String() string { return proto.CompactTextString(m) } func (*BuildMetadata) ProtoMessage() {} func (*BuildMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{6} + return fileDescriptor_4f2d38e344f9dbf5, []int{5} } func (m *BuildMetadata) XXX_Unmarshal(b []byte) error { @@ -739,7 +632,7 @@ func (m *BuildMetadata_Builder) Reset() { *m = BuildMetadata_Builder{} } func (m *BuildMetadata_Builder) String() string { return proto.CompactTextString(m) } func (*BuildMetadata_Builder) ProtoMessage() {} func (*BuildMetadata_Builder) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{6, 0} + return fileDescriptor_4f2d38e344f9dbf5, []int{5, 0} } func (m *BuildMetadata_Builder) XXX_Unmarshal(b []byte) error { @@ -786,7 +679,7 @@ func (m *DeployMetadata) Reset() { *m = DeployMetadata{} } func (m *DeployMetadata) String() string { return proto.CompactTextString(m) } func (*DeployMetadata) ProtoMessage() {} func (*DeployMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{7} + return fileDescriptor_4f2d38e344f9dbf5, []int{6} } func (m *DeployMetadata) XXX_Unmarshal(b []byte) error { @@ -824,7 +717,6 @@ func (m *DeployMetadata) GetCluster() ClusterType { type DeployMetadata_Deployer struct { Type DeployerType `protobuf:"varint,1,opt,name=type,proto3,enum=proto.DeployerType" json:"type,omitempty"` Count int32 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` - ChangeType ChangeType `protobuf:"varint,3,opt,name=changeType,proto3,enum=proto.ChangeType" json:"changeType,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -834,7 +726,7 @@ func (m *DeployMetadata_Deployer) Reset() { *m = DeployMetadata_Deployer func (m *DeployMetadata_Deployer) String() string { return proto.CompactTextString(m) } func (*DeployMetadata_Deployer) ProtoMessage() {} func (*DeployMetadata_Deployer) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{7, 0} + return fileDescriptor_4f2d38e344f9dbf5, []int{6, 0} } func (m *DeployMetadata_Deployer) XXX_Unmarshal(b []byte) error { @@ -869,13 +761,6 @@ func (m *DeployMetadata_Deployer) GetCount() int32 { return 0 } -func (m *DeployMetadata_Deployer) GetChangeType() ChangeType { - if m != nil { - return m.ChangeType - } - return ChangeType_INITIAL_LOOP -} - // `BuildState` maps Skaffold artifacts to their current build states type BuildState struct { // A map of `artifact name -> build-state`. @@ -895,7 +780,7 @@ func (m *BuildState) Reset() { *m = BuildState{} } func (m *BuildState) String() string { return proto.CompactTextString(m) } func (*BuildState) ProtoMessage() {} func (*BuildState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{8} + return fileDescriptor_4f2d38e344f9dbf5, []int{7} } func (m *BuildState) XXX_Unmarshal(b []byte) error { @@ -935,7 +820,7 @@ func (m *DeployState) Reset() { *m = DeployState{} } func (m *DeployState) String() string { return proto.CompactTextString(m) } func (*DeployState) ProtoMessage() {} func (*DeployState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{9} + return fileDescriptor_4f2d38e344f9dbf5, []int{8} } func (m *DeployState) XXX_Unmarshal(b []byte) error { @@ -982,7 +867,7 @@ func (m *StatusCheckState) Reset() { *m = StatusCheckState{} } func (m *StatusCheckState) String() string { return proto.CompactTextString(m) } func (*StatusCheckState) ProtoMessage() {} func (*StatusCheckState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{10} + return fileDescriptor_4f2d38e344f9dbf5, []int{9} } func (m *StatusCheckState) XXX_Unmarshal(b []byte) error { @@ -1029,7 +914,7 @@ func (m *FileSyncState) Reset() { *m = FileSyncState{} } func (m *FileSyncState) String() string { return proto.CompactTextString(m) } func (*FileSyncState) ProtoMessage() {} func (*FileSyncState) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{11} + return fileDescriptor_4f2d38e344f9dbf5, []int{10} } func (m *FileSyncState) XXX_Unmarshal(b []byte) error { @@ -1070,7 +955,6 @@ type Event struct { // *Event_FileSyncEvent // *Event_DebuggingContainerEvent // *Event_DevLoopEvent - // *Event_EndEvent EventType isEvent_EventType `protobuf_oneof:"event_type"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -1081,7 +965,7 @@ func (m *Event) Reset() { *m = Event{} } func (m *Event) String() string { return proto.CompactTextString(m) } func (*Event) ProtoMessage() {} func (*Event) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{12} + return fileDescriptor_4f2d38e344f9dbf5, []int{11} } func (m *Event) XXX_Unmarshal(b []byte) error { @@ -1142,10 +1026,6 @@ type Event_DevLoopEvent struct { DevLoopEvent *DevLoopEvent `protobuf:"bytes,9,opt,name=devLoopEvent,proto3,oneof"` } -type Event_EndEvent struct { - EndEvent *EndEvent `protobuf:"bytes,10,opt,name=endEvent,proto3,oneof"` -} - func (*Event_MetaEvent) isEvent_EventType() {} func (*Event_BuildEvent) isEvent_EventType() {} @@ -1164,8 +1044,6 @@ func (*Event_DebuggingContainerEvent) isEvent_EventType() {} func (*Event_DevLoopEvent) isEvent_EventType() {} -func (*Event_EndEvent) isEvent_EventType() {} - func (m *Event) GetEventType() isEvent_EventType { if m != nil { return m.EventType @@ -1236,13 +1114,6 @@ func (m *Event) GetDevLoopEvent() *DevLoopEvent { return nil } -func (m *Event) GetEndEvent() *EndEvent { - if x, ok := m.GetEventType().(*Event_EndEvent); ok { - return x.EndEvent - } - return nil -} - // XXX_OneofWrappers is for the internal use of the proto package. func (*Event) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -1255,72 +1126,14 @@ func (*Event) XXX_OneofWrappers() []interface{} { (*Event_FileSyncEvent)(nil), (*Event_DebuggingContainerEvent)(nil), (*Event_DevLoopEvent)(nil), - (*Event_EndEvent)(nil), - } -} - -// `EndEvent` is the last event indicating skaffold session ended. -type EndEvent struct { - ErrCode ErrorCode `protobuf:"varint,1,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - ErrMsg string `protobuf:"bytes,2,opt,name=errMsg,proto3" json:"errMsg,omitempty"` - Loops []*DevLoop `protobuf:"bytes,3,rep,name=loops,proto3" json:"loops,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *EndEvent) Reset() { *m = EndEvent{} } -func (m *EndEvent) String() string { return proto.CompactTextString(m) } -func (*EndEvent) ProtoMessage() {} -func (*EndEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{13} -} - -func (m *EndEvent) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_EndEvent.Unmarshal(m, b) -} -func (m *EndEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_EndEvent.Marshal(b, m, deterministic) -} -func (m *EndEvent) XXX_Merge(src proto.Message) { - xxx_messageInfo_EndEvent.Merge(m, src) -} -func (m *EndEvent) XXX_Size() int { - return xxx_messageInfo_EndEvent.Size(m) -} -func (m *EndEvent) XXX_DiscardUnknown() { - xxx_messageInfo_EndEvent.DiscardUnknown(m) -} - -var xxx_messageInfo_EndEvent proto.InternalMessageInfo - -func (m *EndEvent) GetErrCode() ErrorCode { - if m != nil { - return m.ErrCode - } - return ErrorCode_COULD_NOT_DETERMINE -} - -func (m *EndEvent) GetErrMsg() string { - if m != nil { - return m.ErrMsg } - return "" -} - -func (m *EndEvent) GetLoops() []*DevLoop { - if m != nil { - return m.Loops - } - return nil } // `DevLoopEvent` marks the start and end of a dev loop. type DevLoopEvent struct { Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` - ChangeType ChangeType `protobuf:"varint,2,opt,name=changeType,proto3,enum=proto.ChangeType" json:"changeType,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - Err *ActionableErr `protobuf:"bytes,4,opt,name=err,proto3" json:"err,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + Err *ActionableErr `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -1330,7 +1143,7 @@ func (m *DevLoopEvent) Reset() { *m = DevLoopEvent{} } func (m *DevLoopEvent) String() string { return proto.CompactTextString(m) } func (*DevLoopEvent) ProtoMessage() {} func (*DevLoopEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{14} + return fileDescriptor_4f2d38e344f9dbf5, []int{12} } func (m *DevLoopEvent) XXX_Unmarshal(b []byte) error { @@ -1358,13 +1171,6 @@ func (m *DevLoopEvent) GetIteration() int32 { return 0 } -func (m *DevLoopEvent) GetChangeType() ChangeType { - if m != nil { - return m.ChangeType - } - return ChangeType_INITIAL_LOOP -} - func (m *DevLoopEvent) GetStatus() string { if m != nil { return m.Status @@ -1393,7 +1199,7 @@ func (m *ActionableErr) Reset() { *m = ActionableErr{} } func (m *ActionableErr) String() string { return proto.CompactTextString(m) } func (*ActionableErr) ProtoMessage() {} func (*ActionableErr) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{15} + return fileDescriptor_4f2d38e344f9dbf5, []int{13} } func (m *ActionableErr) XXX_Unmarshal(b []byte) error { @@ -1450,7 +1256,7 @@ func (m *MetaEvent) Reset() { *m = MetaEvent{} } func (m *MetaEvent) String() string { return proto.CompactTextString(m) } func (*MetaEvent) ProtoMessage() {} func (*MetaEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{16} + return fileDescriptor_4f2d38e344f9dbf5, []int{14} } func (m *MetaEvent) XXX_Unmarshal(b []byte) error { @@ -1501,7 +1307,7 @@ func (m *BuildEvent) Reset() { *m = BuildEvent{} } func (m *BuildEvent) String() string { return proto.CompactTextString(m) } func (*BuildEvent) ProtoMessage() {} func (*BuildEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{17} + return fileDescriptor_4f2d38e344f9dbf5, []int{15} } func (m *BuildEvent) XXX_Unmarshal(b []byte) error { @@ -1565,7 +1371,7 @@ func (m *DeployEvent) Reset() { *m = DeployEvent{} } func (m *DeployEvent) String() string { return proto.CompactTextString(m) } func (*DeployEvent) ProtoMessage() {} func (*DeployEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{18} + return fileDescriptor_4f2d38e344f9dbf5, []int{16} } func (m *DeployEvent) XXX_Unmarshal(b []byte) error { @@ -1622,7 +1428,7 @@ func (m *StatusCheckEvent) Reset() { *m = StatusCheckEvent{} } func (m *StatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*StatusCheckEvent) ProtoMessage() {} func (*StatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{19} + return fileDescriptor_4f2d38e344f9dbf5, []int{17} } func (m *StatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1690,7 +1496,7 @@ func (m *ResourceStatusCheckEvent) Reset() { *m = ResourceStatusCheckEve func (m *ResourceStatusCheckEvent) String() string { return proto.CompactTextString(m) } func (*ResourceStatusCheckEvent) ProtoMessage() {} func (*ResourceStatusCheckEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{20} + return fileDescriptor_4f2d38e344f9dbf5, []int{18} } func (m *ResourceStatusCheckEvent) XXX_Unmarshal(b []byte) error { @@ -1759,7 +1565,7 @@ func (m *PortEvent) Reset() { *m = PortEvent{} } func (m *PortEvent) String() string { return proto.CompactTextString(m) } func (*PortEvent) ProtoMessage() {} func (*PortEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{21} + return fileDescriptor_4f2d38e344f9dbf5, []int{19} } func (m *PortEvent) XXX_Unmarshal(b []byte) error { @@ -1859,7 +1665,7 @@ func (m *FileSyncEvent) Reset() { *m = FileSyncEvent{} } func (m *FileSyncEvent) String() string { return proto.CompactTextString(m) } func (*FileSyncEvent) ProtoMessage() {} func (*FileSyncEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{22} + return fileDescriptor_4f2d38e344f9dbf5, []int{20} } func (m *FileSyncEvent) XXX_Unmarshal(b []byte) error { @@ -1934,7 +1740,7 @@ func (m *DebuggingContainerEvent) Reset() { *m = DebuggingContainerEvent func (m *DebuggingContainerEvent) String() string { return proto.CompactTextString(m) } func (*DebuggingContainerEvent) ProtoMessage() {} func (*DebuggingContainerEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{23} + return fileDescriptor_4f2d38e344f9dbf5, []int{21} } func (m *DebuggingContainerEvent) XXX_Unmarshal(b []byte) error { @@ -2025,7 +1831,7 @@ func (m *LogEntry) Reset() { *m = LogEntry{} } func (m *LogEntry) String() string { return proto.CompactTextString(m) } func (*LogEntry) ProtoMessage() {} func (*LogEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{24} + return fileDescriptor_4f2d38e344f9dbf5, []int{22} } func (m *LogEntry) XXX_Unmarshal(b []byte) error { @@ -2078,7 +1884,7 @@ func (m *UserIntentRequest) Reset() { *m = UserIntentRequest{} } func (m *UserIntentRequest) String() string { return proto.CompactTextString(m) } func (*UserIntentRequest) ProtoMessage() {} func (*UserIntentRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{25} + return fileDescriptor_4f2d38e344f9dbf5, []int{23} } func (m *UserIntentRequest) XXX_Unmarshal(b []byte) error { @@ -2120,7 +1926,7 @@ func (m *Intent) Reset() { *m = Intent{} } func (m *Intent) String() string { return proto.CompactTextString(m) } func (*Intent) ProtoMessage() {} func (*Intent) Descriptor() ([]byte, []int) { - return fileDescriptor_4f2d38e344f9dbf5, []int{26} + return fileDescriptor_4f2d38e344f9dbf5, []int{24} } func (m *Intent) XXX_Unmarshal(b []byte) error { @@ -2166,7 +1972,6 @@ func init() { proto.RegisterEnum("proto.BuilderType", BuilderType_name, BuilderType_value) proto.RegisterEnum("proto.BuildType", BuildType_name, BuildType_value) proto.RegisterEnum("proto.DeployerType", DeployerType_name, DeployerType_value) - proto.RegisterEnum("proto.ChangeType", ChangeType_name, ChangeType_value) proto.RegisterEnum("proto.ClusterType", ClusterType_name, ClusterType_value) proto.RegisterEnum("proto.ErrorCode", ErrorCode_name, ErrorCode_value) proto.RegisterType((*StateResponse)(nil), "proto.StateResponse") @@ -2174,7 +1979,6 @@ func init() { proto.RegisterType((*Request)(nil), "proto.Request") proto.RegisterType((*State)(nil), "proto.State") proto.RegisterMapType((map[int32]*PortEvent)(nil), "proto.State.ForwardedPortsEntry") - proto.RegisterType((*DevLoop)(nil), "proto.DevLoop") proto.RegisterType((*Metadata)(nil), "proto.Metadata") proto.RegisterMapType((map[string]string)(nil), "proto.Metadata.AdditionalEntry") proto.RegisterType((*BuildMetadata)(nil), "proto.BuildMetadata") @@ -2189,7 +1993,6 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "proto.StatusCheckState.ResourcesEntry") proto.RegisterType((*FileSyncState)(nil), "proto.FileSyncState") proto.RegisterType((*Event)(nil), "proto.Event") - proto.RegisterType((*EndEvent)(nil), "proto.EndEvent") proto.RegisterType((*DevLoopEvent)(nil), "proto.DevLoopEvent") proto.RegisterType((*ActionableErr)(nil), "proto.ActionableErr") proto.RegisterType((*MetaEvent)(nil), "proto.MetaEvent") @@ -2209,154 +2012,145 @@ func init() { func init() { proto.RegisterFile("skaffold.proto", fileDescriptor_4f2d38e344f9dbf5) } var fileDescriptor_4f2d38e344f9dbf5 = []byte{ - // 2337 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x8f, 0x1b, 0x49, - 0x15, 0x4f, 0xbb, 0xdd, 0xfe, 0x78, 0xf3, 0x91, 0x9e, 0xca, 0x24, 0xf1, 0x3a, 0x93, 0x0f, 0x9a, - 0x64, 0x12, 0xcd, 0xee, 0xce, 0x64, 0x13, 0x84, 0x42, 0x14, 0x40, 0x9e, 0x76, 0x67, 0xa6, 0x63, - 0x8f, 0x3d, 0xaa, 0xb6, 0x37, 0x24, 0x12, 0xb2, 0x7a, 0xec, 0x1a, 0xc7, 0x8a, 0xed, 0x36, 0xdd, - 0xed, 0x84, 0x41, 0x68, 0x0f, 0x7b, 0xe0, 0xc0, 0x29, 0xb0, 0xb0, 0x12, 0x27, 0x4e, 0xdc, 0x60, - 0xf9, 0x03, 0x10, 0x1f, 0x47, 0xee, 0x9c, 0xb8, 0x2f, 0x27, 0xae, 0x7c, 0x89, 0x13, 0xaa, 0xaf, - 0x76, 0xb7, 0x3f, 0x66, 0x88, 0x76, 0x4f, 0x76, 0xd5, 0xfb, 0xd5, 0xef, 0xbd, 0x7a, 0xef, 0xd5, - 0x7b, 0x55, 0x0d, 0xab, 0xc1, 0x4b, 0xf7, 0xf8, 0xd8, 0xeb, 0x77, 0xb6, 0x47, 0xbe, 0x17, 0x7a, - 0x48, 0x63, 0x3f, 0xc5, 0x8d, 0xae, 0xe7, 0x75, 0xfb, 0x64, 0xc7, 0x1d, 0xf5, 0x76, 0xdc, 0xe1, - 0xd0, 0x0b, 0xdd, 0xb0, 0xe7, 0x0d, 0x03, 0x0e, 0x2a, 0x5e, 0x17, 0x52, 0x36, 0x3a, 0x1a, 0x1f, - 0xef, 0x84, 0xbd, 0x01, 0x09, 0x42, 0x77, 0x30, 0x12, 0x80, 0x2b, 0xd3, 0x00, 0x32, 0x18, 0x85, - 0x27, 0x5c, 0x68, 0xdc, 0x87, 0x15, 0x27, 0x74, 0x43, 0x82, 0x49, 0x30, 0xf2, 0x86, 0x01, 0x41, - 0x06, 0x68, 0x01, 0x9d, 0x28, 0x28, 0x37, 0x94, 0x3b, 0x4b, 0xf7, 0x96, 0x39, 0x6e, 0x9b, 0x83, - 0xb8, 0xc8, 0xd8, 0x80, 0x5c, 0x84, 0xd7, 0x41, 0x1d, 0x04, 0x5d, 0x86, 0xce, 0x63, 0xfa, 0xd7, - 0xb8, 0x0a, 0x59, 0x4c, 0xbe, 0x37, 0x26, 0x41, 0x88, 0x10, 0xa4, 0x87, 0xee, 0x80, 0x08, 0x29, - 0xfb, 0x6f, 0xfc, 0x2e, 0x0d, 0x1a, 0x63, 0x43, 0x1f, 0x00, 0x1c, 0x8d, 0x7b, 0xfd, 0x8e, 0x13, - 0xd3, 0xb7, 0x26, 0xf4, 0xed, 0x46, 0x02, 0x1c, 0x03, 0xa1, 0xaf, 0xc1, 0x52, 0x87, 0x8c, 0xfa, - 0xde, 0x09, 0x5f, 0x93, 0x62, 0x6b, 0x90, 0x58, 0x53, 0x9e, 0x48, 0x70, 0x1c, 0x86, 0xf6, 0x61, - 0xf5, 0xd8, 0xf3, 0x5f, 0xbb, 0x7e, 0x87, 0x74, 0x0e, 0x3d, 0x3f, 0x0c, 0x0a, 0xe9, 0x1b, 0xea, - 0x9d, 0xa5, 0x7b, 0x37, 0xe2, 0x9b, 0xdb, 0x7e, 0x9c, 0x80, 0x58, 0xc3, 0xd0, 0x3f, 0xc1, 0x53, - 0xeb, 0x90, 0x09, 0x3a, 0x75, 0xc1, 0x38, 0x30, 0x5f, 0x90, 0xf6, 0x4b, 0x6e, 0x84, 0xc6, 0x8c, - 0xb8, 0x1c, 0xe3, 0x8a, 0x8b, 0xf1, 0xcc, 0x02, 0xf4, 0x10, 0x56, 0x8e, 0x7b, 0x7d, 0xe2, 0x9c, - 0x0c, 0xdb, 0x9c, 0x21, 0xc3, 0x18, 0xd6, 0x05, 0xc3, 0xe3, 0xb8, 0x0c, 0x27, 0xa1, 0xe8, 0x10, - 0x2e, 0x74, 0xc8, 0xd1, 0xb8, 0xdb, 0xed, 0x0d, 0xbb, 0xa6, 0x37, 0x0c, 0xdd, 0xde, 0x90, 0xf8, - 0x41, 0x21, 0xcb, 0xf6, 0x73, 0x2d, 0x72, 0xc4, 0x34, 0xc2, 0x7a, 0x45, 0x86, 0x21, 0x9e, 0xb7, - 0x14, 0xbd, 0x0b, 0xb9, 0x01, 0x09, 0xdd, 0x8e, 0x1b, 0xba, 0x85, 0x1c, 0x33, 0xe4, 0xbc, 0xa0, - 0x39, 0x10, 0xd3, 0x38, 0x02, 0xa0, 0x9b, 0xa0, 0xf5, 0x3d, 0x6f, 0x14, 0x14, 0xf2, 0x4c, 0xe1, - 0x6a, 0xa4, 0xf0, 0x55, 0xd5, 0xf3, 0x46, 0x98, 0x0b, 0x8b, 0x0e, 0x5c, 0x98, 0xe3, 0x4c, 0x9a, - 0x2a, 0x2f, 0xc9, 0x09, 0x0b, 0xb4, 0x86, 0xe9, 0x5f, 0xb4, 0x09, 0xda, 0x2b, 0xb7, 0x3f, 0x96, - 0x81, 0xd4, 0x05, 0x1d, 0x5d, 0xc3, 0x2d, 0xe6, 0xe2, 0x87, 0xa9, 0x07, 0xca, 0x93, 0x74, 0x4e, - 0xd5, 0xd3, 0xc6, 0x8f, 0x14, 0xc8, 0x0a, 0x6d, 0x68, 0x03, 0xf2, 0xbd, 0x90, 0xf8, 0xec, 0x34, - 0x08, 0xd6, 0xc9, 0x04, 0xcd, 0xae, 0xf6, 0x0b, 0x77, 0xd8, 0x25, 0x8d, 0x93, 0x11, 0x57, 0xb0, - 0x1a, 0x65, 0x97, 0x19, 0x09, 0x70, 0x0c, 0x84, 0xb6, 0x20, 0x4b, 0x7c, 0xdf, 0xf4, 0x3a, 0xa4, - 0xa0, 0x32, 0xbc, 0x34, 0xc8, 0xf2, 0x7d, 0x8f, 0xcd, 0x63, 0x09, 0x30, 0xfe, 0xa6, 0x40, 0x4e, - 0x3a, 0x08, 0x6d, 0x81, 0xc6, 0x92, 0x54, 0x24, 0xf1, 0x7a, 0x3c, 0x89, 0x23, 0x2f, 0x72, 0x08, - 0x7a, 0x1f, 0x32, 0x3c, 0x37, 0xc5, 0xa6, 0x2f, 0x26, 0xb2, 0x37, 0x42, 0x0b, 0x10, 0xfa, 0x36, - 0x80, 0xdb, 0xe9, 0xf4, 0xe8, 0x96, 0xdc, 0x7e, 0xa1, 0xcd, 0xdc, 0x7e, 0x7d, 0x2a, 0x40, 0xdb, - 0xa5, 0x08, 0xc1, 0xd3, 0x36, 0xb6, 0xa4, 0xf8, 0x4d, 0x38, 0x3f, 0x25, 0x8e, 0x07, 0x22, 0xcf, - 0x03, 0xb1, 0x1e, 0x0f, 0x44, 0x3e, 0xe6, 0x76, 0xe3, 0xef, 0x29, 0x58, 0x49, 0xec, 0x03, 0xbd, - 0x07, 0x6b, 0xc3, 0xf1, 0xe0, 0x88, 0xf8, 0xf5, 0xe3, 0x92, 0x1f, 0xf6, 0x8e, 0xdd, 0x76, 0x18, - 0x08, 0xf7, 0xcf, 0x0a, 0xd0, 0x03, 0xc8, 0xb1, 0x7d, 0xd3, 0x2c, 0x4d, 0x31, 0xeb, 0x37, 0xe6, - 0x79, 0x87, 0x8f, 0x88, 0x8f, 0x23, 0x34, 0xba, 0x09, 0xe9, 0x90, 0x86, 0x2e, 0x19, 0x0a, 0x86, - 0x63, 0x91, 0x63, 0x52, 0x54, 0x9e, 0xe3, 0x9f, 0x9b, 0x73, 0x35, 0x9c, 0xe6, 0xa4, 0x3d, 0xc8, - 0x0a, 0x03, 0xd0, 0xa6, 0x50, 0xab, 0x30, 0xb5, 0x28, 0x4e, 0x45, 0xfc, 0x98, 0xe2, 0x75, 0xd0, - 0xda, 0xde, 0x78, 0x18, 0x32, 0x97, 0x69, 0x98, 0x0f, 0xbe, 0xa8, 0xb7, 0xff, 0xab, 0xc0, 0x6a, - 0x32, 0x11, 0xd0, 0x23, 0xc8, 0xf3, 0x54, 0xa0, 0x1e, 0x54, 0xa6, 0xce, 0x79, 0x1c, 0x29, 0x86, - 0xc4, 0xc7, 0x93, 0x05, 0xe8, 0x3d, 0xc8, 0xb6, 0xfb, 0xe3, 0x20, 0x24, 0xbe, 0x38, 0x02, 0x72, - 0x43, 0x26, 0x9f, 0x65, 0x1b, 0x92, 0x90, 0xe2, 0x0f, 0x21, 0x27, 0x49, 0xd0, 0xed, 0x84, 0x1f, - 0x2e, 0x24, 0x54, 0x9e, 0xed, 0x88, 0xa9, 0xe3, 0xa7, 0xfe, 0x1f, 0xc7, 0xcf, 0xf8, 0xb1, 0x02, - 0x30, 0xa9, 0xfb, 0xe8, 0x5b, 0x90, 0x77, 0x63, 0xf9, 0x15, 0x2f, 0xd8, 0x13, 0xd4, 0x76, 0x94, - 0x69, 0x3c, 0xa8, 0x93, 0x25, 0xc5, 0x47, 0xb0, 0x9a, 0x14, 0xbe, 0x55, 0x24, 0x6e, 0xc1, 0x52, - 0xac, 0x9f, 0xa0, 0x4b, 0x90, 0xe1, 0x75, 0x5c, 0xac, 0x16, 0x23, 0xe3, 0x33, 0x05, 0xf4, 0xe9, - 0x92, 0xbf, 0x08, 0x8c, 0xca, 0x90, 0xf7, 0x49, 0xe0, 0x8d, 0xfd, 0x36, 0x91, 0x87, 0x61, 0x73, - 0x41, 0xdb, 0xd8, 0xc6, 0x12, 0x28, 0xf6, 0x15, 0x2d, 0xa4, 0xfb, 0x4a, 0x0a, 0xdf, 0x6a, 0x5f, - 0xb7, 0x61, 0x25, 0xd1, 0x60, 0x16, 0xee, 0xec, 0x8d, 0x06, 0x1a, 0x2b, 0xc2, 0xe8, 0x2e, 0xe4, - 0x69, 0x03, 0x60, 0x03, 0x51, 0xe1, 0xf4, 0x58, 0x05, 0x62, 0xf3, 0xfb, 0xe7, 0xf0, 0x04, 0x84, - 0xee, 0x8b, 0xce, 0xce, 0x97, 0xa4, 0x66, 0x3b, 0xbb, 0x5c, 0x13, 0x83, 0xa1, 0xaf, 0xcb, 0xde, - 0xce, 0x57, 0xa9, 0x73, 0x7a, 0xbb, 0x5c, 0x16, 0x07, 0x52, 0xf3, 0x46, 0xb2, 0x61, 0x14, 0xd2, - 0xf3, 0x1b, 0x09, 0x35, 0x2f, 0x02, 0x21, 0x2b, 0xd1, 0xc5, 0xf9, 0xc2, 0x85, 0x5d, 0x5c, 0xae, - 0x9f, 0x59, 0x82, 0xbe, 0x0b, 0x05, 0x19, 0x95, 0x69, 0xbc, 0x68, 0xe9, 0xb2, 0x50, 0xe3, 0x05, - 0xb0, 0xfd, 0x73, 0x78, 0x21, 0x05, 0x7a, 0x34, 0xb9, 0x26, 0x70, 0xce, 0xec, 0xdc, 0x6b, 0x82, - 0x24, 0x4a, 0x82, 0xd1, 0x73, 0xb8, 0xdc, 0x99, 0x7f, 0x0d, 0x10, 0x5d, 0xfe, 0x8c, 0xcb, 0xc2, - 0xfe, 0x39, 0xbc, 0x88, 0x00, 0x7d, 0x03, 0x96, 0x3b, 0xbc, 0x07, 0x73, 0xc2, 0x3c, 0x23, 0xbc, - 0x90, 0xbc, 0x0c, 0x48, 0x96, 0x04, 0x14, 0xbd, 0x0f, 0x39, 0x32, 0x14, 0x79, 0x01, 0x89, 0xdb, - 0x86, 0x35, 0x8c, 0xb2, 0x22, 0x82, 0xec, 0x2e, 0x03, 0x10, 0xfa, 0xa7, 0x45, 0x2b, 0x8d, 0x11, - 0x42, 0x4e, 0xa2, 0xe2, 0xbd, 0x5a, 0x39, 0xa3, 0x57, 0xd3, 0x14, 0x27, 0xbe, 0x7f, 0x10, 0x74, - 0xc5, 0x71, 0x10, 0xa3, 0xc9, 0x6d, 0x46, 0x3d, 0xe5, 0x36, 0x63, 0xfc, 0x52, 0x81, 0xe5, 0xf8, - 0x9e, 0xbe, 0xfc, 0x7b, 0xc7, 0xe4, 0x08, 0xaa, 0x89, 0x7a, 0xb1, 0x09, 0x2a, 0xf1, 0x7d, 0x91, - 0xd3, 0x32, 0xee, 0xa5, 0x36, 0x6b, 0x2e, 0x47, 0x7d, 0x62, 0xf9, 0x3e, 0xa6, 0x00, 0xe3, 0x35, - 0xac, 0x24, 0x66, 0xdf, 0xca, 0x39, 0x05, 0xc8, 0x0e, 0x48, 0x10, 0xb8, 0x5d, 0x59, 0x2c, 0xe4, - 0x10, 0xdd, 0x80, 0xa5, 0x60, 0xdc, 0xed, 0x92, 0x80, 0x3d, 0x37, 0x98, 0x93, 0xf2, 0x38, 0x3e, - 0x65, 0xd4, 0x20, 0x1f, 0x55, 0x00, 0x5a, 0x73, 0x08, 0x2d, 0x47, 0xa2, 0x8e, 0xf0, 0x41, 0xe2, - 0x7a, 0x99, 0x3a, 0xe3, 0x7a, 0x69, 0x7c, 0x24, 0x1a, 0x00, 0x27, 0x2c, 0x42, 0x4e, 0x56, 0x73, - 0xc1, 0x19, 0x8d, 0x63, 0x2e, 0x4b, 0x25, 0x5c, 0xa6, 0x73, 0x97, 0x71, 0x3f, 0xd2, 0xbf, 0x71, - 0x5f, 0xa4, 0xcf, 0xba, 0xd4, 0xb5, 0x65, 0xd1, 0xe7, 0x06, 0x2c, 0xaa, 0xe3, 0x42, 0x49, 0x6a, - 0xae, 0x92, 0x33, 0x6f, 0x8e, 0x1f, 0x27, 0x5b, 0xc6, 0xe9, 0xaa, 0x16, 0x47, 0xe7, 0x8b, 0xed, - 0xf4, 0x07, 0x50, 0x58, 0x54, 0x94, 0xa8, 0xdf, 0x65, 0x51, 0x92, 0x7e, 0x97, 0xe3, 0x85, 0x7e, - 0x8f, 0xd9, 0xa9, 0xce, 0xb5, 0x33, 0x1d, 0xd9, 0x69, 0xfc, 0x2a, 0x05, 0xf9, 0xa8, 0x32, 0xd3, - 0xd3, 0xd4, 0xf7, 0xda, 0x6e, 0x9f, 0xce, 0xc8, 0xd3, 0x14, 0x4d, 0xa0, 0x6b, 0x00, 0x3e, 0x19, - 0x78, 0x21, 0x61, 0x62, 0x7e, 0xc3, 0x88, 0xcd, 0x50, 0xbd, 0x23, 0xaf, 0x53, 0xa3, 0x8f, 0x4c, - 0xa1, 0x57, 0x0c, 0xd1, 0x4d, 0x58, 0x69, 0xcb, 0xb2, 0xc5, 0xe4, 0xdc, 0x82, 0xe4, 0x24, 0xd5, - 0x4e, 0x5f, 0xa5, 0xc1, 0xc8, 0x6d, 0xf3, 0x97, 0x5c, 0x1e, 0x4f, 0x26, 0xa8, 0x27, 0x68, 0xd7, - 0x60, 0xcb, 0x33, 0xdc, 0x13, 0x72, 0x8c, 0x0c, 0x58, 0x96, 0x5e, 0x61, 0x27, 0x3d, 0xcb, 0xe4, - 0x89, 0xb9, 0x38, 0x86, 0x71, 0xe4, 0x92, 0x18, 0xc6, 0x53, 0x80, 0xac, 0xdb, 0xe9, 0xf8, 0x24, - 0x08, 0x58, 0x1d, 0xcd, 0x63, 0x39, 0x34, 0x7e, 0xa1, 0x4c, 0x7a, 0x75, 0xe4, 0x2b, 0x5a, 0xe5, - 0x4d, 0x76, 0xdd, 0x12, 0xbe, 0x8a, 0x26, 0xe8, 0x01, 0xec, 0x0d, 0x26, 0x99, 0xc2, 0x07, 0x0b, - 0x8b, 0xcb, 0x4c, 0x5c, 0xe2, 0xf9, 0xa3, 0x9d, 0x95, 0x3f, 0xff, 0x48, 0xc1, 0xe5, 0x05, 0x9d, - 0xe3, 0xb4, 0x5c, 0x96, 0xb1, 0x4a, 0x9d, 0x11, 0x2b, 0xf5, 0xcc, 0x58, 0xa5, 0xe7, 0xc4, 0x2a, - 0xaa, 0x16, 0xda, 0x54, 0xb5, 0x28, 0x40, 0xd6, 0x1f, 0x0f, 0xc3, 0x5e, 0x14, 0x46, 0x39, 0xa4, - 0xf9, 0xf5, 0xda, 0xf3, 0x5f, 0xf6, 0x86, 0xdd, 0x72, 0xcf, 0x17, 0x31, 0x8c, 0xcd, 0xa0, 0x1a, - 0x00, 0xeb, 0x82, 0xfc, 0xb3, 0x41, 0x8e, 0xf5, 0x89, 0xed, 0xd3, 0x3b, 0x27, 0x9f, 0x8f, 0x7d, - 0x44, 0x88, 0x31, 0xd0, 0xf7, 0xc1, 0x94, 0xf8, 0xac, 0xdb, 0xdb, 0x4a, 0xfc, 0xf6, 0xf6, 0x11, - 0xe4, 0xaa, 0x5e, 0x97, 0xaf, 0x7b, 0x00, 0xf9, 0xe8, 0x53, 0x8f, 0xb8, 0x96, 0x15, 0xb7, 0xf9, - 0xb7, 0x9e, 0x6d, 0xf9, 0xad, 0x67, 0xbb, 0x21, 0x11, 0x78, 0x02, 0x46, 0x06, 0x68, 0x24, 0x76, - 0x33, 0x93, 0xdf, 0x78, 0xc4, 0x93, 0x9b, 0x24, 0xab, 0xb9, 0x1a, 0xab, 0xe6, 0xc6, 0x43, 0x58, - 0x6b, 0x06, 0xc4, 0xb7, 0x87, 0x21, 0x85, 0x8a, 0xaf, 0x3c, 0xb7, 0x20, 0xd3, 0x63, 0x13, 0xc2, - 0x8a, 0x15, 0xc1, 0x27, 0x50, 0x42, 0x68, 0x3c, 0x81, 0x0c, 0x9f, 0xa1, 0xdc, 0x93, 0xe7, 0x72, - 0x4e, 0x3e, 0x8c, 0x11, 0xa4, 0x83, 0x93, 0x61, 0x9b, 0x19, 0x95, 0xc3, 0xec, 0x3f, 0x4d, 0x25, - 0xf1, 0x58, 0x56, 0xd9, 0xac, 0x18, 0x6d, 0x79, 0xb0, 0x14, 0x7b, 0x91, 0xa1, 0x02, 0xac, 0x37, - 0x6b, 0x95, 0x5a, 0xfd, 0x69, 0xad, 0xb5, 0xdb, 0xb4, 0xab, 0x65, 0x0b, 0xb7, 0x1a, 0xcf, 0x0e, - 0x2d, 0xfd, 0x1c, 0xca, 0x82, 0xfa, 0xc4, 0xde, 0xd5, 0x15, 0x94, 0x07, 0x6d, 0xb7, 0xf4, 0xdc, - 0xaa, 0xea, 0x29, 0xb4, 0x0a, 0xc0, 0x50, 0x87, 0x25, 0xb3, 0xe2, 0xe8, 0x2a, 0x02, 0xc8, 0x98, - 0x4d, 0xa7, 0x51, 0x3f, 0xd0, 0xd3, 0xf4, 0x7f, 0xa5, 0x54, 0xb3, 0x2b, 0x75, 0x5d, 0xa3, 0xff, - 0xcb, 0x75, 0xb3, 0x62, 0x61, 0x3d, 0xb3, 0x55, 0x86, 0x7c, 0xf4, 0xf2, 0x44, 0x97, 0x00, 0x25, - 0xd4, 0x49, 0x65, 0x4b, 0x90, 0x35, 0xab, 0x4d, 0xa7, 0x61, 0x61, 0x5d, 0xa1, 0x9a, 0xf7, 0xcc, - 0x5d, 0x3d, 0x45, 0x35, 0x57, 0xeb, 0x66, 0xa9, 0xaa, 0xab, 0x5b, 0x75, 0x7a, 0x93, 0x98, 0x3c, - 0xa0, 0xd0, 0x3b, 0x70, 0x51, 0x12, 0x95, 0xad, 0xc3, 0x6a, 0xfd, 0xd9, 0xc4, 0xf0, 0x1c, 0xa4, - 0xf7, 0xad, 0xea, 0x81, 0xae, 0xa0, 0x15, 0xc8, 0x57, 0x98, 0x79, 0xf6, 0x73, 0x4b, 0x4f, 0x51, - 0x25, 0x95, 0xe6, 0xae, 0x65, 0x36, 0x28, 0x61, 0x13, 0x60, 0x72, 0xa7, 0x40, 0x3a, 0x2c, 0xdb, - 0x35, 0xbb, 0x61, 0x97, 0xaa, 0xad, 0x6a, 0xbd, 0x7e, 0xa8, 0x9f, 0x63, 0xbb, 0xa6, 0x16, 0xea, - 0x0a, 0x25, 0x6c, 0x58, 0x4e, 0x43, 0x4f, 0xb1, 0x7d, 0x31, 0x6d, 0x62, 0xef, 0xf5, 0xda, 0x63, - 0x7b, 0x4f, 0x4f, 0x53, 0x84, 0xf3, 0xac, 0x66, 0xea, 0xda, 0x96, 0x0d, 0x4b, 0xb1, 0xf7, 0x61, - 0xdc, 0xbd, 0x62, 0x7f, 0xd2, 0xca, 0x65, 0xc8, 0x1d, 0xd8, 0x35, 0x9b, 0x1a, 0x24, 0xb6, 0x5c, - 0xb1, 0xf8, 0x96, 0xeb, 0x8d, 0x7d, 0x0b, 0xeb, 0xea, 0xd6, 0xa7, 0x19, 0xc8, 0x47, 0xf5, 0x03, - 0x5d, 0x86, 0x0b, 0x66, 0xbd, 0x59, 0x2d, 0xb7, 0x6a, 0xf5, 0x46, 0xab, 0x6c, 0x35, 0x2c, 0x7c, - 0x60, 0xd7, 0x38, 0x51, 0xd6, 0x69, 0x9a, 0xa6, 0xe5, 0x38, 0xfa, 0x9f, 0x15, 0x74, 0x03, 0xae, - 0x38, 0x8d, 0x52, 0xa3, 0xe9, 0xb4, 0xcc, 0x7d, 0xcb, 0xac, 0xb4, 0xec, 0x83, 0xd2, 0x9e, 0xd5, - 0x3a, 0x6c, 0x56, 0xab, 0x2d, 0x0b, 0x63, 0xfd, 0xd7, 0x29, 0x74, 0x13, 0xae, 0x27, 0x10, 0x66, - 0xbd, 0xd6, 0x28, 0xd9, 0x35, 0x0b, 0xb7, 0x4c, 0x6c, 0x95, 0x1a, 0x76, 0x6d, 0x4f, 0xff, 0x4d, - 0x0a, 0x7d, 0x15, 0xae, 0x25, 0x50, 0xb8, 0x59, 0x8b, 0x21, 0x29, 0xd5, 0x67, 0x29, 0xb4, 0x09, - 0x5f, 0x59, 0x40, 0xc5, 0xcd, 0x2b, 0x35, 0xac, 0xb2, 0xfe, 0xdb, 0xd3, 0x70, 0xd8, 0x72, 0x1a, - 0x25, 0xcc, 0x94, 0x7e, 0x3e, 0x8b, 0xab, 0xd5, 0xcb, 0x56, 0xeb, 0xc0, 0x3a, 0xa8, 0xe3, 0x67, - 0xad, 0x43, 0x6c, 0x39, 0x4e, 0x13, 0x5b, 0xfa, 0x1b, 0x75, 0x66, 0x0b, 0x0c, 0x57, 0xb6, 0x9d, - 0xca, 0x04, 0xf5, 0x13, 0x15, 0x6d, 0xc1, 0xad, 0x59, 0x54, 0xcd, 0x6a, 0x3c, 0xad, 0xe3, 0x4a, - 0xab, 0x59, 0x2b, 0x7d, 0x58, 0xb2, 0xab, 0xa5, 0xdd, 0xaa, 0xa5, 0xff, 0x54, 0x9d, 0xd9, 0x2e, - 0xc3, 0x1e, 0xda, 0xe5, 0x09, 0xe1, 0x27, 0x0b, 0xd4, 0x36, 0x6b, 0x8e, 0xb9, 0x6f, 0x95, 0x9b, - 0x9c, 0xea, 0x67, 0x2a, 0x32, 0xe0, 0xea, 0x3c, 0x14, 0xb6, 0x4a, 0xe6, 0x3e, 0xc3, 0xfc, 0x5c, - 0x9d, 0x89, 0x12, 0x37, 0xad, 0xde, 0x68, 0x61, 0xab, 0x54, 0x7e, 0xa6, 0x7f, 0xaa, 0xa2, 0x4b, - 0xb0, 0x16, 0xc5, 0xbe, 0x25, 0x52, 0x48, 0xff, 0xa7, 0x8a, 0xde, 0x81, 0xf5, 0xc4, 0x4a, 0x29, - 0xfa, 0x97, 0x8a, 0x6e, 0x83, 0x31, 0x4f, 0x34, 0x65, 0xe1, 0xbf, 0x55, 0xf4, 0x2e, 0x6c, 0x2e, - 0x08, 0xc7, 0xd3, 0x92, 0x4d, 0x63, 0x11, 0xb1, 0xfe, 0x87, 0x29, 0x7c, 0x6c, 0x57, 0xad, 0x16, - 0xcd, 0xef, 0x16, 0x3d, 0x23, 0x34, 0xf8, 0x75, 0xac, 0xff, 0x35, 0x8d, 0x36, 0xe0, 0x72, 0xd9, - 0xfa, 0xb0, 0x85, 0xad, 0x3d, 0x9b, 0x65, 0x36, 0x3f, 0xd1, 0x65, 0xeb, 0xd0, 0xd1, 0x7f, 0xaf, - 0xa1, 0x2b, 0x70, 0x29, 0x21, 0xa5, 0x47, 0x88, 0x0b, 0xff, 0xa0, 0xa1, 0xab, 0x50, 0x48, 0x08, - 0xf9, 0xa9, 0xe2, 0xe2, 0x3f, 0x6a, 0x33, 0xcc, 0xfc, 0xa0, 0x51, 0xb1, 0xfe, 0x27, 0xed, 0xde, - 0x1b, 0x15, 0xce, 0x3b, 0xe2, 0x7b, 0xbf, 0x43, 0xfc, 0x57, 0xbd, 0x36, 0x41, 0x26, 0xe4, 0xf6, - 0x48, 0x28, 0xde, 0xe5, 0x33, 0xb5, 0xdc, 0x1a, 0x8c, 0xc2, 0x93, 0x62, 0xe2, 0x8b, 0xbc, 0xb1, - 0xf6, 0xf1, 0x5f, 0x3e, 0xff, 0x24, 0xb5, 0x84, 0xf2, 0x3b, 0xaf, 0x3e, 0xd8, 0x61, 0x5f, 0xe7, - 0xd1, 0x1e, 0xe4, 0x58, 0x25, 0xaf, 0x7a, 0x5d, 0x24, 0xef, 0xda, 0xb2, 0x69, 0x14, 0xa7, 0x27, - 0x8c, 0x8b, 0x8c, 0xe0, 0x3c, 0x5a, 0xa1, 0x04, 0xfc, 0xad, 0xd5, 0xf7, 0xba, 0x77, 0x94, 0xbb, - 0x0a, 0xda, 0x83, 0x0c, 0x23, 0x0a, 0x16, 0xda, 0x32, 0xc3, 0x86, 0x18, 0xdb, 0x32, 0x82, 0x88, - 0x2d, 0xb8, 0xab, 0xa0, 0xef, 0x40, 0xd6, 0xfa, 0x3e, 0x69, 0x8f, 0x43, 0x82, 0x0a, 0x62, 0xc5, - 0x4c, 0x17, 0x29, 0x2e, 0xd0, 0x61, 0x5c, 0x61, 0x94, 0x17, 0x8d, 0x25, 0x46, 0xc9, 0x69, 0x1e, - 0x8a, 0x9e, 0x82, 0xaa, 0x90, 0xd9, 0x77, 0x87, 0x9d, 0x3e, 0x41, 0x89, 0x26, 0xb6, 0x90, 0x6c, - 0x83, 0x91, 0x5d, 0x32, 0xd6, 0x26, 0xf6, 0xed, 0xbc, 0x60, 0x04, 0x0f, 0x95, 0xad, 0xa3, 0x0c, - 0x43, 0xdf, 0xff, 0x5f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x87, 0x47, 0xad, 0x88, 0x19, 0x00, - 0x00, + // 2194 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, + 0x11, 0x36, 0x39, 0x7c, 0x4d, 0xe9, 0xe1, 0x51, 0x5b, 0xb6, 0xb9, 0xb4, 0x6c, 0x2b, 0x13, 0x5b, + 0x36, 0xb4, 0x1b, 0xc9, 0x6b, 0x07, 0x81, 0x63, 0x38, 0x09, 0xa8, 0xe1, 0x58, 0x1c, 0x93, 0x1a, + 0x0a, 0x4d, 0x72, 0x1d, 0x1b, 0x08, 0x88, 0x11, 0xd9, 0xe2, 0x12, 0x26, 0x39, 0xcc, 0xcc, 0xd0, + 0x8e, 0x72, 0xd8, 0xc3, 0x1e, 0x73, 0xda, 0x64, 0xb3, 0x01, 0x72, 0x4f, 0x6e, 0xc9, 0xe6, 0x17, + 0xe4, 0x71, 0x4b, 0xee, 0x39, 0xe5, 0x18, 0x60, 0x73, 0xca, 0x35, 0xaf, 0x63, 0xd0, 0xaf, 0x79, + 0xf0, 0x21, 0x61, 0xb1, 0x27, 0xb2, 0xab, 0xbe, 0xfa, 0xaa, 0xba, 0xba, 0xba, 0xba, 0x7b, 0x60, + 0xdd, 0x7f, 0xed, 0x9c, 0x9e, 0xba, 0xc3, 0xde, 0xde, 0xc4, 0x73, 0x03, 0x17, 0x65, 0xd9, 0x4f, + 0x69, 0xab, 0xef, 0xba, 0xfd, 0x21, 0xd9, 0x77, 0x26, 0x83, 0x7d, 0x67, 0x3c, 0x76, 0x03, 0x27, + 0x18, 0xb8, 0x63, 0x9f, 0x83, 0x4a, 0xb7, 0x85, 0x96, 0x8d, 0x4e, 0xa6, 0xa7, 0xfb, 0xc1, 0x60, + 0x44, 0xfc, 0xc0, 0x19, 0x4d, 0x04, 0xe0, 0xc6, 0x2c, 0x80, 0x8c, 0x26, 0xc1, 0x19, 0x57, 0xea, + 0x8f, 0x60, 0xad, 0x19, 0x38, 0x01, 0xc1, 0xc4, 0x9f, 0xb8, 0x63, 0x9f, 0x20, 0x1d, 0xb2, 0x3e, + 0x15, 0x14, 0x53, 0xdb, 0xa9, 0xfb, 0x2b, 0x0f, 0x57, 0x39, 0x6e, 0x8f, 0x83, 0xb8, 0x4a, 0xdf, + 0x82, 0x42, 0x88, 0xd7, 0x40, 0x19, 0xf9, 0x7d, 0x86, 0x56, 0x31, 0xfd, 0xab, 0xdf, 0x84, 0x3c, + 0x26, 0x3f, 0x9c, 0x12, 0x3f, 0x40, 0x08, 0x32, 0x63, 0x67, 0x44, 0x84, 0x96, 0xfd, 0xd7, 0x3f, + 0xcb, 0x40, 0x96, 0xb1, 0xa1, 0xf7, 0x01, 0x4e, 0xa6, 0x83, 0x61, 0xaf, 0x19, 0xf3, 0xb7, 0x21, + 0xfc, 0x1d, 0x84, 0x0a, 0x1c, 0x03, 0xa1, 0x6f, 0xc2, 0x4a, 0x8f, 0x4c, 0x86, 0xee, 0x19, 0xb7, + 0x49, 0x33, 0x1b, 0x24, 0x6c, 0x2a, 0x91, 0x06, 0xc7, 0x61, 0xa8, 0x0a, 0xeb, 0xa7, 0xae, 0xf7, + 0xd6, 0xf1, 0x7a, 0xa4, 0x77, 0xec, 0x7a, 0x81, 0x5f, 0xcc, 0x6c, 0x2b, 0xf7, 0x57, 0x1e, 0x6e, + 0xc7, 0x27, 0xb7, 0xf7, 0x2c, 0x01, 0x31, 0xc7, 0x81, 0x77, 0x86, 0x67, 0xec, 0x90, 0x01, 0x1a, + 0x4d, 0xc1, 0xd4, 0x37, 0x3e, 0x24, 0xdd, 0xd7, 0x3c, 0x88, 0x2c, 0x0b, 0xe2, 0x7a, 0x8c, 0x2b, + 0xae, 0xc6, 0x73, 0x06, 0xe8, 0x09, 0xac, 0x9d, 0x0e, 0x86, 0xa4, 0x79, 0x36, 0xee, 0x72, 0x86, + 0x1c, 0x63, 0xd8, 0x14, 0x0c, 0xcf, 0xe2, 0x3a, 0x9c, 0x84, 0xa2, 0x63, 0xb8, 0xd2, 0x23, 0x27, + 0xd3, 0x7e, 0x7f, 0x30, 0xee, 0x1b, 0xee, 0x38, 0x70, 0x06, 0x63, 0xe2, 0xf9, 0xc5, 0x3c, 0x9b, + 0xcf, 0xad, 0x30, 0x11, 0xb3, 0x08, 0xf3, 0x0d, 0x19, 0x07, 0x78, 0x91, 0x29, 0x7a, 0x17, 0x0a, + 0x23, 0x12, 0x38, 0x3d, 0x27, 0x70, 0x8a, 0x05, 0x16, 0xc8, 0x65, 0x41, 0x73, 0x24, 0xc4, 0x38, + 0x04, 0x94, 0x9a, 0x70, 0x65, 0x41, 0x9a, 0x68, 0x11, 0xbc, 0x26, 0x67, 0x6c, 0x09, 0xb3, 0x98, + 0xfe, 0x45, 0x3b, 0x90, 0x7d, 0xe3, 0x0c, 0xa7, 0x72, 0x89, 0x34, 0x41, 0x49, 0x6d, 0x78, 0x2c, + 0x5c, 0xfd, 0x24, 0xfd, 0x38, 0xf5, 0x3c, 0x53, 0x50, 0xb4, 0x8c, 0xfe, 0x8f, 0x14, 0x14, 0xa4, + 0x47, 0xb4, 0x0b, 0x59, 0xb6, 0xea, 0xa2, 0x2a, 0x36, 0xe3, 0x55, 0x11, 0x86, 0xc5, 0x21, 0xe8, + 0x1b, 0x90, 0xe3, 0x8b, 0x2d, 0x7c, 0x5d, 0x4d, 0x94, 0x43, 0x88, 0x16, 0x20, 0xf4, 0x3d, 0x00, + 0xa7, 0xd7, 0x1b, 0xd0, 0x2d, 0xe4, 0x0c, 0x8b, 0x5d, 0x96, 0xb8, 0xdb, 0x33, 0x33, 0xde, 0x2b, + 0x87, 0x08, 0x5e, 0x07, 0x31, 0x93, 0xd2, 0x77, 0xe0, 0xf2, 0x8c, 0x3a, 0x3e, 0x7f, 0x95, 0xcf, + 0x7f, 0x33, 0x3e, 0x7f, 0x35, 0x36, 0x5b, 0xfd, 0x9f, 0x69, 0x58, 0x4b, 0xcc, 0x03, 0xbd, 0x07, + 0x1b, 0xe3, 0xe9, 0xe8, 0x84, 0x78, 0x8d, 0xd3, 0xb2, 0x17, 0x0c, 0x4e, 0x9d, 0x6e, 0xe0, 0x8b, + 0x5c, 0xce, 0x2b, 0xd0, 0x63, 0x28, 0xb0, 0x79, 0xd3, 0x65, 0x4f, 0xb3, 0xe8, 0xb7, 0x16, 0x65, + 0x87, 0x8f, 0x88, 0x87, 0x43, 0x34, 0xba, 0x03, 0x99, 0xe0, 0x6c, 0x42, 0x8a, 0xca, 0x76, 0xea, + 0xfe, 0x7a, 0xb8, 0x24, 0x0c, 0xd7, 0x3a, 0x9b, 0x10, 0xcc, 0xb4, 0xa8, 0xb2, 0x20, 0x3f, 0x77, + 0x16, 0x7a, 0x38, 0x2f, 0x49, 0x87, 0x90, 0x17, 0x01, 0xa0, 0x1d, 0xe1, 0x36, 0xc5, 0xdc, 0xa2, + 0x38, 0x15, 0xf1, 0x62, 0x8e, 0x37, 0x21, 0xdb, 0x75, 0xa7, 0xe3, 0x80, 0xa5, 0x2c, 0x8b, 0xf9, + 0xe0, 0xab, 0x66, 0xfb, 0xcf, 0x29, 0x58, 0x4f, 0x16, 0x02, 0x7a, 0x0a, 0x2a, 0x2f, 0x05, 0x9a, + 0xc1, 0xd4, 0xcc, 0xc6, 0x89, 0x23, 0xc5, 0x90, 0x78, 0x38, 0x32, 0x40, 0xef, 0x41, 0xbe, 0x3b, + 0x9c, 0xfa, 0x01, 0xf1, 0x98, 0xb3, 0x68, 0x42, 0x06, 0x97, 0xb2, 0x09, 0x49, 0x48, 0xc9, 0x82, + 0x82, 0x24, 0x41, 0xf7, 0x12, 0x79, 0xb8, 0x92, 0x70, 0x79, 0x71, 0x22, 0xf4, 0x9f, 0xa4, 0x00, + 0xa2, 0xae, 0x88, 0xbe, 0x0b, 0xaa, 0x13, 0x2b, 0x96, 0x78, 0x3b, 0x8b, 0x50, 0x7b, 0x61, 0xd9, + 0xf0, 0x15, 0x8a, 0x4c, 0x4a, 0x4f, 0x61, 0x3d, 0xa9, 0xfc, 0x52, 0x69, 0xbd, 0x0b, 0x2b, 0xb1, + 0x6e, 0x8b, 0xae, 0x41, 0x8e, 0x77, 0x39, 0x61, 0x2d, 0x46, 0xfa, 0xe7, 0x29, 0xd0, 0x66, 0x1b, + 0xe2, 0x32, 0x30, 0xaa, 0x80, 0xea, 0x11, 0xdf, 0x9d, 0x7a, 0x5d, 0x22, 0x2b, 0x7b, 0x67, 0x49, + 0x53, 0xdd, 0xc3, 0x12, 0x28, 0xe6, 0x15, 0x1a, 0xd2, 0x79, 0x25, 0x95, 0x5f, 0x6a, 0x5e, 0xf7, + 0x60, 0x2d, 0xd1, 0x7e, 0x97, 0xce, 0xec, 0xef, 0x19, 0xc8, 0xb2, 0x46, 0x86, 0x1e, 0x80, 0x4a, + 0xdb, 0x23, 0x1b, 0x88, 0x76, 0xa5, 0xc5, 0xda, 0x09, 0x93, 0x57, 0x2f, 0xe1, 0x08, 0x84, 0x1e, + 0x89, 0x73, 0x8f, 0x9b, 0xa4, 0xe7, 0xcf, 0x3d, 0x69, 0x13, 0x83, 0xa1, 0x6f, 0xc9, 0x93, 0x8f, + 0x5b, 0x29, 0x0b, 0x4e, 0x3e, 0x69, 0x16, 0x07, 0xd2, 0xf0, 0x26, 0xb2, 0xe9, 0x16, 0x33, 0x8b, + 0x9b, 0x31, 0x0d, 0x2f, 0x04, 0x21, 0x33, 0x71, 0xc6, 0x71, 0xc3, 0xa5, 0x67, 0x9c, 0xb4, 0x9f, + 0x33, 0x41, 0x3f, 0x80, 0xa2, 0x5c, 0x95, 0x59, 0xbc, 0x38, 0xf0, 0x64, 0xd7, 0xc5, 0x4b, 0x60, + 0xd5, 0x4b, 0x78, 0x29, 0x05, 0x7a, 0x1a, 0x1d, 0xa2, 0x9c, 0x33, 0xbf, 0xf0, 0x10, 0x95, 0x44, + 0x49, 0x30, 0x7a, 0x05, 0xd7, 0x7b, 0x8b, 0x0f, 0x49, 0x71, 0x06, 0x5e, 0x70, 0x94, 0x56, 0x2f, + 0xe1, 0x65, 0x04, 0xe8, 0xdb, 0xb0, 0xda, 0x23, 0x6f, 0xea, 0xae, 0x3b, 0xe1, 0x84, 0x2a, 0x23, + 0x8c, 0xf6, 0x7b, 0xa4, 0xaa, 0x5e, 0xc2, 0x09, 0xe8, 0xc1, 0x2a, 0x00, 0xa1, 0x7f, 0x3a, 0xb4, + 0x0f, 0xe8, 0x43, 0x58, 0x8d, 0xa3, 0xd1, 0x16, 0xa8, 0x83, 0x80, 0x78, 0xec, 0xf6, 0x27, 0xce, + 0x87, 0x48, 0x10, 0xab, 0xd4, 0x74, 0x62, 0x5b, 0xed, 0x80, 0x42, 0x3c, 0x4f, 0x14, 0x8c, 0x4c, + 0x4f, 0xb9, 0xcb, 0x1a, 0xea, 0xc9, 0x90, 0x98, 0x9e, 0x87, 0x29, 0x40, 0x7f, 0x0b, 0x6b, 0x09, + 0x29, 0xda, 0x85, 0x3c, 0xf1, 0x3c, 0xc3, 0xed, 0xc9, 0x96, 0x25, 0xeb, 0xc6, 0xf4, 0x3c, 0x97, + 0xc9, 0xb1, 0x04, 0xa0, 0x22, 0xe4, 0x47, 0xc4, 0xf7, 0x9d, 0xbe, 0xdc, 0x53, 0x72, 0x88, 0xb6, + 0x61, 0xc5, 0x9f, 0xf6, 0xfb, 0xc4, 0x67, 0x77, 0xd6, 0xa2, 0xb2, 0xad, 0xdc, 0x57, 0x71, 0x5c, + 0xa4, 0xdb, 0xa0, 0x86, 0x1b, 0x85, 0x6e, 0x4d, 0x42, 0x77, 0xad, 0xd8, 0x6e, 0x7c, 0x90, 0xb8, + 0xa3, 0xa4, 0x2f, 0xb8, 0xa3, 0xe8, 0x1f, 0x89, 0x3e, 0xc9, 0x09, 0x4b, 0x50, 0x90, 0x4d, 0x4f, + 0x70, 0x86, 0xe3, 0xa5, 0x29, 0xd3, 0xa2, 0x94, 0xa9, 0x2c, 0x39, 0xf1, 0x5c, 0x64, 0x2e, 0xc8, + 0x85, 0xde, 0x95, 0xbd, 0x91, 0x07, 0xb0, 0xac, 0xdd, 0x09, 0x27, 0xe9, 0x85, 0x4e, 0x94, 0x8b, + 0x9c, 0x7c, 0x9c, 0xec, 0xac, 0xe7, 0xbb, 0x5a, 0xbe, 0x3a, 0x5f, 0x6d, 0xa6, 0x3f, 0x86, 0xe2, + 0xb2, 0xbd, 0x4b, 0xf3, 0x2e, 0xf7, 0xae, 0xcc, 0xbb, 0x1c, 0x2f, 0xcd, 0x7b, 0x2c, 0x4e, 0x65, + 0x61, 0x9c, 0x99, 0x30, 0x4e, 0xfd, 0xd7, 0x69, 0x50, 0xc3, 0x06, 0x46, 0xb7, 0xc6, 0xd0, 0xed, + 0x3a, 0x43, 0x2a, 0x91, 0x5b, 0x23, 0x14, 0xa0, 0x5b, 0x00, 0x1e, 0x19, 0xb9, 0x01, 0x61, 0x6a, + 0x7e, 0xaa, 0xc6, 0x24, 0xd4, 0xef, 0xc4, 0xed, 0xd9, 0xf4, 0xa5, 0x22, 0xfc, 0x8a, 0x21, 0xba, + 0x03, 0x6b, 0x5d, 0xb9, 0xbb, 0x99, 0x9e, 0x47, 0x90, 0x14, 0x52, 0xef, 0xf4, 0x69, 0xe3, 0x4f, + 0x9c, 0x2e, 0x7f, 0x0e, 0xa8, 0x38, 0x12, 0xd0, 0x4c, 0xd0, 0xe6, 0xca, 0xcc, 0x73, 0x3c, 0x13, + 0x72, 0x8c, 0x74, 0x58, 0x95, 0x59, 0xa1, 0x17, 0x00, 0xd6, 0xc4, 0x54, 0x9c, 0x90, 0xc5, 0x31, + 0x8c, 0xa3, 0x90, 0xc4, 0x30, 0x9e, 0x22, 0xe4, 0x9d, 0x5e, 0xcf, 0x23, 0xbe, 0xcf, 0xda, 0x8d, + 0x8a, 0xe5, 0x50, 0xff, 0x65, 0x2a, 0x3a, 0xd2, 0xc2, 0x5c, 0xd1, 0x66, 0x68, 0xb0, 0x2b, 0x86, + 0xc8, 0x55, 0x28, 0xa0, 0x1b, 0x70, 0x30, 0x8a, 0x2a, 0x85, 0x0f, 0x62, 0x2b, 0xa6, 0x2c, 0x2a, + 0xe2, 0xcc, 0xc2, 0xfa, 0xc9, 0x5e, 0x54, 0x3f, 0xff, 0x4a, 0xc3, 0xf5, 0x25, 0x0d, 0xf6, 0xbc, + 0x5a, 0x96, 0x6b, 0x95, 0xbe, 0x60, 0xad, 0x94, 0x0b, 0xd7, 0x2a, 0xb3, 0x60, 0xad, 0xc2, 0x6e, + 0x91, 0x9d, 0xe9, 0x16, 0x45, 0xc8, 0x7b, 0xd3, 0x31, 0x7d, 0x5d, 0x8b, 0x65, 0x94, 0x43, 0x5a, + 0x5f, 0x6f, 0x5d, 0xef, 0xf5, 0x60, 0xdc, 0xaf, 0x0c, 0x3c, 0xb1, 0x86, 0x31, 0x09, 0xb2, 0x01, + 0xd8, 0x61, 0xc1, 0xdf, 0x9e, 0x05, 0x76, 0xb5, 0xd9, 0x3b, 0xff, 0x80, 0xe1, 0xf2, 0xd8, 0x4b, + 0x34, 0xc6, 0x40, 0xef, 0xc4, 0x33, 0xea, 0x8b, 0x2e, 0x39, 0x6b, 0xf1, 0x4b, 0xce, 0x47, 0x50, + 0xa8, 0xbb, 0x7d, 0x6e, 0xf7, 0x18, 0xd4, 0xf0, 0x7b, 0x81, 0xb8, 0xbd, 0x94, 0xf6, 0xf8, 0x07, + 0x83, 0x3d, 0xf9, 0xc1, 0x60, 0xaf, 0x25, 0x11, 0x38, 0x02, 0x23, 0x1d, 0xb2, 0x24, 0x76, 0x81, + 0x91, 0x1f, 0x0a, 0xc4, 0xeb, 0x8e, 0x24, 0xbb, 0xb9, 0x12, 0xeb, 0xe6, 0xfa, 0x13, 0xd8, 0x68, + 0xfb, 0xc4, 0xb3, 0xc6, 0x01, 0x85, 0x8a, 0x4f, 0x05, 0x77, 0x21, 0x37, 0x60, 0x02, 0x11, 0xc5, + 0x9a, 0xe0, 0x13, 0x28, 0xa1, 0xd4, 0x9f, 0x43, 0x8e, 0x4b, 0x28, 0x77, 0xf4, 0x44, 0x2c, 0xc8, + 0xc7, 0x20, 0x82, 0x8c, 0x7f, 0x36, 0xee, 0xb2, 0xa0, 0x0a, 0x98, 0xfd, 0xa7, 0xa5, 0x24, 0x1e, + 0x88, 0x0a, 0x93, 0x8a, 0xd1, 0xae, 0x0b, 0x2b, 0xb1, 0x57, 0x08, 0x2a, 0xc2, 0x66, 0xdb, 0xae, + 0xd9, 0x8d, 0x17, 0x76, 0xe7, 0xa0, 0x6d, 0xd5, 0x2b, 0x26, 0xee, 0xb4, 0x5e, 0x1e, 0x9b, 0xda, + 0x25, 0x94, 0x07, 0xe5, 0xb9, 0x75, 0xa0, 0xa5, 0x90, 0x0a, 0xd9, 0x83, 0xf2, 0x2b, 0xb3, 0xae, + 0xa5, 0xd1, 0x3a, 0x00, 0x43, 0x1d, 0x97, 0x8d, 0x5a, 0x53, 0x53, 0x10, 0x40, 0xce, 0x68, 0x37, + 0x5b, 0x8d, 0x23, 0x2d, 0x43, 0xff, 0xd7, 0xca, 0xb6, 0x55, 0x6b, 0x68, 0x59, 0xfa, 0xbf, 0xd2, + 0x30, 0x6a, 0x26, 0xd6, 0x72, 0xbb, 0x15, 0x50, 0xc3, 0xd7, 0x16, 0xba, 0x06, 0x28, 0xe1, 0x4e, + 0x3a, 0x5b, 0x81, 0xbc, 0x51, 0x6f, 0x37, 0x5b, 0x26, 0xd6, 0x52, 0xd4, 0xf3, 0xa1, 0x71, 0xa0, + 0xa5, 0xa9, 0xe7, 0x7a, 0xc3, 0x28, 0xd7, 0x35, 0x65, 0xb7, 0x41, 0xaf, 0x05, 0xd1, 0xa3, 0x01, + 0xbd, 0x03, 0x57, 0x25, 0x51, 0xc5, 0x3c, 0xae, 0x37, 0x5e, 0x46, 0x81, 0x17, 0x20, 0x53, 0x35, + 0xeb, 0x47, 0x5a, 0x0a, 0xad, 0x81, 0x5a, 0x63, 0xe1, 0x59, 0xaf, 0x4c, 0x2d, 0x4d, 0x9d, 0xd4, + 0xda, 0x07, 0xa6, 0xd1, 0xa2, 0x84, 0x16, 0xac, 0xc4, 0x1e, 0x2f, 0xf1, 0x3c, 0x88, 0x40, 0x24, + 0xdd, 0x2a, 0x14, 0x8e, 0x2c, 0xdb, 0xa2, 0x96, 0x22, 0xb6, 0x9a, 0xc9, 0x63, 0x6b, 0xb4, 0xaa, + 0x26, 0xd6, 0x94, 0xdd, 0x5f, 0xe5, 0x40, 0x0d, 0x37, 0x3a, 0xba, 0x0e, 0x57, 0x8c, 0x46, 0xbb, + 0x5e, 0xe9, 0xd8, 0x8d, 0x56, 0xa7, 0x62, 0xb6, 0x4c, 0x7c, 0x64, 0xd9, 0x94, 0xa8, 0x04, 0x57, + 0x9b, 0xad, 0x72, 0xab, 0xdd, 0xec, 0x18, 0x55, 0xd3, 0xa8, 0x75, 0xec, 0x46, 0xc7, 0xc4, 0xb8, + 0x81, 0xb5, 0xbf, 0xa4, 0xd0, 0x36, 0xdc, 0x48, 0xe8, 0xac, 0xa3, 0xf2, 0xa1, 0xd9, 0x39, 0x6e, + 0xd7, 0xeb, 0x14, 0xa3, 0xfd, 0x26, 0x8d, 0xee, 0xc0, 0xed, 0x04, 0xc2, 0x68, 0xd8, 0xad, 0xb2, + 0x65, 0x9b, 0xb8, 0x63, 0x60, 0xb3, 0xdc, 0xb2, 0xec, 0x43, 0xed, 0xb7, 0x69, 0xf4, 0x75, 0xb8, + 0x95, 0x40, 0xe1, 0xb6, 0x1d, 0x43, 0x52, 0xaa, 0xcf, 0xd3, 0x68, 0x07, 0xbe, 0xb6, 0x84, 0x8a, + 0x07, 0x5b, 0x6e, 0x99, 0x15, 0xed, 0x77, 0xe7, 0xe1, 0xb0, 0xd9, 0x6c, 0x95, 0x31, 0x73, 0xfa, + 0xc5, 0x3c, 0xce, 0x6e, 0x54, 0xcc, 0xce, 0x91, 0x79, 0xd4, 0xc0, 0x2f, 0x3b, 0xc7, 0xd8, 0x6c, + 0x36, 0xdb, 0xd8, 0xd4, 0x3e, 0x51, 0xe6, 0xa6, 0xc0, 0x70, 0x15, 0xab, 0x59, 0x8b, 0x50, 0x3f, + 0x55, 0xd0, 0x2e, 0xdc, 0x9d, 0x47, 0xd9, 0x66, 0xeb, 0x45, 0x03, 0xd7, 0x3a, 0x6d, 0xbb, 0xfc, + 0x41, 0xd9, 0xaa, 0x97, 0x0f, 0xea, 0xa6, 0xf6, 0x33, 0x65, 0x6e, 0xba, 0x0c, 0x7b, 0x6c, 0x55, + 0x22, 0xc2, 0x4f, 0x97, 0xb8, 0x6d, 0xdb, 0x4d, 0xa3, 0x6a, 0x56, 0xda, 0x9c, 0xea, 0xe7, 0x0a, + 0xd2, 0xe1, 0xe6, 0x22, 0x14, 0x36, 0xcb, 0x46, 0x95, 0x61, 0x3e, 0x53, 0xe6, 0x56, 0x89, 0x87, + 0xd6, 0x68, 0x75, 0xb0, 0x59, 0xae, 0xbc, 0xd4, 0x7e, 0xa1, 0xa0, 0x6b, 0xb0, 0x11, 0x56, 0x42, + 0x47, 0x14, 0x94, 0xf6, 0x6f, 0x05, 0xbd, 0x03, 0x9b, 0x09, 0x4b, 0xa9, 0xfa, 0x8f, 0x82, 0xee, + 0x81, 0xbe, 0x48, 0x35, 0x13, 0xe1, 0x7f, 0x15, 0xf4, 0x2e, 0xec, 0x2c, 0x59, 0x8e, 0x17, 0x65, + 0x8b, 0xae, 0x45, 0xc8, 0xfa, 0x3f, 0xe6, 0xf0, 0x99, 0x55, 0x37, 0x3b, 0xcd, 0x97, 0xb6, 0xd1, + 0xb1, 0x6c, 0xab, 0x25, 0x6a, 0xed, 0x6f, 0x19, 0xb4, 0x05, 0xd7, 0x2b, 0xe6, 0x07, 0x1d, 0x6c, + 0x1e, 0x5a, 0xac, 0xce, 0xf9, 0x46, 0xac, 0x98, 0xc7, 0x4d, 0xed, 0xf7, 0x59, 0x74, 0x03, 0xae, + 0x25, 0xb4, 0x2d, 0xb3, 0xd9, 0xe2, 0xca, 0x3f, 0x64, 0xd1, 0x4d, 0x28, 0x26, 0x94, 0x7c, 0xeb, + 0x71, 0xf5, 0x1f, 0xb3, 0x73, 0xcc, 0x46, 0xc3, 0x7e, 0x66, 0x1d, 0x52, 0xb5, 0xf6, 0xa7, 0xec, + 0xc3, 0x4f, 0x14, 0xb8, 0xdc, 0x14, 0xdf, 0x7a, 0x9b, 0xc4, 0x7b, 0x33, 0xe8, 0x12, 0x64, 0x40, + 0xe1, 0x90, 0x04, 0xe2, 0xd5, 0x39, 0xd7, 0x82, 0xcd, 0xd1, 0x24, 0x38, 0x2b, 0x25, 0xbe, 0xc6, + 0xea, 0x1b, 0x1f, 0xff, 0xf5, 0x8b, 0x4f, 0xd3, 0x2b, 0x48, 0xdd, 0x7f, 0xf3, 0xfe, 0x3e, 0xfb, + 0x32, 0x8b, 0x0e, 0xa1, 0xc0, 0x1a, 0x70, 0xdd, 0xed, 0x23, 0x79, 0x45, 0x96, 0xbd, 0xbe, 0x34, + 0x2b, 0xd0, 0xaf, 0x32, 0x82, 0xcb, 0x68, 0x8d, 0x12, 0xf0, 0x87, 0xc7, 0xd0, 0xed, 0xdf, 0x4f, + 0x3d, 0x48, 0xa1, 0x43, 0xc8, 0x31, 0x22, 0x7f, 0x69, 0x2c, 0x73, 0x6c, 0x88, 0xb1, 0xad, 0x22, + 0x08, 0xd9, 0xfc, 0x07, 0x29, 0xf4, 0x7d, 0xc8, 0x9b, 0x3f, 0x22, 0xdd, 0x69, 0x40, 0x50, 0x51, + 0x58, 0xcc, 0x35, 0xff, 0xd2, 0x12, 0x1f, 0xfa, 0x0d, 0x46, 0x79, 0x55, 0x5f, 0x61, 0x94, 0x9c, + 0xe6, 0x89, 0x38, 0x0a, 0x50, 0x1d, 0x72, 0x55, 0x67, 0xdc, 0x1b, 0x12, 0x94, 0x38, 0x7b, 0x96, + 0x92, 0x6d, 0x31, 0xb2, 0x6b, 0xfa, 0x46, 0x14, 0xdf, 0xfe, 0x87, 0x8c, 0xe0, 0x49, 0x6a, 0xf7, + 0x24, 0xc7, 0xd0, 0x8f, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x52, 0x0f, 0xa4, 0x27, 0x84, 0x17, + 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/skaffold.proto b/proto/skaffold.proto index 07532506df4..e306555e747 100644 --- a/proto/skaffold.proto +++ b/proto/skaffold.proto @@ -27,13 +27,6 @@ message State { FileSyncState fileSyncState = 6; repeated DebuggingContainerEvent debuggingContainers = 7; Metadata metadata = 8; - repeated DevLoop loops = 9; -} - -message DevLoop { - int32 iteration = 1; // dev loop iteration - ChangeType changeType = 2; // Change type which triggered this loop - ErrorCode errCode = 3; // actionable error message } message Metadata { @@ -59,7 +52,6 @@ message DeployMetadata { message Deployer { DeployerType type = 1; int32 count = 2; - ChangeType changeType = 3; } repeated Deployer deployers = 1; ClusterType cluster = 2; @@ -113,22 +105,14 @@ message Event { FileSyncEvent fileSyncEvent = 7; // describes the sync status. DebuggingContainerEvent debuggingContainerEvent = 8; // describes the appearance or disappearance of a debugging container DevLoopEvent devLoopEvent = 9; // describes a start and end of a dev loop. - EndEvent endEvent = 10; } } -// `EndEvent` is the last event indicating skaffold session ended. -message EndEvent { - ErrorCode errCode = 1; - string errMsg = 2; - repeated DevLoop loops = 3; -} // `DevLoopEvent` marks the start and end of a dev loop. message DevLoopEvent { int32 iteration = 1; // dev loop iteration - ChangeType changeType = 2; - string status = 3; // dev loop status oneof: In Progress, Completed, Failed - ActionableErr err = 4; // actionable error message + string status = 2; // dev loop status oneof: In Progress, Completed, Failed + ActionableErr err = 3; // actionable error message } @@ -322,22 +306,6 @@ enum DeployerType { KUBECTL = 3; } -// Enum for indicating which dependency change triggered the dev loop -enum ChangeType { - // First iteration - INITIAL_LOOP = 0; - // Indicates build dependency change - BUILD = 1; - // Indicates test dependency change - TEST = 2; - // Indicates deploy dependency change - DEPLOY = 3; - // Indicates skaffold config change - CONFIG = 4; - // Indicates sync dependency change - SYNC = 5; -} - // Enum indicating cluster type the application is deployed to enum ClusterType { // Could not determine Cluster Type @@ -358,7 +326,7 @@ enum ErrorCode { // No Error codes // Status Check Success - SUCCESS = 200; + STATUS_CHECK_NO_ERROR = 200; // Container errors From 9a2f0ffb6bb6f8c7ba040aed99690f0996de7638 Mon Sep 17 00:00:00 2001 From: tejal29 Date: Mon, 4 May 2020 15:46:13 -0700 Subject: [PATCH 7/9] brians's comments --- docs/content/en/api/skaffold.swagger.json | 411 +++++++------ docs/content/en/docs/references/api/grpc.md | 103 ++-- pkg/skaffold/errors/errors.go | 22 +- pkg/skaffold/event/event.go | 36 +- pkg/skaffold/runner/dev.go | 32 +- pkg/skaffold/runner/runner.go | 1 + proto/skaffold.pb.go | 622 ++++++++++---------- proto/skaffold.proto | 88 +-- 8 files changed, 677 insertions(+), 638 deletions(-) diff --git a/docs/content/en/api/skaffold.swagger.json b/docs/content/en/api/skaffold.swagger.json index d5540a480c9..f2c94149f24 100644 --- a/docs/content/en/api/skaffold.swagger.json +++ b/docs/content/en/api/skaffold.swagger.json @@ -96,37 +96,41 @@ "type": "string" }, { - "name": "event.buildEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "name": "event.buildEvent.statusCode", + "description": " - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_SUCCESS: Status Check Success\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_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_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 - 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.", "in": "query", "required": false, "type": "string", "enum": [ - "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", - "STATUS_CHECK_IMAGE_PULL_ERR", - "STATUS_CHECK_CONTAINER_CREATING", - "STATUS_CHECK_RUN_CONTAINER_ERR", - "STATUS_CHECK_CONTAINER_TERMINATED", - "STATUS_CHECK_CONTAINER_RESTARTING", - "STATUS_CHECK_NODE_MEMORY_PRESSURE", - "STATUS_CHECK_NODE_DISK_PRESSURE", - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - "STATUS_CHECK_NODE_PID_PRESSURE", - "STATUS_CHECK_NODE_UNSCHEDULABLE", - "STATUS_CHECK_NODE_UNREACHABLE", - "STATUS_CHECK_NODE_NOT_READY", - "ErrorCode_UNKNOWN", - "STATUS_CHECK_UNKNOWN", - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - "FILE_SYNC_INIT_ERROR", - "DEV_REGISTER_BUILD_DEPS", - "DEV_REGISTER_TEST_DEPS", - "DEV_REGISTER_DEPLOY_DEPS", - "DEV_REGISTER_CONFIG_DEP" + "UNKNOWN_ERROR", + "STATUSCHECK_SUCCESS", + "STATUSCHECK_IMAGE_PULL_ERR", + "STATUSCHECK_CONTAINER_CREATING", + "STATUSCHECK_RUN_CONTAINER_ERR", + "STATUSCHECK_CONTAINER_TERMINATED", + "STATUSCHECK_CONTAINER_RESTARTING", + "STATUSCHECK_NODE_MEMORY_PRESSURE", + "STATUSCHECK_NODE_DISK_PRESSURE", + "STATUSCHECK_NODE_NETWORK_UNAVAILABLE", + "STATUSCHECK_NODE_PID_PRESSURE", + "STATUSCHECK_NODE_UNSCHEDULABLE", + "STATUSCHECK_NODE_UNREACHABLE", + "STATUSCHECK_NODE_NOT_READY", + "STATUSCHECK_UNKNOWN", + "STATUSCHECK_UNKNOWN_UNSCHEDULABLE", + "STATUSCHECK_CONTAINER_WAITING_UNKNOWN", + "DEPLOY_UNKNOWN", + "SYNC_UNKNOWN", + "BUILD_UNKNOWN", + "DEVINIT_UNKNOWN", + "CLEANUP_UNKNOWN", + "SYNC_INIT_ERROR", + "DEVINIT_REGISTER_BUILD_DEPS", + "DEVINIT_REGISTER_TEST_DEPS", + "DEVINIT_REGISTER_DEPLOY_DEPS", + "DEVINIT_REGISTER_CONFIG_DEP" ], - "default": "COULD_NOT_DETERMINE" + "default": "UNKNOWN_ERROR" }, { "name": "event.deployEvent.status", @@ -141,37 +145,41 @@ "type": "string" }, { - "name": "event.deployEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "name": "event.deployEvent.statusCode", + "description": " - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_SUCCESS: Status Check Success\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_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_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 - 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.", "in": "query", "required": false, "type": "string", "enum": [ - "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", - "STATUS_CHECK_IMAGE_PULL_ERR", - "STATUS_CHECK_CONTAINER_CREATING", - "STATUS_CHECK_RUN_CONTAINER_ERR", - "STATUS_CHECK_CONTAINER_TERMINATED", - "STATUS_CHECK_CONTAINER_RESTARTING", - "STATUS_CHECK_NODE_MEMORY_PRESSURE", - "STATUS_CHECK_NODE_DISK_PRESSURE", - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - "STATUS_CHECK_NODE_PID_PRESSURE", - "STATUS_CHECK_NODE_UNSCHEDULABLE", - "STATUS_CHECK_NODE_UNREACHABLE", - "STATUS_CHECK_NODE_NOT_READY", - "ErrorCode_UNKNOWN", - "STATUS_CHECK_UNKNOWN", - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - "FILE_SYNC_INIT_ERROR", - "DEV_REGISTER_BUILD_DEPS", - "DEV_REGISTER_TEST_DEPS", - "DEV_REGISTER_DEPLOY_DEPS", - "DEV_REGISTER_CONFIG_DEP" + "UNKNOWN_ERROR", + "STATUSCHECK_SUCCESS", + "STATUSCHECK_IMAGE_PULL_ERR", + "STATUSCHECK_CONTAINER_CREATING", + "STATUSCHECK_RUN_CONTAINER_ERR", + "STATUSCHECK_CONTAINER_TERMINATED", + "STATUSCHECK_CONTAINER_RESTARTING", + "STATUSCHECK_NODE_MEMORY_PRESSURE", + "STATUSCHECK_NODE_DISK_PRESSURE", + "STATUSCHECK_NODE_NETWORK_UNAVAILABLE", + "STATUSCHECK_NODE_PID_PRESSURE", + "STATUSCHECK_NODE_UNSCHEDULABLE", + "STATUSCHECK_NODE_UNREACHABLE", + "STATUSCHECK_NODE_NOT_READY", + "STATUSCHECK_UNKNOWN", + "STATUSCHECK_UNKNOWN_UNSCHEDULABLE", + "STATUSCHECK_CONTAINER_WAITING_UNKNOWN", + "DEPLOY_UNKNOWN", + "SYNC_UNKNOWN", + "BUILD_UNKNOWN", + "DEVINIT_UNKNOWN", + "CLEANUP_UNKNOWN", + "SYNC_INIT_ERROR", + "DEVINIT_REGISTER_BUILD_DEPS", + "DEVINIT_REGISTER_TEST_DEPS", + "DEVINIT_REGISTER_DEPLOY_DEPS", + "DEVINIT_REGISTER_CONFIG_DEP" ], - "default": "COULD_NOT_DETERMINE" + "default": "UNKNOWN_ERROR" }, { "name": "event.portEvent.localPort", @@ -248,37 +256,41 @@ "type": "string" }, { - "name": "event.statusCheckEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "name": "event.statusCheckEvent.statusCode", + "description": " - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_SUCCESS: Status Check Success\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_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_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 - 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.", "in": "query", "required": false, "type": "string", "enum": [ - "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", - "STATUS_CHECK_IMAGE_PULL_ERR", - "STATUS_CHECK_CONTAINER_CREATING", - "STATUS_CHECK_RUN_CONTAINER_ERR", - "STATUS_CHECK_CONTAINER_TERMINATED", - "STATUS_CHECK_CONTAINER_RESTARTING", - "STATUS_CHECK_NODE_MEMORY_PRESSURE", - "STATUS_CHECK_NODE_DISK_PRESSURE", - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - "STATUS_CHECK_NODE_PID_PRESSURE", - "STATUS_CHECK_NODE_UNSCHEDULABLE", - "STATUS_CHECK_NODE_UNREACHABLE", - "STATUS_CHECK_NODE_NOT_READY", - "ErrorCode_UNKNOWN", - "STATUS_CHECK_UNKNOWN", - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - "FILE_SYNC_INIT_ERROR", - "DEV_REGISTER_BUILD_DEPS", - "DEV_REGISTER_TEST_DEPS", - "DEV_REGISTER_DEPLOY_DEPS", - "DEV_REGISTER_CONFIG_DEP" + "UNKNOWN_ERROR", + "STATUSCHECK_SUCCESS", + "STATUSCHECK_IMAGE_PULL_ERR", + "STATUSCHECK_CONTAINER_CREATING", + "STATUSCHECK_RUN_CONTAINER_ERR", + "STATUSCHECK_CONTAINER_TERMINATED", + "STATUSCHECK_CONTAINER_RESTARTING", + "STATUSCHECK_NODE_MEMORY_PRESSURE", + "STATUSCHECK_NODE_DISK_PRESSURE", + "STATUSCHECK_NODE_NETWORK_UNAVAILABLE", + "STATUSCHECK_NODE_PID_PRESSURE", + "STATUSCHECK_NODE_UNSCHEDULABLE", + "STATUSCHECK_NODE_UNREACHABLE", + "STATUSCHECK_NODE_NOT_READY", + "STATUSCHECK_UNKNOWN", + "STATUSCHECK_UNKNOWN_UNSCHEDULABLE", + "STATUSCHECK_CONTAINER_WAITING_UNKNOWN", + "DEPLOY_UNKNOWN", + "SYNC_UNKNOWN", + "BUILD_UNKNOWN", + "DEVINIT_UNKNOWN", + "CLEANUP_UNKNOWN", + "SYNC_INIT_ERROR", + "DEVINIT_REGISTER_BUILD_DEPS", + "DEVINIT_REGISTER_TEST_DEPS", + "DEVINIT_REGISTER_DEPLOY_DEPS", + "DEVINIT_REGISTER_CONFIG_DEP" ], - "default": "COULD_NOT_DETERMINE" + "default": "UNKNOWN_ERROR" }, { "name": "event.resourceStatusCheckEvent.resource", @@ -330,37 +342,41 @@ "type": "string" }, { - "name": "event.fileSyncEvent.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "name": "event.fileSyncEvent.statusCode", + "description": " - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_SUCCESS: Status Check Success\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_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_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 - 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.", "in": "query", "required": false, "type": "string", "enum": [ - "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", - "STATUS_CHECK_IMAGE_PULL_ERR", - "STATUS_CHECK_CONTAINER_CREATING", - "STATUS_CHECK_RUN_CONTAINER_ERR", - "STATUS_CHECK_CONTAINER_TERMINATED", - "STATUS_CHECK_CONTAINER_RESTARTING", - "STATUS_CHECK_NODE_MEMORY_PRESSURE", - "STATUS_CHECK_NODE_DISK_PRESSURE", - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - "STATUS_CHECK_NODE_PID_PRESSURE", - "STATUS_CHECK_NODE_UNSCHEDULABLE", - "STATUS_CHECK_NODE_UNREACHABLE", - "STATUS_CHECK_NODE_NOT_READY", - "ErrorCode_UNKNOWN", - "STATUS_CHECK_UNKNOWN", - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - "FILE_SYNC_INIT_ERROR", - "DEV_REGISTER_BUILD_DEPS", - "DEV_REGISTER_TEST_DEPS", - "DEV_REGISTER_DEPLOY_DEPS", - "DEV_REGISTER_CONFIG_DEP" + "UNKNOWN_ERROR", + "STATUSCHECK_SUCCESS", + "STATUSCHECK_IMAGE_PULL_ERR", + "STATUSCHECK_CONTAINER_CREATING", + "STATUSCHECK_RUN_CONTAINER_ERR", + "STATUSCHECK_CONTAINER_TERMINATED", + "STATUSCHECK_CONTAINER_RESTARTING", + "STATUSCHECK_NODE_MEMORY_PRESSURE", + "STATUSCHECK_NODE_DISK_PRESSURE", + "STATUSCHECK_NODE_NETWORK_UNAVAILABLE", + "STATUSCHECK_NODE_PID_PRESSURE", + "STATUSCHECK_NODE_UNSCHEDULABLE", + "STATUSCHECK_NODE_UNREACHABLE", + "STATUSCHECK_NODE_NOT_READY", + "STATUSCHECK_UNKNOWN", + "STATUSCHECK_UNKNOWN_UNSCHEDULABLE", + "STATUSCHECK_CONTAINER_WAITING_UNKNOWN", + "DEPLOY_UNKNOWN", + "SYNC_UNKNOWN", + "BUILD_UNKNOWN", + "DEVINIT_UNKNOWN", + "CLEANUP_UNKNOWN", + "SYNC_INIT_ERROR", + "DEVINIT_REGISTER_BUILD_DEPS", + "DEVINIT_REGISTER_TEST_DEPS", + "DEVINIT_REGISTER_DEPLOY_DEPS", + "DEVINIT_REGISTER_CONFIG_DEP" ], - "default": "COULD_NOT_DETERMINE" + "default": "UNKNOWN_ERROR" }, { "name": "event.debuggingContainerEvent.status", @@ -419,36 +435,40 @@ }, { "name": "event.devLoopEvent.err.errCode", - "description": " - COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", + "description": " - UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_SUCCESS: Status Check Success\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_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_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 - 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.", "in": "query", "required": false, "type": "string", "enum": [ - "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", - "STATUS_CHECK_IMAGE_PULL_ERR", - "STATUS_CHECK_CONTAINER_CREATING", - "STATUS_CHECK_RUN_CONTAINER_ERR", - "STATUS_CHECK_CONTAINER_TERMINATED", - "STATUS_CHECK_CONTAINER_RESTARTING", - "STATUS_CHECK_NODE_MEMORY_PRESSURE", - "STATUS_CHECK_NODE_DISK_PRESSURE", - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - "STATUS_CHECK_NODE_PID_PRESSURE", - "STATUS_CHECK_NODE_UNSCHEDULABLE", - "STATUS_CHECK_NODE_UNREACHABLE", - "STATUS_CHECK_NODE_NOT_READY", - "ErrorCode_UNKNOWN", - "STATUS_CHECK_UNKNOWN", - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - "FILE_SYNC_INIT_ERROR", - "DEV_REGISTER_BUILD_DEPS", - "DEV_REGISTER_TEST_DEPS", - "DEV_REGISTER_DEPLOY_DEPS", - "DEV_REGISTER_CONFIG_DEP" + "UNKNOWN_ERROR", + "STATUSCHECK_SUCCESS", + "STATUSCHECK_IMAGE_PULL_ERR", + "STATUSCHECK_CONTAINER_CREATING", + "STATUSCHECK_RUN_CONTAINER_ERR", + "STATUSCHECK_CONTAINER_TERMINATED", + "STATUSCHECK_CONTAINER_RESTARTING", + "STATUSCHECK_NODE_MEMORY_PRESSURE", + "STATUSCHECK_NODE_DISK_PRESSURE", + "STATUSCHECK_NODE_NETWORK_UNAVAILABLE", + "STATUSCHECK_NODE_PID_PRESSURE", + "STATUSCHECK_NODE_UNSCHEDULABLE", + "STATUSCHECK_NODE_UNREACHABLE", + "STATUSCHECK_NODE_NOT_READY", + "STATUSCHECK_UNKNOWN", + "STATUSCHECK_UNKNOWN_UNSCHEDULABLE", + "STATUSCHECK_CONTAINER_WAITING_UNKNOWN", + "DEPLOY_UNKNOWN", + "SYNC_UNKNOWN", + "BUILD_UNKNOWN", + "DEVINIT_UNKNOWN", + "CLEANUP_UNKNOWN", + "SYNC_INIT_ERROR", + "DEVINIT_REGISTER_BUILD_DEPS", + "DEVINIT_REGISTER_TEST_DEPS", + "DEVINIT_REGISTER_DEPLOY_DEPS", + "DEVINIT_REGISTER_CONFIG_DEP" ], - "default": "COULD_NOT_DETERMINE" + "default": "UNKNOWN_ERROR" }, { "name": "event.devLoopEvent.err.message", @@ -456,16 +476,6 @@ "required": false, "type": "string" }, - { - "name": "event.devLoopEvent.err.suggestions", - "in": "query", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi" - }, { "name": "entry", "in": "query", @@ -592,24 +602,6 @@ } } }, - "protoActionableErr": { - "type": "object", - "properties": { - "errCode": { - "$ref": "#/definitions/protoErrorCode" - }, - "message": { - "type": "string" - }, - "suggestions": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "description": "`ErrDef` defines an error occurred along with an optional suggestions" - }, "protoBuildEvent": { "type": "object", "properties": { @@ -622,8 +614,8 @@ "err": { "type": "string" }, - "errCode": { - "$ref": "#/definitions/protoErrorCode" + "statusCode": { + "$ref": "#/definitions/protoStatusCode" } }, "description": "`BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not.\nIf the build fails, an error will be attached to the event." @@ -745,8 +737,8 @@ "err": { "type": "string" }, - "errCode": { - "$ref": "#/definitions/protoErrorCode" + "statusCode": { + "$ref": "#/definitions/protoStatusCode" } }, "description": "`DeployEvent` represents the status of a deployment, and is emitted by Skaffold\nanytime a deployment starts or completes, successfully or not." @@ -796,53 +788,22 @@ "type": "string" }, "err": { - "$ref": "#/definitions/protoActionableErr" + "$ref": "#/definitions/protoErrDef" } }, "description": "`DevLoopEvent` marks the start and end of a dev loop." }, - "protoErrorCode": { - "type": "string", - "enum": [ - "COULD_NOT_DETERMINE", - "STATUS_CHECK_NO_ERROR", - "STATUS_CHECK_IMAGE_PULL_ERR", - "STATUS_CHECK_CONTAINER_CREATING", - "STATUS_CHECK_RUN_CONTAINER_ERR", - "STATUS_CHECK_CONTAINER_TERMINATED", - "STATUS_CHECK_CONTAINER_RESTARTING", - "STATUS_CHECK_NODE_MEMORY_PRESSURE", - "STATUS_CHECK_NODE_DISK_PRESSURE", - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - "STATUS_CHECK_NODE_PID_PRESSURE", - "STATUS_CHECK_NODE_UNSCHEDULABLE", - "STATUS_CHECK_NODE_UNREACHABLE", - "STATUS_CHECK_NODE_NOT_READY", - "ErrorCode_UNKNOWN", - "STATUS_CHECK_UNKNOWN", - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - "FILE_SYNC_INIT_ERROR", - "DEV_REGISTER_BUILD_DEPS", - "DEV_REGISTER_TEST_DEPS", - "DEV_REGISTER_DEPLOY_DEPS", - "DEV_REGISTER_CONFIG_DEP" - ], - "default": "COULD_NOT_DETERMINE", -<<<<<<< HEAD -<<<<<<< HEAD -<<<<<<< HEAD - "description": "Enum for error codes\n- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason" -======= - "description": "- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", -======= - "description": "- COULD_NOT_DETERMINE: Could not determine error\n - SUCCESS: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", ->>>>>>> ca8075742... add skaffold end session event -======= - "description": "- COULD_NOT_DETERMINE: Could not determine error\n - STATUS_CHECK_NO_ERROR: Status Check Success\n - STATUS_CHECK_IMAGE_PULL_ERR: Container image pull error\n - STATUS_CHECK_CONTAINER_CREATING: Container creating error\n - STATUS_CHECK_RUN_CONTAINER_ERR: Container run error\n - STATUS_CHECK_CONTAINER_TERMINATED: Container is already terminated\n - STATUS_CHECK_CONTAINER_RESTARTING: Container restarting error\n - STATUS_CHECK_NODE_MEMORY_PRESSURE: Node memory pressure error\n - STATUS_CHECK_NODE_DISK_PRESSURE: Node disk pressure error\n - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE: Node network unavailable error\n - STATUS_CHECK_NODE_PID_PRESSURE: Node PID pressure error\n - STATUS_CHECK_NODE_UNSCHEDULABLE: Node unschedulable error\n - STATUS_CHECK_NODE_UNREACHABLE: Node unreachable error\n - STATUS_CHECK_NODE_NOT_READY: Node not ready error\n - ErrorCode_UNKNOWN: Unknown Error Codes\n - STATUS_CHECK_UNKNOWN: Status Check error unknown\n - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE: Container is unschedulable due to unknown reasons\n - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN: Container is waiting due to unknown reason\n - FILE_SYNC_INIT_ERROR: File Sync Initialize failure\n - DEV_REGISTER_BUILD_DEPS: Failed to configure watcher for build dependencies in dev loop\n - DEV_REGISTER_TEST_DEPS: Failed to configure watcher for test dependencies in dev loop\n - DEV_REGISTER_DEPLOY_DEPS: Failed to configure watcher for deploy dependencies in dev loop\n - DEV_REGISTER_CONFIG_DEP: Failed to configure watcher for Skaffold configuration file.", ->>>>>>> fcd6a6594... Revert "add skaffold end session event" - "description": "Enum for error codes" ->>>>>>> 118d52ef4... Add to indicate start and end of skaffold dev iterations + "protoErrDef": { + "type": "object", + "properties": { + "errCode": { + "$ref": "#/definitions/protoStatusCode" + }, + "message": { + "type": "string" + } + }, + "description": "`ErrDef` defines an error occurred along with an optional suggestions" }, "protoEvent": { "type": "object", @@ -893,8 +854,8 @@ "err": { "type": "string" }, - "errCode": { - "$ref": "#/definitions/protoErrorCode" + "statusCode": { + "$ref": "#/definitions/protoStatusCode" } }, "description": "FileSyncEvent describes the sync status." @@ -1072,8 +1033,8 @@ "err": { "type": "string" }, - "errCode": { - "$ref": "#/definitions/protoErrorCode" + "statusCode": { + "$ref": "#/definitions/protoStatusCode" } }, "description": "`StatusCheckEvent` describes if the status check for kubernetes rollout has started, is in progress, has succeeded or failed." @@ -1094,6 +1055,40 @@ }, "description": "`StatusCheckState` describes the state of status check of current deployed resources." }, + "protoStatusCode": { + "type": "string", + "enum": [ + "UNKNOWN_ERROR", + "STATUSCHECK_SUCCESS", + "STATUSCHECK_IMAGE_PULL_ERR", + "STATUSCHECK_CONTAINER_CREATING", + "STATUSCHECK_RUN_CONTAINER_ERR", + "STATUSCHECK_CONTAINER_TERMINATED", + "STATUSCHECK_CONTAINER_RESTARTING", + "STATUSCHECK_NODE_MEMORY_PRESSURE", + "STATUSCHECK_NODE_DISK_PRESSURE", + "STATUSCHECK_NODE_NETWORK_UNAVAILABLE", + "STATUSCHECK_NODE_PID_PRESSURE", + "STATUSCHECK_NODE_UNSCHEDULABLE", + "STATUSCHECK_NODE_UNREACHABLE", + "STATUSCHECK_NODE_NOT_READY", + "STATUSCHECK_UNKNOWN", + "STATUSCHECK_UNKNOWN_UNSCHEDULABLE", + "STATUSCHECK_CONTAINER_WAITING_UNKNOWN", + "DEPLOY_UNKNOWN", + "SYNC_UNKNOWN", + "BUILD_UNKNOWN", + "DEVINIT_UNKNOWN", + "CLEANUP_UNKNOWN", + "SYNC_INIT_ERROR", + "DEVINIT_REGISTER_BUILD_DEPS", + "DEVINIT_REGISTER_TEST_DEPS", + "DEVINIT_REGISTER_DEPLOY_DEPS", + "DEVINIT_REGISTER_CONFIG_DEP" + ], + "default": "UNKNOWN_ERROR", + "description": "Enum for Status codes\nThese error codes are prepended by Phase Name e.g.\nBUILD, DEPLOY, STATUSCHECK, DEVINIT\n- UNKNOWN_ERROR: Could not determine error and phase\n - STATUSCHECK_SUCCESS: Status Check Success\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_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_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 - 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." + }, "protobufAny": { "type": "object", "properties": { diff --git a/docs/content/en/docs/references/api/grpc.md b/docs/content/en/docs/references/api/grpc.md index e27d7166c2e..3ab66525b9a 100644 --- a/docs/content/en/docs/references/api/grpc.md +++ b/docs/content/en/docs/references/api/grpc.md @@ -49,23 +49,6 @@ Describes all the methods for the Skaffold API - -#### ActionableErr -`ErrDef` defines an error occurred along with an optional suggestions - - -| Field | Type | Label | Description | -| ----- | ---- | ----- | ----------- | -| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | -| message | [string](#string) | | message describing the error. | -| suggestions | [string](#string) | repeated | a list of suggestions for the error. | - - - - - - - #### BuildEvent `BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not. @@ -77,7 +60,7 @@ If the build fails, an error will be attached to the event. | artifact | [string](#string) | | artifact name | | status | [string](#string) | | artifact build status oneof: InProgress, Completed, Failed | | err | [string](#string) | | error when build status is Failed. | -| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | +| statusCode | [StatusCode](#proto.StatusCode) | | status code representing success or failure | @@ -214,7 +197,7 @@ anytime a deployment starts or completes, successfully or not. | ----- | ---- | ----- | ----------- | | status | [string](#string) | | deployment status oneof: InProgress, Completed, Failed | | err | [string](#string) | | error when status is Failed | -| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | +| statusCode | [StatusCode](#proto.StatusCode) | | status code representing success or failure | @@ -276,9 +259,25 @@ anytime a deployment starts or completes, successfully or not. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | -| iteration | [int32](#int32) | | dev loop iteration | +| iteration | [int32](#int32) | | dev loop iteration. 0 represents initialization loop. | | status | [string](#string) | | dev loop status oneof: In Progress, Completed, Failed | -| err | [ActionableErr](#proto.ActionableErr) | | actionable error message | +| err | [ErrDef](#proto.ErrDef) | | actionable error message | + + + + + + + + +#### ErrDef +`ErrDef` defines an error occurred along with an optional suggestions + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| errCode | [StatusCode](#proto.StatusCode) | | error code representing the error | +| message | [string](#string) | | message describing the error. | @@ -321,7 +320,7 @@ FileSyncEvent describes the sync status. | image | [string](#string) | | the container image to which files are sycned. | | status | [string](#string) | | status of file sync. one of: Not Started, In progress, Succeeded, Failed. | | err | [string](#string) | | error in case of status failed. | -| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | +| statusCode | [StatusCode](#proto.StatusCode) | | status code representing success or failure | @@ -564,7 +563,7 @@ will be sent with the new status. | status | [string](#string) | | | | message | [string](#string) | | | | err | [string](#string) | | | -| errCode | [ErrorCode](#proto.ErrorCode) | | error code representing the error | +| statusCode | [StatusCode](#proto.StatusCode) | | status code representing success or failure | @@ -679,36 +678,42 @@ Enum indicating deploy tools used - + -### ErrorCode -Enum for error codes +### StatusCode +Enum for Status codes +These error codes are prepended by Phase Name e.g. +BUILD, DEPLOY, STATUSCHECK, DEVINIT | Name | Number | Description | | ---- | ------ | ----------- | -| COULD_NOT_DETERMINE | 0 | Could not determine error | -| STATUS_CHECK_NO_ERROR | 200 | Status Check Success | -| STATUS_CHECK_IMAGE_PULL_ERR | 300 | Container image pull error | -| STATUS_CHECK_CONTAINER_CREATING | 301 | Container creating error | -| STATUS_CHECK_RUN_CONTAINER_ERR | 302 | Container run error | -| STATUS_CHECK_CONTAINER_TERMINATED | 303 | Container is already terminated | -| STATUS_CHECK_CONTAINER_RESTARTING | 356 | Container restarting error | -| STATUS_CHECK_NODE_MEMORY_PRESSURE | 400 | Node memory pressure error | -| STATUS_CHECK_NODE_DISK_PRESSURE | 401 | Node disk pressure error | -| STATUS_CHECK_NODE_NETWORK_UNAVAILABLE | 402 | Node network unavailable error | -| STATUS_CHECK_NODE_PID_PRESSURE | 403 | Node PID pressure error | -| STATUS_CHECK_NODE_UNSCHEDULABLE | 404 | Node unschedulable error | -| STATUS_CHECK_NODE_UNREACHABLE | 405 | Node unreachable error | -| STATUS_CHECK_NODE_NOT_READY | 406 | Node not ready error | -| ErrorCode_UNKNOWN | 501 | Unknown Error Codes | -| STATUS_CHECK_UNKNOWN | 502 | Status Check error unknown | -| STATUS_CHECK_UNKNOWN_UNSCHEDULABLE | 503 | Container is unschedulable due to unknown reasons | -| STATUS_CHECK_CONTAINER_WAITING_UNKNOWN | 504 | Container is waiting due to unknown reason | -| FILE_SYNC_INIT_ERROR | 601 | File Sync Initialize failure | -| DEV_REGISTER_BUILD_DEPS | 701 | Failed to configure watcher for build dependencies in dev loop | -| DEV_REGISTER_TEST_DEPS | 702 | Failed to configure watcher for test dependencies in dev loop | -| DEV_REGISTER_DEPLOY_DEPS | 703 | Failed to configure watcher for deploy dependencies in dev loop | -| DEV_REGISTER_CONFIG_DEP | 704 | Failed to configure watcher for Skaffold configuration file. | +| UNKNOWN_ERROR | 0 | Could not determine error and phase | +| STATUSCHECK_SUCCESS | 200 | Status Check Success | +| STATUSCHECK_IMAGE_PULL_ERR | 300 | Container image pull error | +| STATUSCHECK_CONTAINER_CREATING | 301 | Container creating error | +| STATUSCHECK_RUN_CONTAINER_ERR | 302 | Container run error | +| STATUSCHECK_CONTAINER_TERMINATED | 303 | Container is already terminated | +| STATUSCHECK_CONTAINER_RESTARTING | 356 | Container restarting error | +| STATUSCHECK_NODE_MEMORY_PRESSURE | 400 | Node memory pressure error | +| STATUSCHECK_NODE_DISK_PRESSURE | 401 | Node disk pressure error | +| STATUSCHECK_NODE_NETWORK_UNAVAILABLE | 402 | Node network unavailable error | +| STATUSCHECK_NODE_PID_PRESSURE | 403 | Node PID pressure error | +| STATUSCHECK_NODE_UNSCHEDULABLE | 404 | Node unschedulable error | +| STATUSCHECK_NODE_UNREACHABLE | 405 | Node unreachable error | +| STATUSCHECK_NODE_NOT_READY | 406 | Node not ready error | +| STATUSCHECK_UNKNOWN | 501 | Status Check error unknown | +| STATUSCHECK_UNKNOWN_UNSCHEDULABLE | 502 | Container is unschedulable due to unknown reasons | +| STATUSCHECK_CONTAINER_WAITING_UNKNOWN | 503 | Container is waiting due to unknown reason | +| DEPLOY_UNKNOWN | 504 | Deploy failed due to unknown reason | +| SYNC_UNKNOWN | 505 | SYNC failed due to known reason | +| BUILD_UNKNOWN | 506 | Build failed due to unknown reason | +| DEVINIT_UNKNOWN | 507 | Dev Init failed due to unknown reason | +| CLEANUP_UNKNOWN | 508 | Cleanup failed due to unknown reason | +| SYNC_INIT_ERROR | 601 | File Sync Initialize failure | +| DEVINIT_REGISTER_BUILD_DEPS | 701 | Failed to configure watcher for build dependencies in dev loop | +| 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. | diff --git a/pkg/skaffold/errors/errors.go b/pkg/skaffold/errors/errors.go index a939532d10a..76d6f94165b 100644 --- a/pkg/skaffold/errors/errors.go +++ b/pkg/skaffold/errors/errors.go @@ -20,16 +20,32 @@ import ( "github.com/GoogleContainerTools/skaffold/proto" ) +// These are phases in a DevLoop const ( Build = Phase("Build") Deploy = Phase("Deploy") StatusCheck = Phase("StatusCheck") FileSync = Phase("FileSync") - Dev = Phase("Dev") + DevInit = Phase("DevInit") + Cleanup = Phase("Cleanup") ) type Phase string -func ErrorCodeFromError(_ Phase, _ error) proto.ErrorCode { - return proto.ErrorCode_ErrorCode_UNKNOWN +func ErrorCodeFromError(phase Phase, _ error) proto.StatusCode { + switch phase { + case Build: + return proto.StatusCode_BUILD_UNKNOWN + case Deploy: + return proto.StatusCode_DEPLOY_UNKNOWN + case StatusCheck: + return proto.StatusCode_STATUSCHECK_UNKNOWN + case FileSync: + return proto.StatusCode_SYNC_UNKNOWN + case DevInit: + return proto.StatusCode_DEVINIT_UNKNOWN + case Cleanup: + return proto.StatusCode_CLEANUP_UNKNOWN + } + return proto.StatusCode_UNKNOWN_ERROR } diff --git a/pkg/skaffold/event/event.go b/pkg/skaffold/event/event.go index c4b99561911..04ad702099d 100644 --- a/pkg/skaffold/event/event.go +++ b/pkg/skaffold/event/event.go @@ -166,8 +166,8 @@ func DeployInProgress() { // DeployFailed notifies that non-fatal errors were encountered during a deployment. func DeployFailed(err error) { - errCode := sErrors.ErrorCodeFromError(sErrors.Deploy, err) - handler.handleDeployEvent(&proto.DeployEvent{Status: Failed, Err: err.Error(), ErrCode: errCode}) + statusCode := sErrors.ErrorCodeFromError(sErrors.Deploy, err) + handler.handleDeployEvent(&proto.DeployEvent{Status: Failed, Err: err.Error(), StatusCode: statusCode}) } // DeployEvent notifies that a deployment of non fatal interesting errors during deploy. @@ -182,11 +182,11 @@ func StatusCheckEventSucceeded() { } func StatusCheckEventFailed(err error) { - errCode := sErrors.ErrorCodeFromError(sErrors.StatusCheck, err) + statusCode := sErrors.ErrorCodeFromError(sErrors.StatusCheck, err) handler.handleStatusCheckEvent(&proto.StatusCheckEvent{ - Status: Failed, - Err: err.Error(), - ErrCode: errCode, + Status: Failed, + Err: err.Error(), + StatusCode: statusCode, }) } @@ -239,8 +239,8 @@ func BuildInProgress(imageName string) { // BuildFailed notifies that a build has failed. func BuildFailed(imageName string, err error) { - errCode := sErrors.ErrorCodeFromError(sErrors.Build, err) - handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Failed, Err: err.Error(), ErrCode: errCode}) + statusCode := sErrors.ErrorCodeFromError(sErrors.Build, err) + handler.handleBuildEvent(&proto.BuildEvent{Artifact: imageName, Status: Failed, Err: err.Error(), StatusCode: statusCode}) } // BuildComplete notifies that a build has completed. @@ -254,11 +254,11 @@ func DevLoopInProgress(i int) { } // DevLoopFailed notifies that a dev loop has failed with an error code -func DevLoopFailedWithErrorCode(i int, errCode proto.ErrorCode, err error) { +func DevLoopFailedWithErrorCode(i int, errCode proto.StatusCode, err error) { handler.handleDevLoopEvent(&proto.DevLoopEvent{ Iteration: int32(i), Status: Failed, - Err: &proto.ActionableErr{ + Err: &proto.ErrDef{ ErrCode: errCode, Message: err.Error(), }}) @@ -266,8 +266,8 @@ func DevLoopFailedWithErrorCode(i int, errCode proto.ErrorCode, err error) { // DevLoopFailed notifies that a dev loop has failed in a given phase func DevLoopFailedInPhase(iteration int, phase sErrors.Phase, err error) { - errCode := sErrors.ErrorCodeFromError(phase, err) - DevLoopFailedWithErrorCode(iteration, errCode, err) + statusCode := sErrors.ErrorCodeFromError(phase, err) + DevLoopFailedWithErrorCode(iteration, statusCode, err) } // DevLoopComplete notifies that a dev loop has completed. @@ -282,8 +282,8 @@ func FileSyncInProgress(fileCount int, image string) { // FileSyncFailed notifies that a file sync has failed. func FileSyncFailed(fileCount int, image string, err error) { - errCode := sErrors.ErrorCodeFromError(sErrors.FileSync, err) - handler.handleFileSyncEvent(&proto.FileSyncEvent{FileCount: int32(fileCount), Image: image, Status: Failed, Err: err.Error(), ErrCode: errCode}) + statusCode := sErrors.ErrorCodeFromError(sErrors.FileSync, err) + handler.handleFileSyncEvent(&proto.FileSyncEvent{FileCount: int32(fileCount), Image: image, Status: Failed, Err: err.Error(), StatusCode: statusCode}) } // FileSyncSucceeded notifies that a file sync has succeeded. @@ -532,11 +532,11 @@ func (ev *eventHandler) handle(event *proto.Event) { de := e.DevLoopEvent switch de.Status { case InProgress: - logEntry.Entry = fmt.Sprintf("Dev Iteration %d in progress", de.Iteration) + logEntry.Entry = fmt.Sprintf("DevInit Iteration %d in progress", de.Iteration) case Succeeded: - logEntry.Entry = fmt.Sprintf("Dev Iteration %d successful", de.Iteration) - default: - logEntry.Entry = fmt.Sprintf("Dev Iteration %d failed with error code %v", de.Iteration, de.Err.ErrCode) + logEntry.Entry = fmt.Sprintf("DevInit Iteration %d successful", de.Iteration) + case Failed: + logEntry.Entry = fmt.Sprintf("DevInit Iteration %d failed with error code %v", de.Iteration, de.Err.ErrCode) } default: return diff --git a/pkg/skaffold/runner/dev.go b/pkg/skaffold/runner/dev.go index 6188a51c0a4..aeb4db45d7b 100644 --- a/pkg/skaffold/runner/dev.go +++ b/pkg/skaffold/runner/dev.go @@ -37,7 +37,6 @@ import ( // ErrorConfigurationChanged is a special error that's returned when the skaffold configuration was changed. var ErrorConfigurationChanged = errors.New("configuration changed") -var iteration = 1 var ( // For testing @@ -63,8 +62,8 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { // if any action is going to be performed, reset the monitor's changed component tracker for debouncing defer r.monitor.Reset() defer r.listener.LogWatchToUser(out) - event.DevLoopInProgress(iteration) - defer func() { iteration++ }() + event.DevLoopInProgress(r.devIteration) + defer func() { r.devIteration++ }() if needsSync { defer func() { r.changeSet.resetSync() @@ -79,7 +78,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { if err := r.syncer.Sync(ctx, s); err != nil { logrus.Warnln("Skipping deploy due to sync error:", err) fileSyncFailed(fileCount, s.Image, err) - event.DevLoopFailedInPhase(iteration, sErrors.FileSync, err) + event.DevLoopFailedInPhase(r.devIteration, sErrors.FileSync, err) return nil } @@ -96,7 +95,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { if _, err := r.BuildAndTest(ctx, out, r.changeSet.needsRebuild); err != nil { logrus.Warnln("Skipping deploy due to error:", err) - event.DevLoopFailedInPhase(iteration, sErrors.Build, err) + event.DevLoopFailedInPhase(r.devIteration, sErrors.Build, err) return nil } } @@ -111,24 +110,25 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { r.forwarderManager.Stop() if err := r.Deploy(ctx, out, r.builds); err != nil { logrus.Warnln("Skipping deploy due to error:", err) - event.DevLoopFailedInPhase(iteration, sErrors.Deploy, err) + event.DevLoopFailedInPhase(r.devIteration, sErrors.Deploy, err) return nil } if err := r.forwarderManager.Start(ctx); err != nil { logrus.Warnln("Port forwarding failed:", err) } } - event.DevLoopComplete(iteration) + event.DevLoopComplete(r.devIteration) r.logger.Unmute() return nil } -// Dev watches for changes and runs the skaffold build and deploy +// DevInit watches for changes and runs the skaffold build and deploy // config until interrupted by the user. func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*latest.Artifact) error { - event.DevLoopInProgress(0) + event.DevLoopInProgress(r.devIteration) r.createLogger(out, artifacts) defer r.logger.Stop() + defer func() { r.devIteration++ }() r.createForwarder(out) defer r.forwarderManager.Stop() @@ -168,7 +168,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la } }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_BUILD_DEPS, err) + event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_DEVINIT_REGISTER_BUILD_DEPS, err) return fmt.Errorf("watching files for artifact %q: %w", artifact.ImageName, err) } } @@ -179,7 +179,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la r.tester.TestDependencies, func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_TEST_DEPS, err) + event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_DEVINIT_REGISTER_TEST_DEPS, err) return fmt.Errorf("watching test files: %w", err) } @@ -188,7 +188,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la r.deployer.Dependencies, func(filemon.Events) { r.changeSet.needsRedeploy = true }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_DEPLOY_DEPS, err) + event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_DEVINIT_REGISTER_DEPLOY_DEPS, err) return fmt.Errorf("watching files for deployer: %w", err) } @@ -197,7 +197,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la func() ([]string, error) { return []string{r.runCtx.Opts.ConfigurationFile}, nil }, func(filemon.Events) { r.changeSet.needsReload = true }, ); err != nil { - event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_DEV_REGISTER_CONFIG_DEP, err) + event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_DEVINIT_REGISTER_CONFIG_DEP, err) return fmt.Errorf("watching skaffold configuration %q: %w", r.runCtx.Opts.ConfigurationFile, err) } @@ -205,13 +205,13 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // Init Sync State if err := sync.Init(ctx, artifacts); err != nil { - event.DevLoopFailedWithErrorCode(0, proto.ErrorCode_FILE_SYNC_INIT_ERROR, err) + event.DevLoopFailedWithErrorCode(r.devIteration, proto.StatusCode_SYNC_INIT_ERROR, err) return fmt.Errorf("exiting dev mode because initializing sync state failed: %w", err) } // First build if _, err := r.BuildAndTest(ctx, out, artifacts); err != nil { - event.DevLoopFailedInPhase(0, sErrors.Build, err) + event.DevLoopFailedInPhase(r.devIteration, sErrors.Build, err) return fmt.Errorf("exiting dev mode because first build failed: %w", err) } @@ -220,7 +220,7 @@ func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*la // First deploy if err := r.Deploy(ctx, out, r.builds); err != nil { - event.DevLoopFailedInPhase(0, sErrors.Deploy, err) + event.DevLoopFailedInPhase(r.devIteration, sErrors.Deploy, err) return fmt.Errorf("exiting dev mode because first deploy failed: %w", err) } diff --git a/pkg/skaffold/runner/runner.go b/pkg/skaffold/runner/runner.go index 9fa6b0828ef..410b4ca73c6 100644 --- a/pkg/skaffold/runner/runner.go +++ b/pkg/skaffold/runner/runner.go @@ -77,6 +77,7 @@ type SkaffoldRunner struct { hasBuilt bool hasDeployed bool intents *intents + devIteration int } // for testing diff --git a/proto/skaffold.pb.go b/proto/skaffold.pb.go index 1086fb52072..3b97c1e6eb5 100644 --- a/proto/skaffold.pb.go +++ b/proto/skaffold.pb.go @@ -183,115 +183,133 @@ func (ClusterType) EnumDescriptor() ([]byte, []int) { return fileDescriptor_4f2d38e344f9dbf5, []int{3} } -// Enum for error codes -type ErrorCode int32 +// Enum for Status codes +// These error codes are prepended by Phase Name e.g. +// BUILD, DEPLOY, STATUSCHECK, DEVINIT +type StatusCode int32 const ( - // Could not determine error - ErrorCode_COULD_NOT_DETERMINE ErrorCode = 0 + // Could not determine error and phase + StatusCode_UNKNOWN_ERROR StatusCode = 0 // Status Check Success - ErrorCode_STATUS_CHECK_NO_ERROR ErrorCode = 200 + StatusCode_STATUSCHECK_SUCCESS StatusCode = 200 // Container image pull error - ErrorCode_STATUS_CHECK_IMAGE_PULL_ERR ErrorCode = 300 + StatusCode_STATUSCHECK_IMAGE_PULL_ERR StatusCode = 300 // Container creating error - ErrorCode_STATUS_CHECK_CONTAINER_CREATING ErrorCode = 301 + StatusCode_STATUSCHECK_CONTAINER_CREATING StatusCode = 301 // Container run error - ErrorCode_STATUS_CHECK_RUN_CONTAINER_ERR ErrorCode = 302 + StatusCode_STATUSCHECK_RUN_CONTAINER_ERR StatusCode = 302 // Container is already terminated - ErrorCode_STATUS_CHECK_CONTAINER_TERMINATED ErrorCode = 303 + StatusCode_STATUSCHECK_CONTAINER_TERMINATED StatusCode = 303 // Container restarting error - ErrorCode_STATUS_CHECK_CONTAINER_RESTARTING ErrorCode = 356 + StatusCode_STATUSCHECK_CONTAINER_RESTARTING StatusCode = 356 // Node memory pressure error - ErrorCode_STATUS_CHECK_NODE_MEMORY_PRESSURE ErrorCode = 400 + StatusCode_STATUSCHECK_NODE_MEMORY_PRESSURE StatusCode = 400 // Node disk pressure error - ErrorCode_STATUS_CHECK_NODE_DISK_PRESSURE ErrorCode = 401 + StatusCode_STATUSCHECK_NODE_DISK_PRESSURE StatusCode = 401 // Node network unavailable error - ErrorCode_STATUS_CHECK_NODE_NETWORK_UNAVAILABLE ErrorCode = 402 + StatusCode_STATUSCHECK_NODE_NETWORK_UNAVAILABLE StatusCode = 402 // Node PID pressure error - ErrorCode_STATUS_CHECK_NODE_PID_PRESSURE ErrorCode = 403 + StatusCode_STATUSCHECK_NODE_PID_PRESSURE StatusCode = 403 // Node unschedulable error - ErrorCode_STATUS_CHECK_NODE_UNSCHEDULABLE ErrorCode = 404 + StatusCode_STATUSCHECK_NODE_UNSCHEDULABLE StatusCode = 404 // Node unreachable error - ErrorCode_STATUS_CHECK_NODE_UNREACHABLE ErrorCode = 405 + StatusCode_STATUSCHECK_NODE_UNREACHABLE StatusCode = 405 // Node not ready error - ErrorCode_STATUS_CHECK_NODE_NOT_READY ErrorCode = 406 - // Unknown Error Codes - ErrorCode_ErrorCode_UNKNOWN ErrorCode = 501 + StatusCode_STATUSCHECK_NODE_NOT_READY StatusCode = 406 // Status Check error unknown - ErrorCode_STATUS_CHECK_UNKNOWN ErrorCode = 502 + StatusCode_STATUSCHECK_UNKNOWN StatusCode = 501 // Container is unschedulable due to unknown reasons - ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE ErrorCode = 503 + StatusCode_STATUSCHECK_UNKNOWN_UNSCHEDULABLE StatusCode = 502 // Container is waiting due to unknown reason - ErrorCode_STATUS_CHECK_CONTAINER_WAITING_UNKNOWN ErrorCode = 504 + StatusCode_STATUSCHECK_CONTAINER_WAITING_UNKNOWN StatusCode = 503 + // Deploy failed due to unknown reason + StatusCode_DEPLOY_UNKNOWN StatusCode = 504 + // SYNC failed due to known reason + StatusCode_SYNC_UNKNOWN StatusCode = 505 + // Build failed due to unknown reason + StatusCode_BUILD_UNKNOWN StatusCode = 506 + // Dev Init failed due to unknown reason + StatusCode_DEVINIT_UNKNOWN StatusCode = 507 + // Cleanup failed due to unknown reason + StatusCode_CLEANUP_UNKNOWN StatusCode = 508 // File Sync Initialize failure - ErrorCode_FILE_SYNC_INIT_ERROR ErrorCode = 601 + StatusCode_SYNC_INIT_ERROR StatusCode = 601 // Failed to configure watcher for build dependencies in dev loop - ErrorCode_DEV_REGISTER_BUILD_DEPS ErrorCode = 701 + StatusCode_DEVINIT_REGISTER_BUILD_DEPS StatusCode = 701 // Failed to configure watcher for test dependencies in dev loop - ErrorCode_DEV_REGISTER_TEST_DEPS ErrorCode = 702 + StatusCode_DEVINIT_REGISTER_TEST_DEPS StatusCode = 702 // Failed to configure watcher for deploy dependencies in dev loop - ErrorCode_DEV_REGISTER_DEPLOY_DEPS ErrorCode = 703 + StatusCode_DEVINIT_REGISTER_DEPLOY_DEPS StatusCode = 703 // Failed to configure watcher for Skaffold configuration file. - ErrorCode_DEV_REGISTER_CONFIG_DEP ErrorCode = 704 + StatusCode_DEVINIT_REGISTER_CONFIG_DEP StatusCode = 704 ) -var ErrorCode_name = map[int32]string{ - 0: "COULD_NOT_DETERMINE", - 200: "STATUS_CHECK_NO_ERROR", - 300: "STATUS_CHECK_IMAGE_PULL_ERR", - 301: "STATUS_CHECK_CONTAINER_CREATING", - 302: "STATUS_CHECK_RUN_CONTAINER_ERR", - 303: "STATUS_CHECK_CONTAINER_TERMINATED", - 356: "STATUS_CHECK_CONTAINER_RESTARTING", - 400: "STATUS_CHECK_NODE_MEMORY_PRESSURE", - 401: "STATUS_CHECK_NODE_DISK_PRESSURE", - 402: "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE", - 403: "STATUS_CHECK_NODE_PID_PRESSURE", - 404: "STATUS_CHECK_NODE_UNSCHEDULABLE", - 405: "STATUS_CHECK_NODE_UNREACHABLE", - 406: "STATUS_CHECK_NODE_NOT_READY", - 501: "ErrorCode_UNKNOWN", - 502: "STATUS_CHECK_UNKNOWN", - 503: "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE", - 504: "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN", - 601: "FILE_SYNC_INIT_ERROR", - 701: "DEV_REGISTER_BUILD_DEPS", - 702: "DEV_REGISTER_TEST_DEPS", - 703: "DEV_REGISTER_DEPLOY_DEPS", - 704: "DEV_REGISTER_CONFIG_DEP", -} - -var ErrorCode_value = map[string]int32{ - "COULD_NOT_DETERMINE": 0, - "STATUS_CHECK_NO_ERROR": 200, - "STATUS_CHECK_IMAGE_PULL_ERR": 300, - "STATUS_CHECK_CONTAINER_CREATING": 301, - "STATUS_CHECK_RUN_CONTAINER_ERR": 302, - "STATUS_CHECK_CONTAINER_TERMINATED": 303, - "STATUS_CHECK_CONTAINER_RESTARTING": 356, - "STATUS_CHECK_NODE_MEMORY_PRESSURE": 400, - "STATUS_CHECK_NODE_DISK_PRESSURE": 401, - "STATUS_CHECK_NODE_NETWORK_UNAVAILABLE": 402, - "STATUS_CHECK_NODE_PID_PRESSURE": 403, - "STATUS_CHECK_NODE_UNSCHEDULABLE": 404, - "STATUS_CHECK_NODE_UNREACHABLE": 405, - "STATUS_CHECK_NODE_NOT_READY": 406, - "ErrorCode_UNKNOWN": 501, - "STATUS_CHECK_UNKNOWN": 502, - "STATUS_CHECK_UNKNOWN_UNSCHEDULABLE": 503, - "STATUS_CHECK_CONTAINER_WAITING_UNKNOWN": 504, - "FILE_SYNC_INIT_ERROR": 601, - "DEV_REGISTER_BUILD_DEPS": 701, - "DEV_REGISTER_TEST_DEPS": 702, - "DEV_REGISTER_DEPLOY_DEPS": 703, - "DEV_REGISTER_CONFIG_DEP": 704, -} - -func (x ErrorCode) String() string { - return proto.EnumName(ErrorCode_name, int32(x)) -} - -func (ErrorCode) EnumDescriptor() ([]byte, []int) { +var StatusCode_name = map[int32]string{ + 0: "UNKNOWN_ERROR", + 200: "STATUSCHECK_SUCCESS", + 300: "STATUSCHECK_IMAGE_PULL_ERR", + 301: "STATUSCHECK_CONTAINER_CREATING", + 302: "STATUSCHECK_RUN_CONTAINER_ERR", + 303: "STATUSCHECK_CONTAINER_TERMINATED", + 356: "STATUSCHECK_CONTAINER_RESTARTING", + 400: "STATUSCHECK_NODE_MEMORY_PRESSURE", + 401: "STATUSCHECK_NODE_DISK_PRESSURE", + 402: "STATUSCHECK_NODE_NETWORK_UNAVAILABLE", + 403: "STATUSCHECK_NODE_PID_PRESSURE", + 404: "STATUSCHECK_NODE_UNSCHEDULABLE", + 405: "STATUSCHECK_NODE_UNREACHABLE", + 406: "STATUSCHECK_NODE_NOT_READY", + 501: "STATUSCHECK_UNKNOWN", + 502: "STATUSCHECK_UNKNOWN_UNSCHEDULABLE", + 503: "STATUSCHECK_CONTAINER_WAITING_UNKNOWN", + 504: "DEPLOY_UNKNOWN", + 505: "SYNC_UNKNOWN", + 506: "BUILD_UNKNOWN", + 507: "DEVINIT_UNKNOWN", + 508: "CLEANUP_UNKNOWN", + 601: "SYNC_INIT_ERROR", + 701: "DEVINIT_REGISTER_BUILD_DEPS", + 702: "DEVINIT_REGISTER_TEST_DEPS", + 703: "DEVINIT_REGISTER_DEPLOY_DEPS", + 704: "DEVINIT_REGISTER_CONFIG_DEP", +} + +var StatusCode_value = map[string]int32{ + "UNKNOWN_ERROR": 0, + "STATUSCHECK_SUCCESS": 200, + "STATUSCHECK_IMAGE_PULL_ERR": 300, + "STATUSCHECK_CONTAINER_CREATING": 301, + "STATUSCHECK_RUN_CONTAINER_ERR": 302, + "STATUSCHECK_CONTAINER_TERMINATED": 303, + "STATUSCHECK_CONTAINER_RESTARTING": 356, + "STATUSCHECK_NODE_MEMORY_PRESSURE": 400, + "STATUSCHECK_NODE_DISK_PRESSURE": 401, + "STATUSCHECK_NODE_NETWORK_UNAVAILABLE": 402, + "STATUSCHECK_NODE_PID_PRESSURE": 403, + "STATUSCHECK_NODE_UNSCHEDULABLE": 404, + "STATUSCHECK_NODE_UNREACHABLE": 405, + "STATUSCHECK_NODE_NOT_READY": 406, + "STATUSCHECK_UNKNOWN": 501, + "STATUSCHECK_UNKNOWN_UNSCHEDULABLE": 502, + "STATUSCHECK_CONTAINER_WAITING_UNKNOWN": 503, + "DEPLOY_UNKNOWN": 504, + "SYNC_UNKNOWN": 505, + "BUILD_UNKNOWN": 506, + "DEVINIT_UNKNOWN": 507, + "CLEANUP_UNKNOWN": 508, + "SYNC_INIT_ERROR": 601, + "DEVINIT_REGISTER_BUILD_DEPS": 701, + "DEVINIT_REGISTER_TEST_DEPS": 702, + "DEVINIT_REGISTER_DEPLOY_DEPS": 703, + "DEVINIT_REGISTER_CONFIG_DEP": 704, +} + +func (x StatusCode) String() string { + return proto.EnumName(StatusCode_name, int32(x)) +} + +func (StatusCode) EnumDescriptor() ([]byte, []int) { return fileDescriptor_4f2d38e344f9dbf5, []int{4} } @@ -1131,12 +1149,12 @@ func (*Event) XXX_OneofWrappers() []interface{} { // `DevLoopEvent` marks the start and end of a dev loop. type DevLoopEvent struct { - Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - Err *ActionableErr `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Iteration int32 `protobuf:"varint,1,opt,name=iteration,proto3" json:"iteration,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + Err *ErrDef `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DevLoopEvent) Reset() { *m = DevLoopEvent{} } @@ -1178,7 +1196,7 @@ func (m *DevLoopEvent) GetStatus() string { return "" } -func (m *DevLoopEvent) GetErr() *ActionableErr { +func (m *DevLoopEvent) GetErr() *ErrDef { if m != nil { return m.Err } @@ -1186,61 +1204,53 @@ func (m *DevLoopEvent) GetErr() *ActionableErr { } // `ErrDef` defines an error occurred along with an optional suggestions -type ActionableErr struct { - ErrCode ErrorCode `protobuf:"varint,1,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - Suggestions []string `protobuf:"bytes,3,rep,name=suggestions,proto3" json:"suggestions,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` -} - -func (m *ActionableErr) Reset() { *m = ActionableErr{} } -func (m *ActionableErr) String() string { return proto.CompactTextString(m) } -func (*ActionableErr) ProtoMessage() {} -func (*ActionableErr) Descriptor() ([]byte, []int) { +type ErrDef struct { + ErrCode StatusCode `protobuf:"varint,1,opt,name=errCode,proto3,enum=proto.StatusCode" json:"errCode,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *ErrDef) Reset() { *m = ErrDef{} } +func (m *ErrDef) String() string { return proto.CompactTextString(m) } +func (*ErrDef) ProtoMessage() {} +func (*ErrDef) Descriptor() ([]byte, []int) { return fileDescriptor_4f2d38e344f9dbf5, []int{13} } -func (m *ActionableErr) XXX_Unmarshal(b []byte) error { - return xxx_messageInfo_ActionableErr.Unmarshal(m, b) +func (m *ErrDef) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_ErrDef.Unmarshal(m, b) } -func (m *ActionableErr) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - return xxx_messageInfo_ActionableErr.Marshal(b, m, deterministic) +func (m *ErrDef) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_ErrDef.Marshal(b, m, deterministic) } -func (m *ActionableErr) XXX_Merge(src proto.Message) { - xxx_messageInfo_ActionableErr.Merge(m, src) +func (m *ErrDef) XXX_Merge(src proto.Message) { + xxx_messageInfo_ErrDef.Merge(m, src) } -func (m *ActionableErr) XXX_Size() int { - return xxx_messageInfo_ActionableErr.Size(m) +func (m *ErrDef) XXX_Size() int { + return xxx_messageInfo_ErrDef.Size(m) } -func (m *ActionableErr) XXX_DiscardUnknown() { - xxx_messageInfo_ActionableErr.DiscardUnknown(m) +func (m *ErrDef) XXX_DiscardUnknown() { + xxx_messageInfo_ErrDef.DiscardUnknown(m) } -var xxx_messageInfo_ActionableErr proto.InternalMessageInfo +var xxx_messageInfo_ErrDef proto.InternalMessageInfo -func (m *ActionableErr) GetErrCode() ErrorCode { +func (m *ErrDef) GetErrCode() StatusCode { if m != nil { return m.ErrCode } - return ErrorCode_COULD_NOT_DETERMINE + return StatusCode_UNKNOWN_ERROR } -func (m *ActionableErr) GetMessage() string { +func (m *ErrDef) GetMessage() string { if m != nil { return m.Message } return "" } -func (m *ActionableErr) GetSuggestions() []string { - if m != nil { - return m.Suggestions - } - return nil -} - // `MetaEvent` provides general information regarding Skaffold type MetaEvent struct { // entry, for example: `"Starting Skaffold: {Version:v0.39.0-16-g5bb7c9e0 ConfigVersion:skaffold/v1 GitVersion: GitCommit:5bb7c9e078e4d522a5ffc42a2f1274fd17d75902 GitTreeState:dirty BuildDate01:29Z GoVersion:go1.13rc1 Compiler:gc Platform:linux/amd64}"` @@ -1294,13 +1304,13 @@ func (m *MetaEvent) GetMetadata() *Metadata { // `BuildEvent` describes the build status per artifact, and will be emitted by Skaffold anytime a build starts or finishes, successfully or not. // If the build fails, an error will be attached to the event. type BuildEvent struct { - Artifact string `protobuf:"bytes,1,opt,name=artifact,proto3" json:"artifact,omitempty"` - Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` - Err string `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` - ErrCode ErrorCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Artifact string `protobuf:"bytes,1,opt,name=artifact,proto3" json:"artifact,omitempty"` + Status string `protobuf:"bytes,2,opt,name=status,proto3" json:"status,omitempty"` + Err string `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` + StatusCode StatusCode `protobuf:"varint,4,opt,name=statusCode,proto3,enum=proto.StatusCode" json:"statusCode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *BuildEvent) Reset() { *m = BuildEvent{} } @@ -1349,22 +1359,22 @@ func (m *BuildEvent) GetErr() string { return "" } -func (m *BuildEvent) GetErrCode() ErrorCode { +func (m *BuildEvent) GetStatusCode() StatusCode { if m != nil { - return m.ErrCode + return m.StatusCode } - return ErrorCode_COULD_NOT_DETERMINE + return StatusCode_UNKNOWN_ERROR } // `DeployEvent` represents the status of a deployment, and is emitted by Skaffold // anytime a deployment starts or completes, successfully or not. type DeployEvent struct { - Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - Err string `protobuf:"bytes,2,opt,name=err,proto3" json:"err,omitempty"` - ErrCode ErrorCode `protobuf:"varint,3,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + Err string `protobuf:"bytes,2,opt,name=err,proto3" json:"err,omitempty"` + StatusCode StatusCode `protobuf:"varint,3,opt,name=statusCode,proto3,enum=proto.StatusCode" json:"statusCode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *DeployEvent) Reset() { *m = DeployEvent{} } @@ -1406,22 +1416,22 @@ func (m *DeployEvent) GetErr() string { return "" } -func (m *DeployEvent) GetErrCode() ErrorCode { +func (m *DeployEvent) GetStatusCode() StatusCode { if m != nil { - return m.ErrCode + return m.StatusCode } - return ErrorCode_COULD_NOT_DETERMINE + return StatusCode_UNKNOWN_ERROR } // `StatusCheckEvent` describes if the status check for kubernetes rollout has started, is in progress, has succeeded or failed. type StatusCheckEvent struct { - Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` - Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` - Err string `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` - ErrCode ErrorCode `protobuf:"varint,4,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Status string `protobuf:"bytes,1,opt,name=status,proto3" json:"status,omitempty"` + Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` + Err string `protobuf:"bytes,3,opt,name=err,proto3" json:"err,omitempty"` + StatusCode StatusCode `protobuf:"varint,4,opt,name=statusCode,proto3,enum=proto.StatusCode" json:"statusCode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *StatusCheckEvent) Reset() { *m = StatusCheckEvent{} } @@ -1470,11 +1480,11 @@ func (m *StatusCheckEvent) GetErr() string { return "" } -func (m *StatusCheckEvent) GetErrCode() ErrorCode { +func (m *StatusCheckEvent) GetStatusCode() StatusCode { if m != nil { - return m.ErrCode + return m.StatusCode } - return ErrorCode_COULD_NOT_DETERMINE + return StatusCode_UNKNOWN_ERROR } // A Resource StatusCheck Event, indicates progress for each kubernetes deployment. @@ -1651,14 +1661,14 @@ func (m *PortEvent) GetAddress() string { // FileSyncEvent describes the sync status. type FileSyncEvent struct { - FileCount int32 `protobuf:"varint,1,opt,name=fileCount,proto3" json:"fileCount,omitempty"` - Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` - Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` - Err string `protobuf:"bytes,4,opt,name=err,proto3" json:"err,omitempty"` - ErrCode ErrorCode `protobuf:"varint,5,opt,name=errCode,proto3,enum=proto.ErrorCode" json:"errCode,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + FileCount int32 `protobuf:"varint,1,opt,name=fileCount,proto3" json:"fileCount,omitempty"` + Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` + Status string `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` + Err string `protobuf:"bytes,4,opt,name=err,proto3" json:"err,omitempty"` + StatusCode StatusCode `protobuf:"varint,5,opt,name=statusCode,proto3,enum=proto.StatusCode" json:"statusCode,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *FileSyncEvent) Reset() { *m = FileSyncEvent{} } @@ -1714,11 +1724,11 @@ func (m *FileSyncEvent) GetErr() string { return "" } -func (m *FileSyncEvent) GetErrCode() ErrorCode { +func (m *FileSyncEvent) GetStatusCode() StatusCode { if m != nil { - return m.ErrCode + return m.StatusCode } - return ErrorCode_COULD_NOT_DETERMINE + return StatusCode_UNKNOWN_ERROR } // DebuggingContainerEvent is raised when a debugging container is started or terminated @@ -1973,7 +1983,7 @@ func init() { proto.RegisterEnum("proto.BuildType", BuildType_name, BuildType_value) proto.RegisterEnum("proto.DeployerType", DeployerType_name, DeployerType_value) proto.RegisterEnum("proto.ClusterType", ClusterType_name, ClusterType_value) - proto.RegisterEnum("proto.ErrorCode", ErrorCode_name, ErrorCode_value) + proto.RegisterEnum("proto.StatusCode", StatusCode_name, StatusCode_value) proto.RegisterType((*StateResponse)(nil), "proto.StateResponse") proto.RegisterType((*Response)(nil), "proto.Response") proto.RegisterType((*Request)(nil), "proto.Request") @@ -1994,7 +2004,7 @@ func init() { proto.RegisterType((*FileSyncState)(nil), "proto.FileSyncState") proto.RegisterType((*Event)(nil), "proto.Event") proto.RegisterType((*DevLoopEvent)(nil), "proto.DevLoopEvent") - proto.RegisterType((*ActionableErr)(nil), "proto.ActionableErr") + proto.RegisterType((*ErrDef)(nil), "proto.ErrDef") proto.RegisterType((*MetaEvent)(nil), "proto.MetaEvent") proto.RegisterType((*BuildEvent)(nil), "proto.BuildEvent") proto.RegisterType((*DeployEvent)(nil), "proto.DeployEvent") @@ -2012,145 +2022,145 @@ func init() { func init() { proto.RegisterFile("skaffold.proto", fileDescriptor_4f2d38e344f9dbf5) } var fileDescriptor_4f2d38e344f9dbf5 = []byte{ - // 2194 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x58, 0x4b, 0x6f, 0x1b, 0xc9, - 0x11, 0x36, 0x39, 0x7c, 0x4d, 0xe9, 0xe1, 0x51, 0x5b, 0xb6, 0xb9, 0xb4, 0x6c, 0x2b, 0x13, 0x5b, - 0x36, 0xb4, 0x1b, 0xc9, 0x6b, 0x07, 0x81, 0x63, 0x38, 0x09, 0xa8, 0xe1, 0x58, 0x1c, 0x93, 0x1a, - 0x0a, 0x4d, 0x72, 0x1d, 0x1b, 0x08, 0x88, 0x11, 0xd9, 0xe2, 0x12, 0x26, 0x39, 0xcc, 0xcc, 0xd0, - 0x8e, 0x72, 0xd8, 0xc3, 0x1e, 0x73, 0xda, 0x64, 0xb3, 0x01, 0x72, 0x4f, 0x6e, 0xc9, 0xe6, 0x17, - 0xe4, 0x71, 0x4b, 0xee, 0x39, 0xe5, 0x18, 0x60, 0x73, 0xca, 0x35, 0xaf, 0x63, 0xd0, 0xaf, 0x79, - 0xf0, 0x21, 0x61, 0xb1, 0x27, 0xb2, 0xab, 0xbe, 0xfa, 0xaa, 0xba, 0xba, 0xba, 0xba, 0x7b, 0x60, - 0xdd, 0x7f, 0xed, 0x9c, 0x9e, 0xba, 0xc3, 0xde, 0xde, 0xc4, 0x73, 0x03, 0x17, 0x65, 0xd9, 0x4f, - 0x69, 0xab, 0xef, 0xba, 0xfd, 0x21, 0xd9, 0x77, 0x26, 0x83, 0x7d, 0x67, 0x3c, 0x76, 0x03, 0x27, - 0x18, 0xb8, 0x63, 0x9f, 0x83, 0x4a, 0xb7, 0x85, 0x96, 0x8d, 0x4e, 0xa6, 0xa7, 0xfb, 0xc1, 0x60, - 0x44, 0xfc, 0xc0, 0x19, 0x4d, 0x04, 0xe0, 0xc6, 0x2c, 0x80, 0x8c, 0x26, 0xc1, 0x19, 0x57, 0xea, - 0x8f, 0x60, 0xad, 0x19, 0x38, 0x01, 0xc1, 0xc4, 0x9f, 0xb8, 0x63, 0x9f, 0x20, 0x1d, 0xb2, 0x3e, - 0x15, 0x14, 0x53, 0xdb, 0xa9, 0xfb, 0x2b, 0x0f, 0x57, 0x39, 0x6e, 0x8f, 0x83, 0xb8, 0x4a, 0xdf, - 0x82, 0x42, 0x88, 0xd7, 0x40, 0x19, 0xf9, 0x7d, 0x86, 0x56, 0x31, 0xfd, 0xab, 0xdf, 0x84, 0x3c, - 0x26, 0x3f, 0x9c, 0x12, 0x3f, 0x40, 0x08, 0x32, 0x63, 0x67, 0x44, 0x84, 0x96, 0xfd, 0xd7, 0x3f, - 0xcb, 0x40, 0x96, 0xb1, 0xa1, 0xf7, 0x01, 0x4e, 0xa6, 0x83, 0x61, 0xaf, 0x19, 0xf3, 0xb7, 0x21, - 0xfc, 0x1d, 0x84, 0x0a, 0x1c, 0x03, 0xa1, 0x6f, 0xc2, 0x4a, 0x8f, 0x4c, 0x86, 0xee, 0x19, 0xb7, - 0x49, 0x33, 0x1b, 0x24, 0x6c, 0x2a, 0x91, 0x06, 0xc7, 0x61, 0xa8, 0x0a, 0xeb, 0xa7, 0xae, 0xf7, - 0xd6, 0xf1, 0x7a, 0xa4, 0x77, 0xec, 0x7a, 0x81, 0x5f, 0xcc, 0x6c, 0x2b, 0xf7, 0x57, 0x1e, 0x6e, - 0xc7, 0x27, 0xb7, 0xf7, 0x2c, 0x01, 0x31, 0xc7, 0x81, 0x77, 0x86, 0x67, 0xec, 0x90, 0x01, 0x1a, - 0x4d, 0xc1, 0xd4, 0x37, 0x3e, 0x24, 0xdd, 0xd7, 0x3c, 0x88, 0x2c, 0x0b, 0xe2, 0x7a, 0x8c, 0x2b, - 0xae, 0xc6, 0x73, 0x06, 0xe8, 0x09, 0xac, 0x9d, 0x0e, 0x86, 0xa4, 0x79, 0x36, 0xee, 0x72, 0x86, - 0x1c, 0x63, 0xd8, 0x14, 0x0c, 0xcf, 0xe2, 0x3a, 0x9c, 0x84, 0xa2, 0x63, 0xb8, 0xd2, 0x23, 0x27, - 0xd3, 0x7e, 0x7f, 0x30, 0xee, 0x1b, 0xee, 0x38, 0x70, 0x06, 0x63, 0xe2, 0xf9, 0xc5, 0x3c, 0x9b, - 0xcf, 0xad, 0x30, 0x11, 0xb3, 0x08, 0xf3, 0x0d, 0x19, 0x07, 0x78, 0x91, 0x29, 0x7a, 0x17, 0x0a, - 0x23, 0x12, 0x38, 0x3d, 0x27, 0x70, 0x8a, 0x05, 0x16, 0xc8, 0x65, 0x41, 0x73, 0x24, 0xc4, 0x38, - 0x04, 0x94, 0x9a, 0x70, 0x65, 0x41, 0x9a, 0x68, 0x11, 0xbc, 0x26, 0x67, 0x6c, 0x09, 0xb3, 0x98, - 0xfe, 0x45, 0x3b, 0x90, 0x7d, 0xe3, 0x0c, 0xa7, 0x72, 0x89, 0x34, 0x41, 0x49, 0x6d, 0x78, 0x2c, - 0x5c, 0xfd, 0x24, 0xfd, 0x38, 0xf5, 0x3c, 0x53, 0x50, 0xb4, 0x8c, 0xfe, 0x8f, 0x14, 0x14, 0xa4, - 0x47, 0xb4, 0x0b, 0x59, 0xb6, 0xea, 0xa2, 0x2a, 0x36, 0xe3, 0x55, 0x11, 0x86, 0xc5, 0x21, 0xe8, - 0x1b, 0x90, 0xe3, 0x8b, 0x2d, 0x7c, 0x5d, 0x4d, 0x94, 0x43, 0x88, 0x16, 0x20, 0xf4, 0x3d, 0x00, - 0xa7, 0xd7, 0x1b, 0xd0, 0x2d, 0xe4, 0x0c, 0x8b, 0x5d, 0x96, 0xb8, 0xdb, 0x33, 0x33, 0xde, 0x2b, - 0x87, 0x08, 0x5e, 0x07, 0x31, 0x93, 0xd2, 0x77, 0xe0, 0xf2, 0x8c, 0x3a, 0x3e, 0x7f, 0x95, 0xcf, - 0x7f, 0x33, 0x3e, 0x7f, 0x35, 0x36, 0x5b, 0xfd, 0x9f, 0x69, 0x58, 0x4b, 0xcc, 0x03, 0xbd, 0x07, - 0x1b, 0xe3, 0xe9, 0xe8, 0x84, 0x78, 0x8d, 0xd3, 0xb2, 0x17, 0x0c, 0x4e, 0x9d, 0x6e, 0xe0, 0x8b, - 0x5c, 0xce, 0x2b, 0xd0, 0x63, 0x28, 0xb0, 0x79, 0xd3, 0x65, 0x4f, 0xb3, 0xe8, 0xb7, 0x16, 0x65, - 0x87, 0x8f, 0x88, 0x87, 0x43, 0x34, 0xba, 0x03, 0x99, 0xe0, 0x6c, 0x42, 0x8a, 0xca, 0x76, 0xea, - 0xfe, 0x7a, 0xb8, 0x24, 0x0c, 0xd7, 0x3a, 0x9b, 0x10, 0xcc, 0xb4, 0xa8, 0xb2, 0x20, 0x3f, 0x77, - 0x16, 0x7a, 0x38, 0x2f, 0x49, 0x87, 0x90, 0x17, 0x01, 0xa0, 0x1d, 0xe1, 0x36, 0xc5, 0xdc, 0xa2, - 0x38, 0x15, 0xf1, 0x62, 0x8e, 0x37, 0x21, 0xdb, 0x75, 0xa7, 0xe3, 0x80, 0xa5, 0x2c, 0x8b, 0xf9, - 0xe0, 0xab, 0x66, 0xfb, 0xcf, 0x29, 0x58, 0x4f, 0x16, 0x02, 0x7a, 0x0a, 0x2a, 0x2f, 0x05, 0x9a, - 0xc1, 0xd4, 0xcc, 0xc6, 0x89, 0x23, 0xc5, 0x90, 0x78, 0x38, 0x32, 0x40, 0xef, 0x41, 0xbe, 0x3b, - 0x9c, 0xfa, 0x01, 0xf1, 0x98, 0xb3, 0x68, 0x42, 0x06, 0x97, 0xb2, 0x09, 0x49, 0x48, 0xc9, 0x82, - 0x82, 0x24, 0x41, 0xf7, 0x12, 0x79, 0xb8, 0x92, 0x70, 0x79, 0x71, 0x22, 0xf4, 0x9f, 0xa4, 0x00, - 0xa2, 0xae, 0x88, 0xbe, 0x0b, 0xaa, 0x13, 0x2b, 0x96, 0x78, 0x3b, 0x8b, 0x50, 0x7b, 0x61, 0xd9, - 0xf0, 0x15, 0x8a, 0x4c, 0x4a, 0x4f, 0x61, 0x3d, 0xa9, 0xfc, 0x52, 0x69, 0xbd, 0x0b, 0x2b, 0xb1, - 0x6e, 0x8b, 0xae, 0x41, 0x8e, 0x77, 0x39, 0x61, 0x2d, 0x46, 0xfa, 0xe7, 0x29, 0xd0, 0x66, 0x1b, - 0xe2, 0x32, 0x30, 0xaa, 0x80, 0xea, 0x11, 0xdf, 0x9d, 0x7a, 0x5d, 0x22, 0x2b, 0x7b, 0x67, 0x49, - 0x53, 0xdd, 0xc3, 0x12, 0x28, 0xe6, 0x15, 0x1a, 0xd2, 0x79, 0x25, 0x95, 0x5f, 0x6a, 0x5e, 0xf7, - 0x60, 0x2d, 0xd1, 0x7e, 0x97, 0xce, 0xec, 0xef, 0x19, 0xc8, 0xb2, 0x46, 0x86, 0x1e, 0x80, 0x4a, - 0xdb, 0x23, 0x1b, 0x88, 0x76, 0xa5, 0xc5, 0xda, 0x09, 0x93, 0x57, 0x2f, 0xe1, 0x08, 0x84, 0x1e, - 0x89, 0x73, 0x8f, 0x9b, 0xa4, 0xe7, 0xcf, 0x3d, 0x69, 0x13, 0x83, 0xa1, 0x6f, 0xc9, 0x93, 0x8f, - 0x5b, 0x29, 0x0b, 0x4e, 0x3e, 0x69, 0x16, 0x07, 0xd2, 0xf0, 0x26, 0xb2, 0xe9, 0x16, 0x33, 0x8b, - 0x9b, 0x31, 0x0d, 0x2f, 0x04, 0x21, 0x33, 0x71, 0xc6, 0x71, 0xc3, 0xa5, 0x67, 0x9c, 0xb4, 0x9f, - 0x33, 0x41, 0x3f, 0x80, 0xa2, 0x5c, 0x95, 0x59, 0xbc, 0x38, 0xf0, 0x64, 0xd7, 0xc5, 0x4b, 0x60, - 0xd5, 0x4b, 0x78, 0x29, 0x05, 0x7a, 0x1a, 0x1d, 0xa2, 0x9c, 0x33, 0xbf, 0xf0, 0x10, 0x95, 0x44, - 0x49, 0x30, 0x7a, 0x05, 0xd7, 0x7b, 0x8b, 0x0f, 0x49, 0x71, 0x06, 0x5e, 0x70, 0x94, 0x56, 0x2f, - 0xe1, 0x65, 0x04, 0xe8, 0xdb, 0xb0, 0xda, 0x23, 0x6f, 0xea, 0xae, 0x3b, 0xe1, 0x84, 0x2a, 0x23, - 0x8c, 0xf6, 0x7b, 0xa4, 0xaa, 0x5e, 0xc2, 0x09, 0xe8, 0xc1, 0x2a, 0x00, 0xa1, 0x7f, 0x3a, 0xb4, - 0x0f, 0xe8, 0x43, 0x58, 0x8d, 0xa3, 0xd1, 0x16, 0xa8, 0x83, 0x80, 0x78, 0xec, 0xf6, 0x27, 0xce, - 0x87, 0x48, 0x10, 0xab, 0xd4, 0x74, 0x62, 0x5b, 0xed, 0x80, 0x42, 0x3c, 0x4f, 0x14, 0x8c, 0x4c, - 0x4f, 0xb9, 0xcb, 0x1a, 0xea, 0xc9, 0x90, 0x98, 0x9e, 0x87, 0x29, 0x40, 0x7f, 0x0b, 0x6b, 0x09, - 0x29, 0xda, 0x85, 0x3c, 0xf1, 0x3c, 0xc3, 0xed, 0xc9, 0x96, 0x25, 0xeb, 0xc6, 0xf4, 0x3c, 0x97, - 0xc9, 0xb1, 0x04, 0xa0, 0x22, 0xe4, 0x47, 0xc4, 0xf7, 0x9d, 0xbe, 0xdc, 0x53, 0x72, 0x88, 0xb6, - 0x61, 0xc5, 0x9f, 0xf6, 0xfb, 0xc4, 0x67, 0x77, 0xd6, 0xa2, 0xb2, 0xad, 0xdc, 0x57, 0x71, 0x5c, - 0xa4, 0xdb, 0xa0, 0x86, 0x1b, 0x85, 0x6e, 0x4d, 0x42, 0x77, 0xad, 0xd8, 0x6e, 0x7c, 0x90, 0xb8, - 0xa3, 0xa4, 0x2f, 0xb8, 0xa3, 0xe8, 0x1f, 0x89, 0x3e, 0xc9, 0x09, 0x4b, 0x50, 0x90, 0x4d, 0x4f, - 0x70, 0x86, 0xe3, 0xa5, 0x29, 0xd3, 0xa2, 0x94, 0xa9, 0x2c, 0x39, 0xf1, 0x5c, 0x64, 0x2e, 0xc8, - 0x85, 0xde, 0x95, 0xbd, 0x91, 0x07, 0xb0, 0xac, 0xdd, 0x09, 0x27, 0xe9, 0x85, 0x4e, 0x94, 0x8b, - 0x9c, 0x7c, 0x9c, 0xec, 0xac, 0xe7, 0xbb, 0x5a, 0xbe, 0x3a, 0x5f, 0x6d, 0xa6, 0x3f, 0x86, 0xe2, - 0xb2, 0xbd, 0x4b, 0xf3, 0x2e, 0xf7, 0xae, 0xcc, 0xbb, 0x1c, 0x2f, 0xcd, 0x7b, 0x2c, 0x4e, 0x65, - 0x61, 0x9c, 0x99, 0x30, 0x4e, 0xfd, 0xd7, 0x69, 0x50, 0xc3, 0x06, 0x46, 0xb7, 0xc6, 0xd0, 0xed, - 0x3a, 0x43, 0x2a, 0x91, 0x5b, 0x23, 0x14, 0xa0, 0x5b, 0x00, 0x1e, 0x19, 0xb9, 0x01, 0x61, 0x6a, - 0x7e, 0xaa, 0xc6, 0x24, 0xd4, 0xef, 0xc4, 0xed, 0xd9, 0xf4, 0xa5, 0x22, 0xfc, 0x8a, 0x21, 0xba, - 0x03, 0x6b, 0x5d, 0xb9, 0xbb, 0x99, 0x9e, 0x47, 0x90, 0x14, 0x52, 0xef, 0xf4, 0x69, 0xe3, 0x4f, - 0x9c, 0x2e, 0x7f, 0x0e, 0xa8, 0x38, 0x12, 0xd0, 0x4c, 0xd0, 0xe6, 0xca, 0xcc, 0x73, 0x3c, 0x13, - 0x72, 0x8c, 0x74, 0x58, 0x95, 0x59, 0xa1, 0x17, 0x00, 0xd6, 0xc4, 0x54, 0x9c, 0x90, 0xc5, 0x31, - 0x8c, 0xa3, 0x90, 0xc4, 0x30, 0x9e, 0x22, 0xe4, 0x9d, 0x5e, 0xcf, 0x23, 0xbe, 0xcf, 0xda, 0x8d, - 0x8a, 0xe5, 0x50, 0xff, 0x65, 0x2a, 0x3a, 0xd2, 0xc2, 0x5c, 0xd1, 0x66, 0x68, 0xb0, 0x2b, 0x86, - 0xc8, 0x55, 0x28, 0xa0, 0x1b, 0x70, 0x30, 0x8a, 0x2a, 0x85, 0x0f, 0x62, 0x2b, 0xa6, 0x2c, 0x2a, - 0xe2, 0xcc, 0xc2, 0xfa, 0xc9, 0x5e, 0x54, 0x3f, 0xff, 0x4a, 0xc3, 0xf5, 0x25, 0x0d, 0xf6, 0xbc, - 0x5a, 0x96, 0x6b, 0x95, 0xbe, 0x60, 0xad, 0x94, 0x0b, 0xd7, 0x2a, 0xb3, 0x60, 0xad, 0xc2, 0x6e, - 0x91, 0x9d, 0xe9, 0x16, 0x45, 0xc8, 0x7b, 0xd3, 0x31, 0x7d, 0x5d, 0x8b, 0x65, 0x94, 0x43, 0x5a, - 0x5f, 0x6f, 0x5d, 0xef, 0xf5, 0x60, 0xdc, 0xaf, 0x0c, 0x3c, 0xb1, 0x86, 0x31, 0x09, 0xb2, 0x01, - 0xd8, 0x61, 0xc1, 0xdf, 0x9e, 0x05, 0x76, 0xb5, 0xd9, 0x3b, 0xff, 0x80, 0xe1, 0xf2, 0xd8, 0x4b, - 0x34, 0xc6, 0x40, 0xef, 0xc4, 0x33, 0xea, 0x8b, 0x2e, 0x39, 0x6b, 0xf1, 0x4b, 0xce, 0x47, 0x50, - 0xa8, 0xbb, 0x7d, 0x6e, 0xf7, 0x18, 0xd4, 0xf0, 0x7b, 0x81, 0xb8, 0xbd, 0x94, 0xf6, 0xf8, 0x07, - 0x83, 0x3d, 0xf9, 0xc1, 0x60, 0xaf, 0x25, 0x11, 0x38, 0x02, 0x23, 0x1d, 0xb2, 0x24, 0x76, 0x81, - 0x91, 0x1f, 0x0a, 0xc4, 0xeb, 0x8e, 0x24, 0xbb, 0xb9, 0x12, 0xeb, 0xe6, 0xfa, 0x13, 0xd8, 0x68, - 0xfb, 0xc4, 0xb3, 0xc6, 0x01, 0x85, 0x8a, 0x4f, 0x05, 0x77, 0x21, 0x37, 0x60, 0x02, 0x11, 0xc5, - 0x9a, 0xe0, 0x13, 0x28, 0xa1, 0xd4, 0x9f, 0x43, 0x8e, 0x4b, 0x28, 0x77, 0xf4, 0x44, 0x2c, 0xc8, - 0xc7, 0x20, 0x82, 0x8c, 0x7f, 0x36, 0xee, 0xb2, 0xa0, 0x0a, 0x98, 0xfd, 0xa7, 0xa5, 0x24, 0x1e, - 0x88, 0x0a, 0x93, 0x8a, 0xd1, 0xae, 0x0b, 0x2b, 0xb1, 0x57, 0x08, 0x2a, 0xc2, 0x66, 0xdb, 0xae, - 0xd9, 0x8d, 0x17, 0x76, 0xe7, 0xa0, 0x6d, 0xd5, 0x2b, 0x26, 0xee, 0xb4, 0x5e, 0x1e, 0x9b, 0xda, - 0x25, 0x94, 0x07, 0xe5, 0xb9, 0x75, 0xa0, 0xa5, 0x90, 0x0a, 0xd9, 0x83, 0xf2, 0x2b, 0xb3, 0xae, - 0xa5, 0xd1, 0x3a, 0x00, 0x43, 0x1d, 0x97, 0x8d, 0x5a, 0x53, 0x53, 0x10, 0x40, 0xce, 0x68, 0x37, - 0x5b, 0x8d, 0x23, 0x2d, 0x43, 0xff, 0xd7, 0xca, 0xb6, 0x55, 0x6b, 0x68, 0x59, 0xfa, 0xbf, 0xd2, - 0x30, 0x6a, 0x26, 0xd6, 0x72, 0xbb, 0x15, 0x50, 0xc3, 0xd7, 0x16, 0xba, 0x06, 0x28, 0xe1, 0x4e, - 0x3a, 0x5b, 0x81, 0xbc, 0x51, 0x6f, 0x37, 0x5b, 0x26, 0xd6, 0x52, 0xd4, 0xf3, 0xa1, 0x71, 0xa0, - 0xa5, 0xa9, 0xe7, 0x7a, 0xc3, 0x28, 0xd7, 0x35, 0x65, 0xb7, 0x41, 0xaf, 0x05, 0xd1, 0xa3, 0x01, - 0xbd, 0x03, 0x57, 0x25, 0x51, 0xc5, 0x3c, 0xae, 0x37, 0x5e, 0x46, 0x81, 0x17, 0x20, 0x53, 0x35, - 0xeb, 0x47, 0x5a, 0x0a, 0xad, 0x81, 0x5a, 0x63, 0xe1, 0x59, 0xaf, 0x4c, 0x2d, 0x4d, 0x9d, 0xd4, - 0xda, 0x07, 0xa6, 0xd1, 0xa2, 0x84, 0x16, 0xac, 0xc4, 0x1e, 0x2f, 0xf1, 0x3c, 0x88, 0x40, 0x24, - 0xdd, 0x2a, 0x14, 0x8e, 0x2c, 0xdb, 0xa2, 0x96, 0x22, 0xb6, 0x9a, 0xc9, 0x63, 0x6b, 0xb4, 0xaa, - 0x26, 0xd6, 0x94, 0xdd, 0x5f, 0xe5, 0x40, 0x0d, 0x37, 0x3a, 0xba, 0x0e, 0x57, 0x8c, 0x46, 0xbb, - 0x5e, 0xe9, 0xd8, 0x8d, 0x56, 0xa7, 0x62, 0xb6, 0x4c, 0x7c, 0x64, 0xd9, 0x94, 0xa8, 0x04, 0x57, - 0x9b, 0xad, 0x72, 0xab, 0xdd, 0xec, 0x18, 0x55, 0xd3, 0xa8, 0x75, 0xec, 0x46, 0xc7, 0xc4, 0xb8, - 0x81, 0xb5, 0xbf, 0xa4, 0xd0, 0x36, 0xdc, 0x48, 0xe8, 0xac, 0xa3, 0xf2, 0xa1, 0xd9, 0x39, 0x6e, - 0xd7, 0xeb, 0x14, 0xa3, 0xfd, 0x26, 0x8d, 0xee, 0xc0, 0xed, 0x04, 0xc2, 0x68, 0xd8, 0xad, 0xb2, - 0x65, 0x9b, 0xb8, 0x63, 0x60, 0xb3, 0xdc, 0xb2, 0xec, 0x43, 0xed, 0xb7, 0x69, 0xf4, 0x75, 0xb8, - 0x95, 0x40, 0xe1, 0xb6, 0x1d, 0x43, 0x52, 0xaa, 0xcf, 0xd3, 0x68, 0x07, 0xbe, 0xb6, 0x84, 0x8a, - 0x07, 0x5b, 0x6e, 0x99, 0x15, 0xed, 0x77, 0xe7, 0xe1, 0xb0, 0xd9, 0x6c, 0x95, 0x31, 0x73, 0xfa, - 0xc5, 0x3c, 0xce, 0x6e, 0x54, 0xcc, 0xce, 0x91, 0x79, 0xd4, 0xc0, 0x2f, 0x3b, 0xc7, 0xd8, 0x6c, - 0x36, 0xdb, 0xd8, 0xd4, 0x3e, 0x51, 0xe6, 0xa6, 0xc0, 0x70, 0x15, 0xab, 0x59, 0x8b, 0x50, 0x3f, - 0x55, 0xd0, 0x2e, 0xdc, 0x9d, 0x47, 0xd9, 0x66, 0xeb, 0x45, 0x03, 0xd7, 0x3a, 0x6d, 0xbb, 0xfc, - 0x41, 0xd9, 0xaa, 0x97, 0x0f, 0xea, 0xa6, 0xf6, 0x33, 0x65, 0x6e, 0xba, 0x0c, 0x7b, 0x6c, 0x55, - 0x22, 0xc2, 0x4f, 0x97, 0xb8, 0x6d, 0xdb, 0x4d, 0xa3, 0x6a, 0x56, 0xda, 0x9c, 0xea, 0xe7, 0x0a, - 0xd2, 0xe1, 0xe6, 0x22, 0x14, 0x36, 0xcb, 0x46, 0x95, 0x61, 0x3e, 0x53, 0xe6, 0x56, 0x89, 0x87, - 0xd6, 0x68, 0x75, 0xb0, 0x59, 0xae, 0xbc, 0xd4, 0x7e, 0xa1, 0xa0, 0x6b, 0xb0, 0x11, 0x56, 0x42, - 0x47, 0x14, 0x94, 0xf6, 0x6f, 0x05, 0xbd, 0x03, 0x9b, 0x09, 0x4b, 0xa9, 0xfa, 0x8f, 0x82, 0xee, - 0x81, 0xbe, 0x48, 0x35, 0x13, 0xe1, 0x7f, 0x15, 0xf4, 0x2e, 0xec, 0x2c, 0x59, 0x8e, 0x17, 0x65, - 0x8b, 0xae, 0x45, 0xc8, 0xfa, 0x3f, 0xe6, 0xf0, 0x99, 0x55, 0x37, 0x3b, 0xcd, 0x97, 0xb6, 0xd1, - 0xb1, 0x6c, 0xab, 0x25, 0x6a, 0xed, 0x6f, 0x19, 0xb4, 0x05, 0xd7, 0x2b, 0xe6, 0x07, 0x1d, 0x6c, - 0x1e, 0x5a, 0xac, 0xce, 0xf9, 0x46, 0xac, 0x98, 0xc7, 0x4d, 0xed, 0xf7, 0x59, 0x74, 0x03, 0xae, - 0x25, 0xb4, 0x2d, 0xb3, 0xd9, 0xe2, 0xca, 0x3f, 0x64, 0xd1, 0x4d, 0x28, 0x26, 0x94, 0x7c, 0xeb, - 0x71, 0xf5, 0x1f, 0xb3, 0x73, 0xcc, 0x46, 0xc3, 0x7e, 0x66, 0x1d, 0x52, 0xb5, 0xf6, 0xa7, 0xec, - 0xc3, 0x4f, 0x14, 0xb8, 0xdc, 0x14, 0xdf, 0x7a, 0x9b, 0xc4, 0x7b, 0x33, 0xe8, 0x12, 0x64, 0x40, - 0xe1, 0x90, 0x04, 0xe2, 0xd5, 0x39, 0xd7, 0x82, 0xcd, 0xd1, 0x24, 0x38, 0x2b, 0x25, 0xbe, 0xc6, - 0xea, 0x1b, 0x1f, 0xff, 0xf5, 0x8b, 0x4f, 0xd3, 0x2b, 0x48, 0xdd, 0x7f, 0xf3, 0xfe, 0x3e, 0xfb, - 0x32, 0x8b, 0x0e, 0xa1, 0xc0, 0x1a, 0x70, 0xdd, 0xed, 0x23, 0x79, 0x45, 0x96, 0xbd, 0xbe, 0x34, - 0x2b, 0xd0, 0xaf, 0x32, 0x82, 0xcb, 0x68, 0x8d, 0x12, 0xf0, 0x87, 0xc7, 0xd0, 0xed, 0xdf, 0x4f, - 0x3d, 0x48, 0xa1, 0x43, 0xc8, 0x31, 0x22, 0x7f, 0x69, 0x2c, 0x73, 0x6c, 0x88, 0xb1, 0xad, 0x22, - 0x08, 0xd9, 0xfc, 0x07, 0x29, 0xf4, 0x7d, 0xc8, 0x9b, 0x3f, 0x22, 0xdd, 0x69, 0x40, 0x50, 0x51, - 0x58, 0xcc, 0x35, 0xff, 0xd2, 0x12, 0x1f, 0xfa, 0x0d, 0x46, 0x79, 0x55, 0x5f, 0x61, 0x94, 0x9c, - 0xe6, 0x89, 0x38, 0x0a, 0x50, 0x1d, 0x72, 0x55, 0x67, 0xdc, 0x1b, 0x12, 0x94, 0x38, 0x7b, 0x96, - 0x92, 0x6d, 0x31, 0xb2, 0x6b, 0xfa, 0x46, 0x14, 0xdf, 0xfe, 0x87, 0x8c, 0xe0, 0x49, 0x6a, 0xf7, - 0x24, 0xc7, 0xd0, 0x8f, 0xfe, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x52, 0x0f, 0xa4, 0x27, 0x84, 0x17, - 0x00, 0x00, + // 2198 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x58, 0xcd, 0x73, 0x1b, 0x49, + 0x15, 0xb7, 0x34, 0xfa, 0x7c, 0xb6, 0x9c, 0x71, 0xc7, 0xd9, 0x08, 0xc5, 0x9b, 0x78, 0x87, 0x24, + 0x1b, 0xbc, 0x8b, 0x9d, 0x4d, 0x28, 0x2a, 0xa4, 0x02, 0x94, 0x3c, 0x9a, 0xd8, 0x8a, 0xe4, 0x91, + 0xab, 0x47, 0xda, 0x90, 0x54, 0x51, 0xae, 0x89, 0xd4, 0xd6, 0x8a, 0x48, 0x1a, 0x31, 0x33, 0xca, + 0x62, 0x0e, 0x1c, 0xa8, 0xe2, 0x00, 0xa7, 0x85, 0x65, 0x39, 0x73, 0xe1, 0x06, 0xcb, 0x5f, 0xc0, + 0xc7, 0x0d, 0xee, 0x9c, 0x38, 0x52, 0xb5, 0x1c, 0x28, 0xae, 0x7c, 0xc3, 0x81, 0xea, 0xaf, 0x99, + 0x1e, 0x7d, 0xc4, 0xbb, 0x05, 0x27, 0xa9, 0x5f, 0xff, 0xde, 0xef, 0xbd, 0x7e, 0xaf, 0xfb, 0xbd, + 0xee, 0x81, 0xf5, 0xe0, 0xb9, 0x7b, 0x7a, 0xea, 0x0d, 0x7b, 0xbb, 0x13, 0xdf, 0x0b, 0x3d, 0x94, + 0x65, 0x3f, 0x95, 0xad, 0xbe, 0xe7, 0xf5, 0x87, 0x64, 0xcf, 0x9d, 0x0c, 0xf6, 0xdc, 0xf1, 0xd8, + 0x0b, 0xdd, 0x70, 0xe0, 0x8d, 0x03, 0x0e, 0xaa, 0x5c, 0x13, 0xb3, 0x6c, 0xf4, 0x6c, 0x7a, 0xba, + 0x17, 0x0e, 0x46, 0x24, 0x08, 0xdd, 0xd1, 0x44, 0x00, 0xae, 0xcc, 0x02, 0xc8, 0x68, 0x12, 0x9e, + 0xf1, 0x49, 0xe3, 0x2e, 0x94, 0x9c, 0xd0, 0x0d, 0x09, 0x26, 0xc1, 0xc4, 0x1b, 0x07, 0x04, 0x19, + 0x90, 0x0d, 0xa8, 0xa0, 0x9c, 0xda, 0x4e, 0xdd, 0x5a, 0xbd, 0xb3, 0xc6, 0x71, 0xbb, 0x1c, 0xc4, + 0xa7, 0x8c, 0x2d, 0x28, 0x44, 0x78, 0x1d, 0xb4, 0x51, 0xd0, 0x67, 0xe8, 0x22, 0xa6, 0x7f, 0x8d, + 0x57, 0x21, 0x8f, 0xc9, 0xd7, 0xa7, 0x24, 0x08, 0x11, 0x82, 0xcc, 0xd8, 0x1d, 0x11, 0x31, 0xcb, + 0xfe, 0x1b, 0x1f, 0x64, 0x20, 0xcb, 0xd8, 0xd0, 0x5b, 0x00, 0xcf, 0xa6, 0x83, 0x61, 0xcf, 0x51, + 0xec, 0x6d, 0x08, 0x7b, 0xfb, 0xd1, 0x04, 0x56, 0x40, 0xe8, 0x73, 0xb0, 0xda, 0x23, 0x93, 0xa1, + 0x77, 0xc6, 0x75, 0xd2, 0x4c, 0x07, 0x09, 0x9d, 0x5a, 0x3c, 0x83, 0x55, 0x18, 0x3a, 0x84, 0xf5, + 0x53, 0xcf, 0x7f, 0xd7, 0xf5, 0x7b, 0xa4, 0x77, 0xec, 0xf9, 0x61, 0x50, 0xce, 0x6c, 0x6b, 0xb7, + 0x56, 0xef, 0x6c, 0xab, 0x8b, 0xdb, 0x7d, 0x98, 0x80, 0x58, 0xe3, 0xd0, 0x3f, 0xc3, 0x33, 0x7a, + 0xc8, 0x04, 0x9d, 0x86, 0x60, 0x1a, 0x98, 0xef, 0x90, 0xee, 0x73, 0xee, 0x44, 0x96, 0x39, 0x71, + 0x59, 0xe1, 0x52, 0xa7, 0xf1, 0x9c, 0x02, 0xba, 0x0f, 0xa5, 0xd3, 0xc1, 0x90, 0x38, 0x67, 0xe3, + 0x2e, 0x67, 0xc8, 0x31, 0x86, 0x4d, 0xc1, 0xf0, 0x50, 0x9d, 0xc3, 0x49, 0x28, 0x3a, 0x86, 0x8b, + 0x3d, 0xf2, 0x6c, 0xda, 0xef, 0x0f, 0xc6, 0x7d, 0xd3, 0x1b, 0x87, 0xee, 0x60, 0x4c, 0xfc, 0xa0, + 0x9c, 0x67, 0xeb, 0xb9, 0x1a, 0x05, 0x62, 0x16, 0x61, 0xbd, 0x20, 0xe3, 0x10, 0x2f, 0x52, 0x45, + 0x6f, 0x40, 0x61, 0x44, 0x42, 0xb7, 0xe7, 0x86, 0x6e, 0xb9, 0xc0, 0x1c, 0xb9, 0x20, 0x68, 0x8e, + 0x84, 0x18, 0x47, 0x80, 0x8a, 0x03, 0x17, 0x17, 0x84, 0x89, 0x6e, 0x82, 0xe7, 0xe4, 0x8c, 0xa5, + 0x30, 0x8b, 0xe9, 0x5f, 0x74, 0x13, 0xb2, 0x2f, 0xdc, 0xe1, 0x54, 0xa6, 0x48, 0x17, 0x94, 0x54, + 0x87, 0xfb, 0xc2, 0xa7, 0xef, 0xa7, 0xef, 0xa5, 0x1e, 0x65, 0x0a, 0x9a, 0x9e, 0x31, 0xfe, 0x98, + 0x82, 0x82, 0xb4, 0x88, 0x76, 0x20, 0xcb, 0xb2, 0x2e, 0x76, 0xc5, 0xa6, 0xba, 0x2b, 0x22, 0xb7, + 0x38, 0x04, 0x7d, 0x16, 0x72, 0x3c, 0xd9, 0xc2, 0xd6, 0xa5, 0xc4, 0x76, 0x88, 0xd0, 0x02, 0x84, + 0xbe, 0x0c, 0xe0, 0xf6, 0x7a, 0x03, 0x7a, 0x84, 0xdc, 0x61, 0xb9, 0xcb, 0x02, 0x77, 0x6d, 0x66, + 0xc5, 0xbb, 0xd5, 0x08, 0xc1, 0xf7, 0x81, 0xa2, 0x52, 0xf9, 0x22, 0x5c, 0x98, 0x99, 0x56, 0xd7, + 0x5f, 0xe4, 0xeb, 0xdf, 0x54, 0xd7, 0x5f, 0x54, 0x56, 0x6b, 0xfc, 0x39, 0x0d, 0xa5, 0xc4, 0x3a, + 0xd0, 0x9b, 0xb0, 0x31, 0x9e, 0x8e, 0x9e, 0x11, 0xbf, 0x75, 0x5a, 0xf5, 0xc3, 0xc1, 0xa9, 0xdb, + 0x0d, 0x03, 0x11, 0xcb, 0xf9, 0x09, 0x74, 0x0f, 0x0a, 0x6c, 0xdd, 0x34, 0xed, 0x69, 0xe6, 0xfd, + 0xd6, 0xa2, 0xe8, 0xf0, 0x11, 0xf1, 0x71, 0x84, 0x46, 0xd7, 0x21, 0x13, 0x9e, 0x4d, 0x48, 0x59, + 0xdb, 0x4e, 0xdd, 0x5a, 0x8f, 0x52, 0xc2, 0x70, 0xed, 0xb3, 0x09, 0xc1, 0x6c, 0x16, 0xd5, 0x16, + 0xc4, 0xe7, 0xfa, 0x42, 0x0b, 0x2f, 0x0b, 0xd2, 0x01, 0xe4, 0x85, 0x03, 0xe8, 0xa6, 0x30, 0x9b, + 0x62, 0x66, 0x91, 0x4a, 0x45, 0x7c, 0xc5, 0xf0, 0x26, 0x64, 0xbb, 0xde, 0x74, 0x1c, 0xb2, 0x90, + 0x65, 0x31, 0x1f, 0xfc, 0xaf, 0xd1, 0xfe, 0x4d, 0x0a, 0xd6, 0x93, 0x1b, 0x01, 0x3d, 0x80, 0x22, + 0xdf, 0x0a, 0x34, 0x82, 0xa9, 0x99, 0x83, 0xa3, 0x22, 0xc5, 0x90, 0xf8, 0x38, 0x56, 0x40, 0x6f, + 0x42, 0xbe, 0x3b, 0x9c, 0x06, 0x21, 0xf1, 0x99, 0xb1, 0x78, 0x41, 0x26, 0x97, 0xb2, 0x05, 0x49, + 0x48, 0xa5, 0x0e, 0x05, 0x49, 0x82, 0x5e, 0x4f, 0xc4, 0xe1, 0x62, 0xc2, 0xe4, 0xf9, 0x81, 0x30, + 0xbe, 0x97, 0x02, 0x88, 0xab, 0x22, 0xfa, 0x12, 0x14, 0x5d, 0x65, 0xb3, 0xa8, 0xe5, 0x2c, 0x46, + 0xed, 0x46, 0xdb, 0x86, 0x67, 0x28, 0x56, 0xa9, 0x3c, 0x80, 0xf5, 0xe4, 0xe4, 0x27, 0x0a, 0xeb, + 0x0d, 0x58, 0x55, 0xaa, 0x2d, 0x7a, 0x05, 0x72, 0xbc, 0xca, 0x09, 0x6d, 0x31, 0x32, 0x3e, 0x4c, + 0x81, 0x3e, 0x5b, 0x10, 0x97, 0x81, 0x51, 0x0d, 0x8a, 0x3e, 0x09, 0xbc, 0xa9, 0xdf, 0x25, 0x72, + 0x67, 0xdf, 0x5c, 0x52, 0x54, 0x77, 0xb1, 0x04, 0x8a, 0x75, 0x45, 0x8a, 0x74, 0x5d, 0xc9, 0xc9, + 0x4f, 0xb4, 0xae, 0xd7, 0xa1, 0x94, 0x28, 0xbf, 0x4b, 0x57, 0xf6, 0x87, 0x0c, 0x64, 0x59, 0x21, + 0x43, 0xb7, 0xa1, 0x48, 0xcb, 0x23, 0x1b, 0x88, 0x72, 0xa5, 0x2b, 0xe5, 0x84, 0xc9, 0x0f, 0x57, + 0x70, 0x0c, 0x42, 0x77, 0x45, 0xdf, 0xe3, 0x2a, 0xe9, 0xf9, 0xbe, 0x27, 0x75, 0x14, 0x18, 0xfa, + 0xbc, 0xec, 0x7c, 0x5c, 0x4b, 0x5b, 0xd0, 0xf9, 0xa4, 0x9a, 0x0a, 0xa4, 0xee, 0x4d, 0x64, 0xd1, + 0x2d, 0x67, 0x16, 0x17, 0x63, 0xea, 0x5e, 0x04, 0x42, 0x56, 0xa2, 0xc7, 0x71, 0xc5, 0xa5, 0x3d, + 0x4e, 0xea, 0xcf, 0xa9, 0xa0, 0xaf, 0x42, 0x59, 0x66, 0x65, 0x16, 0x2f, 0x1a, 0x9e, 0xac, 0xba, + 0x78, 0x09, 0xec, 0x70, 0x05, 0x2f, 0xa5, 0x40, 0x0f, 0xe2, 0x26, 0xca, 0x39, 0xf3, 0x0b, 0x9b, + 0xa8, 0x24, 0x4a, 0x82, 0xd1, 0x53, 0xb8, 0xdc, 0x5b, 0xdc, 0x24, 0x45, 0x0f, 0x3c, 0xa7, 0x95, + 0x1e, 0xae, 0xe0, 0x65, 0x04, 0xe8, 0x0b, 0xb0, 0xd6, 0x23, 0x2f, 0x9a, 0x9e, 0x37, 0xe1, 0x84, + 0x45, 0x46, 0x18, 0x9f, 0xf7, 0x78, 0xea, 0x70, 0x05, 0x27, 0xa0, 0xfb, 0x6b, 0x00, 0x84, 0xfe, + 0x39, 0xa1, 0x75, 0xc0, 0x20, 0xb0, 0xa6, 0xa2, 0xd1, 0x16, 0x14, 0x07, 0x21, 0xf1, 0xd9, 0xed, + 0x4f, 0xf4, 0x87, 0x58, 0xa0, 0xec, 0xd4, 0x74, 0xe2, 0x58, 0x5d, 0x03, 0x8d, 0xf8, 0xbe, 0xd8, + 0x30, 0x25, 0xe1, 0x85, 0xe5, 0xfb, 0x35, 0x72, 0x8a, 0xe9, 0x8c, 0xd1, 0x82, 0x1c, 0x1f, 0xa2, + 0x37, 0x20, 0x4f, 0x7c, 0xdf, 0xf4, 0x7a, 0xb2, 0x48, 0x6d, 0x24, 0x13, 0xee, 0xf5, 0x08, 0x96, + 0x08, 0x54, 0x86, 0xfc, 0x88, 0x04, 0x81, 0xdb, 0x97, 0xc7, 0x48, 0x0e, 0x0d, 0x1b, 0x8a, 0xd1, + 0xce, 0xa7, 0x67, 0x8d, 0xd0, 0x63, 0x28, 0xce, 0x0f, 0x1f, 0x24, 0x2e, 0x1d, 0xe9, 0x73, 0x2e, + 0x1d, 0xc6, 0x77, 0x64, 0xe5, 0xe3, 0x8c, 0x15, 0x28, 0xc8, 0x32, 0x26, 0x48, 0xa3, 0xf1, 0xd2, + 0x20, 0xe8, 0x71, 0x10, 0x8a, 0x6c, 0xd5, 0xf4, 0xf2, 0x19, 0x44, 0xab, 0x62, 0x07, 0x63, 0xe1, + 0x72, 0x15, 0x90, 0xf1, 0x35, 0x59, 0xf4, 0xb8, 0x1f, 0xcb, 0xea, 0x98, 0xb0, 0x95, 0x5e, 0x66, + 0x4b, 0xfb, 0x38, 0xb6, 0xbe, 0x9b, 0xac, 0x9c, 0x2f, 0xb7, 0xb8, 0x34, 0x15, 0xff, 0x9f, 0x75, + 0x7f, 0x13, 0xca, 0xcb, 0x8e, 0x28, 0x4d, 0x86, 0x3c, 0xa2, 0x32, 0x19, 0x72, 0xbc, 0x34, 0x19, + 0x8a, 0xbb, 0xda, 0x42, 0x77, 0x33, 0x91, 0xbb, 0xc6, 0x4f, 0xd2, 0x50, 0x8c, 0xea, 0x14, 0x3d, + 0x01, 0x43, 0xaf, 0xeb, 0x0e, 0xa9, 0x44, 0x9e, 0x80, 0x48, 0x80, 0xae, 0x02, 0xf8, 0x64, 0xe4, + 0x85, 0x84, 0x4d, 0xf3, 0xe6, 0xa9, 0x48, 0xa8, 0xdd, 0x89, 0xd7, 0xb3, 0xe9, 0x83, 0x44, 0xd8, + 0x15, 0x43, 0x74, 0x1d, 0x4a, 0x5d, 0x79, 0x88, 0xd9, 0x3c, 0xf7, 0x20, 0x29, 0xa4, 0xd6, 0xe9, + 0x0b, 0x26, 0x98, 0xb8, 0x5d, 0x7e, 0xeb, 0x2f, 0xe2, 0x58, 0x40, 0x23, 0x41, 0x6b, 0x28, 0x53, + 0xcf, 0xf1, 0x48, 0xc8, 0x31, 0x32, 0x60, 0x4d, 0x46, 0x85, 0xf6, 0x79, 0x56, 0xab, 0x8a, 0x38, + 0x21, 0x53, 0x31, 0x8c, 0xa3, 0x90, 0xc4, 0x30, 0x9e, 0x32, 0xe4, 0xdd, 0x5e, 0xcf, 0x27, 0x41, + 0xc0, 0xaa, 0x4a, 0x11, 0xcb, 0xa1, 0xf1, 0xe3, 0x54, 0xdc, 0xb9, 0xa2, 0x58, 0xd1, 0x9a, 0x67, + 0xb2, 0x9b, 0x84, 0x88, 0x55, 0x24, 0xa0, 0xc7, 0x72, 0x30, 0x8a, 0x37, 0x0c, 0x1f, 0x28, 0x19, + 0xd3, 0x16, 0x6d, 0xe9, 0xcc, 0xb2, 0x6d, 0x94, 0xfd, 0x38, 0xdb, 0xe8, 0x2f, 0x69, 0xb8, 0xbc, + 0xa4, 0x9c, 0xbe, 0x6c, 0x67, 0xcb, 0x94, 0xa5, 0xcf, 0x49, 0x99, 0x76, 0x6e, 0xca, 0x32, 0x0b, + 0x52, 0x16, 0x55, 0x92, 0xec, 0x4c, 0x25, 0x29, 0x43, 0xde, 0x9f, 0x8e, 0xe9, 0x5b, 0x5a, 0x64, + 0x53, 0x0e, 0xe9, 0x36, 0x7b, 0xd7, 0xf3, 0x9f, 0x0f, 0xc6, 0xfd, 0xda, 0xc0, 0x17, 0xa9, 0x54, + 0x24, 0xc8, 0x06, 0x60, 0xad, 0x81, 0xbf, 0x34, 0x0b, 0xec, 0x22, 0xb3, 0xfb, 0xf2, 0x76, 0xc2, + 0xe5, 0xca, 0xbb, 0x53, 0x61, 0xa0, 0x37, 0xe0, 0x99, 0xe9, 0xf3, 0xae, 0x34, 0x25, 0xf5, 0x4a, + 0xf3, 0x2d, 0x28, 0x34, 0xbd, 0x3e, 0xd7, 0xbb, 0x07, 0xc5, 0xe8, 0xeb, 0x80, 0xb8, 0xab, 0x54, + 0x76, 0xf9, 0xe7, 0x81, 0x5d, 0xf9, 0x79, 0x60, 0xb7, 0x2d, 0x11, 0x38, 0x06, 0x23, 0x03, 0xb2, + 0x44, 0xb9, 0xae, 0xc8, 0xcf, 0x02, 0xe2, 0x2d, 0x47, 0x92, 0xa5, 0x5e, 0x53, 0x4a, 0xbd, 0x71, + 0x1f, 0x36, 0x3a, 0x01, 0xf1, 0xeb, 0xe3, 0x90, 0x42, 0xc5, 0x87, 0x81, 0x1b, 0x90, 0x1b, 0x30, + 0x81, 0xf0, 0x42, 0xf6, 0x25, 0x81, 0x12, 0x93, 0xc6, 0x23, 0xc8, 0x71, 0x09, 0xe5, 0x8e, 0x1f, + 0x84, 0x05, 0xf9, 0xf4, 0x43, 0x90, 0x09, 0xce, 0xc6, 0x5d, 0xe6, 0x54, 0x01, 0xb3, 0xff, 0x74, + 0x2b, 0x89, 0xe7, 0xa0, 0xc6, 0xa4, 0x62, 0xb4, 0xe3, 0xc1, 0xaa, 0xf2, 0xe6, 0x40, 0x65, 0xd8, + 0xec, 0xd8, 0x0d, 0xbb, 0xf5, 0xd8, 0x3e, 0xd9, 0xef, 0xd4, 0x9b, 0x35, 0x0b, 0x9f, 0xb4, 0x9f, + 0x1c, 0x5b, 0xfa, 0x0a, 0xca, 0x83, 0xf6, 0xa8, 0xbe, 0xaf, 0xa7, 0x50, 0x11, 0xb2, 0xfb, 0xd5, + 0xa7, 0x56, 0x53, 0x4f, 0xa3, 0x75, 0x00, 0x86, 0x3a, 0xae, 0x9a, 0x0d, 0x47, 0xd7, 0x10, 0x40, + 0xce, 0xec, 0x38, 0xed, 0xd6, 0x91, 0x9e, 0xa1, 0xff, 0x1b, 0x55, 0xbb, 0xde, 0x68, 0xe9, 0x59, + 0xfa, 0xbf, 0xd6, 0x32, 0x1b, 0x16, 0xd6, 0x73, 0x3b, 0x35, 0x28, 0x46, 0x6f, 0x2b, 0xf4, 0x0a, + 0xa0, 0x84, 0x39, 0x69, 0x6c, 0x15, 0xf2, 0x66, 0xb3, 0xe3, 0xb4, 0x2d, 0xac, 0xa7, 0xa8, 0xe5, + 0x03, 0x73, 0x5f, 0x4f, 0x53, 0xcb, 0xcd, 0x96, 0x59, 0x6d, 0xea, 0xda, 0x4e, 0x8b, 0x5e, 0x02, + 0xe2, 0x27, 0x02, 0xfa, 0x14, 0x5c, 0x92, 0x44, 0x35, 0xeb, 0xb8, 0xd9, 0x7a, 0x12, 0x3b, 0x5e, + 0x80, 0xcc, 0xa1, 0xd5, 0x3c, 0xd2, 0x53, 0xa8, 0x04, 0xc5, 0x06, 0x73, 0xaf, 0xfe, 0xd4, 0xd2, + 0xd3, 0xd4, 0x48, 0xa3, 0xb3, 0x6f, 0x99, 0x6d, 0x4a, 0x58, 0x87, 0x55, 0xe5, 0xa9, 0xa2, 0xc6, + 0x41, 0x38, 0x22, 0xe9, 0xd6, 0xa0, 0x70, 0x54, 0xb7, 0xeb, 0x54, 0x53, 0xf8, 0xd6, 0xb0, 0xb8, + 0x6f, 0xad, 0xf6, 0xa1, 0x85, 0x75, 0x6d, 0xe7, 0x4f, 0x39, 0x80, 0xf8, 0xb0, 0xa3, 0x0d, 0x28, + 0x49, 0x2a, 0x0b, 0xe3, 0x16, 0xd6, 0x57, 0x50, 0x19, 0x2e, 0x3a, 0xed, 0x6a, 0xbb, 0xe3, 0x98, + 0x87, 0x96, 0xd9, 0x38, 0x71, 0x3a, 0xa6, 0x69, 0x39, 0x8e, 0xfe, 0xdb, 0x14, 0xba, 0x06, 0x15, + 0x75, 0xa6, 0x7e, 0x54, 0x3d, 0xb0, 0x4e, 0x8e, 0x3b, 0xcd, 0x26, 0xd5, 0xd5, 0x7f, 0x9a, 0x46, + 0x9f, 0x86, 0xab, 0x2a, 0xc0, 0x6c, 0xd9, 0xed, 0x6a, 0xdd, 0xb6, 0xf0, 0x89, 0x89, 0xad, 0x6a, + 0xbb, 0x6e, 0x1f, 0xe8, 0x3f, 0x4b, 0x23, 0x03, 0x5e, 0x55, 0x41, 0xb8, 0x63, 0x2b, 0x40, 0x4a, + 0xf4, 0x61, 0x1a, 0xdd, 0x80, 0xed, 0xc5, 0x44, 0x6d, 0x0b, 0x1f, 0xd5, 0xed, 0x6a, 0xdb, 0xaa, + 0xe9, 0x3f, 0x7f, 0x09, 0x0c, 0x5b, 0x4e, 0xbb, 0x8a, 0x99, 0xc5, 0x8f, 0xe6, 0x60, 0x76, 0xab, + 0x66, 0x9d, 0x1c, 0x59, 0x47, 0x2d, 0xfc, 0xe4, 0xe4, 0x18, 0x5b, 0x8e, 0xd3, 0xc1, 0x96, 0xfe, + 0x9e, 0x36, 0xeb, 0x3d, 0x83, 0xd5, 0xea, 0x4e, 0x23, 0x06, 0x7d, 0x5f, 0x43, 0x9f, 0x81, 0xeb, + 0x73, 0x20, 0xdb, 0x6a, 0x3f, 0x6e, 0xe1, 0xc6, 0x49, 0xc7, 0xae, 0xbe, 0x5d, 0xad, 0x37, 0xab, + 0xfb, 0x4d, 0x4b, 0xff, 0x81, 0x36, 0xbb, 0x50, 0x06, 0x3d, 0xae, 0xd7, 0x62, 0xba, 0xf7, 0x17, + 0xdb, 0xec, 0xd8, 0x74, 0x54, 0xeb, 0x70, 0xa2, 0x1f, 0x6a, 0xe8, 0x35, 0xd8, 0x5a, 0x00, 0xc2, + 0x56, 0xd5, 0x3c, 0x64, 0x90, 0x0f, 0xb4, 0xd9, 0xd4, 0x70, 0xb7, 0x5a, 0xed, 0x13, 0x6c, 0x55, + 0x6b, 0x4f, 0xf4, 0x1f, 0x69, 0xb3, 0x59, 0x15, 0x49, 0xd7, 0xff, 0xaa, 0xa1, 0x9b, 0xf0, 0xda, + 0x82, 0x99, 0x19, 0x2f, 0xfe, 0xa6, 0xa1, 0x1d, 0xb8, 0xb1, 0x38, 0xd8, 0x8f, 0xab, 0x75, 0x1a, + 0xe9, 0x88, 0xf3, 0xef, 0x1a, 0xba, 0x08, 0xeb, 0x7c, 0xa7, 0x47, 0xc2, 0x7f, 0x68, 0x68, 0x03, + 0xd6, 0x9c, 0x27, 0xb6, 0x19, 0x89, 0xfe, 0xa9, 0x21, 0x04, 0x25, 0x7e, 0xb4, 0xa4, 0xec, 0x5f, + 0x1a, 0xda, 0x84, 0x0b, 0x35, 0xeb, 0xed, 0xba, 0x5d, 0x6f, 0x47, 0xd2, 0x7f, 0x33, 0xa9, 0xd9, + 0xb4, 0xaa, 0x76, 0xe7, 0x38, 0x92, 0xfe, 0x87, 0x49, 0x19, 0x25, 0x43, 0xf3, 0x0d, 0xfc, 0xfb, + 0x0c, 0xda, 0x86, 0x2b, 0x92, 0x01, 0x5b, 0x07, 0x75, 0x76, 0x40, 0xb8, 0x99, 0x9a, 0x75, 0xec, + 0xe8, 0xbf, 0xc8, 0xd2, 0x70, 0xcd, 0x21, 0xda, 0x96, 0xd3, 0xe6, 0x80, 0x5f, 0x66, 0x69, 0xc8, + 0xe7, 0x00, 0x62, 0x45, 0x0c, 0xf2, 0xab, 0xec, 0x42, 0x2b, 0x66, 0xcb, 0x7e, 0x58, 0x3f, 0xa0, + 0x10, 0xfd, 0xd7, 0xd9, 0x3b, 0xef, 0x69, 0x70, 0xc1, 0x11, 0x9f, 0x87, 0x1d, 0xe2, 0xbf, 0x18, + 0x74, 0x09, 0x32, 0xa1, 0x70, 0x40, 0x42, 0xf1, 0x50, 0x9d, 0xab, 0xe3, 0xd6, 0x68, 0x12, 0x9e, + 0x55, 0x12, 0x1f, 0x70, 0x8d, 0x8d, 0x6f, 0xff, 0xee, 0xa3, 0xf7, 0xd3, 0xab, 0xa8, 0xb8, 0xf7, + 0xe2, 0xad, 0x3d, 0xf6, 0x31, 0x17, 0x1d, 0x40, 0x81, 0x55, 0xf1, 0xa6, 0xd7, 0x47, 0xf2, 0x12, + 0x2e, 0x1b, 0x46, 0x65, 0x56, 0x60, 0x5c, 0x62, 0x04, 0x17, 0x50, 0x89, 0x12, 0xf0, 0xb7, 0xca, + 0xd0, 0xeb, 0xdf, 0x4a, 0xdd, 0x4e, 0xa1, 0x03, 0xc8, 0x31, 0xa2, 0x60, 0xa9, 0x2f, 0x73, 0x6c, + 0x88, 0xb1, 0xad, 0x21, 0x88, 0xd8, 0x82, 0xdb, 0x29, 0xf4, 0x15, 0xc8, 0x5b, 0xdf, 0x20, 0xdd, + 0x69, 0x48, 0x50, 0x59, 0x68, 0xcc, 0x75, 0x90, 0xca, 0x12, 0x1b, 0xc6, 0x15, 0x46, 0x79, 0xc9, + 0x58, 0x65, 0x94, 0x9c, 0xe6, 0xbe, 0xe8, 0x27, 0xa8, 0x09, 0xb9, 0x43, 0x77, 0xdc, 0x1b, 0x12, + 0x94, 0x68, 0x60, 0x4b, 0xc9, 0xb6, 0x18, 0xd9, 0x2b, 0xc6, 0x46, 0xec, 0xdf, 0xde, 0x3b, 0x8c, + 0xe0, 0x7e, 0x6a, 0xe7, 0x59, 0x8e, 0xa1, 0xef, 0xfe, 0x37, 0x00, 0x00, 0xff, 0xff, 0x28, 0xf8, + 0xe9, 0x6f, 0xb7, 0x17, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/skaffold.proto b/proto/skaffold.proto index e306555e747..3e86dc463e8 100644 --- a/proto/skaffold.proto +++ b/proto/skaffold.proto @@ -110,19 +110,18 @@ message Event { // `DevLoopEvent` marks the start and end of a dev loop. message DevLoopEvent { - int32 iteration = 1; // dev loop iteration + int32 iteration = 1; // dev loop iteration. 0 represents initialization loop. string status = 2; // dev loop status oneof: In Progress, Completed, Failed - ActionableErr err = 3; // actionable error message + ErrDef err = 3; // actionable error message } // `ErrDef` defines an error occurred along with an optional suggestions -message ActionableErr { - ErrorCode errCode = 1; // error code representing the error +message ErrDef { + StatusCode errCode = 1; // error code representing the error string message = 2; // message describing the error. - repeated string suggestions = 3; // a list of suggestions for the error. - } + // `MetaEvent` provides general information regarding Skaffold message MetaEvent { // entry, for example: `"Starting Skaffold: {Version:v0.39.0-16-g5bb7c9e0 ConfigVersion:skaffold/v1 GitVersion: GitCommit:5bb7c9e078e4d522a5ffc42a2f1274fd17d75902 GitTreeState:dirty BuildDate01:29Z GoVersion:go1.13rc1 Compiler:gc Platform:linux/amd64}"` @@ -137,7 +136,7 @@ message BuildEvent { string artifact = 1; // artifact name string status = 2; // artifact build status oneof: InProgress, Completed, Failed string err = 3; // error when build status is Failed. - ErrorCode errCode = 4; // error code representing the error + StatusCode statusCode = 4; // status code representing success or failure } // `DeployEvent` represents the status of a deployment, and is emitted by Skaffold @@ -145,7 +144,7 @@ message BuildEvent { message DeployEvent { string status = 1; // deployment status oneof: InProgress, Completed, Failed string err = 2; // error when status is Failed - ErrorCode errCode = 3; // error code representing the error + StatusCode statusCode = 3; // status code representing success or failure } // `StatusCheckEvent` describes if the status check for kubernetes rollout has started, is in progress, has succeeded or failed. @@ -153,7 +152,7 @@ message StatusCheckEvent { string status = 1; string message = 2; string err = 3; - ErrorCode errCode = 4; // error code representing the error + StatusCode statusCode = 4; // status code representing success or failure } // A Resource StatusCheck Event, indicates progress for each kubernetes deployment. @@ -187,7 +186,7 @@ message FileSyncEvent { string image = 2; // the container image to which files are sycned. string status = 3; // status of file sync. one of: Not Started, In progress, Succeeded, Failed. string err = 4; // error in case of status failed. - ErrorCode errCode = 5; // error code representing the error + StatusCode statusCode = 5; // status code representing success or failure } // DebuggingContainerEvent is raised when a debugging container is started or terminated @@ -318,74 +317,87 @@ enum ClusterType { OTHER = 3; } -// Enum for error codes -enum ErrorCode { - // Could not determine error - COULD_NOT_DETERMINE = 0; +// Enum for Status codes +// These error codes are prepended by Phase Name e.g. +// BUILD, DEPLOY, STATUSCHECK, DEVINIT +enum StatusCode { + // Could not determine error and phase + UNKNOWN_ERROR = 0; // No Error codes // Status Check Success - STATUS_CHECK_NO_ERROR = 200; + STATUSCHECK_SUCCESS = 200; // Container errors // Container image pull error - STATUS_CHECK_IMAGE_PULL_ERR = 300; + STATUSCHECK_IMAGE_PULL_ERR = 300; // Container creating error - STATUS_CHECK_CONTAINER_CREATING = 301; + STATUSCHECK_CONTAINER_CREATING = 301; // Container run error - STATUS_CHECK_RUN_CONTAINER_ERR = 302; + STATUSCHECK_RUN_CONTAINER_ERR = 302; // Container is already terminated - STATUS_CHECK_CONTAINER_TERMINATED = 303; + STATUSCHECK_CONTAINER_TERMINATED = 303; // Container restarting error - STATUS_CHECK_CONTAINER_RESTARTING = 356; + STATUSCHECK_CONTAINER_RESTARTING = 356; // K8 infra errors // Node memory pressure error - STATUS_CHECK_NODE_MEMORY_PRESSURE = 400; + STATUSCHECK_NODE_MEMORY_PRESSURE = 400; // Node disk pressure error - STATUS_CHECK_NODE_DISK_PRESSURE = 401; + STATUSCHECK_NODE_DISK_PRESSURE = 401; // Node network unavailable error - STATUS_CHECK_NODE_NETWORK_UNAVAILABLE = 402; + STATUSCHECK_NODE_NETWORK_UNAVAILABLE = 402; // Node PID pressure error - STATUS_CHECK_NODE_PID_PRESSURE = 403; + STATUSCHECK_NODE_PID_PRESSURE = 403; // Node unschedulable error - STATUS_CHECK_NODE_UNSCHEDULABLE= 404; + STATUSCHECK_NODE_UNSCHEDULABLE= 404; // Node unreachable error - STATUS_CHECK_NODE_UNREACHABLE = 405; + STATUSCHECK_NODE_UNREACHABLE = 405; // Node not ready error - STATUS_CHECK_NODE_NOT_READY= 406; + STATUSCHECK_NODE_NOT_READY= 406; // Unknown Error Codes - ErrorCode_UNKNOWN = 501; // Status Check error unknown - STATUS_CHECK_UNKNOWN = 502; + STATUSCHECK_UNKNOWN = 501; // Container is unschedulable due to unknown reasons - STATUS_CHECK_UNKNOWN_UNSCHEDULABLE = 503; + STATUSCHECK_UNKNOWN_UNSCHEDULABLE = 502; // Container is waiting due to unknown reason - STATUS_CHECK_CONTAINER_WAITING_UNKNOWN = 504; + STATUSCHECK_CONTAINER_WAITING_UNKNOWN = 503; + // Deploy failed due to unknown reason + DEPLOY_UNKNOWN = 504; + // SYNC failed due to known reason + SYNC_UNKNOWN = 505; + // Build failed due to unknown reason + BUILD_UNKNOWN= 506; + // Dev Init failed due to unknown reason + DEVINIT_UNKNOWN = 507; + // Cleanup failed due to unknown reason + CLEANUP_UNKNOWN = 508; + + // FILE_SYNC Failures // File Sync Initialize failure - FILE_SYNC_INIT_ERROR = 601; + SYNC_INIT_ERROR = 601; - // Dev Monitor Errors + // DevInit Errors // Failed to configure watcher for build dependencies in dev loop - DEV_REGISTER_BUILD_DEPS = 701; + DEVINIT_REGISTER_BUILD_DEPS = 701; // Failed to configure watcher for test dependencies in dev loop - DEV_REGISTER_TEST_DEPS = 702; + DEVINIT_REGISTER_TEST_DEPS = 702; // Failed to configure watcher for deploy dependencies in dev loop - DEV_REGISTER_DEPLOY_DEPS = 703; + DEVINIT_REGISTER_DEPLOY_DEPS = 703; // Failed to configure watcher for Skaffold configuration file. - DEV_REGISTER_CONFIG_DEP = 704; + DEVINIT_REGISTER_CONFIG_DEP = 704; -} \ No newline at end of file +} From 6411b4dcae55fe3a4a35a97a586c4696d114d0e0 Mon Sep 17 00:00:00 2001 From: tejal29 Date: Mon, 4 May 2020 16:50:26 -0700 Subject: [PATCH 8/9] fix diag --- pkg/diag/validator/pod.go | 74 +++++++++++++++++----------------- pkg/diag/validator/pod_test.go | 12 +++--- pkg/diag/validator/resource.go | 20 ++++----- pkg/skaffold/runner/dev.go | 2 +- 4 files changed, 54 insertions(+), 54 deletions(-) diff --git a/pkg/diag/validator/pod.go b/pkg/diag/validator/pod.go index 1c09f79f054..00e60d6b778 100644 --- a/pkg/diag/validator/pod.go +++ b/pkg/diag/validator/pod.go @@ -67,7 +67,7 @@ func (p *PodValidator) Validate(ctx context.Context, ns string, opts metav1.List var rs []Resource for _, po := range pods.Items { ps := p.getPodStatus(&po) - rs = append(rs, NewResourceFromObject(&po, Status(ps.phase), ps.err, ps.errCode)) + rs = append(rs, NewResourceFromObject(&po, Status(ps.phase), ps.err, ps.statusCode)) } return rs, nil @@ -83,7 +83,7 @@ func (p *PodValidator) getPodStatus(pod *v1.Pod) *podStatus { } } -func getContainerStatus(pod *v1.Pod) (proto.ErrorCode, error) { +func getContainerStatus(pod *v1.Pod) (proto.StatusCode, error) { // See https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions for _, c := range pod.Status.Conditions { if c.Type == v1.PodScheduled { @@ -96,30 +96,30 @@ func getContainerStatus(pod *v1.Pod) (proto.ErrorCode, error) { // See https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-states return getWaitingContainerStatus(cs) case v1.ConditionUnknown: - return proto.ErrorCode_STATUS_CHECK_UNKNOWN, fmt.Errorf(c.Message) + return proto.StatusCode_STATUSCHECK_UNKNOWN, fmt.Errorf(c.Message) } } } - return proto.ErrorCode_STATUS_CHECK_NO_ERROR, nil + return proto.StatusCode_STATUSCHECK_SUCCESS, nil } -func getWaitingContainerStatus(cs []v1.ContainerStatus) (proto.ErrorCode, error) { +func getWaitingContainerStatus(cs []v1.ContainerStatus) (proto.StatusCode, error) { // See https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#container-states for _, c := range cs { switch { case c.State.Waiting != nil: return extractErrorMessageFromWaitingContainerStatus(c) case c.State.Terminated != nil: - return proto.ErrorCode_STATUS_CHECK_CONTAINER_TERMINATED, fmt.Errorf("container %s terminated with exit code %d", c.Name, c.State.Terminated.ExitCode) + return proto.StatusCode_STATUSCHECK_CONTAINER_TERMINATED, fmt.Errorf("container %s terminated with exit code %d", c.Name, c.State.Terminated.ExitCode) } } // No waiting or terminated containers, pod should be in good health. - return proto.ErrorCode_STATUS_CHECK_NO_ERROR, nil + return proto.StatusCode_STATUSCHECK_SUCCESS, nil } -func getTolerationsDetails(reason string, message string) (proto.ErrorCode, error) { +func getTolerationsDetails(reason string, message string) (proto.StatusCode, error) { matches := taintsRe.FindAllStringSubmatch(message, -1) - errCode := proto.ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE + errCode := proto.StatusCode_STATUSCHECK_UNKNOWN_UNSCHEDULABLE if len(matches) == 0 { return errCode, fmt.Errorf("%s: %s", reason, message) } @@ -133,32 +133,32 @@ func getTolerationsDetails(reason string, message string) (proto.ErrorCode, erro switch t { case v1.TaintNodeMemoryPressure: messages[i] = "1 node has memory pressure" - errCode = proto.ErrorCode_STATUS_CHECK_NODE_MEMORY_PRESSURE + errCode = proto.StatusCode_STATUSCHECK_NODE_MEMORY_PRESSURE case v1.TaintNodeDiskPressure: messages[i] = "1 node has disk pressure" - errCode = proto.ErrorCode_STATUS_CHECK_NODE_DISK_PRESSURE + errCode = proto.StatusCode_STATUSCHECK_NODE_DISK_PRESSURE case v1.TaintNodePIDPressure: messages[i] = "1 node has PID pressure" - errCode = proto.ErrorCode_STATUS_CHECK_NODE_PID_PRESSURE + errCode = proto.StatusCode_STATUSCHECK_NODE_PID_PRESSURE case v1.TaintNodeNotReady: messages[i] = "1 node is not ready" - if errCode == proto.ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE { - errCode = proto.ErrorCode_STATUS_CHECK_NODE_NOT_READY + if errCode == proto.StatusCode_STATUSCHECK_UNKNOWN_UNSCHEDULABLE { + errCode = proto.StatusCode_STATUSCHECK_NODE_NOT_READY } case v1.TaintNodeUnreachable: messages[i] = "1 node is unreachable" - if errCode == proto.ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE { - errCode = proto.ErrorCode_STATUS_CHECK_NODE_UNREACHABLE + if errCode == proto.StatusCode_STATUSCHECK_UNKNOWN_UNSCHEDULABLE { + errCode = proto.StatusCode_STATUSCHECK_NODE_UNREACHABLE } case v1.TaintNodeUnschedulable: messages[i] = "1 node is unschedulable" - if errCode == proto.ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE { - errCode = proto.ErrorCode_STATUS_CHECK_NODE_UNSCHEDULABLE + if errCode == proto.StatusCode_STATUSCHECK_UNKNOWN_UNSCHEDULABLE { + errCode = proto.StatusCode_STATUSCHECK_NODE_UNSCHEDULABLE } case v1.TaintNodeNetworkUnavailable: messages[i] = "1 node's network not available" - if errCode == proto.ErrorCode_STATUS_CHECK_UNKNOWN_UNSCHEDULABLE { - errCode = proto.ErrorCode_STATUS_CHECK_NODE_NETWORK_UNAVAILABLE + if errCode == proto.StatusCode_STATUSCHECK_UNKNOWN_UNSCHEDULABLE { + errCode = proto.StatusCode_STATUSCHECK_NODE_NETWORK_UNAVAILABLE } } } @@ -166,20 +166,20 @@ func getTolerationsDetails(reason string, message string) (proto.ErrorCode, erro } type podStatus struct { - name string - namespace string - phase string - err error - errCode proto.ErrorCode + name string + namespace string + phase string + err error + statusCode proto.StatusCode } func (p *podStatus) isStable() bool { return p.phase == success || (p.phase == running && p.err == nil) } -func (p *podStatus) withErr(errCode proto.ErrorCode, err error) *podStatus { +func (p *podStatus) withErr(errCode proto.StatusCode, err error) *podStatus { p.err = err - p.errCode = errCode + p.statusCode = errCode return p } @@ -195,31 +195,31 @@ func (p *podStatus) String() string { return fmt.Sprintf(actionableMessage, p.namespace, p.name) } -func extractErrorMessageFromWaitingContainerStatus(c v1.ContainerStatus) (proto.ErrorCode, error) { +func extractErrorMessageFromWaitingContainerStatus(c v1.ContainerStatus) (proto.StatusCode, error) { // Extract meaning full error out of container statuses. switch c.State.Waiting.Reason { case containerCreating: - return proto.ErrorCode_STATUS_CHECK_CONTAINER_CREATING, fmt.Errorf("creating container %s", c.Name) + return proto.StatusCode_STATUSCHECK_CONTAINER_CREATING, fmt.Errorf("creating container %s", c.Name) case crashLoopBackOff: // TODO, in case of container restarting, return the original failure reason due to which container failed. - return proto.ErrorCode_STATUS_CHECK_CONTAINER_RESTARTING, fmt.Errorf("restarting failed container %s", c.Name) + return proto.StatusCode_STATUSCHECK_CONTAINER_RESTARTING, fmt.Errorf("restarting failed container %s", c.Name) case imagePullErr, errImagePullBackOff: - return proto.ErrorCode_STATUS_CHECK_IMAGE_PULL_ERR, fmt.Errorf("container %s is waiting to start: %s can't be pulled", c.Name, c.Image) + return proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR, fmt.Errorf("container %s is waiting to start: %s can't be pulled", c.Name, c.Image) case runContainerError: match := runContainerRe.FindStringSubmatch(c.State.Waiting.Message) if len(match) != 0 { - return proto.ErrorCode_STATUS_CHECK_RUN_CONTAINER_ERR, fmt.Errorf("container %s in error: %s", c.Name, trimSpace(match[3])) + return proto.StatusCode_STATUSCHECK_RUN_CONTAINER_ERR, fmt.Errorf("container %s in error: %s", c.Name, trimSpace(match[3])) } } - return proto.ErrorCode_STATUS_CHECK_CONTAINER_WAITING_UNKNOWN, fmt.Errorf("container %s in error: %s", c.Name, trimSpace(c.State.Waiting.Message)) + return proto.StatusCode_STATUSCHECK_CONTAINER_WAITING_UNKNOWN, fmt.Errorf("container %s in error: %s", c.Name, trimSpace(c.State.Waiting.Message)) } func newPodStatus(n string, ns string, p string) *podStatus { return &podStatus{ - name: n, - namespace: ns, - phase: p, - errCode: proto.ErrorCode_STATUS_CHECK_NO_ERROR, + name: n, + namespace: ns, + phase: p, + statusCode: proto.StatusCode_STATUSCHECK_SUCCESS, } } diff --git a/pkg/diag/validator/pod_test.go b/pkg/diag/validator/pod_test.go index cd7b20fccdd..0b3edf0b063 100644 --- a/pkg/diag/validator/pod_test.go +++ b/pkg/diag/validator/pod_test.go @@ -73,7 +73,7 @@ func TestRun(t *testing.T) { }}, expected: []Resource{NewResource("test", "", "foo", "Pending", fmt.Errorf("container foo-container is waiting to start: foo-image can't be pulled"), - proto.ErrorCode_STATUS_CHECK_IMAGE_PULL_ERR)}, + proto.StatusCode_STATUSCHECK_IMAGE_PULL_ERR)}, }, { description: "pod is in Terminated State", @@ -88,7 +88,7 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "", "foo", "Succeeded", nil, - proto.ErrorCode_STATUS_CHECK_NO_ERROR)}, + proto.StatusCode_STATUSCHECK_SUCCESS)}, }, { description: "pod is in Stable State", @@ -109,7 +109,7 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "", "foo", "Running", nil, - proto.ErrorCode_STATUS_CHECK_NO_ERROR)}, + proto.StatusCode_STATUSCHECK_SUCCESS)}, }, { description: "pod condition unknown", @@ -128,7 +128,7 @@ func TestRun(t *testing.T) { }, }}, expected: []Resource{NewResource("test", "", "foo", "Pending", - fmt.Errorf("could not determine"), proto.ErrorCode_STATUS_CHECK_UNKNOWN)}, + fmt.Errorf("could not determine"), proto.StatusCode_STATUSCHECK_UNKNOWN)}, }, { description: "pod could not be scheduled", @@ -149,7 +149,7 @@ func TestRun(t *testing.T) { }}, expected: []Resource{NewResource("test", "", "foo", "Pending", fmt.Errorf("Unschedulable: 0/2 nodes available: 1 node has disk pressure, 1 node is unreachable"), - proto.ErrorCode_STATUS_CHECK_NODE_DISK_PRESSURE)}, + proto.StatusCode_STATUSCHECK_NODE_DISK_PRESSURE)}, }, { description: "pod is running but container terminated", @@ -171,7 +171,7 @@ func TestRun(t *testing.T) { }}, expected: []Resource{NewResource("test", "", "foo", "Running", fmt.Errorf("container foo-container terminated with exit code 1"), - proto.ErrorCode_STATUS_CHECK_CONTAINER_TERMINATED)}, + proto.StatusCode_STATUSCHECK_CONTAINER_TERMINATED)}, }, } diff --git a/pkg/diag/validator/resource.go b/pkg/diag/validator/resource.go index c7da0e1d0a5..e4a96feb2aa 100644 --- a/pkg/diag/validator/resource.go +++ b/pkg/diag/validator/resource.go @@ -26,12 +26,12 @@ import ( ) type Resource struct { - namespace string - kind string - name string - status Status - err error - ErrCode proto.ErrorCode + namespace string + kind string + name string + status Status + err error + StatusCode proto.StatusCode } func (r Resource) Kind() string { return r.kind } @@ -44,8 +44,8 @@ func (r Resource) String() string { } // NewResource creates new Resource of kind -func NewResource(namespace, kind, name string, status Status, err error, errCode proto.ErrorCode) Resource { - return Resource{namespace: namespace, kind: kind, name: name, status: status, err: err, ErrCode: errCode} +func NewResource(namespace, kind, name string, status Status, err error, statusCode proto.StatusCode) Resource { + return Resource{namespace: namespace, kind: kind, name: name, status: status, err: err, StatusCode: statusCode} } // objectWithMetadata is any k8s object that has kind and object metadata. @@ -55,6 +55,6 @@ type objectWithMetadata interface { } // NewResourceFromObject creates new Resource with fields populated from object metadata. -func NewResourceFromObject(object objectWithMetadata, status Status, err error, errCode proto.ErrorCode) Resource { - return NewResource(object.GetNamespace(), object.GetObjectKind().GroupVersionKind().Kind, object.GetName(), status, err, errCode) +func NewResourceFromObject(object objectWithMetadata, status Status, err error, statusCode proto.StatusCode) Resource { + return NewResource(object.GetNamespace(), object.GetObjectKind().GroupVersionKind().Kind, object.GetName(), status, err, statusCode) } diff --git a/pkg/skaffold/runner/dev.go b/pkg/skaffold/runner/dev.go index aeb4db45d7b..1858a844de8 100644 --- a/pkg/skaffold/runner/dev.go +++ b/pkg/skaffold/runner/dev.go @@ -122,7 +122,7 @@ func (r *SkaffoldRunner) doDev(ctx context.Context, out io.Writer) error { return nil } -// DevInit watches for changes and runs the skaffold build and deploy +// Dev watches for changes and runs the skaffold build and deploy // config until interrupted by the user. func (r *SkaffoldRunner) Dev(ctx context.Context, out io.Writer, artifacts []*latest.Artifact) error { event.DevLoopInProgress(r.devIteration) From 835291c0246458605ded3111c921f67ac950ac71 Mon Sep 17 00:00:00 2001 From: tejal29 Date: Mon, 4 May 2020 18:18:39 -0700 Subject: [PATCH 9/9] revert to master --- integration/rpc_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integration/rpc_test.go b/integration/rpc_test.go index 405649f369b..89184b1d4b1 100644 --- a/integration/rpc_test.go +++ b/integration/rpc_test.go @@ -353,7 +353,7 @@ func setupSkaffoldWithArgs(t *testing.T, args ...string) { // start a skaffold dev loop on an example ns, _ := SetupNamespace(t) - skaffold.Dev(args...).InDir("testdata/dev").InNs(ns.Name).RunBackground(t) + skaffold.Dev(append([]string{"--cache-artifacts=false"}, args...)...).InDir("testdata/dev").InNs(ns.Name).RunBackground(t) t.Cleanup(func() { Run(t, "testdata/dev", "rm", "foo")