syntax = "proto3";
package proto.enums;

option go_package = "github.com/GoogleContainerTools/skaffold/v2/proto/enums";

// Enum indicating builders used
enum BuilderType {
    // Could not determine builder type
    UNKNOWN_BUILDER_TYPE = 0;
    // JIB Builder
    JIB = 1;
    // Bazel Builder
    BAZEL = 2;
    // Buildpacks Builder
    BUILDPACKS = 3;
    // Custom Builder
    CUSTOM = 4;
    // Kaniko Builder
    KANIKO = 5;
    // Docker Builder
    DOCKER = 6;
    // Ko Builder
    KO = 7;
}

// Enum indicating build type i.e. local, cluster vs GCB
enum BuildType {
    // Could not determine Build Type
    UNKNOWN_BUILD_TYPE = 0;
    // Cluster Build
    CLUSTER = 1;
    // GCB Build
    GCB = 2;
    // Local Build
    LOCAL = 3;
}

// Enum indicating test tools used
enum TesterType {
    // Could not determine Test Type
    UNKNOWN_TEST_TYPE = 0;
    // Unit tests
    UNIT = 1;
    // Container Structure tests
    CONTAINER_STRUCTURE_TEST = 2;
}

// Enum indicating render manifests type
enum RenderType {
    // Could not determine Render Type
    UNKNOWN_RENDER_TYPE = 0;
    // Raw Manifests
    RAWK8S = 1;
    // kustomize manifests
    KUSTOMIZE_MANIFEST = 2;
    // helm charts
    HELM_CHART = 3;
    // kpt manifests
    KPT_MANIFEST = 4;
}

// Enum indicating deploy tools used
enum DeployerType {
    // Could not determine Deployer Type
    UNKNOWN_DEPLOYER_TYPE = 0;
    // Helm Deployer
    HELM = 1;
    // Kustomize Deployer
    KUSTOMIZE = 2 [deprecated = true];
    // Kubectl Deployer
    KUBECTL = 3;
    // kpt Deployer
    KPT = 4;
}

// Enum indicating cluster type the application is deployed to
enum ClusterType {
    // Could not determine Cluster Type
    UNKNOWN_CLUSTER_TYPE = 0;
    // Minikube Cluster
    MINIKUBE = 1;
    // GKE cluster
    GKE = 2;
    // All Cluster except Minikube and GKE
    OTHER = 3;
}

// Enum indicating the log level of a line of output
enum LogLevel {
    // Debug Level
    DEBUG = 0;
    // Info Level
    INFO = 1;
    // Warn Level
    WARN = 2;
    // Error Level
    ERROR = 3;
    // Fatal Level
    FATAL = 4;
    // Panic Level
    PANIC = 5;
    // Trace Level
    TRACE = 6;
    // User-visible output level
    STANDARD = 7;
}

// Enum for Status codes<br>
// These error codes are prepended by Phase Name e.g.
// INIT, BUILD, TEST, DEPLOY, STATUSCHECK, DEVINIT<br>
// For Success Error codes, use range 200 to 250.<br>
// For Unknown error codes, use range 500 to 600.<br>
// For Cancelled Error code, use range 800 to 850.<br>
enum StatusCode {
    // A default status code for events that do not have an associated phase.
    // Typically seen with the DevEndEvent event on success.
    OK = 0;

    // Success codes

    // Status Check Success
    STATUSCHECK_SUCCESS = 200;
    // Build Success
    BUILD_SUCCESS = 201;
    // Render Success
    RENDER_SUCCESS = 204;
    // Deploy Success
    DEPLOY_SUCCESS = 202;
    // Test Success
    TEST_SUCCESS = 203;

    // Build Errors

