Skip to content
Open
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
83b1f66
ci: run Lean Hive simulators in CI
dicethedev May 12, 2026
8647c25
ci: add Hive config for both ethlambda devnets
dicethedev May 12, 2026
7319fb8
update ci
dicethedev May 12, 2026
6aa51e9
Merge branch 'main' into ci/run-hive-lean-simulators
pablodeymo May 13, 2026
373b51c
Merge branch 'main' into ci/run-hive-lean-simulators
pablodeymo May 14, 2026
1a227e5
ci: harden hive workflow permissions and action pinning
dicethedev May 15, 2026
05af189
chore: run devnet4 only
MegaRedHand May 15, 2026
6f3ccdb
chore: tag devnet4 only
MegaRedHand May 15, 2026
a6073a0
Merge branch 'main' into ci/run-hive-lean-simulators
dicethedev May 18, 2026
8875e46
Add generated Cargo.lock to satisfy Docker builds in CI
dicethedev May 19, 2026
46eb3c7
Merge branch 'main' into ci/run-hive-lean-simulators
MegaRedHand May 20, 2026
ea8c3fb
Merge branch 'main' into ci/run-hive-lean-simulators
dicethedev May 23, 2026
9dd6c05
Merge branch 'main' into ci/run-hive-lean-simulators
pablodeymo May 27, 2026
aef4253
fix(ci): use actions/upload-artifact@v7 in workflow
dicethedev May 28, 2026
739f099
Merge branch 'main' into ci/run-hive-lean-simulators
MegaRedHand May 28, 2026
1a5ccf8
Merge branch 'main' into ci/run-hive-lean-simulators
pablodeymo Jun 12, 2026
ba694fc
Merge branch 'main' into ci/run-hive-lean-simulators
dicethedev Jul 31, 2026
13a0275
ci: fix Lean Hive simulator build
dicethedev Jul 31, 2026
a3045e9
Merge branch 'main' into ci/run-hive-lean-simulators
MegaRedHand Aug 11, 2026
7ad5a94
ci: patch Hive Lean build and run devnet5
dicethedev Aug 14, 2026
7ac28f4
ci: limit Lean Hive CI to stable suites
dicethedev Aug 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/config/hive/clients.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- client: ethlambda
nametag: devnet3
Comment thread
MegaRedHand marked this conversation as resolved.
Outdated
- client: ethlambda
nametag: devnet4
82 changes: 82 additions & 0 deletions .github/scripts/check-hive-results.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#!/usr/bin/env bash

set -euo pipefail

results_dir="${1:-src/results}"

if ! command -v jq >/dev/null 2>&1; then
echo "jq is required to parse Hive results but was not found in PATH"
exit 1
fi

if [ ! -d "${results_dir}" ]; then
echo "Hive results directory '${results_dir}' not found"
exit 1
fi

