- ci/Dockerfile:基础镜像 20.04 → 22.04(板卡实测为 Orange Pi Jammy, 旧 focal 镜像保留为 h100-power-manager-ci:arm64-focal) - scripts/build-arm64-image.sh:arm64 镜像构建(支持 --force 重建) - scripts/build-arm64.sh:日常交叉编译(产物输出 bin/arm64/,与本地隔离) - scripts/deploy.sh:板卡部署(推送二进制+mission,安装 3 个 systemd 服务) - missions/h100.moos:板卡专用 mission 配置 - .gitignore:忽略 build-arm64/、webassets_gen.h 等构建产物
61 lines
3.3 KiB
Markdown
61 lines
3.3 KiB
Markdown
# H100PowerManger
|
||
|
||
H100 能源管理程序
|
||
|
||
[](https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/actions)
|
||
|
||
## 测试报告
|
||
|
||
每次 CI 运行后自动生成测试报告:
|
||
|
||
- [最新测试报告 (Markdown)](https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/src/branch/test-reports/test-report.md)
|
||
- [JUnit XML](https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/raw/branch/test-reports/junit.xml)
|
||
|
||
## 自动化测试(PowerManger)
|
||
|
||
CI 在 aarch64 (QEMU) 环境下运行两类测试,**不改动任何 `src/` 生产代码**:
|
||
|
||
**单元测试(GoogleTest,`PowerMangerTests`,56 例)**
|
||
- `DriverTest`:10 个工况的设备表生成(STANDBY/岸基备航/水中备航/巡航/高速/上浮下潜/浮调/水下侦查/水面侦查/DJ)+ 设备状态读写 + JSON 往返
|
||
- `SystemDataTest`:4 类配电/CCU 反馈的故障检测(断路器 0x55/0xAA/0x5A 映射、绝缘低、电源失电、漏水、DCDC、继电器位提取、缩放)+ 故障码集合/等级 + 漏水位
|
||
- `FaultMapTest`:锂电池故障表(54) / 配电故障表(45) 完整性
|
||
- `UpmsgTest`:上位机/外部通信 JSON 消息解析与序列化往返
|
||
- `UdpCommTest`:UDP 校验和 / 消息头识别 / 校验解析 / 日期
|
||
- `PmSysvariableTest`:`#pragma pack(1)` 协议结构体大小/偏移 + 枚举完整性
|
||
- `SqliteTest`:用裸 sqlite3 读回校验 10 个 `insertData` 写入
|
||
|
||
**集成测试**
|
||
- 冒烟:MOOSDB + `pPowerManger` 拉起存活
|
||
- UDP 回环:`udpFeeder` 发送真实 CCU 反馈 → 校验 `power_data.db` 落行(验证 UDP→SystemData→SQLite 全链路)
|
||
|
||
本地跑测试:需要 GoogleTest(`git clone https://gitea2.zhaojingkui.xyz/zjk/googletest.git` 后 `cmake && make && make install`),然后 `./build.sh` 即可。
|
||
|
||
## 构建产物(Gitea Releases,手动部署)
|
||
|
||
CI 构建的 aarch64 二进制(RK3588 / Ubuntu 22.04,板卡实测为 Orange Pi 5 Plus 的 Jammy 系统)会发布到 Gitea Releases,供手动下载部署:
|
||
|
||
- **版本号 Release**:推送 `v*` tag(如 `v1.0.0`)时创建,正式版
|
||
→ `https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/releases/tag/v1.0.0`
|
||
- **latest Release(测试)**:每次 `main` push 时更新,标记为预发布(测试用)
|
||
→ `https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/releases/tag/latest`
|
||
|
||
### 发布流程(CI 自动执行,仅测试通过后发布)
|
||
|
||
`Publish release` / `Publish latest release` 步骤(`if: success()`,即构建 + 测试全部通过才发布)用 `${{ secrets.CI_TOKEN }}` 调 Gitea API 完成:
|
||
|
||
1. **创建 Release**:`POST /releases`
|
||
2. **删除旧 latest**(仅 latest):`DELETE /releases/tags/latest`
|
||
3. **上传附件**:`POST /releases/{id}/assets?name=pPowerManger`(multipart 字段 `attachment`)
|
||
4. **按 `github.ref` 分支处理**:
|
||
- `refs/tags/v*` → 直接为该 tag 创建版本号 Release
|
||
- `refs/heads/main` → `git tag -f latest && git push -f origin latest`,删除旧 latest Release,重建为 prerelease,再上传二进制
|
||
5. **Release body** 自动带上:commit / 时间 / 测试报告链接 / 手动部署命令
|
||
|
||
### 手动部署到板卡
|
||
|
||
从 Releases 页面下载 `pPowerManger` 后,手动推送到板卡(仅推送,不自动重启):
|
||
|
||
```bash
|
||
rsync -avz pPowerManger root@192.168.0.223:/root/work/moos_ws/moos-ivp-extend/bin/pPowerManger
|
||
```
|