    // Build error due to push access denied
    BUILD_PUSH_ACCESS_DENIED = 101;
    // Build error due to GCP project not found.
    BUILD_PROJECT_NOT_FOUND = 102;
    // Docker build error due to docker daemon not running
    BUILD_DOCKER_DAEMON_NOT_RUNNING = 103;
    // Build error due to user application code, e.g. compilation error,
    // dockerfile error etc
    BUILD_USER_ERROR = 104;
    // Build error due to docker not available
    BUILD_DOCKER_UNAVAILABLE = 105;
    // Docker build error due to user not authorized to perform the action
    BUILD_DOCKER_UNAUTHORIZED = 106;
    // Docker system build error
    BUILD_DOCKER_SYSTEM_ERR = 107;
    // Docker build error due to Docker build container is already in the
    // desired state
    BUILD_DOCKER_NOT_MODIFIED_ERR = 108;
    // Docker build error indicating a feature not supported
    BUILD_DOCKER_NOT_IMPLEMENTED_ERR = 109;
    // Docker build error indicates that for given build, data was lost or there
    // is data corruption
    BUILD_DOCKER_DATA_LOSS_ERR = 110;
    // Docker build error indicates user is forbidden to perform the build or
    // step/action.
    BUILD_DOCKER_FORBIDDEN_ERR = 111;
    // Docker build error due to some internal error and docker container state
    // conflicts with the requested action and can't be performed
    BUILD_DOCKER_CONFLICT_ERR = 112;
    // Docker build error indicates the requested object does not exist
    BUILD_DOCKER_ERROR_NOT_FOUND = 113;
    // Docker build error indication invalid parameter sent to docker command
    BUILD_DOCKER_INVALID_PARAM_ERR = 114;
    // Docker build failed due to dockerfile not found
    BUILD_DOCKERFILE_NOT_FOUND = 115;
    // Docker build failed due `cacheFrom` user config error
    BUILD_DOCKER_CACHE_FROM_PULL_ERR = 116;
    // Build error due to digest for built artifact could not be retrieved from
    // docker daemon.
    BUILD_DOCKER_GET_DIGEST_ERR = 117;
    // Build error due no space left in docker.
    BUILD_DOCKER_NO_SPACE_ERR = 127;
    // Build error due to digest for built artifact could not be retrieved from
    // registry.
    BUILD_REGISTRY_GET_DIGEST_ERR = 118;
    // Build error indicating unknown Jib plugin type. Should be one of [maven,
    // gradle]
    BUILD_UNKNOWN_JIB_PLUGIN_TYPE = 119;
    // Build error determining dependency for jib gradle project.
    BUILD_JIB_GRADLE_DEP_ERR = 120;
    // Build error determining dependency for jib gradle project.
    BUILD_JIB_MAVEN_DEP_ERR = 121;

    // Docker build error when listing containers.
    INIT_DOCKER_NETWORK_LISTING_CONTAINERS = 122;
    // Docker build error indicating an invalid container name (or id).
    INIT_DOCKER_NETWORK_INVALID_CONTAINER_NAME = 123;
    // Docker build error indicating the container referenced does not exists in
    // the docker context used.
    INIT_DOCKER_NETWORK_CONTAINER_DOES_NOT_EXIST = 124;
    // Docker Network invalid mode
    INIT_DOCKER_NETWORK_INVALID_MODE = 125;
    // Error parsing Docker Network mode
    INIT_DOCKER_NETWORK_PARSE_ERR = 126;

    // GCB Create Build Error
    BUILD_GCB_CREATE_BUILD_ERR = 128;
    // GCB error indicating an error to fetch build id.
    BUILD_GCB_GET_BUILD_ID_ERR = 129;
    // GCB error indicating an error to fetch build status.
    BUILD_GCB_GET_BUILD_STATUS_ERR = 130;
    // GCB error indicating an error to fetch build logs.
    BUILD_GCB_GET_BUILD_LOG_ERR = 131;
    // GCB error indicating an error to fetch build status.
    BUILD_GCB_COPY_BUILD_LOG_ERR = 132;
    // GCB error indicating an error retrieving the built image id.
    BUILD_GCB_GET_BUILT_IMAGE_ERR = 133;
    // GCB error indicating build failure.
    BUILD_GCB_BUILD_FAILED = 134;
    // GCB error indicating build failure due to internal errror.
    BUILD_GCB_BUILD_INTERNAL_ERR = 135;
    // GCB error indicating build failure due to timeout.
    BUILD_GCB_BUILD_TIMEOUT = 136;
    // GCB error to generate the build descriptor.
    BUILD_GCB_GENERATE_BUILD_DESCRIPTOR_ERR = 137;
    // GCB error to upload to GCS.
    BUILD_GCB_UPLOAD_TO_GCS_ERR = 138;
    // GCB error to fetch jib artifact dependency.
    BUILD_GCB_JIB_DEPENDENCY_ERR = 139;
    // GCB error to fetch artifact dependency.
    BUILD_GCB_GET_DEPENDENCY_ERR = 140;
    // GCB error to get GCS bucket.
    BUILD_GCB_GET_GCS_BUCKET_ERR = 141;
    // GCB error to create a GCS bucket.
    BUILD_GCB_CREATE_BUCKET_ERR = 142;
    // GCB error to extract Project ID.
    BUILD_GCB_EXTRACT_PROJECT_ID = 143;
    // GCB error to get cloud storage client to perform GCS operation.
    BUILD_GET_CLOUD_STORAGE_CLIENT_ERR = 144;
    // GCB error to get cloud build client to perform GCB operations.
    BUILD_GET_CLOUD_BUILD_CLIENT_ERR = 145;