shopt -s nullglob
json_files=("${results_dir}"/*.json)
shopt -u nullglob

if [ "${#json_files[@]}" -eq 0 ]; then
echo "No Hive JSON result files found in ${results_dir}"
exit 1
fi

failures=0
failed_logs_root="${results_dir}/failed_logs"
rm -rf "${failed_logs_root}"
mkdir -p "${failed_logs_root}"

for json_file in "${json_files[@]}"; do
if [[ "${json_file}" == *"hive.json" ]]; then
continue
fi

suite_name="$(jq -r '.name // empty' "${json_file}")"
suite_label="${suite_name:-$(basename "${json_file}" .json)}"
failed_cases="$(jq '[.testCases[]? | select(.summaryResult.pass != true)] | length' "${json_file}")"

if [ "${failed_cases}" -eq 0 ]; then
continue
fi

failures=$((failures + failed_cases))
echo "Detected ${failed_cases} failing Hive test case(s) in ${suite_label}"

failure_list="$(
jq -r '
.testCases[]?
| select(.summaryResult.pass != true)
| . as $case
| ($case.summaryResult // {}) as $summary
| ($summary.message // $summary.reason // $summary.error // "") as $message
| "- " + ($case.name // "unknown test")
+ (if $message != "" then ": " + $message else "" end)
' "${json_file}"
)"

printf '%s\n' "${failure_list}"

suite_slug="$(printf '%s' "${suite_label}" | tr '[:upper:]' '[:lower:]' | sed -E 's/[^a-z0-9._-]+/-/g; s/^-//; s/-$//')"
suite_dir="${failed_logs_root}/${suite_slug:-suite}"
mkdir -p "${suite_dir}"

cp "${json_file}" "${suite_dir}/"
printf '%s\n\n%s\n' "Detected ${failed_cases} failing Hive test case(s) in ${suite_label}" "${failure_list}" > "${suite_dir}/failed-tests.txt"

if [ -n "${GITHUB_STEP_SUMMARY:-}" ]; then
{
echo "### Hive failures: ${suite_label}"
printf '%s\n' "${failure_list}"
echo
} >> "${GITHUB_STEP_SUMMARY}"
fi
done

if [ "${failures}" -gt 0 ]; then
echo "Hive reported ${failures} failing test case(s) in total"
exit 1
fi

echo "Hive reported no failing test cases."
129 changes: 129 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,132 @@ jobs:

- name: Run tests
run: make test

docker_build:
name: Build Docker
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build ethlambda Docker image
uses: docker/build-push-action@v6
with:
context: .
file: ./Dockerfile
build-args: |
GIT_COMMIT=${{ github.sha }}
GIT_BRANCH=${{ github.ref_name }}
push: false
tags: |
ghcr.io/lambdaclass/ethlambda:devnet3
ghcr.io/lambdaclass/ethlambda:devnet4
Comment thread
MegaRedHand marked this conversation as resolved.
outputs: type=docker,dest=/tmp/ethlambda_image.tar
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Upload image artifacts
uses: actions/upload-artifact@v6
Comment thread
dicethedev marked this conversation as resolved.
Outdated
with:
name: ethlambda_image
path: /tmp/ethlambda_image.tar

run-hive:
name: Hive - ${{ matrix.name }}
runs-on: ubuntu-latest
permissions:
contents: read
needs: docker_build
strategy:
fail-fast: false
matrix:
include:
- name: "Lean RPC Compat"
limit: "rpc-compat"
artifact_prefix: lean_rpc_compat
- name: "Lean Sync"
limit: "sync"
artifact_prefix: lean_sync
- name: "Lean Client Interop"
limit: "client-interop"
artifact_prefix: lean_client_interop
- name: "Lean Validation"
limit: "validation"
artifact_prefix: lean_validation
- name: "Lean Gossip"
limit: "gossip"
artifact_prefix: lean_gossip
- name: "Lean ReqResp"
limit: "reqresp"
artifact_prefix: lean_reqresp
- name: "Lean Fork Choice Spec Tests"
limit: "lean-spec-tests-fork-choice"
artifact_prefix: lean_spec_fork_choice
- name: "Lean State Transition Spec Tests"
limit: "lean-spec-tests-state-transition"
artifact_prefix: lean_spec_state_transition
- name: "Lean Verify Signatures Spec Tests"
limit: "lean-spec-tests-verify-signatures"
artifact_prefix: lean_spec_verify_signatures
steps:
- uses: actions/checkout@v6

- name: Download ethlambda image artifact
uses: actions/download-artifact@v6
with:
name: ethlambda_image
path: /tmp

- name: Load image
run: docker load --input /tmp/ethlambda_image.tar

- name: Load hive client config
id: client-config
shell: bash
run: |
{
echo "config<<EOF"
cat .github/config/hive/clients.yaml
echo "EOF"
} >> "$GITHUB_OUTPUT"

- name: Determine hive flags
id: hive-flags
shell: bash
env:
SIM_LIMIT: ${{ matrix.limit }}
run: |
FLAGS="--sim.parallelism 4 --sim.loglevel 3"
if [[ -n "$SIM_LIMIT" ]]; then
escaped_limit=${SIM_LIMIT//\'/\'\\\'\'}
FLAGS+=" --sim.limit '$escaped_limit'"
fi
echo "flags=$FLAGS" >> "$GITHUB_OUTPUT"

- name: Run Hive Simulation
uses: ethpandaops/hive-github-action@1aa8d73dad34de13afbb3113ab16c1a462d2fbc3 # v0.5.0
with:
hive_repository: ethereum/hive
hive_version: 6f704d0cd8fb4dfd3f635abcc5a3ea6cd395e61b
simulator: lean
client: ethlambda
client_config: ${{ steps.client-config.outputs.config }}
extra_flags: ${{ steps.hive-flags.outputs.flags }}

- name: Check Hive Results For Failures
id: verify-hive-results
if: ${{ success() }}
shell: bash
run: bash ./.github/scripts/check-hive-results.sh src/results

- name: Upload Hive Failure Logs
if: ${{ failure() && steps.verify-hive-results.conclusion == 'failure' }}
uses: actions/upload-artifact@v6
Comment thread
dicethedev marked this conversation as resolved.
Outdated
with:
name: hive_failed_logs_${{ matrix.artifact_prefix }}
path: src/results/failed_logs
if-no-files-found: warn
Comment thread
dicethedev marked this conversation as resolved.
Loading