本文档描述了 GPT4All 项目中使用的持续集成和持续部署(CI/CD)流水线。它涵盖了构建过程、平台特定考量、签名和公证程序,以及如何在不同操作系统上打包和部署构件。有关构建系统本身的信息,请参阅 构建系统。
GPT4All 的 CI/CD 流水线使用 CircleCI 实现,旨在自动化构建、测试、签名和跨 Windows、macOS 和 Linux 部署应用程序。该流水线支持在线(较小,安装时需要互联网)和离线(较大,自包含)安装程序。
来源: .circleci/config.yml1-23 .circleci/continue_config.yml7-19
流水线使用 CircleCI 的 path-filtering orb 来根据更改的文件确定应运行哪些工作流。这通过仅构建必需的部分来节省 CI 资源。
聊天应用的构建过程按平台(macOS、Windows、Linux)和安装程序类型(在线、离线)进行矩阵化。
来源: .circleci/continue_config.yml98-566
构建过程由 CMake 驱动,CMake 根据目标平台和安装程序类型使用各种选项配置构建系统。
来源: gpt4all-chat/CMakeLists.txt1-623
在 macOS 上,构建过程包含额外的应用程序包和安装程序的签名和公证步骤。
来源: .circleci/continue_config.yml98-264 gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27
Windows 构建需要 CUDA 和 Vulkan SDK 等额外依赖项,并使用 AzureSignTool 进行签名。
来源: .circleci/continue_config.yml558-712
Linux 构建使用 linuxdeployqt 来部署 Qt 依赖项。
来源: .circleci/continue_config.yml428-491
GPT4All 使用 CPack 和 Qt Installer Framework (IFW) 为所有平台创建安装程序。
来源: gpt4all-chat/cmake/cpack_config.cmake1-49 gpt4all-chat/CMakeLists.txt580-593
macOS 构建需要几个安全步骤来符合 Apple 的要求。
来源: .circleci/continue_config.yml193-264 gpt4all-chat/CMakeLists.txt413-436
Windows 构建使用 AzureSignTool,它与 Azure Key Vault 集成以进行证书管理。
来源: .circleci/continue_config.yml741-785 gpt4all-chat/CMakeLists.txt517-524
GPT4All 通过 CMake 选项支持在线和离线安装程序。
来源: gpt4all-chat/CMakeLists.txt33-34 gpt4all-chat/CMakeLists.txt605-622
流水线包含多项优化措施以提高构建性能
来源: .circleci/continue_config.yml140-141 .circleci/continue_config.yml457 .circleci/continue_config.yml576
在构建和签名安装程序后,流水线会测试安装过程,以验证构件是否正常工作。
来源: .circleci/continue_config.yml411-426 .circleci/continue_config.yml483-491 .circleci/continue_config.yml800-812
CI/CD 流水线集成了多个外部系统
GPT4All 的 CI/CD 流水线提供了一个强大的系统,用于在多个平台上构建、签名和分发应用程序。该流水线使用 CircleCI、CMake 和 CPack 与 Qt Installer Framework 结合,以自动化从代码提交到可分发安装程序的整个过程。通过支持在线和离线安装程序,该系统在提供灵活性的同时,并通过适当的代码签名和公证来维护安全性。
来源: .circleci/config.yml .circleci/continue_config.yml gpt4all-chat/CMakeLists.txt gpt4all-chat/cmake/cpack_config.cmake