    // Build platform errors

    // Value provided to --platform flag cannot be parsed
    BUILD_UNKNOWN_PLATFORM_FLAG = 150;

    // Cross-platform build failures
    BUILD_CROSS_PLATFORM_ERR = 151;
    // Multi-platfor build fails due to no container registry set
    BUILD_CROSS_PLATFORM_NO_REGISTRY_ERR = 152;

    // Container errors

    // Container image pull error
    STATUSCHECK_IMAGE_PULL_ERR = 300;
    // Container creating error
    STATUSCHECK_CONTAINER_CREATING = 301;
    // Container run error
    STATUSCHECK_RUN_CONTAINER_ERR = 302;
    // Container is already terminated
    STATUSCHECK_CONTAINER_TERMINATED = 303;
    // Deployment waiting for rollout
    STATUSCHECK_DEPLOYMENT_ROLLOUT_PENDING = 304;
    // Standalone pods pending to stabilize
    STATUSCHECK_STANDALONE_PODS_PENDING = 305;
    // Container restarting error
    STATUSCHECK_CONTAINER_RESTARTING = 356;
    // Readiness probe failed
    STATUSCHECK_UNHEALTHY = 357;
    // Executable binary format error
    STATUSCHECK_CONTAINER_EXEC_ERROR = 358;

    // K8 infra errors

    // Node memory pressure error
    STATUSCHECK_NODE_MEMORY_PRESSURE = 400;
    // Node disk pressure error
    STATUSCHECK_NODE_DISK_PRESSURE = 401;
    // Node network unavailable error
    STATUSCHECK_NODE_NETWORK_UNAVAILABLE = 402;
    // Node PID pressure error
    STATUSCHECK_NODE_PID_PRESSURE = 403;
    // Node unschedulable error
    STATUSCHECK_NODE_UNSCHEDULABLE = 404;
    // Node unreachable error
    STATUSCHECK_NODE_UNREACHABLE = 405;
    // Node not ready error
    STATUSCHECK_NODE_NOT_READY = 406;
    // Scheduler failure error
    STATUSCHECK_FAILED_SCHEDULING = 407;
    // Kubectl connection error
    STATUSCHECK_KUBECTL_CONNECTION_ERR = 409;
    // Kubectl process killed error
    STATUSCHECK_KUBECTL_PID_KILLED = 410;

    // 408 is skipped as STATUSCHECK_UNHEALTH code renumbered as 357

    // Kubectl client fetch err
    STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR = 411;
    STATUSCHECK_DEPLOYMENT_FETCH_ERR = 412;
    STATUSCHECK_STANDALONE_PODS_FETCH_ERR = 413;
    STATUSCHECK_CONFIG_CONNECTOR_RESOURCES_FETCH_ERR = 414;
    STATUSCHECK_STATEFULSET_FETCH_ERR = 415;
    STATUSCHECK_CUSTOM_RESOURCE_FETCH_ERR = 416;

    // Pod States

    // Pod Initializing
    STATUSCHECK_POD_INITIALIZING = 451;

    // Config Connector resource states
    // Maps to
    // https://github.com/kubernetes-sigs/cli-utils/tree/master/pkg/kstatus#statuses

    // The actual state of the resource has not yet reached the desired state
    STATUSCHECK_CONFIG_CONNECTOR_IN_PROGRESS = 452;
    // The process of reconciling the actual state with the desired state has
    // encountered an error
    STATUSCHECK_CONFIG_CONNECTOR_FAILED = 453;
    // The resource is in the process of being deleted
    STATUSCHECK_CONFIG_CONNECTOR_TERMINATING = 454;
    // The resource does not exist
    STATUSCHECK_CONFIG_CONNECTOR_NOT_FOUND = 455;

    // The actual state of the resource has not yet reached the desired state
    STATUSCHECK_CUSTOM_RESOURCE_IN_PROGRESS = 456;
    // The process of reconciling the actual state with the desired state has
    // encountered an error
    STATUSCHECK_CUSTOM_RESOURCE_FAILED = 457;
    // The resource is in the process of being deleted
    STATUSCHECK_CUSTOM_RESOURCE_TERMINATING = 458;
    // The resource does not exist
    STATUSCHECK_CUSTOM_RESOURCE_NOT_FOUND = 459;

