import { Environment } from '../environment'; import { ICloudBuildService } from './function/builders/cloud'; import { IImagePreflightDeps } from './function/image-preflight'; import { ILocalBuilderDeps } from './function/local-builder'; import { ITcrApiService } from './function/enterprise-tcr'; import { IPersonalTcrService } from './function/personal-tcr'; import { ICheckReport, IFunctionDeployConfig, IFunctionDeployOptions, IFunctionDeployPlan, IFunctionDeployResult, INormalizedDeployConfig } from './types'; interface ILegacyFunctionDeployResult { name: string; url?: string; } /** * 函数部署编排器 * * 统一编排 Event 与 HTTP 函数的部署流程,对上层屏蔽以下差异: * - Event 与 HTTP 的运行模型 * - zip、cloud、local、image 四种构建策略 * - 创建、更新与不可原地更新的场景识别 * * 已支持代码包、已有镜像、云端构建、本地构建、匿名访问与网关路径收敛; * 函数类型、运行时或协议等创建期字段变化时不会自动删除函数,而是引导用户 * 在控制台确认并手工删除后重新部署。 */ export declare class FunctionDeployer { private readonly environment; private readonly functionService; /** 镜像远端校验依赖,默认真实 docker;测试可注入以避免真实网络/命令 */ private readonly imagePreflightDeps?; /** * 云端构建能力工厂,默认基于 CloudAppService 构造真实实现; * 测试可注入以替换打包/网络/tcb API,避免真实 IO */ private readonly cloudBuildServiceFactory; private readonly localBuilderDeps?; private readonly tcrServiceFactory; private readonly personalTcrServiceFactory; constructor(environment: Environment, deps?: { imagePreflightDeps?: IImagePreflightDeps; cloudBuildServiceFactory?: () => ICloudBuildService; localBuilderDeps?: ILocalBuilderDeps; tcrServiceFactory?: () => ITcrApiService; personalTcrServiceFactory?: () => IPersonalTcrService; }); /** * 兼容既有声明式部署入口 * * 该方法只负责补齐声明式上下文并委托 deployFunction,避免继续维护第二套 * cloud/local/image 分发逻辑。force 在旧入口中表示允许覆盖,计划阶段会自行 * 判断 create/update;不可原地更新的变更始终要求用户在控制台手工删除函数。 */ deploy(options: { func: IFunctionDeployConfig; functionRootPath?: string; /** 直接指定函数代码目录(优先于 functionRootPath/name 拼接),对齐 CLI resolveFunctionPath 的 dir 语义 */ functionPath?: string; force?: boolean; }): Promise; /** 解析最终部署策略:显式 buildStrategy 优先,未配置默认 zip */ resolveStrategy(config: IFunctionDeployConfig): IFunctionDeployPlan['buildStrategy']; /** * 配置 HTTP 函数匿名访问(public=true) * 通过 OPA Rego 策略追加匿名放通规则,不覆盖用户已有策略 */ ensurePublicAccess(functionName: string): Promise; /** * 收敛 HTTP 函数网关路由(gatewayPath 配置) * * 幂等:云端不存在该 path → 创建;已存在且一致 → 跳过;不一致 → 更新。 * 复用 GatewayDeployer 的幂等收敛与默认域名解析逻辑,与 gateway.routes 声明式部署行为一致。 * 返回该函数网关访问 URL(与 resolveUrl 解析结果一致),无 envId 时返回 undefined。 */ ensureGatewayRoute(config: INormalizedDeployConfig): Promise; /** 生成匿名访问 OPA Rego 规则 */ buildPublicAccessRego(functionName: string): string; /** 生成 HTTP 函数可访问 URL */ resolveUrl(config: IFunctionDeployConfig): Promise; /** * 校验部署配置 * * 只做纯函数、无 IO 的配置契约校验,一次返回全部问题 */ checkConfig(config: IFunctionDeployConfig): ICheckReport; /** * 计算最小化部署配置的默认值,不执行网络或云端变更。 */ applyMinimalConfigDefaults(config: IFunctionDeployConfig, context?: import('./types').IMinimalDeployConfigContext): IFunctionDeployConfig; /** * 返回最小化配置仍缺失的字段,不执行网络或云端变更。 */ getMissingConfigInputs(config: IFunctionDeployConfig, context?: { envId?: string; }): import('./types').IDeployInputField[]; /** * 应用安全默认值并返回缺失字段,供 CLI/MCP 逐步收集用户输入。 */ prepareMinimalConfig(config: IFunctionDeployConfig, context?: import('./types').IMinimalDeployConfigContext): import('./types').IMinimalDeployConfigResult; /** * 生成部署计划 * * 会查询线上函数状态,用于判断创建、更新或识别不可原地更新的变更 */ plan(config: IFunctionDeployConfig): Promise; /** * 部署前本地环境检查(有 IO) * * 与 checkConfig 不同,本方法会读取文件系统,覆盖 HTTP 代码包和 cloud 镜像构建 * 所需的本地文件条件。先做配置契约校验,再执行本地检查。 */ preflight(config: IFunctionDeployConfig): ICheckReport; /** * 部署函数 * @param config 部署配置 * @param options 部署选项,dryRun 时只生成计划不做任何变更 */ deployFunction(config: IFunctionDeployConfig, options?: IFunctionDeployOptions): Promise; /** * 将既有声明式调用补齐为完整部署配置 */ private withLegacyDeployContext; /** * 解析函数部署地域,供镜像远端地域校验使用 * * 地域来源于 environment 的鉴权配置;未显式配置时返回 undefined, * 由image-preflight 自动跳过地域校验,不误报。 */ private resolveDeployRegion; private resolveEnvironmentId; private requireDeployRegion; /** * 构造镜像拉取授权 Preflight 所需的 CAM 适配器 * * 用 CommonService 走 CAM 通道:ListAttachedRolePolicies 读已绑策略、 * AttachRolePolicies 按策略名绑定。任何权限/网络错误都原样抛出, * 交由 cam-preflight 判定并降级,本层不吞异常。 */ private createCamPreflightAdapter; /** 查询线上函数详情,不存在时返回 null */ private getCurrentFunction; /** 判断是否为函数不存在错误,其他错误必须继续抛出 */ private isFunctionNotFoundError; /** 将 warning 连同可执行修复建议汇入部署结果,避免授权链接在编排层丢失 */ private appendWarnings; /** * 校验 Preflight 报告,存在 fail 项时聚合抛错 */ private assertPreflightReady; /** * 判断计划是否可以在当前实现范围内执行 * * 未实现的能力必须显式报错,避免用户误认为访问规则或镜像构建已经生效 */ private assertPlanExecutable; private prepareEnterpriseBuildConfig; private preparePersonalBuildConfig; /** * 准备部署物 * * cloud 策略在云端构建容器内build+push,产出镜像部署物(不依赖本地 Docker); * local 策略需要先做 Docker 本地能力检查,再本地构建并推送镜像,产出镜像部署物; * 其余策略走同步的 pack。 */ private prepareArtifact; private resolveLocalRegistryCredential; private resolveRegistryFromRepository; /** 生成部署物 */ private createArtifact; /** 执行部署计划 */ private applyPlan; /** 收敛 HTTP 函数访问配置(匿名访问 + 网关路由) */ private applyAccessPlan; /** 执行普通步骤并记录耗时与进度 */ private runStep; /** 执行带具体名称的步骤并记录耗时与进度 */ private runLabeledStep; private executeStep; /** 上报进度,回调异常不影响部署流程 */ private emitProgress; /** 汇总部署结果 */ private buildResult; private emitProgressDone; } export * from './types'; export { assertDeployConfig, checkDeployConfig, applyMinimalDeployConfigDefaults, getMissingDeployInputs, prepareMinimalDeployConfig, isCustomImageRuntime, normalizeDeployConfig, normalizeGatewayPath, parseImageReference } from './function/config-guard'; export { createDeployPlan, toCurrentState } from './function/planner'; export { createCodeArtifact, createImageArtifactFromConfig, toCloudFunction } from './function/artifact'; export { buildImageOnCloud } from './function/builders/cloud'; export type { ICloudBuildService, ICloudBuildResult, ICloudCosInfo, ICloudCreateBuildInput, ICloudCreateBuildResult, ICloudVersionStatus } from './function/builders/cloud'; export { createCloudBuildService } from './function/cloud-build-service'; export { runLocalPreflight } from './function/preflight'; export { runImageRemotePreflight } from './function/image-preflight'; export type { IImagePreflightDeps } from './function/image-preflight'; export { runImagePullAuthPreflight, isCamPermissionError, SCF_PULL_IMAGE_ROLE, REQUIRED_IMAGE_PULL_POLICY, IMAGE_PULL_GRANT_URL } from './function/cam-preflight'; export type { ICamPreflightService } from './function/cam-preflight';