Repository navigation
ci: add a kurtosis + assertoor battery for the beacon node - #679
MegaRedHand wants to merge 9 commits into
Conversation
…battery ethlambda has no end-to-end check against other clients. These args start a mainnet-preset devnet from the ethereum-package fork that knows ethlambda (lighthouse bootnode, lighthouse with the ethlambda validator, ethlambda beacon with its validator) and run assertoor stability, block-proposal and sync checks across every client pair. The assertoor image and playbook URLs are pinned to one commit so a playbook cannot name a task the image lacks. The poller exists because kurtosis returns as soon as the devnet is up, while the verdict only exists once assertoor finishes.
Nothing exercises ethlambda against other clients after a merge. The workflow waits for the sha-tagged image docker_publish.yaml pushes, runs the battery against it, and posts the failed tests to Slack when it breaks on main. Pull requests that touch the harness test it against the unstable image so a harness change is checked in its own PR. The package runs from a clone pinned by commit, because kurtosis rejects a remote package whose kurtosis.yml names a different repository than the fork.
Explains what each check proves, how to run it locally, and how CI picks the image.
Kurtosis refuses the remote locator because the fork's kurtosis.yml names a different repository, so the header now points at the README steps.
🤖 Codex Code ReviewI found 2 substantive issues; both are in the CI harness rather than consensus logic itself.
A few smaller review notes:
Overall, this looks well thought out: pinned package commit, pinned assertoor commit, artifact upload on failure, and safe Slack payload construction are all solid. Automated review by OpenAI Codex · gpt-5.4 · custom prompt |
🤖 Claude Code ReviewReview of PR 679: Kurtosis + assertoor battery (CI, tooling and docs only) I read the diff only and did not run the workflow. No Rust or consensus code changes, so the risk is limited to CI behaviour. Main concern
Smaller points
Looks good
Automated review by Claude (Anthropic) · sonnet · custom prompt |
🤖 Kimi Code ReviewI'll review this PR which adds a Kurtosis + Assertoor CI workflow for testing ethlambda in a multi-client devnet. Overall AssessmentThis is a well-structured CI workflow addition with good documentation. The shell scripting is generally careful, and the workflow design handles failure modes appropriately. I found several issues ranging from minor to moderate severity. Critical / Security Issues1. Potential Command Injection in
|
| Priority | Item | Location | Issue |
|---|---|---|---|
| Medium | 2 | Workflow line 97 | Race condition / silent failures in image wait |
| Medium | 3 | Workflow line 127 | Weak commit verification |
| Medium | 4 | Script line 44 | Timeout logic fragile (functional but unclear) |
| Low | 1 | Workflow line 142 | Image reference validation missing |
| Low | 5 | Script line 56 | Silent curl failure for run details |
| Low | 6 | Script line 49 | Could use backoff for polling |
| Low | 7 | Workflow | Missing step-level timeouts |
| Low | 9 | Multiple | Commit hash duplication |
Automated review by Kimi (Moonshot AI) · kimi-k2.6 · custom prompt
The add-ethlambda branch now carries a merge of upstream ethpandaops/ethereum-package main, so the pin moves to that merge commit in the workflow and the README example.
Motivation
The spec fixtures check the state transition in isolation. Nothing checks that an
ethlambda beaconnode and theethlambda validatorclient work end to end next to another client: building and proposing blocks, attesting, finalizing and staying in sync.Description
This adds a kurtosis + assertoor battery that runs on every push to
main.tooling/kurtosis-assertoor/network_params.yamldescribes a mainnet-preset devnet run with lambdaclass/ethereum-package, pinned tobbae5eb7. That fork addscl_type: ethlambdaandvc_type: ethlambda, so ethereum-package's built-in assertoor sees ethlambda as an ordinary participant. The devnet has three participants:stability-check,block-proposal-check(every pair holds keys) andsynchronized-check. The image and the playbooks are both pinned to assertoor87bbbd6..github/workflows/kurtosis_assertoor.ymlpicks the image to test:main, it waits for this commit'ssha-<7>image fromdocker_publish.yaml, so no Rust is built in the job.unstable.workflow_dispatchtakes animageinput.kurtosis-assertoor-github-action. The fork'skurtosis.ymlstill namesethpandaops/ethereum-package, so kurtosis refusesgithub.com/lambdaclass/ethereum-package@<sha>, and the action only runs remote packages. Instead the workflow clones the fork at the pinned SHA.mainis posted to the general Slack channel.Known failure
Every test currently fails after assertoor's 5-minute client health check. Assertoor compares each client's
/eth/v1/config/specfield by field. Lighthouse reportsGLOAS_FORK_EPOCHas far future, while ethlambda leaves the key out, ascrates/net/rpc/src/beacon/config.rsdocuments. Assertoor therefore marks the lighthouse nodes offline. This resolves once gloas support merges.The chain itself was healthy in the local run: all three pairs proposed, the nodes shared a head, and the chain finalized. Until then,
synchronized-checkpasses vacuously, because assertoor has no online clients to check.How to test
Follow "Run it locally" in
tooling/kurtosis-assertoor/README.md: clone the fork atbbae5eb7and runkurtosis run <clone> --args-file tooling/kurtosis-assertoor/network_params.yaml. This PR's own CI run exercises the battery againstunstable.