Skip to main content

Continuous Integration for Embedded Hardware

Project description

BenchCI

Documentation PyPI Early Access Hardware CI Embedded License

Continuous Integration for real embedded hardware.

Build firmware in CI, flash a real device, run hardware tests, and get logs/results back automatically.


🎥 Demo

Watch BenchCI run real hardware tests directly from CI:

BenchCI Demo

STM32 + Raspberry Pi + GitHub Actions
No simulation. Real device.


🧪 What this demo shows

  • CI pipeline builds firmware
  • BenchCI schedules a real hardware bench
  • Device is flashed automatically
  • Tests run on actual hardware
  • Results and logs are returned to CI

👉 No simulation. No mocks. Real hardware in the loop.


Why BenchCI?

Most embedded testing still looks like this:

  1. build firmware
  2. flash the board manually
  3. open a serial terminal
  4. send a command
  5. read logs by hand
  6. repeat after every change

That works for one engineer at one desk.

It breaks when you need repeatable validation, shared benches, CI pipelines, release gates, or remote teams.

BenchCI turns real hardware into a CI-executable test target.


Quickstart

pip install benchci
benchci login
benchci run -b bench.yaml -s suite.yaml -a build/fw.elf

BenchCI will:

  • flash firmware
  • execute your test suite on real hardware
  • validate device behavior
  • generate structured results and logs

Create or access your workspace from:

https://app.benchci.dev

Read the docs:

https://docs.benchci.dev

The core idea

BenchCI separates the physical bench from the test logic:

bench.yaml  -> hardware setup
suite.yaml  -> test steps
benchci run -> real hardware execution

What BenchCI can automate

BenchCI can:

  • flash firmware with OpenOCD, STM32CubeProgrammer, J-Link, or esptool
  • talk to devices over UART, Modbus RTU/TCP, and CAN
  • control GPIO locally or through a remote Agent
  • run local tests on a hardware-connected machine
  • run remote tests through a customer-managed Agent
  • run cloud-scheduled tests through BenchCI Cloud
  • return artifacts, logs, and structured results to CI

Example suite.yaml

version: "1"

suite:
  name: firmware_smoke

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 it:

benchci run -b bench.yaml -s suite.yaml -a build/fw.elf

CI example

benchci run --cloud --bench-id my-bench --suite suite.yaml --artifact build/fw.elf

Typical flow:

GitHub Actions / GitLab CI
        ↓
BenchCI CLI
        ↓
BenchCI Cloud
        ↓
Cloud-connected Agent
        ↓
Real hardware
        ↓
Results + artifacts

Documentation path

Start here:

  1. Installation
  2. Quickstart
  3. End-to-End Example
  4. GitHub Actions
  5. GitLab CI

Then use the reference docs for bench.yaml, suite.yaml, CLI commands, Agent, Cloud Mode, GPIO, architecture, and security.


Early access

BenchCI is currently in early access.

For onboarding, pilots, or managed hardware demos:

tech@benchci.dev

No simulation. Real device.

BenchCI is for teams that want automated validation on the hardware they actually ship.

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.4.1.tar.gz (78.3 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.4.1-py3-none-any.whl (92.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for benchci-0.4.1.tar.gz
Algorithm Hash digest
SHA256 9ded0eb1b15515952dc8e01056b23e7ab07db7f5df2a1eed13cc1707fd9806cf
MD5 2c386ba336ec4c16950d1b4853f07351
BLAKE2b-256 efb8dd4afb55f00089cdaa4a77fbb4f98f27b8dffe741d02d2ddc1a0c46d3c9a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: benchci-0.4.1-py3-none-any.whl
  • Upload date:
  • Size: 92.0 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.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 484c38665ff225a8da680b8949410c29196521e3ec6720a7195cd43f47cadfea
MD5 cb662d7b5f340b3fef241b5c8cb6b418
BLAKE2b-256 87e54d7137bad2a8ec294841ab7a3997807f6bbf5733d0bfe3d0424cd0455efe

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