Skip to main content

Continuous Integration for Embedded Hardware

Project description

BenchCI

Documentation PyPI Early Access Hardware CI Embedded License

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 setup
  • suite.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/workspace
  • benchci whoami โ†’ show current user and active workspace
  • benchci doctor โ†’ check environment
  • benchci validate โ†’ validate configs
  • benchci run โ†’ execute tests
  • benchci benches list โ†’ list Cloud Mode benches
  • benchci 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

๐Ÿ‘‰ https://docs.benchci.dev

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

benchci-0.3.2.tar.gz (70.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

benchci-0.3.2-py3-none-any.whl (82.8 kB view details)

Uploaded Python 3

File details

Details for the file benchci-0.3.2.tar.gz.

File metadata

  • Download URL: benchci-0.3.2.tar.gz
  • Upload date:
  • Size: 70.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for benchci-0.3.2.tar.gz
Algorithm Hash digest
SHA256 5b16b677919f827020ef65523286dcb20eaf2d2bc27fb4e26b3c8d643e563501
MD5 193a1bfa52a88987764bc2aca829d8dc
BLAKE2b-256 c59317ce5cb7379a83732718135baca221ea167b042d5cf7149d463b9ae5f550

See more details on using hashes here.

File details

Details for the file benchci-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: benchci-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 82.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for benchci-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 ae351cc63d6db0659bed2f1d7273f83e15c9de2da84df8a567ac474d0e902fba
MD5 2f84d60dc743d098a21a23cd596c3353
BLAKE2b-256 700f857bb89a4fd4d78b06db250a1daf02c3878febb2e20c85275bc2896c611b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page