ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DORA 数据流项目 CI 工作流模板实战指南:rust-node / python-node / dataflow-smoke 三大模板详解

DORA 数据流项目 CI 工作流模板实战指南:rust-node / python-node / dataflow-smoke 三大模板详解 DORA 数据流项目 CI 工作流模板实战指南rust-node / python-node / dataflow-smoke 三大模板详解【免费下载链接】doraDORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed dataflow capabilities. Applications are modeled as directed graphs, also referred to as pipelines.项目地址: https://gitcode.com/GitHub_Trending/do/dora导读本文以 DORA 仓库ci-templates/目录下三份开箱即用的 GitHub Actions 工作流为线索完整讲解如何为 Rust 节点、Python 节点以及整个数据流dataflow搭建持续集成流水线并深入剖析dora build、dora run --stop-after等命令的底层参数实现帮助你为自己的 dora 应用项目快速落地可复现、可验证的 CI 体系。模板总览与适用场景DORADataflow-Oriented Robotic Architecture将应用建模为有向图pipeline节点node通过输入输出相互连接。为了保证节点代码与整条数据流在每次提交后仍然正确仓库在 ci-templates/ 目录中提供了三份“即拷即用”的 GitHub Actions 工作流模板文件用途rust-node-ci.yml针对 Rust 节点 crate 执行cargo fmtcargo clippycargo testpython-node-ci.yml针对 Python 节点执行pytest配合dora.testing中的MockNodedataflow-smoke.yml安装 dora CLI、构建节点、以--stop-after运行数据流做冒烟测试三者覆盖了 dora 应用开发中最典型的三个 CI 诉求静态检查、单元测试、端到端冒烟。你可以按需拷贝其中一份或多份。快速接入把模板拷入你的项目模板的使用方式很简单——将所需工作流文件复制到项目自己的.github/workflows/目录即可mkdir -p .github/workflows cp ci-templates/rust-node-ci.yml .github/workflows/同理可拷贝python-node-ci.yml与dataflow-smoke.yml。拷贝后请按下一节“Customization”中的要点修改路径、版本与环境变量。模板一Rust 节点 CIrust-node-ci.yml触发与并发控制on: push: branches: [main] pull_request: branches: [main] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true在main分支的 push 与 pull request 时触发同一工作流、同一 ref 的多个运行会归为一组新的运行会取消旧的进行中运行cancel-in-progress: true避免在快速迭代时浪费 CI 资源。前置条件模板注释明确要求你的Cargo.toml必须依赖dora-node-api。Rust 节点正是基于该 crate 编写例如仓库中 rust-dataflow/node 的节点实现其接口与dora-node-api对应更多 API 细节可参考 api-rust.md。步骤拆解jobs: check: name: Check Test runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: dtolnay/rust-toolchainstable with: components: rustfmt, clippy - uses: Swatinem/rust-cachev2 - name: Format check run: cargo fmt --all -- --check - name: Clippy run: cargo clippy --all -- -D warnings - name: Test run: cargo test --allactions/checkoutv4拉取代码dtolnay/rust-toolchainstable安装稳定版 Rust 工具链并显式声明rustfmt、clippy两个组件Swatinem/rust-cachev2缓存 cargo 构建产物显著加速后续运行格式检查cargo fmt --all -- --check在检查模式下运行格式化任何不符合 rustfmt 规范的代码都会让 CI 失败Clippy 静态检查cargo clippy --all -- -D warnings将一切 lint 警告升级为错误-D warnings保证合入代码无告警单元测试cargo test --all运行工作区全部 crate 的测试。这三步与 DORA 仓库自身的 Rust 测试实践一致——仓库内大量 Rust crate如 libraries/message都带有tests/目录与 benches说明该模板足以覆盖真实节点 crate 的质量门槛。模板二Python 节点 CIpython-node-ci.yml前置条件模板注释要求你的节点使用from dora import Node编写并且项目里有tests/目录内含基于dora.testing.MockNode的 pytest 用例。MockNode无需守护进程的单测利器MockNode定义在 apis/python/node/dora/testing.py是dora.Node的“即插即用”替身它不需要运行中的 daemon就能用确定性的输入驱动节点逻辑并捕获输出。官方文档串注释给出用法from dora.testing import MockNode import pyarrow as pa def test_my_node(): node MockNode([(tick, pa.array([0]))]) for event in node: if event[type] INPUT: node.send_output(result, pa.array([42])) assert node.outputs[result][0].to_pylist() [42]从源码看MockNode具备以下特性构造时接受(input_id, data)元组或原始事件字典列表元组会被包装成带空metadata的INPUT事件字典则原样转发从而可以注入INPUT_CLOSED、PARAM_UPDATE、ERROR等事件若未显式提供STOP事件会在队尾自动追加一个STOP_ALL_INPUTS_CLOSED镜像真实节点在所有输入关闭时停止的行为暴露next()、recv_async()、try_recv()、drain()等与真实Node兼容的迭代/接收方法其中recv_async与try_recv直接复用next确定性 mock 无需等待send_output()捕获输出到self.outputs供断言send_output_raw()与merge_external_events()因依赖原生运行时明确抛出NotImplementedError还提供log_info/log_warn/log_debug等结构化日志记录写入self.logs、dataflow_descriptor()、dataflow_id()、node_config()、is_restart()、restart_count()、timestamp()UTC对齐 HLC 读数等 APIsend_service_request/send_service_response可驱动请求/响应模式服务响应会以带request_id的INPUT事件插到终止STOP之前保证循环到STOP的节点仍能观测到回复。借助这些能力你可以完全脱离 dora 运行时对节点逻辑做确定性单测——这正是 Python 节点 CI 能在纯 GitHub Actions 环境无 daemon下跑通的前提。步骤拆解jobs: test: name: Test runs-on: ubuntu-latest steps: - uses: actions/checkoutv4 - uses: actions/setup-pythonv5 with: python-version: 3.11 - name: Install dependencies run: | pip install pyarrow dora-rs pytest - name: Run tests run: pytest tests/ -vactions/setup-pythonv5配置 Python 3.11安装三个依赖pyarrowdora 消息的数据载体、dora-rs提供dora.Node与dora.testing.MockNode的 Python 客户端见 apis/python/node/dora/init.py、pytestpytest tests/ -v以详细模式运行测试目录下全部用例。模板三数据流冒烟测试dataflow-smoke.yml这是三份模板中分量最重的一份它不止检查单个节点而是把整条数据流真实跑起来验证。全局配置与关键环境变量env: CARGO_TERM_COLOR: always # Path to your dataflow YAML file DATAFLOW_PATH: dataflow.yml # How long to run before stopping (e.g., 10s, 30s) STOP_AFTER: 10s jobs: smoke: name: Smoke Test runs-on: ubuntu-latest timeout-minutes: 5DATAFLOW_PATH指向你的数据流描述文件默认dataflow.ymlSTOP_AFTER冒烟运行时长默认10stimeout-minutes: 5防止作业卡死。执行步骤steps: - uses: actions/checkoutv4 - uses: dtolnay/rust-toolchainstable - uses: Swatinem/rust-cachev2 - uses: actions/setup-pythonv5 with: python-version: 3.11 - name: Install Python dependencies run: pip install pyarrow dora-rs - name: Install dora CLI run: cargo install dora-cli --locked - name: Build nodes run: dora build $DATAFLOW_PATH - name: Run dataflow run: dora run $DATAFLOW_PATH --stop-after $STOP_AFTER流水线依次完成检出代码 → 装 Rust 工具链 → 缓存 cargo → 配置 Python → 安装pyarrow与dora-rs→从源码安装 dora CLIcargo install dora-cli --locked--locked保证按 Cargo.lock 的精确依赖构建实现可复现安装→构建节点→限时运行数据流。dora build从数据流描述到可运行节点dora build由 binaries/cli/src/command/build/mod.rs 实现。它读取数据流描述文件YAML例如 examples/python-dataflow/dataflow.yml 中的nodes列表并执行每个节点声明的构建命令。其Build参数结构源码 L84-L128展示了许多可选能力参数作用--local在本机执行全部节点构建默认行为若节点未声明deploy键dora build即等价于--local--uv使用uv构建/管理 Python 节点环境--strict-types将类型警告视为错误--locked依据 lockfile 中固定的 git 源提交构建可复现路径与--write-lockfile互斥--write-lockfile将解析到的 git 源提交写入 lockfile默认dataflow-stem.dora-lock.yaml--parallel并行构建节点多核机器更快--offline不访问网络刷新 hub 索引缓存未命中即报错--hub-override namespace/namepath用本地 checkout 替代 hub 包用于本地开发内循环build.rs相关源码build/mod.rs 的模块注释还说明对hub:节点dora build会自动 clone 并 checkout 指定的分支/标签/commit后续构建会自动拉取最新改动daemon 在运行前也会校验数据流是否自上次dora build后发生过变更见 daemon.rs 中的“rundora buildagain”提示。因此在 CI 中先dora build再dora run是标准且必要的顺序。dora run --stop-after优雅限时停机的底层原理dora run由 binaries/cli/src/command/run.rs 实现。其--stop-after参数源码 L45-L58接受clap的value_parser parse_duration支持丰富的时长语法--stop-after 30 # 30 秒裸数字即秒 --stop-after 10s # 10 秒 --stop-after 5m # 5 分钟 --stop-after 1h30m # 1 小时 30 分钟 --stop-after 500ms # 500 毫秒文档注释强调该选项在指定时间到达后发送一条 stop 消息行为类似按下 Ctrl-C从而优雅地停止数据流中的所有节点而非强杀。模板默认STOP_AFTER: 10s正是为了让冒烟测试“跑起来、确认各节点无错误退出、然后自动收尾”。另外值得注意run.rs的模块注释指出dora run是“本地隔离运行”in-process无 coordinator因此dora list、dora stop、dora logs等监控命令不会附加到dora run的执行上若需要接入这些工具或多数据流协调应使用dora updora start。冒烟测试只用dora run完全够用且部署更简单。模板注释还提到“如果任何节点以错误退出作业即失败”——这保证了数据流即使跑满 10 秒一旦内部节点崩溃CI 也会立刻暴露问题。Customization定制指南模板自带注释给出四个最常见的定制点Rust 版本将dtolnay/rust-toolchainstable改为master并通过toolchain输入指定具体版本例如- uses: dtolnay/rust-toolchainmaster with: toolchain: 1.85.0Python 版本修改 setup-python 步骤中的python-version如3.10或3.12数据流路径在dataflow-smoke.yml中设置DATAFLOW_PATH环境变量默认dataflow.yml可指向子目录如examples/foo/dataflow.yml停止时长设置STOP_AFTER环境变量例如30s、1m。结合仓库示例把模板用起来想验证这套模板的效果可以直接对照仓库中的现成示例纯 Python 数据流可参考 examples/python-dataflowsender.py→transformer.py→receiver.py其dataflow.yml与模板默认路径一致Rust 节点可参考 examples/rust-dataflownode、sink等子 crate 均依赖 dora-node-api冒烟测试与容错场景的更多数据流 YAML 可参考 tests/dataflows/覆盖startup-timeout、restart-policy、health-check等行为若想进一步了解 CLI 命令的完整面可阅读 docs/cli.md 与 docs/quickstart.md。将模板拷入.github/workflows/后每次向main推送或发起 PR都会自动完成“格式/静态检查 → 单元测试 → 端到端冒烟”三级验证让 dora 应用项目在持续迭代中始终保持可构建、可运行。【免费下载链接】doraDORA (Dataflow-Oriented Robotic Architecture) is middleware designed to streamline and simplify the creation of AI-based robotic applications. It offers low latency, composable, and distributed dataflow capabilities. Applications are modeled as directed graphs, also referred to as pipelines.项目地址: https://gitcode.com/GitHub_Trending/do/dora创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表