# H100PowerManger H100 能源管理程序 [![CI](https://gitea2.zhaojingkui.xyz/zjk/H100PowerManger/actions/workflows/ci.yml/badge.svg)](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 20.04)会发布到 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 ```