跳到主内容

项目结构

架构设计

项目结构

EnerOS 仓库采用 Cargo workspace 组织 56 个 Rust crate,遵循”关注点分离、单一职责、最小依赖”的模块组织原则。仓库根目录包含 crates/、os/、docs/、examples/、tests/、tools/、scripts/ 等顶层目录。

完整目录树

eneros/
├── crates/                       # 56 个 Rust crate(库 + 二进制)
│   ├── eneros-core/              # L0 核心类型与错误
│   ├── eneros-linalg/            # L0 稀疏线性代数
│   ├── eneros-perf/              # L1 性能优化(arena/pool/ring)
│   ├── eneros-audit/             # L2 审计日志(HMAC + WORM)
│   ├── eneros-topology/          # L3 电网拓扑引擎
│   ├── eneros-powerflow/         # L3 潮流计算
│   ├── eneros-constraint/        # L3 安全约束引擎
│   ├── eneros-equipment/         # L3 设备模型库
│   ├── eneros-cnpower/           # L3 中国配网设备与标准
│   ├── eneros-timeseries/        # L3 时序存储
│   ├── eneros-eventbus/          # L3 事件总线
│   │   └── bins/broker/          # 事件代理二进制
│   ├── eneros-gateway/           # L2 安全网关
│   │   └── bins/gateway/         # 网关二进制
│   ├── eneros-device/            # L1 设备管理与协议适配
│   ├── eneros-api/               # L1 REST/GraphQL/SSE API
│   ├── eneros-runtime/           # L1 顶层运行时组合
│   ├── eneros-bridge/            # L3 外部系统桥接
│   ├── eneros-network/           # L3 CIM 网络模型
│   ├── eneros-memory/            # L4 记忆系统
│   ├── eneros-tenant/            # L1 多租户隔离
│   ├── eneros-tool/              # L4 工具引擎
│   ├── eneros-reasoning/         # L4 推理引擎
│   ├── eneros-agent/             # L4 Agent 运行时
│   │   └── bins/                 # Agent 二进制
│   │       ├── dispatch-agent/   # 智能调度 Agent
│   │       ├── forecast-agent/   # 负荷预测 Agent
│   │       ├── operation-agent/  # 智能运维 Agent
│   │       ├── self-healing-agent/ # 故障自愈 Agent
│   │       ├── planning-agent/   # 配网规划 Agent
│   │       └── trading-agent/    # 电力交易 Agent
│   ├── eneros-test-utils/        # L1 测试工具
│   ├── eneros-scada/             # L1 SCADA 数据采集
│   ├── eneros-twin/              # L4 数字孪生
│   ├── eneros-graphql/           # L1 GraphQL schema
│   ├── eneros-ai/                # L4 AI/ML 集成
│   ├── eneros-aiops/             # L4 AIOps
│   ├── eneros-edge/              # L5 边缘智能
│   ├── eneros-protocol-iec103/   # L1 IEC 103 协议
│   ├── eneros-protocol-cdt/      # L1 CDT 协议
│   ├── eneros-protocol-pmu/      # L1 PMU 协议
│   ├── eneros-protocol-iccp/     # L1 ICCP 协议
│   ├── eneros-protocol-mqtt/     # L1 MQTT 协议
│   ├── eneros-protocol-coap/     # L1 CoAP 协议
│   ├── eneros-protocol-lwm2m/    # L1 LwM2M 协议
│   ├── eneros-protocol-dlt698/   # L1 DLT 698 协议
│   ├── eneros-analysis/          # L3 高级分析
│   ├── eneros-dashboard/         # L5 Web 可视化
│   ├── eneros-simulator/         # L3 场景仿真器
│   ├── eneros-slo/               # L1 SLO/SLI 评估
│   ├── eneros-plugin/            # L1 插件系统
│   │   └── bins/plugin-daemon/   # 插件守护进程
│   ├── eneros-plugin-macros/     # L1 插件派生宏
│   ├── eneros-sdk/               # L1 多语言 SDK
│   │   └── bindings/
│   │       ├── c/                # C 绑定
│   │       └── python/           # Python 绑定
│   ├── eneros-ops/               # L1 运维自动化
│   ├── eneros-os/                # L1 OS 服务
│   │   └── bins/
│   │       ├── eneros-init/      # 系统初始化
│   │       ├── eneros-ha/        # 高可用守护
│   │       ├── eneros-timesync/  # 时间同步
│   │       ├── enerosctl/        # 管理命令行
│   │       ├── eneros-installer/ # 安装器
│   │       ├── eneros-autoscaler/ # 自动扩缩容
│   │       ├── eneros-backup/    # 备份工具
│   │       ├── eneros-oncall/    # 值班管理
│   │       ├── eneros-dr-orchestrator/ # 灾备编排
│   │       └── eneros-upgrader/  # OTA 升级器
│   ├── eneros-market/            # L5 电力市场
│   │   └── bins/market-server/   # 市场服务器
│   ├── eneros-ids/               # L2 入侵检测
│   ├── eneros-compliance/        # L2 合规检查
│   ├── eneros-trust/             # L2 零信任 mTLS
│   ├── eneros-multiregion/       # L1 多区域复制
│   ├── eneros-emtp/              # L3 电磁暂态仿真
│   ├── eneros-iot-hub/           # L1 IoT 接入枢纽
│   ├── eneros-nl/                # L5 自然语言交互
│   ├── eneros-3d/                # L3 3D 可视化场景
│   ├── eneros-report/            # L5 报表生成
│   └── eneros-i18n/              # L1 国际化
├── os/                           # OS 层(系统级服务与镜像)
│   ├── boot/                     # 启动配置
│   │   ├── grub.cfg              # GRUB 配置
│   │   ├── secure-boot.sh        # 安全启动脚本
│   │   ├── build-initramfs.sh    # 构建 initramfs
│   │   └── systemd-boot.conf     # systemd-boot 配置
│   ├── kernel/                   # 内核配置与补丁
│   │   ├── patches/              # 内核补丁
│   │   ├── config-x86_64         # x86_64 内核配置
│   │   ├── config-aarch64        # aarch64 内核配置
│   │   └── build.sh              # 内核构建脚本
│   ├── rootfs/                   # 根文件系统
│   │   ├── files/
│   │   │   └── etc/eneros/       # EnerOS 配置文件
│   │   │       ├── init.toml     # 初始化配置
│   │   │       ├── ha.toml       # 高可用配置
│   │   │       ├── audit.toml    # 审计配置
│   │   │       ├── network.toml  # 网络配置
│   │   │       ├── plugin.toml   # 插件配置
│   │   │       └── syslog.toml   # 系统日志配置
│   │   └── build.sh              # rootfs 构建脚本
│   ├── image-builder/            # 系统镜像构建
│   │   ├── build.sh              # 镜像构建脚本
│   │   ├── create-partitions.sh  # 分区创建
│   │   ├── inject-config.sh      # 配置注入
│   │   └── install-bootloader.sh # 引导加载器安装
│   └── tests/                    # OS 启动测试
│       ├── boot_test.rs          # 启动测试
│       └── boot_params_test.rs   # 启动参数测试
├── docs/                         # 项目文档
│   ├── adr/                      # 架构决策记录
│   │   ├── 0002-power-native-agentos.md
│   │   ├── 0007-zero-trust-mtls.md
│   │   ├── 0008-ops-automation.md
│   │   ├── 0009-ha-enhancement.md
│   │   ├── 0010-agent-intelligence.md
│   │   ├── 0012-iot-ubiquitous-access.md
│   │   ├── 0013-visualization-stack.md
│   │   └── 0014-i18n-compliance.md
│   ├── compliance/               # 合规文档
│   │   ├── gdpr-pipl-ccpa.md     # 数据保护合规
│   │   ├── iec-62443-4-1-sdlc.md # IEC 62443 SDLC
│   │   ├── nerc-cip-005.md       # NERC CIP-005
│   │   ├── nerc-cip-007.md       # NERC CIP-007
│   │   └── nerc-cip-010.md       # NERC CIP-010
│   ├── deployment.md             # 部署文档
│   ├── developer-guide.md        # 开发者指南
│   ├── plugin-development.md     # 插件开发指南
│   └── user-manual.md            # 用户手册
├── locales/                      # 国际化资源
│   ├── en-US.ftl                 # 英语
│   ├── zh-CN.ftl                 # 简体中文
│   ├── ja-JP.ftl                 # 日语
│   └── es-ES.ftl                 # 西班牙语
├── tests/                        # 集成测试
│   ├── e2e/                      # 端到端测试
│   │   ├── scenarios/            # 测试场景
│   │   │   ├── ha_failover.rs    # 高可用故障转移
│   │   │   └── startup.rs        # 启动测试
│   │   └── tests/e2e_tests.rs    # E2E 测试入口
│   ├── protocol_conformance/     # 协议一致性测试
│   ├── security/                 # 安全测试
│   │   ├── owasp/                # OWASP Top 10
│   │   └── tests/security_tests.rs
├── benches/                      # 性能基准测试
│   ├── benches/
│   │   ├── agent_bench.rs        # Agent 性能
│   │   ├── ai_bench.rs           # AI 推理性能
│   │   ├── api_bench.rs          # API 性能
│   │   ├── grid_analysis_bench.rs # 电网分析性能
│   │   ├── ha_bench.rs           # 高可用性能
│   │   ├── iot_bench.rs          # IoT 性能
│   │   ├── perf_bench.rs         # 通用性能
│   │   ├── powerflow_bench.rs    # 潮流计算性能
│   │   ├── scada_bench.rs        # SCADA 性能
│   │   ├── twin_bench.rs         # 数字孪生性能
│   │   └── visualization_bench.rs # 可视化性能
│   └── baseline.json             # 性能基线
├── templates/                    # 代码模板
│   └── plugin-ci-cd/             # 插件 CI/CD 模板
├── deploy/                       # 部署配置
│   ├── docker/
│   │   ├── Dockerfile            # 容器镜像
│   │   └── docker-compose.yml    # 编排配置
│   ├── scripts/
│   │   ├── build.sh              # 构建脚本
│   │   ├── dev.sh                # 开发脚本
│   │   └── healthcheck.sh        # 健康检查
│   └── prometheus.yml            # Prometheus 监控配置
├── third_party/                  # 第三方依赖
│   ├── cnpower/                  # 中国配网参考库
│   └── pandapower/               # pandapower 参考库
├── .github/                      # GitHub 配置
│   └── workflows/                # CI/CD 流水线
│       ├── ci.yml                # 持续集成
│       ├── e2e.yml               # 端到端测试
│       ├── security.yml          # 安全扫描
│       ├── benchmark.yml         # 性能基准
│       ├── coverage.yml          # 覆盖率
│       ├── conformance.yml       # 协议一致性
│       ├── release.yml           # 发布流水线
│       └── deploy-web.yml        # 文档站部署
├── Cargo.toml                    # Workspace 配置
├── Cargo.lock                    # 依赖锁定
├── deny.toml                     # cargo-deny 配置
├── eneros.toml                   # 运行时默认配置
├── README.md                     # 项目说明(中文)
├── README_en.md                  # 项目说明(英文)
├── CHANGELOG.md                  # 变更日志
├── ROADMAP.md                    # 路线图
└── CONTRIBUTING.md               # 贡献指南