    // Unknown Error Codes

    // Could not determine error and phase
    UNKNOWN_ERROR = 500;
    // Status Check error unknown
    STATUSCHECK_UNKNOWN = 501;
    // Container is unschedulable due to unknown reasons
    STATUSCHECK_UNKNOWN_UNSCHEDULABLE = 502;
    // Container is waiting due to unknown reason
    STATUSCHECK_CONTAINER_WAITING_UNKNOWN = 503;
    // Container event reason unknown
    STATUSCHECK_UNKNOWN_EVENT = 509;
    // Status Check internal error
    STATUSCHECK_INTERNAL_ERROR = 514;

    // 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;
    // Initialization of the Skaffold session failed due to unknown reason(s)
    INIT_UNKNOWN = 510;
    // Build failed due to docker unknown error
    BUILD_DOCKER_UNKNOWN = 511;
    // Test failed due to unknown reason
    TEST_UNKNOWN = 512;
    // GCB error indicating build failed due to unknown status.
    BUILD_GCB_BUILD_UNKNOWN_STATUS = 513;

    // FILE_SYNC Failures

    // File Sync Initialize failure
    SYNC_INIT_ERROR = 601;

    // DevInit Errors

    // Failed to configure watcher for build dependencies in dev loop
    DEVINIT_REGISTER_BUILD_DEPS = 701;
    // Failed to configure watcher for test dependencies in dev loop
    DEVINIT_REGISTER_TEST_DEPS = 702;
    // Failed to configure watcher for deploy dependencies in dev loop
    DEVINIT_REGISTER_DEPLOY_DEPS = 703;
    // Failed to configure watcher for Skaffold configuration file.
    DEVINIT_REGISTER_CONFIG_DEP = 704;
    // Failed to configure watcher for build dependencies for a base image with
    // v1 manifest.
    DEVINIT_UNSUPPORTED_V1_MANIFEST = 705;
    // Failed to configure watcher for render dependencies in dev loop
    DEVINIT_REGISTER_RENDER_DEPS = 706;

    // Timeout or User Cancellation Errors

    // User cancelled the skaffold dev run
    STATUSCHECK_USER_CANCELLED = 800;
    // Deadline for status check exceeded
    STATUSCHECK_DEADLINE_EXCEEDED = 801;
    // Build Cancelled
    BUILD_CANCELLED = 802;
    // Deploy cancelled due to user cancellation or one or more deployers
    // failed.
    DEPLOY_CANCELLED = 803;
    // Docker build cancelled.
    BUILD_DOCKER_CANCELLED = 804;
    // Build error due to docker deadline was reached before the docker action
    // completed
    BUILD_DOCKER_DEADLINE = 805;
    // GCB Build cancelled.
    BUILD_GCB_BUILD_CANCELLED = 806;

    // Skaffold Initialization Phase session errors

    // Skaffold was unable to create the configured tagger
    INIT_CREATE_TAGGER_ERROR = 901;
    // Skaffold was unable to start as Minikube appears to be paused
    INIT_MINIKUBE_PAUSED_ERROR = 902;
    // Skaffold was unable to start as Minikube appears to be stopped
    INIT_MINIKUBE_NOT_RUNNING_ERROR = 903;
    // Skaffold was unable to create a configured image builder
    INIT_CREATE_BUILDER_ERROR = 904;
    // Skaffold was unable to create a configured deployer
    INIT_CREATE_DEPLOYER_ERROR = 905;
    // Skaffold was unable to create a configured test
    INIT_CREATE_TEST_DEP_ERROR = 906;
    // Skaffold encountered an error validating the artifact cache
    INIT_CACHE_ERROR = 907;
    // Skaffold encountered an error when configuring file watching
    INIT_CREATE_WATCH_TRIGGER_ERROR = 908;
    // Skaffold encountered an error when evaluating artifact dependencies
    INIT_CREATE_ARTIFACT_DEP_ERROR = 909;
    // No Location was specified for Cloud Run
    INIT_CLOUD_RUN_LOCATION_ERROR = 910;

    // Deploy errors

