pulumi-labs-export 是一个面向 Pulumi Provider 发布流程的技能,用于把私有 pulumi/autoregistry 单仓库中的 Provider 镜像到公开的 pulumi-labs/pulumi-<provider> 仓库,并让两者保持同步。
用途 该技能服务于 Provider 的镜像发布:单仓库中的 lib/providers/<provider>/ 始终是唯一事实来源,由其他智能体继续维护;公开仓库是生成出来的镜像,每次新版本都用一次全新的导出覆盖,不允许手工编辑。修复总是先落在单仓库,再同步到镜像。
主要能力 技能提供了一组脚本,覆盖完整生命周期:
- bootstrap.py:安装工具链(Go、Pulumi CLI、jq、gitleaks、make、Node.js 22、.NET 8 SDK、Temurin JDK 17、Gradle 9),无需 root 和编译器,并导出 GRADLE_USER_HOME 等环境变量。
- access_check.py:探测 GitHub 访问权限,包括对 pulumi/autoregistry、pulumi/platform-providers-team 和目标镜像仓库的读取,以及对目标仓库的真实 push 探测。
- repo_setup.sh:仓库设置,其中 create、protect、verify 仅供人类使用,智能体只运行 plan。
- names.py:根据 provider 名称打印所有派生名称(Go SDK 目录、Python 包、csproj、ldflags 路径、ESC 环境等)的 JSON。
- identity.py:检查并应用身份切换,把旧身份引用改为 pulumi-labs 路径。
- export.py:执行导出,生成镜像仓库内容,支持 --generate 运行 make。
- verify.py:验证就绪状态,支持 --assert-pushable 和 --profile examples。
- secret_scan.py:用 gitleaks 扫描完整历史和文件树。
- onboarding.py:处理 onboarding 相关事项。
- check.py:检查镜像是否与源一致,报告手工编辑造成的漂移。
使用方式 每个会话的第一步是运行 python3 scripts/bootstrap.py,然后执行它打印的 export PATH=... 行或 eval "$(python3 scripts/bootstrap.py)"。接着运行 python3 scripts/access_check.py --provider <provider> 做访问检查;如果退出码为 2,则用 --print-commands 打印命令并逐条直接执行。仓库设置仅在当前运行身份为管理员时,通过 scripts/repo_setup.sh plan 进行,且只运行 plan 打印出的命令。导出流程按顺序包括:就绪检查、单仓库身份切换 PR、初始导出、onboarding issue、每次新版本的同步、发布切割。所有脚本都从技能文件夹中以 python3 scripts/<x>.py 运行,每个脚本都有 --help,失败时以非零退出并给出明确消息。
适用场景 适用于需要把私有单仓库中的 Pulumi Provider 发布到公开 pulumi-labs 仓库并持续同步的团队或自动化流程,尤其是涉及原生 Provider 和 Terraform 桥接 Provider 两种形态的镜像发布。
限制
- 目标仓库必须为空(无 README)才能进行初始导出;已有非本人推送的提交时应停止并上报。
- 管理员身份只能用于当前卡片的单个仓库,不得使用 --org 或其他 slug,不得删除、重命名、转移、归档仓库或更改可见性。
- 不得创建、移动或删除标签,不得创建 release,不得批准、拒绝或重跑部署或发布工作流。
- 不得使用管理员绕过规则,合并必须获得 Reviewer 批准且精确 head SHA 上的测试为绿色,不得使用 --admin 合并,初始导出后不得直接推送到 main。
- 不得触碰其他仓库或组织的设置、规则集、环境或应用安装。
- 镜像仓库永不手工编辑,修复必须先进入单仓库。
- 版本保持 0.x.y,只有发布切割 PR 会提升 version.txt,智能体永不打标签。
- 桥接 Provider 若 cmd mains 不是简单形态、replace 离开导出树或缺少 version.txt,export.py 会拒绝,不得绕过。
- 部分事实(如具体收费、价格、平台支持细节)暂未提供。