菜单

开发与部署

相关源文件

本文档提供了关于 GPT4All 项目的开发工作流程、构建系统配置、持续集成管道、打包过程和特定平台部署考量的技术细节。有关构建系统依赖项的信息,请参阅 依赖项与子模块

构建系统

GPT4All 使用 CMake 作为其主要构建系统,在 gpt4all-chat 目录中有一个主配置文件,该文件协调跨所有支持平台的构建过程。

来源:gpt4all-chat/CMakeLists.txt1-92 gpt4all-chat/CMakeLists.txt395-414

构建选项

构建系统提供了多种配置选项来定制构建过程

选项描述默认
GPT4ALL_TEST构建测试套件如果找到 Python 3.12+,则为 ON
GPT4ALL_LOCALHOST为本地主机存储库构建安装程序OFF
GPT4ALL_OFFLINE_INSTALLER构建完全离线的安装程序OFF
GPT4ALL_SIGN_INSTALL对已安装的二进制文件和安装程序进行签名OFF
GPT4ALL_USE_QTPDF为 LocalDocs 使用 QtPDF(否则使用 PDFium)AUTO
BUILD_UNIVERSAL(仅限 macOS)构建通用二进制文件(arm64+x86_64)OFF
GPT4ALL_FORCE_D3D12(Windows)使用 Direct3D 12 进行渲染AUTO

来源:gpt4all-chat/CMakeLists.txt31-39 gpt4all-chat/CMakeLists.txt95-139

硬件加速支持

构建系统创建多个二进制目标以支持各种硬件加速选项

来源:gpt4all-chat/CMakeLists.txt480-501

CI/CD 流水线

GPT4All 使用 CircleCI 进行持续集成和部署,并使用基于路径的过滤来优化构建资源使用。

流水线配置

CI/CD 管道在两个关键文件中配置

  1. .circleci/config.yml - 路径过滤配置
  2. .circleci/continue_config.yml - 主要构建工作流程定义

管道由特定目录中的更改触发

来源:.circleci/config.yml1-23 .circleci/continue_config.yml8-45

平台构建矩阵

CI/CD 系统为多个平台构建和打包 GPT4All

来源:.circleci/continue_config.yml98-557

打包与部署

GPT4All 使用 CPack 和 Qt Installer Framework (IFW) 为所有支持的平台创建安装程序。

安装程序生成过程

来源:gpt4all-chat/CMakeLists.txt469-593 .circleci/continue_config.yml234-247

安装程序类型

构建系统支持创建两种类型的安装程序

来源:gpt4all-chat/CMakeLists.txt605-622

特定平台部署

每个平台在部署阶段都需要特殊处理

macOS 部署

  • 使用 macdeployqt 复制 Qt 依赖项
  • BUILD_UNIVERSAL=ON 时,构建 ARM 和 Intel 的通用二进制文件
  • 使用 Apple Developer ID 对应用程序进行签名
  • 使用 Apple 的公证服务进行公证
  • 为 Mac 创建系统托盘支持

来源:gpt4all-chat/cmake/deploy-qt-mac.cmake.in1-27 gpt4all-chat/CMakeLists.txt565-578

Windows 部署

  • 使用 windeployqt 复制 Qt 依赖项
  • 创建桌面/开始菜单快捷方式
  • 对 Windows ARM 平台进行特殊处理
  • 支持较新 Windows 版本上的 Direct3D 12 渲染

来源:gpt4all-chat/CMakeLists.txt570-572

Linux 部署

  • 使用 linuxdeployqt 解析依赖项
  • 创建桌面快捷方式
  • 对必需的系统库进行特殊处理

来源:gpt4all-chat/CMakeLists.txt563-567

代码签名

GPT4All 对 macOS 和 Windows 平台都实现了代码签名。

macOS 代码签名和公证

GPT4ALL_SIGN_INSTALL=ON 时,构建系统会

  1. 使用提供的证书对所有二进制组件进行签名
  2. 对安装程序包进行签名
  3. 提交给 Apple 的公证服务
  4. 将公证票据加回安装程序

来源:gpt4all-chat/CMakeLists.txt414-436 gpt4all-chat/CMakeLists.txt508-515 .circleci/continue_config.yml227-247

Windows 代码签名

当 Windows 的 GPT4ALL_SIGN_INSTALL=ON

  1. 使用提供的证书对可执行文件进行签名
  2. 签名 DLL 和其他组件
  3. 对最终安装程序包进行签名

来源:gpt4all-chat/CMakeLists.txt517-524

国际化

GPT4All 支持通过 Qt 的翻译系统支持多种语言。

来源:gpt4all-chat/CMakeLists.txt381-390 gpt4all-chat/src/main.cpp119-129

测试

GPT4All 项目包含一个可以通过 GPT4ALL_TEST 选项启用的测试框架。

来源:gpt4all-chat/CMakeLists.txt150-175

发布流程

GPT4All 项目维护着一个记录所有发布的更改日志。版本号遵循语义化版本控制方案(主版本号.次版本号.修订号)

来源:gpt4all-chat/CMakeLists.txt5-11 gpt4all-chat/CHANGELOG.md1-336

单实例实现

GPT4All 实现了一个单实例应用程序机制,以防止多个副本运行

来源: gpt4all-chat/src/main.cpp87-94

这个全面的构建和部署系统使 GPT4All 能够支持多种平台、架构和部署场景,同时保持一致的用户体验。