import { ICloudFunctionTrigger, IFunctionVPC } from '../interfaces'; /** * 镜像 HTTP 函数固定监听端口 * SCF HTTP 自定义镜像函数要求容器监听 9000 */ export declare const IMAGE_FUNCTION_PORT = 9000; /** * 镜像构建默认目标平台 * SCF 运行环境为 linux/amd64,Apple Silicon 也必须显式构建该平台 */ export declare const DEFAULT_IMAGE_PLATFORM = "linux/amd64"; /** 默认 Dockerfile 名称,相对于构建上下文 */ export declare const DEFAULT_DOCKERFILE = "Dockerfile"; /** HTTP 函数支持的构建策略 */ export type HttpBuildStrategy = 'zip' | 'cloud' | 'local' | 'image'; /** 函数运行模型 */ export type FunctionRuntimeModel = 'Event' | 'HTTP'; /** 自定义镜像运行时标识 */ export declare const CUSTOM_IMAGE_RUNTIME = "CustomImage"; /** 部署计划的粗粒度动作 */ export type DeployActionKind = 'create' | 'update' | 'replace' | 'noop'; /** 部署计划中的细粒度操作 */ export type DeployOperation = 'create-function' | 'update-code' | 'update-config' | 'replace-function' | 'configure-access' | 'configure-gateway'; /** 统一进度阶段 */ export type DeployStage = 'validate' | 'preflight' | 'plan' | 'pack' | 'upload' | 'login' | 'build' | 'push' | 'deploy-function' | 'wait-active' | 'configure-access' | 'configure-gateway' | 'done'; /** 单项检查结论 */ export type CheckStatus = 'pass' | 'warn' | 'fail'; /** * 单项检查结果 * 配置契约守卫与后续 Preflight 复用同一结构,便于上层统一展示 */ export interface ICheckResult { /** 稳定错误码,供上层做本地化和引导 */ id: string; status: CheckStatus; /** 简短结论 */ summary: string; /** 详细信息,不得包含凭证 */ detail?: string; /** 可执行的修复建议 */ remediation?: string; docsUrl?: string; /** 该问题是否可以通过切换到云端构建规避 */ canFallbackToCloud?: boolean; } /** 检查报告 */ export interface ICheckReport { /** config 表示纯配置契约校验;local/cloud 表示环境与云资源检查 */ scope: 'config' | 'local' | 'cloud'; strategy?: HttpBuildStrategy; /** 是否没有 fail 项 */ ready: boolean; checks: ICheckResult[]; /** 建议改用的策略 */ recommendedStrategy?: 'cloud'; } /** 函数部署错误码 */ export declare const FUNCTION_DEPLOY_ERROR: { readonly CONFIG_INVALID: "CONFIG_INVALID"; readonly CONFIG_NAME_INVALID: "CONFIG_NAME_INVALID"; readonly CONFIG_TYPE_INVALID: "CONFIG_TYPE_INVALID"; readonly CONFIG_STRATEGY_INVALID: "CONFIG_STRATEGY_INVALID"; readonly CONFIG_TIMEOUT_INVALID: "CONFIG_TIMEOUT_INVALID"; readonly CONFIG_MEMORY_SIZE_INVALID: "CONFIG_MEMORY_SIZE_INVALID"; readonly CONFIG_ENV_VARIABLE_INVALID: "CONFIG_ENV_VARIABLE_INVALID"; readonly EVENT_IMAGE_NOT_SUPPORTED: "EVENT_IMAGE_NOT_SUPPORTED"; readonly EVENT_GATEWAY_NOT_SUPPORTED: "EVENT_GATEWAY_NOT_SUPPORTED"; readonly EVENT_HTTP_FIELD_NOT_SUPPORTED: "EVENT_HTTP_FIELD_NOT_SUPPORTED"; readonly HTTP_ZIP_RUNTIME_INVALID: "HTTP_ZIP_RUNTIME_INVALID"; readonly HTTP_ZIP_IMAGE_CONFIG_CONFLICT: "HTTP_ZIP_IMAGE_CONFIG_CONFLICT"; readonly HTTP_ZIP_INSTALL_DEPENDENCY_OVERRIDDEN: "HTTP_ZIP_INSTALL_DEPENDENCY_OVERRIDDEN"; readonly HTTP_TRIGGER_NOT_SUPPORTED: "HTTP_TRIGGER_NOT_SUPPORTED"; readonly HTTP_CONCURRENCY_INVALID: "HTTP_CONCURRENCY_INVALID"; readonly HTTP_PROTOCOL_PARAMS_INVALID: "HTTP_PROTOCOL_PARAMS_INVALID"; readonly CODE_SOURCE_MISSING: "CODE_SOURCE_MISSING"; readonly CODE_SOURCE_CONFLICT: "CODE_SOURCE_CONFLICT"; readonly IMAGE_CONFIG_MISSING: "IMAGE_CONFIG_MISSING"; readonly IMAGE_CONFIG_NOT_ALLOWED: "IMAGE_CONFIG_NOT_ALLOWED"; readonly IMAGE_URI_INVALID: "IMAGE_URI_INVALID"; readonly IMAGE_TAG_MISSING: "IMAGE_TAG_MISSING"; readonly IMAGE_TAG_LATEST_FORBIDDEN: "IMAGE_TAG_LATEST_FORBIDDEN"; readonly IMAGE_TYPE_INVALID: "IMAGE_TYPE_INVALID"; readonly IMAGE_REGISTRY_ID_MISSING: "IMAGE_REGISTRY_ID_MISSING"; readonly IMAGE_REGISTRY_ID_INVALID: "IMAGE_REGISTRY_ID_INVALID"; readonly IMAGE_PORT_INVALID: "IMAGE_PORT_INVALID"; readonly IMAGE_RUNTIME_INVALID: "IMAGE_RUNTIME_INVALID"; readonly IMAGE_HANDLER_NOT_ALLOWED: "IMAGE_HANDLER_NOT_ALLOWED"; readonly BUILD_CONFIG_MISSING: "BUILD_CONFIG_MISSING"; readonly BUILD_DOCKERFILE_INVALID: "BUILD_DOCKERFILE_INVALID"; readonly BUILD_CONTEXT_INVALID: "BUILD_CONTEXT_INVALID"; readonly BUILD_PLATFORM_INVALID: "BUILD_PLATFORM_INVALID"; readonly BUILD_TAG_INVALID: "BUILD_TAG_INVALID"; readonly BUILD_REPOSITORY_INVALID: "BUILD_REPOSITORY_INVALID"; readonly BUILD_ARG_INVALID: "BUILD_ARG_INVALID"; readonly CLOUD_REGISTRY_CREDENTIAL_MISSING: "CLOUD_REGISTRY_CREDENTIAL_MISSING"; readonly CLOUD_REGISTRY_CREDENTIAL_INVALID: "CLOUD_REGISTRY_CREDENTIAL_INVALID"; readonly TCR_REGION_MISSING: "TCR_REGION_MISSING"; readonly TCR_INSTANCE_DISCOVERY_FAILED: "TCR_INSTANCE_DISCOVERY_FAILED"; readonly TCR_INSTANCE_NOT_FOUND: "TCR_INSTANCE_NOT_FOUND"; readonly TCR_INSTANCE_AMBIGUOUS: "TCR_INSTANCE_AMBIGUOUS"; readonly TCR_INSTANCE_INVALID: "TCR_INSTANCE_INVALID"; readonly TCR_NAMESPACE_INVALID: "TCR_NAMESPACE_INVALID"; readonly TCR_NAMESPACE_QUERY_FAILED: "TCR_NAMESPACE_QUERY_FAILED"; readonly TCR_NAMESPACE_CREATE_FAILED: "TCR_NAMESPACE_CREATE_FAILED"; readonly TCR_TOKEN_CREATE_FAILED: "TCR_TOKEN_CREATE_FAILED"; readonly TCR_TOKEN_INVALID: "TCR_TOKEN_INVALID"; readonly TCR_DOCKER_LOGIN_FAILED: "TCR_DOCKER_LOGIN_FAILED"; readonly GATEWAY_PATH_INVALID: "GATEWAY_PATH_INVALID"; readonly LOCAL_FALLBACK_INVALID: "LOCAL_FALLBACK_INVALID"; readonly PREFLIGHT_CODE_PATH_MISSING: "PREFLIGHT_CODE_PATH_MISSING"; readonly PREFLIGHT_CODE_PATH_NOT_DIRECTORY: "PREFLIGHT_CODE_PATH_NOT_DIRECTORY"; readonly PREFLIGHT_BOOTSTRAP_MISSING: "PREFLIGHT_BOOTSTRAP_MISSING"; readonly PREFLIGHT_BOOTSTRAP_NOT_FILE: "PREFLIGHT_BOOTSTRAP_NOT_FILE"; readonly PREFLIGHT_BOOTSTRAP_NOT_EXECUTABLE: "PREFLIGHT_BOOTSTRAP_NOT_EXECUTABLE"; readonly PREFLIGHT_PACKAGE_TOO_LARGE: "PREFLIGHT_PACKAGE_TOO_LARGE"; readonly PREFLIGHT_SYMLINK_ESCAPE: "PREFLIGHT_SYMLINK_ESCAPE"; readonly PREFLIGHT_DEPENDENCY_NOT_BUNDLED: "PREFLIGHT_DEPENDENCY_NOT_BUNDLED"; readonly PREFLIGHT_IO_ERROR: "PREFLIGHT_IO_ERROR"; readonly PREFLIGHT_DOCKER_CLI_MISSING: "PREFLIGHT_DOCKER_CLI_MISSING"; readonly PREFLIGHT_DOCKER_DAEMON_UNAVAILABLE: "PREFLIGHT_DOCKER_DAEMON_UNAVAILABLE"; readonly PREFLIGHT_DOCKER_BUILDX_MISSING: "PREFLIGHT_DOCKER_BUILDX_MISSING"; readonly LOCAL_BUILD_CONTEXT_MISSING: "LOCAL_BUILD_CONTEXT_MISSING"; readonly LOCAL_BUILD_DOCKERFILE_MISSING: "LOCAL_BUILD_DOCKERFILE_MISSING"; readonly LOCAL_BUILD_REPOSITORY_MISSING: "LOCAL_BUILD_REPOSITORY_MISSING"; readonly LOCAL_BUILD_FAILED: "LOCAL_BUILD_FAILED"; readonly LOCAL_PUSH_FAILED: "LOCAL_PUSH_FAILED"; readonly LOCAL_DIGEST_QUERY_FAILED: "LOCAL_DIGEST_QUERY_FAILED"; readonly CLOUD_BUILD_DOCKERFILE_MISSING: "CLOUD_BUILD_DOCKERFILE_MISSING"; readonly CLOUD_UPLOAD_FAILED: "CLOUD_UPLOAD_FAILED"; readonly CLOUD_BUILD_TRIGGER_FAILED: "CLOUD_BUILD_TRIGGER_FAILED"; readonly CLOUD_BUILD_FAILED: "CLOUD_BUILD_FAILED"; readonly CLOUD_REGISTRY_AUTH_FAILED: "CLOUD_REGISTRY_AUTH_FAILED"; readonly CLOUD_PERSONAL_REGISTRY_REPOSITORY_QUOTA_EXCEEDED: "CLOUD_PERSONAL_REGISTRY_REPOSITORY_QUOTA_EXCEEDED"; readonly CLOUD_BUILD_CANCELED: "CLOUD_BUILD_CANCELED"; readonly CLOUD_BUILD_TIMEOUT: "CLOUD_BUILD_TIMEOUT"; readonly PREFLIGHT_IMAGE_REMOTE_NOT_FOUND: "PREFLIGHT_IMAGE_REMOTE_NOT_FOUND"; readonly PREFLIGHT_IMAGE_REMOTE_UNVERIFIABLE: "PREFLIGHT_IMAGE_REMOTE_UNVERIFIABLE"; readonly PREFLIGHT_IMAGE_DIGEST_UNRESOLVED: "PREFLIGHT_IMAGE_DIGEST_UNRESOLVED"; readonly PREFLIGHT_IMAGE_REGION_MISMATCH: "PREFLIGHT_IMAGE_REGION_MISMATCH"; readonly PREFLIGHT_IMAGE_PULL_ROLE_MISSING: "PREFLIGHT_IMAGE_PULL_ROLE_MISSING"; readonly PREFLIGHT_IMAGE_PULL_POLICY_MISSING: "PREFLIGHT_IMAGE_PULL_POLICY_MISSING"; readonly PREFLIGHT_IMAGE_PULL_AUTH_GRANTED: "PREFLIGHT_IMAGE_PULL_AUTH_GRANTED"; readonly PREFLIGHT_IMAGE_PULL_AUTH_UNVERIFIABLE: "PREFLIGHT_IMAGE_PULL_AUTH_UNVERIFIABLE"; readonly PREFLIGHT_TCR_PUSH_ROLE_MISSING: "PREFLIGHT_TCR_PUSH_ROLE_MISSING"; readonly PREFLIGHT_TCR_PUSH_POLICY_MISSING: "PREFLIGHT_TCR_PUSH_POLICY_MISSING"; readonly PREFLIGHT_TCR_PUSH_AUTH_GRANTED: "PREFLIGHT_TCR_PUSH_AUTH_GRANTED"; readonly PREFLIGHT_TCR_PUSH_AUTH_UNVERIFIABLE: "PREFLIGHT_TCR_PUSH_AUTH_UNVERIFIABLE"; readonly PREFLIGHT_CAM_PERMISSION_DENIED: "PREFLIGHT_CAM_PERMISSION_DENIED"; readonly FUNCTION_RECREATE_REQUIRED: "FUNCTION_RECREATE_REQUIRED"; readonly NOT_IMPLEMENTED: "NOT_IMPLEMENTED"; }; export type FunctionDeployErrorCode = typeof FUNCTION_DEPLOY_ERROR[keyof typeof FUNCTION_DEPLOY_ERROR]; /** 函数通用属性,Event 与 HTTP 共用 */ export interface IFunctionDeployCommon { name: string; description?: string; timeout?: number; memorySize?: number; envVariables?: Record; vpc?: IFunctionVPC; layers?: { name: string; version: number; }[]; role?: string; codeSecret?: string; /** 声明式配置中的函数代码目录,由 DeployOrchestrator 解析为绝对 functionPath */ dir?: string; l5?: boolean | 'TRUE' | 'FALSE'; /** 标签列表(透传为 SCF Tags) */ tags?: { Key: string; Value: string; }[]; /** 日志投递 CLS 日志集 ID */ clsLogsetId?: string; /** 日志投递 CLS 主题 ID */ clsTopicId?: string; /** 死信队列配置(透传为 SCF DeadLetterConfig) */ deadLetterConfig?: Record; /** 公网访问配置(透传为 SCF PublicNetConfig) */ publicNetConfig?: Record; /** 文件系统 CFS 配置(透传为 SCF CfsConfig) */ cfsConfig?: Record; /** 内网固定 IP 配置(透传为 SCF IntranetConfig) */ intranetConfig?: Record; /** 初始化超时时间(秒),范围 1-60 */ initTimeout?: number; /** 是否开启异步属性(仅 CreateFunction 支持) */ asyncRunEnable?: boolean | 'TRUE' | 'FALSE'; /** 是否开启事件追踪(仅 CreateFunction 支持) */ traceEnable?: boolean | 'TRUE' | 'FALSE'; /** 是否自动创建 CLS 索引(仅 CreateFunction 支持) */ autoDeployClsTopicIndex?: boolean | 'TRUE' | 'FALSE'; /** 是否自动创建 CLS 主题(仅 CreateFunction 支持) */ autoCreateClsTopic?: boolean | 'TRUE' | 'FALSE'; /** 是否开启 DNS 缓存(仅 Event 函数支持) */ dnsCache?: boolean | 'TRUE' | 'FALSE'; } /** 本地代码来源,三者互斥 */ export interface ILocalCodeSource { /** 函数所在目录 */ functionRootPath?: string; /** 单个函数目录 */ functionPath?: string; /** ZIP 的 base64 内容 */ base64Code?: string; ignore?: string | string[]; } /** Event 函数部署配置 */ export interface IEventFunctionDeployConfig extends IFunctionDeployCommon, ILocalCodeSource { type?: 'Event'; /** Event 函数只支持代码包部署 */ buildStrategy?: 'zip'; runtime?: string; handler?: string; installDependency?: boolean | 'TRUE' | 'FALSE'; triggers?: ICloudFunctionTrigger[]; } /** HTTP 函数公共配置 */ export interface IHttpFunctionDeployCommon extends IFunctionDeployCommon { type: 'HTTP'; /** * 是否允许匿名访问 * 不传表示不由部署器管理访问规则 */ public?: boolean; /** 云接入路径(兼容既有声明式部署配置) */ path?: string; /** 网关路径,例如 /api */ gatewayPath?: string; /** HTTP 为普通 HTTP,WS 为 WebSocket;不传等价于 HTTP */ protocolType?: 'HTTP' | 'WS'; protocolParams?: { wsParams?: { idleTimeOut?: number; }; }; instanceConcurrencyConfig?: { dynamicEnabled?: boolean | 'TRUE' | 'FALSE'; maxConcurrency?: number; [key: string]: any; }; /** 镜像地址兼容字段;image 策略会转换为 imageConfig.imageUri */ imageUri?: string; } /** HTTP 托管运行时代码包部署 */ export interface IHttpZipDeployConfig extends IHttpFunctionDeployCommon, ILocalCodeSource { buildStrategy?: 'zip'; runtime?: string; /** * HTTP 代码包部署要求依赖随包携带 * 该字段会被强制置为 false */ installDependency?: boolean | 'TRUE' | 'FALSE'; } /** 个人版 TCR 推送凭证,local/cloud 均可使用。 */ export interface IRegistryCredential { /** 腾讯云账号 ID(UIN),作为个人版 CCR 登录用户名 */ username: string; /** 个人版 CCR 固定密码 */ password: string; } /** 镜像构建目标配置 */ export interface IImageBuildTarget { /** 构建上下文目录,默认取部署调用方指定的函数目录 */ cwd?: string; /** Dockerfile 相对构建上下文的路径,默认 Dockerfile */ dockerfile?: string; /** 目标镜像仓库实例 ID */ registryId?: string; /** * 目标镜像命名空间。personal local/cloud 优先使用显式配置; * 缺省时使用当前 CloudBase envId。enterprise 可省略并由实例准备逻辑创建或复用。 */ namespace?: string; /** * 目标镜像仓库路径。local/cloud 均可省略并默认使用函数名; * manager-node 会结合目标 registry 与 namespace 组装最终推送地址。 */ repository?: string; /** local 策略的目标镜像 tag;cloud 策略由平台生成,不接受自定义 tag */ tag?: string; /** 目标平台,默认 linux/amd64 */ platform?: string; /** 构建参数,不得写入敏感值 */ buildArgs?: Record; /** * 个人版 TCR 推送凭证。personal local/cloud 必须由调用方显式提供; * manager-node 仅使用该凭证登录,不创建用户、不修改远端密码,也不持久化凭证。 */ registryCredential?: IRegistryCredential; /** 忽略同摘要镜像复用,强制重新构建 */ forceBuild?: boolean; /** 个人版 TCR 保留的最新镜像标签数量 */ retainedTags?: number; } /** * 声明式镜像运行时配置 * * 直接对齐 toolbox schema 的 ICloudBaseFunctionImageConfig:镜像相关字段全部 * 收敛在 imageConfig 命名空间下,构建目标进一步嵌套在 imageConfig.build。 * manager-node 直接消费该形状,不再做字段平铺映射。 */ export interface IDeployImageConfig { /** 镜像类型;省略时有 registryId 推断为 enterprise,否则推断为 personal */ imageType?: 'enterprise' | 'personal'; /** 已有镜像地址,image 策略必填 */ imageUri?: string; /** 企业版 TCR 实例 ID;个人版镜像不传 */ registryId?: string; /** 镜像构建目标,cloud/local 策略必填 */ build?: IImageBuildTarget; /** * 本地构建环境不可用时的处理方式 * 默认 error,避免静默改变构建环境 */ localFallback?: 'cloud' | 'error'; /** 容器监听端口,仅允许 9000 */ imagePort?: number; entryPoint?: string; command?: string; args?: string; commandList?: string[]; argsList?: string[]; containerImageAccelerate?: boolean; } /** HTTP 自定义镜像公共配置 */ export interface IHttpImageRuntimeCommon extends IHttpFunctionDeployCommon { runtime?: typeof CUSTOM_IMAGE_RUNTIME; /** 镜像运行时配置,对齐 toolbox schema 的嵌套形状 */ imageConfig?: IDeployImageConfig; } /** 云端构建镜像部署 */ export interface IHttpCloudDeployConfig extends IHttpImageRuntimeCommon { buildStrategy: 'cloud'; imageConfig: IDeployImageConfig; } /** 本地构建镜像部署 */ export interface IHttpLocalDeployConfig extends IHttpImageRuntimeCommon { buildStrategy: 'local'; imageConfig: IDeployImageConfig; } /** 已有镜像直接部署 */ export interface IHttpImageDeployConfig extends IHttpImageRuntimeCommon { buildStrategy: 'image'; imageConfig: IDeployImageConfig; } export type IHttpFunctionDeployConfig = IHttpZipDeployConfig | IHttpCloudDeployConfig | IHttpLocalDeployConfig | IHttpImageDeployConfig; export type IFunctionDeployConfig = IEventFunctionDeployConfig | IHttpFunctionDeployConfig; export interface IDeployInputField { /** 稳定字段名,供 CLI/MCP 决定如何收集输入 */ name: 'envId' | 'imageUri' | 'registryId' | 'repository' | 'namespace' | 'registryCredential.username' | 'registryCredential.password'; /** 配置中的字段路径 */ path: string; /** 是否必须补齐才能继续部署 */ required: boolean; /** 面向调用方的原因,不包含敏感信息 */ reason: string; } /** 最小化镜像配置的默认值上下文 */ export interface IMinimalDeployConfigContext { envId?: string; functionPath?: string; functionRootPath?: string; /** 调用方明确提供的非交互默认值;密码等敏感值只在显式传入时使用 */ defaults?: { imageUri?: string; registryId?: string; repository?: string; namespace?: string; registryCredential?: IRegistryCredential; }; } /** 最小化配置准备结果 */ export interface IMinimalDeployConfigResult { config: IFunctionDeployConfig; missing: IDeployInputField[]; appliedDefaults: string[]; } export type INormalizedEventConfig = IEventFunctionDeployConfig & { type: 'Event'; buildStrategy: 'zip'; }; /** 规范化后的 HTTP 代码包配置 */ export type INormalizedHttpZipConfig = IHttpZipDeployConfig & { type: 'HTTP'; buildStrategy: 'zip'; }; /** 规范化后的 HTTP 云端构建配置 */ export type INormalizedHttpCloudConfig = IHttpCloudDeployConfig & { type: 'HTTP'; buildStrategy: 'cloud'; runtime: typeof CUSTOM_IMAGE_RUNTIME; imageConfig: IDeployImageConfig & { imagePort: number; imageType: 'enterprise' | 'personal'; build: IImageBuildTarget; }; }; /** 规范化后的 HTTP 本地构建配置 */ export type INormalizedHttpLocalConfig = IHttpLocalDeployConfig & { type: 'HTTP'; buildStrategy: 'local'; runtime: typeof CUSTOM_IMAGE_RUNTIME; imageConfig: IDeployImageConfig & { imagePort: number; imageType: 'enterprise' | 'personal'; build: IImageBuildTarget; localFallback: 'cloud' | 'error'; }; }; /** 规范化后的 HTTP 已有镜像配置 */ export type INormalizedHttpImageConfig = IHttpImageDeployConfig & { type: 'HTTP'; buildStrategy: 'image'; runtime: typeof CUSTOM_IMAGE_RUNTIME; imageConfig: IDeployImageConfig & { imagePort: number; imageType: 'enterprise' | 'personal'; imageUri: string; }; }; export type INormalizedDeployConfig = INormalizedEventConfig | INormalizedHttpZipConfig | INormalizedHttpCloudConfig | INormalizedHttpLocalConfig | INormalizedHttpImageConfig; /** 代码类部署物 */ export interface ICodeArtifact { kind: 'code'; /** 交给 SCF 的代码传输方式 */ deployMode: 'cos' | 'zip'; functionRootPath?: string; functionPath?: string; base64Code?: string; } /** 镜像类部署物 */ export interface IImageArtifact { kind: 'image'; deployMode: 'image'; imageUri: string; imageDigest?: string; imageType: 'enterprise' | 'personal'; registryId?: string; imagePort: number; /** 实际产出该镜像的策略 */ effectiveStrategy: HttpBuildStrategy; buildId?: string; logsUrl?: string; entryPoint?: string; command?: string; args?: string; commandList?: string[]; argsList?: string[]; containerImageAccelerate?: boolean; } export type IFunctionArtifact = ICodeArtifact | IImageArtifact; /** 线上函数当前状态摘要 */ export interface IFunctionCurrentState { functionName: string; type: FunctionRuntimeModel; runtime?: string; status?: string; protocolType?: string; triggerNames: string[]; isCustomImage: boolean; /** 以下字段用于 noop 差异比较,缺省表示线上未返回或不适用 */ imageUri?: string; timeout?: number; memorySize?: number; description?: string; /** 线上环境变量,键值对形式 */ envVariables?: Record; } /** 部署计划 */ export interface IFunctionDeployPlan { functionName: string; functionType: FunctionRuntimeModel; buildStrategy: HttpBuildStrategy; /** 线上是否已存在同名函数 */ exists: boolean; action: DeployActionKind; operations: DeployOperation[]; /** 计划说明,用于向用户解释将要发生什么 */ reasons: string[]; /** 需要删除重建的原因,非空表示调用方需先在控制台删除函数 */ replaceReasons: string[]; current?: IFunctionCurrentState; } /** 单步执行结果 */ export interface IDeployStepResult { stage: DeployStage; /** 同一 stage 下的具体步骤名称,例如 Docker 环境检查、镜像仓库权限检查 */ label?: string; status: 'success' | 'skipped' | 'failed'; /** 毫秒 */ elapsedTime: number; detail?: string; errorCode?: string; } /** 进度事件 */ export interface IDeployProgressEvent { stage: DeployStage; /** 同一 stage 下的具体步骤名称,例如 Docker 环境检查、镜像仓库权限检查 */ label?: string; status: 'start' | 'success' | 'skipped' | 'failed'; message?: string; /** 当前阶段耗时(毫秒),仅 success/failed 时提供 */ elapsedTime?: number; errorCode?: string; requestId?: string; } /** 部署结果 */ export interface IFunctionDeployResult { functionName: string; functionType: FunctionRuntimeModel; /** 调用方请求的策略 */ requestedStrategy: HttpBuildStrategy; /** 实际执行的策略,local 回退 cloud 时两者不同 */ effectiveStrategy: HttpBuildStrategy; action: DeployActionKind; operations: DeployOperation[]; /** 是否只生成计划未执行变更 */ dryRun: boolean; imageUri?: string; imageDigest?: string; buildId?: string; gatewayUrl?: string; public?: boolean; /** 毫秒 */ elapsedTime: number; steps: IDeployStepResult[]; warnings: string[]; plan: IFunctionDeployPlan; } export interface IFunctionDeployOptions { /** 只生成计划,不执行任何变更 */ dryRun?: boolean; /** * 是否允许自动补齐镜像拉取所需的 CAM 授权(默认 true) * * 仅在检测到 image 策略缺少拉镜像策略时,为固定角色绑定唯一白名单策略; * 绝不放大到其它策略。设为 false 时只诊断并给出手动授权指引,不做任何 CAM 写操作。 */ autoGrant?: boolean; onProgress?: (event: IDeployProgressEvent) => void; }