3.3 KiB
Drone CI 打包
仓库提供 .drone.yml,包含两个 Docker 流水线。Drone 是仓库唯一的 CI 配置,仓库不包含 GitHub Actions workflow:
linux-package使用 Docker runner 和镜像代理中的 Rust 镜像,执行格式检查、工作区测试和 Clippy,然后生成 Linux Agent 的 DEB/RPM 与 Edge DEB。android-package使用 Docker runner 和镜像代理中的 Flutter 镜像,执行依赖锁定、格式检查、analyze 和测试,然后生成 Android release APK。
两条顶层流水线不限制 Drone 事件类型,因此任意 Drone 事件都会触发 Linux 和 Android 打包。Android 流水线先运行不含任何签名 secret 的测试步骤;除 tag 外的事件执行使用 Android debug 证书的 package-test,tag 事件只执行注入正式签名 secret 的 package-release。tag 缺少 secret 时立即失败,不会回退成 debug 签名的正式产物。
Runner 要求
Linux Docker runner 必须能够运行 amd64 Linux 容器。流水线使用镜像代理中的 Rust stable 镜像,并在容器内安装 GStreamer 开发包、rpm、pkg-config 和 CA 证书;同时需要允许访问 Debian 镜像、crates.io 以及项目依赖的 HTTPS 服务。
Android Docker runner 使用镜像代理中的 Flutter 3.41.9 镜像,该镜像包含 Dart、JDK 和 Android SDK build-tools,并需要访问 Flutter/Dart/Gradle/Maven 依赖源。正式 tag 构建需要在 Drone 仓库 secrets 中配置:
android_keystore_base64:整个 JKS/PKCS12 keystore 的标准 Base64 文本。android_keystore_password:keystore 密码。android_key_alias:签名 key alias。android_key_password:签名 key 密码。
打包脚本只把 keystore 解码到 tag 步骤容器的临时目录,设置 0600 权限,并在退出时删除。keystore、密码和 alias 不会写入仓库、构建目录、APK 文件名或校验清单。Gradle 只接受四项完整的签名环境,部分配置会失败。Drone 中这些 secrets 不要开启 pull request 访问权限;.drone.yml 也不会在 push/pull request 步骤引用它们。
Windows 和 macOS 打包脚本仍位于 packaging/,但当前 Drone 配置不提交依赖 Windows/macOS 专用 runner 的流水线。Windows 打包需要 Windows 主机、Flutter Windows desktop 支持、CMake、Visual Studio C++ workload 与 PowerShell;macOS 打包需要 macOS 主机、Xcode Command Line Tools、shasum 与 BSD tar。这两类产物应在对应发布主机上执行脚本完成。
产物
Linux 产物位于 artifacts/,并生成 DRONE-SHA256SUMS.txt。Android 产物位于 artifacts/,包含 APK、单包 .sha256 和 DRONE-ANDROID-SHA256SUMS.txt。Windows 和 macOS 脚本产物也位于 artifacts/,分别生成 Windows BUILD-SHA256SUMS.txt 和 macOS 单包 .sha256;包内 SHA256SUMS.txt 覆盖二进制、清单和说明文件。Drone 本身不会跨 Runner 自动保存工作区文件,部署时应给 Runner 配置对象存储/制品插件或主机卷,将对应目录上传到构建编号路径;上传步骤不包含在仓库中,避免把组织级凭据和存储端点写入源码。
建议制品路径使用 ${DRONE_REPO_OWNER}/${DRONE_REPO_NAME}/${DRONE_BUILD_NUMBER},并只允许 tag 构建进入正式发布桶。发布前必须再次验证清单中的 SHA-256。