mirror of
https://github.com/EasyTier/EasyTier.git
synced 2026-10-16 09:36:14 -08:00
61 lines
3.0 KiB
Markdown
61 lines
3.0 KiB
Markdown
# CI
|
||
|
||
[English](CI.md)
|
||
|
||
| 触发方式 | Core | GUI | Mobile |
|
||
| --- | --- | --- | --- |
|
||
| 目标为 `main`/`develop` 的 PR,或 push 到这两个分支 | Linux x64、Windows x64、macOS ARM64 的 Core/Web `cargo check` | Linux 前端构建和 Rust 检查 | Android ARM64 前端构建和 Rust 检查 |
|
||
| Push 到 `releases/**`,或手动触发 | 16 个目标和 Magisk 产物 | 7 个目标的安装包 | 4 个架构的 APK |
|
||
|
||
Test 运行 CI 脚本测试、fmt、clippy、WASI、Cargo.lock 检查,以及
|
||
`easytier`/`easytier-core` 的 Linux 测试(含 `three_node`)。全量模式还逐个
|
||
检查 `easytier` 的 feature,排除 `macos-ne`。
|
||
|
||
Linux 测试使用一个 runner,nextest 总并发度为 32。网络集成测试为每个测试
|
||
创建独立的 namespace 和网桥。子网代理用例最多同时运行八个;带宽测试、
|
||
使用宿主机全局网络状态的测试和时间敏感的连通性测试优先独占
|
||
执行,完成后再运行并发测试。
|
||
|
||
这四个 workflow 的构建和测试任务跳过 draft PR。普通构建和 Rust 任务可因
|
||
无关路径或重复内容而跳过。汇总检查为 `core-result`、`gui-result`、
|
||
`mobile-result` 和 `test`。
|
||
|
||
PR 仅在前端、Core 配置源码、schema 或构建配置变化时构建 Web 前端。
|
||
普通分支 push 仍构建 Web 前端。Core 检查独立运行;Web 的嵌入模式仅在
|
||
全量构建中编译。
|
||
Test 在普通模式下跳过前端构建,测试归档仅构建 Rust 包。
|
||
|
||
PR 可上传供 CI 内部复用的测试归档。Web 前端仅在全量模式上传。
|
||
Core 二进制、GUI 安装包、APK 和 Magisk 产物仅在全量模式上传。编译产物
|
||
启用缓存。普通 push 不会取消全量构建。
|
||
|
||
## 每日构建
|
||
|
||
定时为北京时间 03:17。对实际存在的 `main`/`develop` 分支,分别检查 Core、
|
||
GUI、Mobile、Test:比较分支 HEAD 与该 workflow 最近一次成功的
|
||
`workflow_dispatch` 提交,相同则跳过,不同或无成功记录则触发该 workflow。
|
||
尚未成功构建的提交在下一轮继续触发。
|
||
|
||
Nightly 只负责触发,结果见对应 workflow。每日 Core 构建设置
|
||
`sign_windows: false`。
|
||
|
||
## 手动构建与发布
|
||
|
||
需要仓库 Write 权限。在 Actions 分别运行 Core、GUI、Mobile,选择 PR 分支
|
||
即可生成全量产物。该分支必须包含这些 workflow 定义。Fork PR 需要先在本
|
||
仓库建立临时分支。
|
||
|
||
手动 Core 构建默认开启 SignPath 测试签名(`sign_windows: true`)。
|
||
全量 macOS GUI 构建会签名和公证。
|
||
|
||
Release 是独立的手动 workflow。输入的 Core/GUI/Mobile run ID 必须分别来自
|
||
正确的 workflow、全量构建成功,且提交相同。它下载这些产物并创建 draft
|
||
release。
|
||
|
||
## 其他 workflow
|
||
|
||
- OHOS 独立运行。相关 PR 运行桥接单测,并检查宿主平台和 ARM64 OHOS 的绑定。
|
||
非 PR 构建生成并上传 HAR;发布和下游构建仍按原有主线/手动触发条件执行。
|
||
- Go、JavaScript Hosts、Nix 使用各自的路径过滤。
|
||
- Docker 手动触发,下载指定 Core 构建的产物并推送镜像。
|