What to build
Activate the AcCCS-box Raspberry Pi as a GitHub Actions self-hosted runner so substantial PRs can be label-triggered to execute the conformance suite on real Pi hardware. This catches Pi-specific issues (smbus, PWM PCB I/O, scapy on the Devolo NICs) that veth-only CI cannot, without requiring a full hardware-in-the-loop session against a real EV/EVSE.
ADR-0003 calls this the pre-merge Pi gate. It is not a hard gate on every PR — it's label-triggered (e.g., needs-pi-run) so reviewers can request it when a change is likely to touch Pi-specific paths.
End-to-end behavior delivered:
- A reviewer adds the
needs-pi-run label (or comparable trigger) to a PR.
- A CI job runs
pytest tests/conformance/ on the AcCCS-box Pi.
- The result reports back on the PR as a check.
In scope:
- Configure the AcCCS-box Pi as a GitHub Actions self-hosted runner (registration, service installation, restart policy).
- Add a GitHub Actions workflow that triggers on the agreed label and runs the conformance suite on the Pi runner.
- Document the operator workflow in
tests/conformance/README.md: when to request a Pi run, how to read the result, what to do if the Pi runner is offline.
- Ensure the runner has
CAP_NET_ADMIN (or equivalent permissions) to bring up the veth pair.
- Document Pi runner maintenance: rotating the runner token, restarting the service, where logs live.
Out of scope:
- Real hardware-in-the-loop testing against an actual EV or EVSE (that's the major-release acceptance gate, manual).
- Making the Pi run a hard gate on every PR — it stays label-triggered.
- Hardening for multi-PR concurrency on a single Pi (queue / serialize at GitHub's runner level; revisit if it becomes a bottleneck).
Acceptance criteria
Blocked by
What to build
Activate the AcCCS-box Raspberry Pi as a GitHub Actions self-hosted runner so substantial PRs can be label-triggered to execute the conformance suite on real Pi hardware. This catches Pi-specific issues (
smbus, PWM PCB I/O, scapy on the Devolo NICs) that veth-only CI cannot, without requiring a full hardware-in-the-loop session against a real EV/EVSE.ADR-0003 calls this the pre-merge Pi gate. It is not a hard gate on every PR — it's label-triggered (e.g.,
needs-pi-run) so reviewers can request it when a change is likely to touch Pi-specific paths.End-to-end behavior delivered:
needs-pi-runlabel (or comparable trigger) to a PR.pytest tests/conformance/on the AcCCS-box Pi.In scope:
tests/conformance/README.md: when to request a Pi run, how to read the result, what to do if the Pi runner is offline.CAP_NET_ADMIN(or equivalent permissions) to bring up the veth pair.Out of scope:
Acceptance criteria
tests/conformance/README.mddocuments how a reviewer requests a Pi run and how to interpret the result.Blocked by