    // Unable to connect to cluster
    DEPLOY_CLUSTER_CONNECTION_ERR = 1001;
    // Could not retrieve debug helpers.
    DEPLOY_DEBUG_HELPER_RETRIEVE_ERR = 1002;
    // Deploy clean up error
    DEPLOY_CLEANUP_ERR = 1003;
    // Unable to apply helm labels.
    DEPLOY_HELM_APPLY_LABELS = 1004;
    // Deploy error due to user deploy config for helm deployer
    DEPLOY_HELM_USER_ERR = 1005;
    // An image was referenced with no matching build result
    DEPLOY_NO_MATCHING_BUILD = 1006;
    // Unable to get helm client version
    DEPLOY_HELM_VERSION_ERR = 1007;
    // Helm version not supported.
    DEPLOY_HELM_MIN_VERSION_ERR = 1008;
    // Unable to retrieve kubectl version
    DEPLOY_KUBECTL_VERSION_ERR = 1109;
    // User specified offline mode for rendering but remote manifests presents.
    DEPLOY_KUBECTL_OFFLINE_MODE_ERR = 1010;
    // Error waiting for previous version deletion before next version is
    // active.
    DEPLOY_ERR_WAITING_FOR_DELETION = 1011;
    // Error reading manifests
    DEPLOY_READ_MANIFEST_ERR = 1012;
    // Error reading remote manifests
    DEPLOY_READ_REMOTE_MANIFEST_ERR = 1013;
    // Errors listing manifests
    DEPLOY_LIST_MANIFEST_ERR = 1014;
    // Deploy error due to user deploy config for kubectl deployer
    DEPLOY_KUBECTL_USER_ERR = 1015;
    // Deploy error due to user deploy config for kustomize deployer
    DEPLOY_KUSTOMIZE_USER_ERR = 1016;
    // Error replacing a built artifact in the manifests
    DEPLOY_REPLACE_IMAGE_ERR = 1017 [deprecated = true];
    // Error transforming a manifest during skaffold debug
    DEPLOY_TRANSFORM_MANIFEST_ERR = 1018 [deprecated = true];
    // Error setting user specified additional labels.
    DEPLOY_SET_LABEL_ERR = 1019 [deprecated = true];
    // Error writing hydrated kubernetes manifests.
    DEPLOY_MANIFEST_WRITE_ERR = 1020 [deprecated = true];
    // Error getting images from a kubernetes manifest.
    DEPLOY_PARSE_MANIFEST_IMAGES_ERR = 1021 [deprecated = true];
    // Helm config `createNamespace` not available
    DEPLOY_HELM_CREATE_NS_NOT_AVAILABLE = 1022;
    // Kubernetes cluster reported an internal system error
    DEPLOY_CLUSTER_INTERNAL_SYSTEM_ERR = 1023;
    // The Kptfile cannot be created via `kpt live init`.
    DEPLOY_KPTFILE_INIT_ERR = 1024;
    // The `kpt fn source` cannot read the given manifests.
    DEPLOY_KPT_SOURCE_ERR = 1025;
    // The Kptfile exists but cannot be opened or parsed.
    DEPLOY_KPTFILE_INVALID_YAML_ERR = 1026;
    // kpt fails to live apply the manifests to the cluster.
    DEPLOY_KPT_APPLY_ERR = 1027;

    // The Cloud Run Client could not be created
    DEPLOY_GET_CLOUD_RUN_CLIENT_ERR = 1028;
    // The Cloud Run Client could not get details about the service.
    DEPLOY_CLOUD_RUN_GET_SERVICE_ERR = 1029;
    // The Cloud Run Client was unable to update the service.
    DEPLOY_CLOUD_RUN_UPDATE_SERVICE_ERR = 1030;
    // The Cloud Run Client was unable to delete the service.
    DEPLOY_CLOUD_RUN_DELETE_SERVICE_ERR = 1031;
    // The Cloud Run Client could not get details about the workerpool.
    DEPLOY_CLOUD_RUN_GET_WORKER_POOL_ERR = 1032;
    // The Cloud Run Client was unable to update the workerpool.
    DEPLOY_CLOUD_RUN_UPDATE_WORKER_POOL_ERR = 1033;
    // The Cloud Run Client was unable to delete the workerpool.
    DEPLOY_CLOUD_RUN_DELETE_WORKER_POOL_ERR = 1034;

    // Test errors

