SuperAPI AI 工具集

reproducible-native-bundling-two-tasks

部署与运维

查看项目

更新于 10-17 16:17

技能介绍

该页面面向使用 Kotlin 多平台构建桌面应用的开发者,解决原生库在 CI 中的可复现分发问题。一个加载原生库的桌面应用需要从某处取得该库;如果在 CI 中构建,就会把整个工具链(归档工具、补丁工具、容器运行时、签名主机)带到每个 runner 上,而这些产物在提交之间并不变化。页面主张将打包拆成两个入口:nativesBundleAll 在开发机上运行,每次原生版本升级执行一次,负责构建并收集每个平台切片、各打一个 tar 包并打印摘要;nativesSetupAll 在每个 CI 任务、每次构建时运行,负责下载已发布的 tar 包、按固定摘要验证并解包。CI 任务只需要网络连接、用于获取 tar 包的 curl 和 tar。页面给出的示例代码展示了切片列表、打包任务中对切片目录存在且非空的检查、tar 打包命令,以及打印可直接粘贴到校验和映射中的摘要行。页面随后列出若干陷阱:外部调用的打包步骤不会触发 Gradle 任务依赖,因此每个打包工作流必须显式调用 setup 任务;未声明输入时 Gradle 会把已存在的输出目录视为最新,需把标签和校验和映射声明为输入;校验和应固定在构建文件中,而不是从产物旁边提供的校验和文件读取;缓存键应包含标签而不只是版本;校验失败时应删除归档,否则损坏的下载会被缓存;未固定校验和的状态应有专门哨兵和提示信息;tar 包应发布在应用自身发布页之外;解包后应断言文件类型;解包后应清除 macOS 平台附带文件。页面最后给出验证方法:检查实际到达暂存树的文件、重新计算已发布 tar 包的摘要并与固定映射比较,以及在运行时记录进程实际加载的原生库路径。