Continuous Integration for Embedded Hardware
Project description
BenchCI
Continuous Integration for Embedded Hardware
Flash firmware, run automated tests on real devices, and validate embedded systems in CI โ using simple YAML configs.
๐ Quickstart (30 seconds)
pip install benchci
benchci login
benchci run -b bench.yaml -s suite.yaml -a build/fw.elf
Create or access your BenchCI workspace from the dashboard:
https://app.benchci.dev
๐ Thatโs it โ BenchCI will:
- flash firmware
- execute tests on real hardware
- validate behavior
- generate structured artifacts
โก Why BenchCI?
Testing embedded firmware usually looks like this:
- flash firmware manually
- open serial terminal
- send commands
- watch logs
- write ad-hoc scripts
- repeat for every release
๐ This is manual, fragile, and not CI-friendly
BenchCI makes hardware testing:
- โ declarative
- โ repeatable
- โ CI-ready
- โ scalable across teams
๐ง Mental Model
BenchCI separates hardware and test logic:
bench.yamlโ your hardware setupsuite.yamlโ your tests
bench.yaml + suite.yaml
โ
benchci run
โ
real hardware execution
โ
results + logs
๐๏ธ How It Works
CI Pipeline / Developer
โ
โผ
benchci run
โ
โผ
Local Runner / Agent / Cloud Backend
โ
โผ
Real Hardware Bench
โ
โผ
DUT / PLC / ECU
BenchCI separates:
- execution (CLI / CI)
- hardware access (local runner or Agent)
- workspace visibility (Dashboard)
- scheduling and access control (Cloud backend)
This enables:
- remote labs
- shared benches
- private customer benches
- scalable hardware testing
๐ง What BenchCI Does
BenchCI connects your CI pipeline directly to real hardware and allows you to:
- flash firmware automatically (OpenOCD, CubeProgrammer, J-Link, esptool)
- interact with devices over UART, Modbus RTU/TCP, and CAN
- control and monitor GPIO (local or remote)
- control supported relay-backed power resources
- validate behavior with structured test steps
- run tests locally, through a customer-managed Agent, or through BenchCI Cloud
- generate reproducible artifacts
๐ Configuration Model
BenchCI uses two files:
bench.yaml
Defines your hardware:
- nodes (DUT, controllers, PLCs, etc.)
- transports (UART, Modbus, CAN)
- flashing configuration
- GPIO control
- optional bench-level resources such as relay-backed power control
suite.yaml
Defines your tests:
- test cases
- step-by-step actions
- expected behavior
๐ Example
suite.yaml
version: "1"
suite:
name: "firmware-tests"
tests:
- name: boot_ok
steps:
- expect_uart:
node: dut
transport: console
contains: "[BOOT] OK"
within_ms: 3000
- name: ping
steps:
- send_uart:
node: dut
transport: console
data: "PING\n"
- expect_uart:
node: dut
transport: console
contains: "PONG"
within_ms: 1000
Run:
benchci run -b bench.yaml -s suite.yaml -a build/fw.elf
๐ Supported Interfaces
Communication
- UART
- Modbus RTU
- Modbus TCP
- CAN
Hardware Control
- Linux GPIO
- Remote GPIO (via Agent)
- Mock GPIO
- relay-backed power workflows
Flashing Backends
- OpenOCD
- STM32CubeProgrammer
- SEGGER J-Link
- esptool (ESP32)
๐งช Example Scenarios
examples/
โโโ device_boot_validation/
โโโ local_gpio_reset_and_ready/
โโโ remote_gpio_power_cycle/
โโโ modbus_rtu_plc_validation/
โโโ modbus_tcp_gateway_validation/
โโโ can_ecu_handshake/
โโโ multi_node_system_smoke/
๐ฆ Output Artifacts
BenchCI generates structured outputs:
benchci-results/
โโโ <timestamp>/
โโโ results.json
โโโ nodes/
โโโ dut/
โโโ flash.log
โโโ gpio.log
โโโ transport-console.log
Perfect for:
- CI pipelines
- debugging
- traceability
๐งฐ CLI Workflow
benchci loginโ authenticate with your BenchCI account/workspacebenchci whoamiโ show current user and active workspacebenchci doctorโ check environmentbenchci validateโ validate configsbenchci runโ execute testsbenchci benches listโ list Cloud Mode benchesbenchci runs listโ inspect Cloud Mode runs
๐ CI Integration
BenchCI is designed for automation:
- GitLab CI (example included)
- GitHub Actions / Jenkins
- direct Agent execution
- Cloud Mode through the backend scheduler
๐ Dashboard
Use the dashboard to view workspace health, benches, runs, events, failures, and artifacts:
https://app.benchci.dev
๐ Documentation
Includes:
- quickstart
- installation
- configuration guides
- agent setup
- CI integration
- Cloud Mode
๐ Repository Contents
This repository contains:
- documentation
- configuration examples
- CI examples
- helper tools
BenchCI core source code is maintained in a private repository.
๐ผ License and Access
BenchCI is a commercial product.
Current onboarding uses BenchCI accounts and workspaces. Early access and production use are activated manually by the BenchCI team, with monthly invoicing for paid customers.
For evaluation, pilot access, or pricing:
๐ง tech@benchci.dev
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file benchci-0.3.3.tar.gz.
File metadata
- Download URL: benchci-0.3.3.tar.gz
- Upload date:
- Size: 71.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9ff984707efbd6093b2b162d8858a3e2a5855e88f0e260fbfc339c195a0667a6
|
|
| MD5 |
ad9ed86d631394f41e8392dcc46a1699
|
|
| BLAKE2b-256 |
519bb9c0d3a252cfdcba5e633670cb6a756eb1299f5a15dd6b979f94576f7e5a
|
File details
Details for the file benchci-0.3.3-py3-none-any.whl.
File metadata
- Download URL: benchci-0.3.3-py3-none-any.whl
- Upload date:
- Size: 84.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3ae26c15bb52186c2e5c544c3fff8149a5183282296946a53a7bc197c6fae5e
|
|
| MD5 |
7fc694e3a80bf4b7775518922b0e7a37
|
|
| BLAKE2b-256 |
0f349fd3cd04378490edace08c0ef32dd3983e8c031082a6324ebb160ddda475
|