


为跨平台 CLI 下载器添加工具,并检查每个二进制文件
在为下载发布版二进制文件的安装器添加或审查命令行工具时使用。它会按操作系统和架构查清上游发布文件,映射下载 URL,用固定版本编写测试,逐个检查下载的二进制文件,并更新目录和 PR 说明。
要使用这个AI规则
## 确认工具提供静态二进制文件,并列出目标平台
添加以可直接执行的静态二进制文件形式分发的命令行工具时,请使用此工作流。
应将系统软件包、容器镜像提取、集群插件和由运行时管理的应用程序分别交给各自的安装路径。
修改代码前,请确认提议的工具具有预编译的发布资产。
应拒绝需要解释器、软件包管理器、安装器脚本或未声明运行时依赖项的软件包。
除非项目明确允许更大范围的批量变更,否则请确认此次贡献只改动一个工具。
如果项目设有特定的设计审批或议题审批关卡,必须在实现前取得相应审批。
按照仓库的命名约定创建范围集中的分支。
确定安装器命令、工具的对外名称及其上游所有者和仓库。
列出安装器预期支持的每一种平台组合。
除非项目定义了其他矩阵,否则使用以下基准目标:
- Linux(x86-64)。
- Linux(ARM64)。
- macOS(x86-64)。
- macOS(ARM64)。
- Windows(x86-64)。
除非安装器明确包含32位x86或ARMv6,否则不得声称支持它们。
记录不可用的组合,不得悄悄替换为其他平台的制品。
## 编码前,查清每个系统和架构的发布文件名
编写下载模板前,检查上游最新的稳定版本。
优先向上游最新版本端点发送仅检查重定向的请求,以便通过Location标头获得版本标签。
如果所需结果就是标签本身,则不得跟随重定向。
检查完整展开的资产列表,或针对该确切标签的其他权威发布页面。
如果有同等的公开发布元数据可用,应避免调用受速率限制的API。
列举所有已发布的文件名、归档格式、操作系统和体系结构。
精确保留上游术语,包括amd64与x86_64、arm64与aarch64等区别。
对于每个预期目标,记录:
- 是否存在相应资产。
- 资产的确切文件名。
- 归档类型(如果有)。
- 归档内的二进制文件名(如果不同)。
- 会改变兼容性的任何libc或工具链变体。
如果项目支持且选择合适,应优先采用musl等可移植静态变体。
如果包含unknown等词的Rust文件名与上游版本匹配,应将其视为有效。
将收集到的矩阵作为模板、测试和拉取请求证据的事实依据。
## 把每个平台映射到真实的下载 URL,不用其他文件代替
使用安装器既有的定义结构添加工具,并遵循附近可正常工作的示例。
提供必需的标识字段:工具名称、上游所有者、仓库和简要说明。
如果发布资产本身就是可执行文件,应为这种普通二进制文件使用二进制文件名模板。
如果资产位置需要自定义路径逻辑,请使用完整URL模板。
将每个受支持的操作系统和体系结构映射到实际上游文件名。
将安装器体系结构常量与上游文件名术语分开。
使用与运行时所采用的操作系统表示方式相匹配的显式Windows检测。
受支持的归档形式必须符合安装器的解压能力。
通常接受的形式包括tar.gz、tgz、zip、bz2和tar.xz。
平台组合不可用时,其生成的URL必须明确失败,例如返回未找到响应。
它绝不能回退到Linux资产、其他体系结构或其他工具。
明确说明版本标签转换,尤其是在同时使用带前缀的标签和纯数字版本时。
对操作系统、体系结构、名称、版本、所有者和仓库使用现有模板变量。
如果安装器支持版本替换,不得在生产定义中硬编码当前版本。
依赖测试前,应审查矩阵每一行的最终URL。
## 分开写归档文件名和其中的可执行文件名
将发布资产名称与归档内部的可执行文件名视为两项独立事实。
如果归档包含带平台后缀的可执行文件,请同时定义:
- URL模板,用于指定包含扩展名的可下载归档。
- 二进制模板,用于指定不含归档扩展名的已提取可执行文件。
不得只把带扩展名的归档文件名放入二进制模板。
许多解压器使用二进制模板来定位已提取的文件。
该字段中的归档扩展名可能触发向通用工具名称的回退。
如果归档包含平台专用的二进制文件名,这种回退就会失败。
对于未压缩的普通可执行文件,通常只需要二进制模板。
应检查归档来确认这种区别,不得根据文件名猜测。
检查归档是否在可执行文件外增加了目录前缀。
检查Windows可执行文件是否在映射和提取时都需要exe后缀。
使校验和、签名及可执行权限处理与现有安装器保持一致。
如果提取过程报告文件缺失,请比较以下三个名称:
- 下载的资产。
- 提取出的归档成员。
- 安装器请求的名称。
应在定义边界修正映射,而不是添加宽泛的回退。
## 用固定版本测试每个平台的下载 URL
在现有下载器测试旁添加范围集中的单元测试。
使用固定的上游版本;绝不能以最新版测试URL生成。
为每个已发布且受支持的操作系统和体系结构组合创建测试用例。
断言完整的预期URL,包括所有者、仓库、标签、文件名、分隔符和归档扩展名。
按照上游发布的确切形式包含平台专用体系结构别名。
如果存在特殊的版本转换和Windows后缀,应对其进行测试。
对于不可用的组合,如果框架支持此类情况,应测试安装器预期的失败行为。
使测试不依赖于可变的发布元数据。
使用实现前收集的同一资产矩阵。
先运行范围集中的软件包测试。
然后在适用时运行项目要求的更广泛测试目标。
URL测试通过只能证明字符串构造正确,不能证明下载的文件就是正确的二进制文件。
## 下载每个平台的二进制文件,检查格式和架构
跨平台验证前先构建安装器。
首先下载当前平台的制品,不使用覆盖标志。
检查生成的文件,以发现HTML错误页面、被误认作可执行文件的压缩数据和空文件。
为该工具运行仓库的平台矩阵验证脚本。
验证每个受支持的组合,而不只是运行测试的机器。
使用文件识别工具或等效的二进制解析器确认格式和体系结构。
常见的预期证据包括:
- Linux x86-64:64位ELF可执行文件,面向x86-64。
- Linux ARM64:64位ELF可执行文件,面向AArch64。
- macOS x86-64:64位Mach-O可执行文件,面向x86-64。
- macOS ARM64:64位Mach-O可执行文件,面向ARM64。
- Windows x86-64:PE32+控制台可执行文件,面向x86-64。
HTTP响应成功并不足够,因为模板可能会下载错误平台的文件。
成功解压同样不足够,因为内部可执行文件可能面向错误的体系结构。
捕获完整的矩阵输出,不得通过编辑掩盖失败或警告。
如果上游没有某个目标,请验证安装器会针对该目标失败,而不是提供不兼容的二进制文件。
在文档编写或审批前解决所有不匹配。
## 重新生成 CLI 目录,并在 PR 中写明检查结果
按照仓库中记录的流程重新生成CLI目录。
从安装器生成目录,不得手工编造一行。
仅在安全替换确有需要时使用临时工作区文件。
精确保留目录的开始标记和结束标记。
只替换这些标记之间生成表格的内容和相关工具数量。
不得移除周围的说明文字或无关条目。
确认新工具只出现一次,并带有预期说明。
更新后删除临时生成文件。
准备一份拉取请求说明,其中陈述:
- 可用和不可用的平台组合。
- 所用的权威发布标签和命名模式。
- 完整的平台验证输出,包括二进制格式。
- 适用时所需的端到端测试或更广泛测试输出。
确保每次提交都带有仓库要求的签署信息。
通过注明命令和固定版本,使证据可以复现。
不得在摘要中掩盖缺失的平台、失败的下载或体系结构不匹配。
## 审查改动,排查下载或解压失败的原因
将资格、映射、测试、文档和证据作为独立关卡审查。
确认工具是静态二进制文件,并且变更仅限于获批范围。
检查必需的标识字段,并确保至少存在一个有效下载映射。
将每个模板分支与权威资产矩阵进行比较。
验证不受支持的组合无法收到其他平台的二进制文件。
确认单元测试使用固定版本并覆盖所有受支持目标。
审批前,应要求为每个声称支持的目标提供二进制格式证据。
确认生成文档包含该工具并保留其边界标记。
通过比较确切的上游文件名和标签转换来调查URL不匹配。
分别跟踪操作系统分支和体系结构分支,以调查错误的体系结构。
通过比较归档名、归档成员和已配置的内部二进制文件名来调查提取失败。
重新检查项目是否确实发布了自包含静态二进制文件,以调查运行时失败。
不得使用不兼容的替代品来规避上游资产缺失。
在拉取请求中记录合理的上游缺口。
只有在代码、测试、下载的制品、文档和报告的证据一致时才能批准。