    // Error expanding paths
    TEST_USER_CONFIG_ERR = 1101;
    // Error running container-structure-test
    TEST_CST_USER_ERR = 1102;
    // Unable to docker pull image
    TEST_IMG_PULL_ERR = 1103;
    // Unable to parse test command
    TEST_CUSTOM_CMD_PARSE_ERR = 1104;
    // Command returned non-zero exit code
    TEST_CUSTOM_CMD_RUN_NON_ZERO_EXIT_ERR = 1105;
    // command cancelled or timed out
    TEST_CUSTOM_CMD_RUN_TIMEDOUT_ERR = 1106;
    // command cancelled or timed out
    TEST_CUSTOM_CMD_RUN_CANCELLED_ERR = 1107;
    // command context error
    TEST_CUSTOM_CMD_RUN_EXECUTION_ERR = 1108;
    // command exited
    TEST_CUSTOM_CMD_RUN_EXITED_ERR = 1110;
    // error running cmd
    TEST_CUSTOM_CMD_RUN_ERR = 1111;
    // Error getting dependencies from command
    TEST_CUSTOM_DEPENDENCIES_CMD_ERR = 1112;
    // Unmarshalling dependency output error
    TEST_CUSTOM_DEPENDENCIES_UNMARSHALL_ERR = 1113;
    // Error retrieving the command
    TEST_CUSTOM_CMD_RETRIEVE_ERR = 1114;

    // Render errors
    // The Kptfile cannot be created via `kpt pkg init`.
    RENDER_KPTFILE_INIT_ERR = 1501;
    // The Kptfile is not a valid yaml file
    RENDER_KPTFILE_INVALID_YAML_ERR = 1401;
    // The Kptfile is not a valid API schema
    RENDER_KPTFILE_INVALID_SCHEMA_ERR = 1402;
    // Error setting namespace.
    RENDER_SET_NAMESPACE_ERR = 1403;
    // Namespace is already set.
    RENDER_NAMESPACE_ALREADY_SET_ERR = 1404;
    // Error replacing a built artifact in the manifests
    RENDER_REPLACE_IMAGE_ERR = 1405;
    // Error transforming a manifest during skaffold debug
    RENDER_TRANSFORM_MANIFEST_ERR = 1406;
    // Error setting user specified additional labels.
    RENDER_SET_LABEL_ERR = 1407;
    // Error writing hydrated kubernetes manifests.
    RENDER_MANIFEST_WRITE_ERR = 1408;
    // Error getting images from a kubernetes manifest.
    RENDER_PARSE_MANIFEST_IMAGES_ERR = 1409;
    // Error due to Helm plugin registration
    RENDER_HELM_PLUGIN_ERR = 1410;

    // Configuration errors

    // Catch-all configuration file parsing error
    CONFIG_FILE_PARSING_ERR = 1201;
    // Main configuration file not found
    CONFIG_FILE_NOT_FOUND_ERR = 1202;
    // Dependency configuration file not found
    CONFIG_DEPENDENCY_NOT_FOUND_ERR = 1203;
    // Duplicate config names in the same configuration file
    CONFIG_DUPLICATE_NAMES_SAME_FILE_ERR = 1204;
    // Duplicate config names in two configuration files
    CONFIG_DUPLICATE_NAMES_ACROSS_FILES_ERR = 1205;
    // No configs matching configs filter
    CONFIG_BAD_FILTER_ERR = 1206;
    // No configs parsed from current file
    CONFIG_ZERO_FOUND_ERR = 1207;
    // Failed to apply profiles to config
    CONFIG_APPLY_PROFILES_ERR = 1208;
    // Failed to set default config values
    CONFIG_DEFAULT_VALUES_ERR = 1209;
    // Failed to substitute absolute file paths in config
    CONFIG_FILE_PATHS_SUBSTITUTION_ERR = 1210;
    // Same config imported at least twice with different set of profiles
    CONFIG_MULTI_IMPORT_PROFILE_CONFLICT_ERR = 1211;
    // Profile selection did not match known profile names
    CONFIG_PROFILES_NOT_FOUND_ERR = 1212;
    // Config API version not found
    CONFIG_UNKNOWN_API_VERSION_ERR = 1213;
    // The validator is not allowed in skaffold-managed mode.
    CONFIG_UNKNOWN_VALIDATOR = 1214;
    // The transformer is not allowed in skaffold-managed mode.
    CONFIG_UNKNOWN_TRANSFORMER = 1215;
    // Manifest file not found
    CONFIG_MISSING_MANIFEST_FILE_ERR = 1216;
    // Remote config repository cache not found and sync disabled
    CONFIG_REMOTE_REPO_CACHE_NOT_FOUND_ERR = 1217;
    // Skaffold config version mismatch
    CONFIG_UPGRADE_ERR = 1218;

