ci(rust): 添加 Gitea host runner 工作流

补充自托管 Gitea host-runner workflow,并将项目状态、缺口、开发指南与路线图同步到当前实际情况。
This commit is contained in:
2026-07-21 10:39:11 +08:00
parent 0ab3f3b953
commit d76f6f1c88
14 changed files with 260 additions and 125 deletions
+36 -23
View File
@@ -1,6 +1,6 @@
# 当前实现缺口清单
- **更新时间**2026-07-18
- **更新时间**2026-07-20
- **用途**:集中跟踪当前代码中的占位实现、设计缺口和下一步验收项。
- **权威计划**`../../PROJECT_PLAN.md`
@@ -107,30 +107,32 @@
- 并发写入相同内容只产生一个对象。
- 读取时 Hash 不匹配会返回明确错误。
### G-005AssetBundle 解析器仍是占位
### G-005AssetBundle 引擎解析器仍未完成
现象:
- `crates/bat-assetbundle/src/parser.rs` 只有 `Parser::name`
- `types.rs` 只有 `AssetType::TextAsset`
- `adapters/src/unity/unity_2021_3.rs` 已能解析 UnityFS header、block info、directory,并校验 directory `offset+size` 不越界;这属于 adapter 层基础摘要能力,不等于 `bat-assetbundle` 引擎已完成。
- 仍没有对象表、TypeTree、TextAsset、MonoBehaviour、ScriptableObject 或可扩展提取入口。
影响:
- 无法解析真实 UnityFS。
- 可以对部分 UnityFS 样本做基础结构校验,但无法完成真实资源对象解析和文本提取
- 无法提取 TextAsset 或配置文本。
验收:
- 能解析结构化测试样本。
- 支持 UnityFS header、blocks、directory、metadata。
- `crates/bat-assetbundle` 能解析结构化测试样本和隔离真实样本
- 支持 UnityFS header、blocks、directory、metadata、object table
- 错误包含偏移和字段上下文。
### G-006Patch 引擎仍是占位
现象:
- `binary::apply_patch` 返回 `Vec`
- `json::apply_json_patch` 返回空字符串
- `binary::apply_patch` 明确返回 `PatchError::ApplyFailed`,提示 Binary patch 尚未实现
- `json::apply_json_patch` 明确返回 `PatchError::ApplyFailed`,提示 JSON patch 尚未实现
影响:
@@ -150,7 +152,8 @@
现象:
- `AddressablesCatalogDriver` 已能解析当前真实形态 JSON catalog fixture/golden。
- 已输出 path、hash、size、resource_type、address、dependencies、metadata。
- 已输出 path、hash、size、resource_type、address、dependencies、metadata,并已提取 `m_Crc``crc` 字段
- `bat-core` 已提供 `crc32_ieee``ResourceEntry::verify_downloaded_bytes`SQLite `ResourceRepository` 已有 `crc` 列迁移。
- 仍需覆盖更多官方 catalog 结构变体、二进制/压缩字段组合和更明确的失败诊断。
影响:
@@ -160,22 +163,30 @@
验收:
- 能解析项目目标版本的真实 Catalog 样本集合。
- 解析结果包含资源 key、provider、dependency、hash、size、path。
- 解析结果包含资源 key、provider、dependency、hash、size、path、CRC
- 对不支持的 catalog 结构返回明确错误,而不是静默丢字段。
---
## 3. 应用层缺口
### G-008Go CLI 尚未实现
### G-008Go CLI 产品入口尚未完成
状态:**已关闭(并入 G-009**
状态:**未完成(此前“并入 G-009”只是短期跟踪调整,不代表能力完成**
处理结果
现象
- 用户命令入口继续由功能完整的 Rust `bat` binary 承担(one-shot / watch / daemon / status / verify / repair / doctor / clean-stable 等已可用),Go 侧不再做重复的产品级用户 CLI
- Go 侧职责收敛为架构文档 §7.2 划定的方向:BlueArchive 客户端请求处理、HTTP API、内容分发。这部分并入 G-009(`bat-api`
- 现有 `cmd/bat` cgo 试验骨架不再作为产品入口目标,另行清理
- 当前可用的用户同步/运维入口是 Rust `bat` binary。
- `cmd/bat` 已存在,但仅有 `doctor``manifest inspect``sync plan` 试验能力;`doctor` 只输出固定 `ok``manifest`/`sync` 依赖可选 CGO/FFI helper
- Go 侧尚未实现通过 Rust `bat --json` 或 daemon RPC 包装官方同步命令、稳定 human/json 输出、真实 doctor 检查和端到端测试
- 如果项目决策改为“用户 CLI 永久由 Rust `bat` 承担,Go 只做 `bat-api`/服务层”,必须同步更新 `AGENTS.md``PROJECT_PLAN.md` 和 issue 跟踪;在完成该决策前,不能把 Go CLI 写成已完成。
验收:
- `cmd/bat doctor` 做真实环境诊断,而不是固定字符串。
- `cmd/bat sync` 能通过 Rust `bat --json` 或 RPC 触发/查询官方同步,不走 FFI 控制下载器或 daemon。
- human/json 输出、退出码和错误码与 Rust `bat` 契约一致。
- `go test ./...``go vet ./...` 覆盖命令解析、错误输出和至少一个 mocked Rust 边界。
### G-009API Server`bat-api`,仿官方 API)尚未实现
@@ -201,7 +212,7 @@
- 真机 e2edaemon 发布 fixture release → 启动 `bat-api` → 按官方 URL 与鉴权头请求 server-info / catalog / bundle / launcher 链,断言字节与形态正确、验签生效(缺签/错签被拒)。
- 统一错误结构与官方响应 envelope 对齐;Makefile 增加 Go 构建/测试目标。
排期:P2,排在 issue #2 / #3 / #17(完善 Rust `bat` 后端)之后启动
排期:P2,排在 issue #17 验收收口以及 issue #2 / #3 的解析能力继续推进之后启动;可与 G-008 的 Go 产品入口边界收敛并行
### G-010Web 管理后台尚未实现
@@ -391,7 +402,8 @@
处理结果:
- 明确决策:本项目不加入 GitHub Workflows,也不引入其他托管 CI。
- 质量门禁由本地默认验证命令承担:提交前执行 `cargo fmt` / `cargo clippy --workspace --all-targets -- -D warnings` / `cargo test --workspace`(见 `docs/guides/development.md``docs/guides/baseline.md`
- 目前补充了自托管 Gitea host-runner workflow`.gitea/bat.yml``.gitea/workflows/bat.yml`),仅用于 Rust workspace 的构建和测试,不改变“不引入托管 CI”的决策
- 质量门禁由本地默认验证命令和自托管 workflow 共同承担:提交前执行 `cargo fmt` / `cargo clippy --workspace --all-targets -- -D warnings` / `cargo test --workspace`(见 `docs/guides/development.md``docs/guides/baseline.md`)。
- 发布类检查(build、smoke)由 `Makefile``scripts/` 下的可重复脚本承担(如 `make official-smoke`)。
限制:
@@ -457,10 +469,11 @@
## 6. 当前关闭顺序建议
1. issue #2 / #3 / #17(完善 Rust `bat` 后端:Addressables 可校验字段、UnityFS 基础解析、下载多线程)
2. G-007 / G-005(对应上面 #2 / #3 的缺口条目)
3. G-009`bat-api`,仿官方 API 的 Go HTTP 服务,issue #19
4. G-011官方同步结果接入 CAS + ResourceRepository 用户级工作流
5. G-012 / G-006(翻译系统、Patch 引擎)
1. issue #17 验收并关闭或更新范围:多线程下载与指数退避实现已合入,但 GitHub issue 仍 open。
2. issue #2 / G-007:继续扩大 Addressables 可校验字段和结构变体覆盖。
3. issue #3 / G-005:把 UnityFS 基础摘要推进到 `bat-assetbundle` 引擎级解析。
4. G-011官方同步结果接入 CAS + ResourceRepository 用户级工作流
5. G-008 / G-009:收敛 Go 产品入口边界,并实现 `bat-api`issue #19)。
6. G-012 / G-006:翻译系统、Patch 引擎。
这个顺序优先把 Rust `bat` 后端做扎实(解析能力 + 下载性能),再对外提供仿官方 API 服务端,最后推进资源索引编排、翻译和补丁。G-008 已并入 G-009(用户 CLI 由 Rust `bat` 承担);G-018 已固化为可重复 smoke 命令并关闭;G-017 已按"不引入托管 CI"决策关闭。
这个顺序优先把 Rust `bat` 后端做扎实(解析能力 + 下载性能),再把官方同步结果进入可查询资源库,之后收敛 Go 入口和仿官方 API 服务端,最后推进翻译和补丁。G-018 已固化为可重复 smoke 命令并关闭;G-017 已按不引入托管 CI决策关闭。