顶层目录说明

目录用途提交到 GitHub说明
crates/56 个 Rust crate库 + 二进制,可被其他项目依赖
os/OS 系统层启动、内核配置、rootfs、镜像构建
docs/项目文档ADR、合规、部署、开发指南
locales/国际化资源Fluent 翻译文件(.ftl)
tests/集成测试E2E、协议一致性、安全测试
benches/性能基准criterion 基准测试
templates/代码模板插件 CI/CD 等模板
deploy/部署配置Docker、脚本、监控
third_party/第三方参考库cnpower、pandapower 子模块
.github/CI/CD 配置GitHub Actions 工作流
.trae/AI 开发文件本地 spec/rules,不上传
DEVGUIDE.mdAI 开发手册本地架构地图,gitignore
target/构建产物cargo 构建缓存

crates/ vs os/

目录用途构建产物示例
crates/Rust 库 crate(可被依赖).rlib / .so / .exeeneros-core, eneros-powerflow
crates/*/bins/Rust 二进制 crate可执行文件dispatch-agent, enerosctl
os/OS 系统层(非 Rust)配置/脚本/镜像grub.cfg, rootfs, kernel config

Cargo Workspace 配置

核心配置

# Cargo.toml (workspace 根)
[workspace]
resolver = "2"
members = [
    "crates/eneros-core",
    "crates/eneros-linalg",
    "crates/eneros-perf",
    "crates/eneros-audit",
    "crates/eneros-topology",
    "crates/eneros-powerflow",
    "crates/eneros-constraint",
    "crates/eneros-equipment",
    "crates/eneros-cnpower",
    "crates/eneros-timeseries",
    "crates/eneros-eventbus",
    "crates/eneros-eventbus/bins/broker",
    "crates/eneros-gateway",
    "crates/eneros-gateway/bins/gateway",
    "crates/eneros-device",
    "crates/eneros-api",
    "crates/eneros-runtime",
    "crates/eneros-bridge",
    "crates/eneros-network",
    "crates/eneros-memory",
    "crates/eneros-tenant",
    "crates/eneros-tool",
    "crates/eneros-reasoning",
    "crates/eneros-agent",
    "crates/eneros-agent/bins/dispatch-agent",
    "crates/eneros-agent/bins/forecast-agent",
    "crates/eneros-agent/bins/operation-agent",
    "crates/eneros-agent/bins/self-healing-agent",
    "crates/eneros-agent/bins/planning-agent",
    "crates/eneros-agent/bins/trading-agent",
    "crates/eneros-test-utils",
    "crates/eneros-scada",
    "crates/eneros-twin",
    "crates/eneros-graphql",
    "crates/eneros-ai",
    "crates/eneros-aiops",
    "crates/eneros-edge",
    "crates/eneros-protocol-iec103",
    "crates/eneros-protocol-cdt",
    "crates/eneros-protocol-pmu",
    "crates/eneros-protocol-iccp",
    "crates/eneros-analysis",
    "crates/eneros-dashboard",
    "crates/eneros-simulator",
    "crates/eneros-slo",
    "crates/eneros-plugin",
    "crates/eneros-plugin/bins/plugin-daemon",
    "crates/eneros-plugin-macros",
    "crates/eneros-sdk",
    "crates/eneros-sdk/bindings/c",
    "crates/eneros-sdk/bindings/python",
    "crates/eneros-ops",
    "crates/eneros-os",
    "crates/eneros-os/bins/eneros-init",
    "crates/eneros-os/bins/eneros-ha",
    "crates/eneros-os/bins/eneros-timesync",
    "crates/eneros-os/bins/enerosctl",
    "crates/eneros-os/bins/eneros-installer",
    "crates/eneros-os/bins/eneros-autoscaler",
    "crates/eneros-os/bins/eneros-backup",
    "crates/eneros-os/bins/eneros-oncall",
    "crates/eneros-os/bins/eneros-dr-orchestrator",
    "crates/eneros-os/bins/eneros-upgrader",
    "crates/eneros-market",
    "crates/eneros-market/bins/market-server",
    "crates/eneros-ids",
    "crates/eneros-compliance",
    "crates/eneros-trust",
    "crates/eneros-multiregion",
    "crates/eneros-emtp",
    "crates/eneros-protocol-mqtt",
    "crates/eneros-protocol-coap",
    "crates/eneros-protocol-lwm2m",
    "crates/eneros-protocol-dlt698",
    "crates/eneros-iot-hub",
    "crates/eneros-nl",
    "crates/eneros-3d",
    "crates/eneros-report",
    "crates/eneros-i18n",
    "os/tests",
    "tests/e2e",
    "tests/protocol_conformance",
    "tests/security",
    "benches",
]

[workspace.package]
version = "0.44.0"
edition = "2021"
authors = ["GAWG-AI"]
license = "MIT"
description = "EnerOS - Power-Native Agent Operating System"

[workspace.dependencies]
# 异步运行时
tokio = { version = "1", features = ["full"] }
async-trait = "0.1"
futures = "0.3"

# 序列化
serde = { version = "1", features = ["derive"] }
serde_json = "1"
bincode = "1"

# 日志与追踪
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["json", "env-filter"] }

# 错误处理
thiserror = "1"
anyhow = "1"

# 数据结构
dashmap = "5"
parking_lot = "0.12"
uuid = { version = "1", features = ["v4", "serde"] }
chrono = { version = "0.4", features = ["serde"] }

# 数学与科学计算
ndarray = { version = "0.15", features = ["serde"] }
num-complex = { version = "0.4", features = ["serde"] }
sprs = "0.11"

# 安全
jsonwebtoken = "9"
sha2 = "0.10"
hmac = "0.12"
aes-gcm = "0.10"
ed25519-dalek = { version = "2", features = ["rand_core"] }
zeroize = { version = "1", features = ["derive", "serde", "alloc"] }
libseccomp = "0.4"

# TLS
tokio-rustls = "0.26"
rustls = { version = "0.23", default-features = false, features = ["ring", "std"] }

# 内部 crate(path 依赖)
eneros-core = { path = "crates/eneros-core" }
eneros-linalg = { path = "crates/eneros-linalg" }
# ... 其余内部 crate 同样以 path 声明

单个 crate 的 Cargo.toml 示例

# crates/eneros-powerflow/Cargo.toml
[package]
name = "eneros-powerflow"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
description = "EnerOS power flow solver (Newton-Raphson)"

[dependencies]
# EnerOS 内部依赖
eneros-core = { workspace = true }
eneros-linalg = { workspace = true }
eneros-topology = { workspace = true }

# 第三方依赖
tokio = { workspace = true }
serde = { workspace = true }
serde_json = { workspace = true }
tracing = { workspace = true }
thiserror = { workspace = true }
ndarray = { workspace = true }
sprs = { workspace = true }

[dev-dependencies]
eneros-test-utils = { workspace = true }
criterion = { workspace = true }

[[bench]]
name = "powerflow_bench"
harness = false

关键文件说明

根目录文件

文件用途同步触发
Cargo.tomlWorkspace 配置(members + 依赖)新增/移除 crate
Cargo.lock依赖版本锁定cargo build 自动更新
deny.tomlcargo-deny 配置(许可/重复依赖)依赖变更
eneros.toml运行时默认配置配置项变更
README.md项目说明(中文)版本/功能/架构变更
README_en.md项目说明(英文)与 README.md 同步
CHANGELOG.md变更日志每次代码变更
ROADMAP.md路线图版本发布时更新
CONTRIBUTING.md贡献指南流程变更时

OS 层配置文件

文件路径用途
init.tomlos/rootfs/files/etc/eneros/系统初始化配置
ha.tomlos/rootfs/files/etc/eneros/高可用配置
audit.tomlos/rootfs/files/etc/eneros/审计配置
network.tomlos/rootfs/files/etc/eneros/网络配置
plugin.tomlos/rootfs/files/etc/eneros/插件配置
syslog.tomlos/rootfs/files/etc/eneros/系统日志配置
grub.cfgos/boot/GRUB 引导配置
config-x86_64os/kernel/x86_64 内核配置
config-aarch64os/kernel/aarch64 内核配置

eneros.toml 运行时配置

# eneros.toml - 运行时默认配置
[server]
host = "0.0.0.0"
port = 8080
workers = 4

[realtime]
cpus = [2, 3]
priority = 80
lock_memory = true
use_huge_pages = true

[database]
path = "./data/eneros.db"
timeseries_path = "./data/ts"

[security]
mtls_enabled = true
ca_cert_path = "./certs/ca.pem"
server_cert_path = "./certs/server.pem"
server_key_path = "./certs/server.key"

[audit]
storage_path = "./audit"
hmac_key = "change-me-in-production-32-bytes"
worm_enabled = true

[ha]
enabled = false
peers = []
heartbeat_interval_ms = 1000
failover_timeout_ms = 5000

[multiregion]
local_region = "default"
peer_regions = []
replication_mode = "async_wal"

模块组织原则

1. 单一职责

每个 crate 只负责一个明确的职责:

// ✅ 正确:eneros-topology 只负责拓扑
crate eneros-topology {
    mod graph;      // 图数据结构
    mod engine;     // 拓扑引擎
    mod search;     // 搜索算法
}

// ❌ 错误:在 eneros-topology 中混入潮流计算
crate eneros-topology {
    mod graph;
    mod powerflow;  // 应该放在 eneros-powerflow
}

2. 接口与实现分离

通过 trait 暴露接口,impl 模块隐藏实现:

// crates/eneros-powerflow/src/lib.rs
pub mod solver;      // 暴露 PowerflowSolver trait
pub mod result;      // 暴露 PowerflowResult 类型
mod matrix;          // 内部矩阵工具(不暴露)
mod ieee;            // 内部 IEEE 标准实现(不暴露)

// 公共 API
pub use solver::{PowerflowSolver, NewtonRaphsonSolver};
pub use result::PowerflowResult;

3. 测试组织

测试类型位置命名运行命令
单元测试src/*.rs#[cfg(test)] mod teststest_*cargo test -p <crate>
集成测试tests/*.rs*_test.rscargo test --test <name>
端到端测试tests/e2e/e2e_*.rscargo test --package e2e
协议一致性tests/protocol_conformance/cargo test --package protocol_conformance
安全测试tests/security/cargo test --package security
OS 启动测试os/tests/*_test.rscargo test --package os-tests
性能基准benches/benches/*_bench.rscargo bench

4. 模块命名规范

命名对象规范示例
Crateeneros-<domain>eneros-topology, eneros-powerflow
二进制eneros-<service><domain>-agentenerosctl, dispatch-agent
模块<domain><feature>topology, powerflow, gateway
Trait大驼峰,名词TopologyEngine, SafetyGateway
函数蛇形小写,动词开头find_islands, solve_powerflow
类型大驼峰,名词Bus, Branch, Command
常量蛇形大写MAX_HISTORY, SHM_MAGIC

代码组织规范

目录结构规范

每个 crate 遵循统一的目录结构:

crates/eneros-<name>/
├── Cargo.toml          # crate 配置
├── README.md           # crate 说明(可选)
├── src/
│   ├── lib.rs          # 库入口(公共 API)
│   ├── error.rs        # 错误类型
│   ├── types.rs        # 核心类型
│   ├── <module>.rs     # 业务模块
│   └── tests/          # 集成测试(可选)
├── tests/
│   └── <test>.rs       # 集成测试
└── benches/
    └── <bench>.rs      # 性能基准(可选)

二进制 crate 结构

crates/eneros-<name>/bins/<binary>/
├── Cargo.toml          # 二进制配置
└── src/
    └── main.rs         # 入口

示例:eneros-os crate 结构

crates/eneros-os/
├── Cargo.toml
├── src/
│   ├── lib.rs              # 公共 API 入口
│   ├── init/               # 系统初始化
│   │   ├── mod.rs
│   │   ├── manager.rs      # init 管理器
│   │   ├── config.rs       # 配置加载
│   │   ├── service.rs      # 服务管理
│   │   └── supervisor.rs   # 进程监督
│   ├── rt/                 # 实时运行时
│   │   ├── mod.rs
│   │   ├── runtime.rs      # RtRuntime
│   │   ├── ipc.rs          # 无锁 SPSC 队列
│   │   ├── shm.rs          # 共享内存通道
│   │   └── watchdog.rs     # 看门狗
│   ├── agentos/            # Agent OS 服务
│   │   ├── mod.rs
│   │   ├── ipc.rs          # Agent IPC
│   │   ├── quota.rs        # 资源配额
│   │   └── seccomp.rs      # seccomp 沙箱
│   ├── ha/                 # 高可用
│   │   ├── mod.rs
│   │   ├── cluster.rs      # 集群管理
│   │   ├── failover.rs     # 故障转移
│   │   ├── fencing.rs      # 脑裂防护
│   │   ├── heartbeat.rs    # 心跳检测
│   │   └── replication.rs  # 状态复制
│   ├── hal/                # 硬件抽象层
│   │   ├── mod.rs
│   │   ├── linux_hal.rs    # Linux HAL
│   │   └── sensor.rs       # 传感器接口
│   ├── netcfg/             # 网络配置
│   ├── syslog/             # 系统日志
│   │   ├── mod.rs
│   │   └── rotate.rs       # 日志轮转
│   ├── timesync/           # 时间同步
│   │   ├── mod.rs
│   │   ├── ntp.rs          # NTP 客户端
│   │   └── ptp.rs          # PTP(精确时间协议)
│   ├── security/           # 安全模块
│   ├── devmgr/             # 设备管理
│   │   ├── mod.rs
│   │   └── hotplug.rs      # 热插拔
│   └── update/             # OTA 升级
│       ├── mod.rs
│       ├── ota.rs          # OTA 主逻辑
│       ├── manifest.rs     # 升级清单
│       └── signer.rs       # 签名验证
├── tests/
│   └── init_test.rs        # 初始化测试
└── bins/                   # 二进制
    ├── eneros-init/        # 系统初始化守护
    ├── eneros-ha/          # 高可用守护
    ├── eneros-timesync/    # 时间同步守护
    ├── enerosctl/          # 管理命令行
    ├── eneros-installer/   # 安装器
    ├── eneros-autoscaler/  # 自动扩缩容
    ├── eneros-backup/      # 备份工具
    ├── eneros-oncall/      # 值班管理
    ├── eneros-dr-orchestrator/ # 灾备编排
    └── eneros-upgrader/    # OTA 升级器

构建与测试

构建命令

# 构建所有 crate
cargo build --release

# 构建特定 crate
cargo build -p eneros-powerflow

# 构建特定二进制
cargo build -p enerosctl

# 构建 eneros-init(带 OS 特性)
cargo build -p eneros-init --features os

# 构建 WORM 审计(带审计特性)
cargo build -p eneros-audit --features worm

测试命令

# 运行所有测试
cargo test

# 运行特定 crate 测试
cargo test -p eneros-powerflow

# 运行端到端测试
cargo test --package e2e

# 运行安全测试
cargo test --package security

# 运行协议一致性测试
cargo test --package protocol_conformance

# 运行性能基准
cargo bench

代码质量

# 代码格式化
cargo fmt --all

# 静态检查
cargo clippy --all -- -D warnings

# 依赖审计
cargo deny check

# 重复依赖检测
cargo tree -d

# 覆盖率
cargo tarpaulin --out Html

CI/CD 流水线

CI/CD 配置位于 .github/workflows/,包含以下流水线:

流水线文件触发条件说明
持续集成ci.ymlpush/PR构建 + 单元测试 + clippy
端到端测试e2e.ymlpush to mainE2E 测试
安全扫描security.ymlpush/PRSAST + 依赖审计
性能基准benchmark.ymlpush to main性能回归检测
覆盖率coverage.ymlpush to main代码覆盖率上报
协议一致性conformance.ymlpush/PR电力协议一致性
发布release.ymltag发布到 crates.io + GitHub Release
文档站deploy-web.ymlpush to main部署文档站到 GitHub Pages

开发工作流

添加新 crate

  1. crates/ 下创建新目录:
mkdir -p crates/eneros-newfeature/src
  1. 创建 Cargo.toml
[package]
name = "eneros-newfeature"
version.workspace = true
edition.workspace = true
authors.workspace = true
license.workspace = true
description = "EnerOS new feature"

[dependencies]
eneros-core = { workspace = true }
# 其他依赖
  1. 创建 src/lib.rs
//! EnerOS new feature module

pub mod error;
pub mod types;

pub use error::{NewFeatureError, Result};
pub use types::NewFeature;
  1. 在根 Cargo.tomlmembers 中添加:
members = [
    # ...
    "crates/eneros-newfeature",
]
  1. [workspace.dependencies] 中添加 path 依赖:
eneros-newfeature = { path = "crates/eneros-newfeature" }
  1. 同步文档:
    • 更新 CHANGELOG.md
    • 更新 DEVGUIDE.md(如存在)
    • 更新 docs/developer-guide.md
    • 必要时新增 docs/adr/000N-*.md

开发环境准备

# 1. 安装 Rust 工具链
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup default stable

# 2. 安装组件
rustup component add rustfmt clippy
cargo install cargo-deny cargo-tarpaulin cargo-audit

# 3. 克隆仓库
git clone https://github.com/Gawg-AI/EnerOS.git
cd EnerOS

# 4. 构建验证
cargo build
cargo test
cargo clippy -- -D warnings

相关文档