    // Inspect command errors

    // Catch-all `skaffold inspect` command error
    INSPECT_UNKNOWN_ERR = 1301;
    // Trying to add new build environment that already exists
    INSPECT_BUILD_ENV_ALREADY_EXISTS_ERR = 1302;
    // Trying to modify build environment that doesn't exist
    INSPECT_BUILD_ENV_INCORRECT_TYPE_ERR = 1303;
    // Trying to modify a profile that doesn't exist
    INSPECT_PROFILE_NOT_FOUND_ERR = 1304;

    // Port Forwarding Errors

    PORT_FORWARD_RUN_GCLOUD_NOT_FOUND = 1601;
    PORT_FORWARD_RUN_PROXY_START_ERROR = 1602;

    // GCloud not found error
    LOG_STREAM_RUN_GCLOUD_NOT_FOUND = 1603;
}

// Enum for Suggestion codes
enum SuggestionCode {
    // default nil suggestion.
    // This is usually set when no error happens.
    NIL = 0;

    // Build error suggestion codes

    // Add Default Repo
    ADD_DEFAULT_REPO = 100;
    // Verify Default Repo
    CHECK_DEFAULT_REPO = 101;
    // Verify default repo in the global config
    CHECK_DEFAULT_REPO_GLOBAL_CONFIG = 102;
    // run gcloud docker auth configure
    GCLOUD_DOCKER_AUTH_CONFIGURE = 103;
    // Run docker auth configure
    DOCKER_AUTH_CONFIGURE = 104;
    // Verify Gcloud Project
    CHECK_GCLOUD_PROJECT = 105;
    // Check if docker is running
    CHECK_DOCKER_RUNNING = 106;
    // Fix User Build Error
    FIX_USER_BUILD_ERR = 107;
    // Docker build internal error, try again
    DOCKER_BUILD_RETRY = 108;
    // Fix `cacheFrom` config for given artifact and try again
    FIX_CACHE_FROM_ARTIFACT_CONFIG = 109;
    // Fix `dockerfile` config for a given artifact and try again.
    FIX_SKAFFOLD_CONFIG_DOCKERFILE = 110;
    // Use a supported Jib plugin type
    FIX_JIB_PLUGIN_CONFIGURATION = 111;
    // Docker build network invalid docker container name (or id).
    FIX_DOCKER_NETWORK_CONTAINER_NAME = 112;
    // Docker build network container not existing in the current context.
    CHECK_DOCKER_NETWORK_CONTAINER_RUNNING = 113;
    // Executing extractContainerNameFromNetworkMode with a non valid mode (only
    // container mode allowed)
    FIX_DOCKER_NETWORK_MODE_WHEN_EXTRACTING_CONTAINER_NAME = 114;
    // Prune Docker image
    RUN_DOCKER_PRUNE = 115;
    // Set Cleanup flag for skaffold command.
    SET_CLEANUP_FLAG = 116;

    // Build platform error suggestion codes

    // Check value provided to the `--platform` flag
    BUILD_FIX_UNKNOWN_PLATFORM_FLAG = 117;

    // Check if QEMU platform emulators are installed
    BUILD_INSTALL_PLATFORM_EMULATORS = 118;

    // Set --push and container registry to run a multi-platform build
    SET_PUSH_AND_CONTAINER_REGISTRY = 119;

    // Deploy error suggestion codes

    // Check cluster connection
    CHECK_CLUSTER_CONNECTION = 201;
    // Check minikube status
    CHECK_MINIKUBE_STATUS = 202;
    // Install helm tool
    INSTALL_HELM = 203;
    // Upgrade helm tool
    UPGRADE_HELM = 204;
    // Fix helm `releases.artifactOverrides` config to match with
    // `build.artifacts` (no longer used in Skaffold v2)
    FIX_SKAFFOLD_CONFIG_HELM_ARTIFACT_OVERRIDES = 205;
    // Upgrade helm version to v3.2.0 and higher.
    UPGRADE_HELM32 = 206;
    // Set `releases.createNamespace` to false.
    FIX_SKAFFOLD_CONFIG_HELM_CREATE_NAMESPACE = 207;
    // check the Kptfile validation.
    INVALID_KPT_MANIFESTS = 208;
    // align the inventory info in kpt live apply.
    ALIGN_KPT_INVENTORY = 209;

    // Install kubectl tool
    INSTALL_KUBECTL = 220;

    // Specify Cloud Run Location
    SPECIFY_CLOUD_RUN_LOCATION = 230;

    // Container Run time error

    // Container run error
    CHECK_CONTAINER_LOGS = 301;
    // Pod Health check error
    CHECK_READINESS_PROBE = 302;
    // Check Container image
    CHECK_CONTAINER_IMAGE = 303;



    // Common infra errors

    // Node pressure error
    ADDRESS_NODE_MEMORY_PRESSURE = 400;
    // Node disk pressure error
    ADDRESS_NODE_DISK_PRESSURE = 401;
    // Node network unavailable error
    ADDRESS_NODE_NETWORK_UNAVAILABLE = 402;
    // Node PID pressure error
    ADDRESS_NODE_PID_PRESSURE = 403;
    // Node unschedulable error
    ADDRESS_NODE_UNSCHEDULABLE = 404;
    // Node unreachable error
    ADDRESS_NODE_UNREACHABLE = 405;
    // Node not ready error
    ADDRESS_NODE_NOT_READY = 406;
    // Scheduler failure error
    ADDRESS_FAILED_SCHEDULING = 407;
    // Cluster Connectivity error
    CHECK_HOST_CONNECTION = 408;

    // Minikube Suggestions

    // Minikube is stopped: use `minikube start`
    START_MINIKUBE = 501;
    // Minikube is paused: use `minikube unpause`
    UNPAUSE_MINIKUBE = 502;

    // Dev Phase error suggestions

    // Run Docker pull for the image with v1 manifest and try again.
    RUN_DOCKER_PULL = 551;

    // Render Error suggestion codes

    // Rerun with correct offline flag value.
    SET_RENDER_FLAG_OFFLINE_FALSE = 600;
    // Manually run `kpt pkg init` or `kpt live init`
    KPTFILE_MANUAL_INIT = 601;
    // Check if the Kptfile is correct.
    KPTFILE_CHECK_YAML = 602;
    // Remove namespace from manifests
    REMOVE_NAMESPACE_FROM_MANIFESTS = 603;

    // Configuration error suggestion codes

    // Check configuration file path
    CONFIG_CHECK_FILE_PATH = 700;
    // Check dependency config definition
    CONFIG_CHECK_DEPENDENCY_DEFINITION = 701;
    // Change config name to avoid duplicates
    CONFIG_CHANGE_NAMES = 702;
    // Check config filter
    CONFIG_CHECK_FILTER = 703;
    // Check profile definition in current config
    CONFIG_CHECK_PROFILE_DEFINITION = 704;
    // Check active profile selection for dependency config
    CONFIG_CHECK_DEPENDENCY_PROFILES_SELECTION = 705;
    // Check profile selection flag
    CONFIG_CHECK_PROFILE_SELECTION = 706;
    // Fix config API version or upgrade the skaffold binary
    CONFIG_FIX_API_VERSION = 707;
    // Only the allow listed validators are acceptable in skaffold-managed mode.
    CONFIG_ALLOWLIST_VALIDATORS = 708;
    // Only the allow listed transformers are acceptable in skaffold-managed
    // mode.
    CONFIG_ALLOWLIST_transformers = 709;
    // Check mising manifest file section of config and fix as needed.
    CONFIG_FIX_MISSING_MANIFEST_FILE = 710;
    // Enable remote repo sync, or clone manually
    CONFIG_ENABLE_REMOTE_REPO_SYNC = 711;
    // Upgrade skaffold config version to latest
    CONFIG_FIX_SKAFFOLD_CONFIG_VERSION = 712;

    // `skaffold inspect` command error suggestion codes

    // Create new build env in a profile instead, or use the 'modify' command
    INSPECT_USE_MODIFY_OR_NEW_PROFILE = 800;
    // Check profile selection, or use the 'add' command instead
    INSPECT_USE_ADD_BUILD_ENV = 801;
    // Check profile flag value
    INSPECT_CHECK_INPUT_PROFILE = 802;

    // Open an issue so this situation can be diagnosed
    OPEN_ISSUE = 900;

    // Test error suggestion codes
    CHECK_CUSTOM_COMMAND = 1000;
    FIX_CUSTOM_COMMAND_TIMEOUT = 1001;
    CHECK_CUSTOM_COMMAND_DEPENDENCIES_CMD = 1002;
    CHECK_CUSTOM_COMMAND_DEPENDENCIES_PATHS = 1003;
    CHECK_TEST_COMMAND_AND_IMAGE_NAME = 1004;
}
