Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
6e71fd7
chore: fix typo (#8292)
kevaundray Oct 28, 2025
5840004
Add `/lighthouse/custody/info` to Lighthouse book (#8305)
chong-he Oct 28, 2025
f5809af
Bump `ssz_types` to `v0.12.2` (#8032)
macladson Oct 28, 2025
f4b1bb4
Remove `compare_fields` and import from crates.io (#8189)
macladson Oct 28, 2025
341eeea
Extracting the Error impl from the monolith `eth2` (#7878)
hopinheimer Oct 28, 2025
3bfdfa5
Merge remote-tracking branch 'origin/release-v8.0' into unstable
michaelsproul Oct 29, 2025
b69c2f5
Run CI tests only recent forks (#8271)
pawanjay176 Oct 29, 2025
f70c650
Update spec tests to v1.6.0-beta.1 (#8263)
michaelsproul Oct 29, 2025
30094f0
Remove redundant `subscribe_all_data_column_subnets` field from netwo…
jimmygchen Oct 30, 2025
af9cae4
Add `version` to the response of beacon API client side (#8326)
chong-he Oct 30, 2025
c46cb0b
Merge remote-tracking branch 'origin/release-v8.0' into unstable
michaelsproul Nov 2, 2025
2c9b670
Rework `lighthouse_version` to reduce spurious recompilation (#8336)
macladson Nov 3, 2025
bc86dc0
Reduce number of blobs used in tests to speed up CI (#8194)
jimmygchen Nov 4, 2025
0507eca
Merge remote-tracking branch 'origin/stable' into unstable-merge-v8
michaelsproul Nov 4, 2025
a7e89a8
Optimise `state_root_at_slot` for finalized slot (#8353)
michaelsproul Nov 5, 2025
efadbb3
Remove Windows CI jobs (#8362)
antondlr Nov 5, 2025
1e10329
Update proposer-only section in the documentation (#8358)
chong-he Nov 5, 2025
8f7dcf0
Fix unaggregated delay metric (#8366)
hopinheimer Nov 5, 2025
7b1cbca
Downgrade and remove unnecessary logs (#8367)
jimmygchen Nov 5, 2025
3066f0b
Prepare `sensitive_url` for `crates.io` (#8223)
macladson Nov 5, 2025
f387090
Remove ecdsa feature of libp2p (#8374)
michaelsproul Nov 5, 2025
e6e3d78
CI workflows to use warpbuild ci runner (#8343)
lmnzx Nov 5, 2025
0090b35
Remove `sensitive_url` and import from `crates.io` (#8377)
macladson Nov 6, 2025
2c1f1c1
Migrate derivative to educe (#8125)
jchavarri Nov 6, 2025
1bd4ac2
Fix flaky reconstruction test (#8321)
jimmygchen Nov 10, 2025
93b8f46
Remove `ethers-core` from `execution_layer` (#8149)
macladson Nov 10, 2025
22dea2b
Include block root in publish block logs (#8111)
dapplion Nov 11, 2025
b3df0d1
fix: clarify `bb` vs `bl` variable names in BeaconProcessorQueue (#8315)
kevaundray Nov 11, 2025
11d1f60
Migrate the `deposit_contract` crate to `alloy` (#8139)
macladson Nov 11, 2025
53e73fa
Remove duplicate state in ProtoArray (#8324)
dapplion Nov 12, 2025
fff248d
Migrate `execution_engine_integration` to `alloy` (#8140)
macladson Nov 12, 2025
d54dc68
Add `optimistic_sync` metric (#8059)
chong-he Nov 12, 2025
b5260db
Add extra data in `/eth/v1/debug/fork_choice` (#7845)
chong-he Nov 12, 2025
e282363
Gracefully handle deleting states prior to anchor_slot (#8409)
michaelsproul Nov 17, 2025
d59e340
Add nightly tests workflow to test prior forks (#8319)
jimmygchen Nov 19, 2025
261322c
Merge remote-tracking branch 'origin/stable' into unstable
michaelsproul Nov 20, 2025
2ba8a8e
Cargo Update (#8443)
AgeManning Nov 24, 2025
0d0232e
Optimise out block header calculation (#8446)
michaelsproul Nov 24, 2025
03832b0
chore: Add Dockerfile.dev for local development (#8295)
kevaundray Nov 24, 2025
bdfade8
Consolidate reqwest versions (#8452)
michaelsproul Nov 24, 2025
d6cec0b
Dockerfile with cargo artifacts caching (#8455)
dapplion Nov 25, 2025
e21a433
Allow manual checkpoint sync without blobs (#8470)
michaelsproul Nov 26, 2025
4494b0a
Update docs on Siren port and other small updates (#8399)
chong-he Nov 27, 2025
070e395
Remove quickcheck in favour of proptest (#8471)
michaelsproul Nov 27, 2025
e291955
Integration tests ergonomics (#7836)
danielrachi1 Nov 27, 2025
847fa3f
Remove `context_deserialize` and import from crates.io (#8172)
macladson Nov 27, 2025
713e477
feat: Add reproducible builds release workflows and push images to Do…
MoeMahhouk Nov 27, 2025
9394663
fix: compare bls changes in op-pool (#8465)
sashass1315 Nov 28, 2025
7cee5d6
Optimise pubkey cache initialisation during beacon node startup (#8451)
jimmygchen Nov 28, 2025
64031b6
Add tracing spans to validator client duty cycles (#8482)
jimmygchen Dec 1, 2025
90dd5bb
Refactor get_validator_blocks_v3 fallback (#8186)
chong-he Dec 1, 2025
f42b14a
Update local testnet scripts for the fulu fork (#8489)
jimmygchen Dec 1, 2025
4fbe517
Fix data columns sorting when reconstructing blobs (#8510)
0xMushow Dec 2, 2025
7ef9501
Instrument attestation signing. (#8508)
jimmygchen Dec 2, 2025
0bccc70
Always use committee index 0 when getting attestation data (#8171)
chong-he Dec 3, 2025
41ba135
Move deposit contract artifacts to /target (#8518)
michaelsproul Dec 3, 2025
51d0336
Move beacon state endpoints to a separate module. (#8529)
jimmygchen Dec 4, 2025
4e958a9
Refactor `consensus/types` (#7827)
macladson Dec 4, 2025
e27f316
Move validator http endpoints to a separate module (#8536)
jimmygchen Dec 5, 2025
2afa878
Move beacon pool http api to its own separate module (#8543)
jimmygchen Dec 5, 2025
7bfcc03
Reduce `eth2` dependency space (#8524)
macladson Dec 8, 2025
77d5843
Clarify `alloy` dependencies (#8550)
macladson Dec 9, 2025
f3fd1f2
Remove `consensus/types` re-exports (#8540)
macladson Dec 9, 2025
d9ddb72
Fix testnet script (#8557)
eserilev Dec 11, 2025
5abbdb6
Do not request attestation data when attestation duty is empty (#8559)
chong-he Dec 11, 2025
556e917
Rust 1.92 lints (#8567)
eserilev Dec 12, 2025
cd0b1ef
fix(bls): fix is_infinity when aggregating onto empty AggregateSignat…
figtracer Dec 15, 2025
49e1112
Add regression test for unaligned checkpoint sync with payload prunin…
Andrurachi Dec 15, 2025
6a3a325
Update `strum` to `0.27` (#8564)
macladson Dec 15, 2025
32f7615
Update `syn` to `2.0.110` (#8563)
macladson Dec 15, 2025
ac8d773
Fix Makefile to avoid git describe error in CI (#8513)
ackintosh Dec 15, 2025
afa6457
fix visual bug on visualize_batch_state leading to a non-wanted comma…
0xMushow Dec 15, 2025
86c2b7c
Append client version info to graffiti (#7558)
chong-he Dec 16, 2025
a39e991
Gloas(EIP-7732): Containers / Constants (#7923)
ethDreamer Dec 16, 2025
4c268bc
Delete `PartialBeaconState` (#8591)
michaelsproul Dec 16, 2025
4e35e9d
Add cargo deny on CI (#8580)
michaelsproul Dec 16, 2025
2ce6b51
Refine cargo-deny rules (#8602)
michaelsproul Dec 19, 2025
7c13450
rebase
Lil-Duckling-22 Dec 20, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
176 changes: 176 additions & 0 deletions .github/workflows/docker-reproducible.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
name: docker-reproducible

on:
push:
branches:
- unstable
- stable
tags:
- v*
workflow_dispatch: # allows manual triggering for testing purposes and skips publishing an image

env:
DOCKER_REPRODUCIBLE_IMAGE_NAME: >-
${{ github.repository_owner }}/lighthouse-reproducible
DOCKER_PASSWORD: ${{ secrets.DH_KEY }}
DOCKER_USERNAME: ${{ secrets.DH_ORG }}

jobs:
extract-version:
name: extract version
runs-on: ubuntu-22.04
steps:
- name: Extract version
run: |
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
# It's a tag (e.g., v1.2.3)
VERSION="${GITHUB_REF#refs/tags/}"
elif [[ "${{ github.ref }}" == refs/heads/stable ]]; then
# stable branch -> latest
VERSION="latest"
elif [[ "${{ github.ref }}" == refs/heads/unstable ]]; then
# unstable branch -> latest-unstable
VERSION="latest-unstable"
else
# For manual triggers from other branches and will not publish any image
VERSION="test-build"
fi
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
id: extract_version
outputs:
VERSION: ${{ steps.extract_version.outputs.VERSION }}

verify-and-build:
name: verify reproducibility and build
needs: extract-version
strategy:
matrix:
arch: [amd64, arm64]
include:
- arch: amd64
rust_target: x86_64-unknown-linux-gnu
rust_image: >-
rust:1.88-bullseye@sha256:8e3c421122bf4cd3b2a866af41a4dd52d87ad9e315fd2cb5100e87a7187a9816
platform: linux/amd64
runner: ubuntu-22.04
- arch: arm64
rust_target: aarch64-unknown-linux-gnu
rust_image: >-
rust:1.88-bullseye@sha256:8b22455a7ce2adb1355067638284ee99d21cc516fab63a96c4514beaf370aa94
platform: linux/arm64
runner: ubuntu-22.04-arm
runs-on: ${{ matrix.runner }}
steps:
- uses: actions/checkout@v4

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

- name: Verify reproducible builds (${{ matrix.arch }})
run: |
# Build first image
docker build -f Dockerfile.reproducible \
--platform ${{ matrix.platform }} \
--build-arg RUST_TARGET="${{ matrix.rust_target }}" \
--build-arg RUST_IMAGE="${{ matrix.rust_image }}" \
-t lighthouse-verify-1-${{ matrix.arch }} .

# Extract binary from first build
docker create --name extract-1-${{ matrix.arch }} lighthouse-verify-1-${{ matrix.arch }}
docker cp extract-1-${{ matrix.arch }}:/lighthouse ./lighthouse-1-${{ matrix.arch }}
docker rm extract-1-${{ matrix.arch }}

# Clean state for second build
docker buildx prune -f
docker system prune -f

# Build second image
docker build -f Dockerfile.reproducible \
--platform ${{ matrix.platform }} \
--build-arg RUST_TARGET="${{ matrix.rust_target }}" \
--build-arg RUST_IMAGE="${{ matrix.rust_image }}" \
-t lighthouse-verify-2-${{ matrix.arch }} .

# Extract binary from second build
docker create --name extract-2-${{ matrix.arch }} lighthouse-verify-2-${{ matrix.arch }}
docker cp extract-2-${{ matrix.arch }}:/lighthouse ./lighthouse-2-${{ matrix.arch }}
docker rm extract-2-${{ matrix.arch }}

# Compare binaries
echo "=== Comparing binaries ==="
echo "Build 1 SHA256: $(sha256sum lighthouse-1-${{ matrix.arch }})"
echo "Build 2 SHA256: $(sha256sum lighthouse-2-${{ matrix.arch }})"

if cmp lighthouse-1-${{ matrix.arch }} lighthouse-2-${{ matrix.arch }}; then
echo "Reproducible build verified for ${{ matrix.arch }}"
else
echo "Reproducible build FAILED for ${{ matrix.arch }}"
echo "BLOCKING RELEASE: Builds are not reproducible!"
echo "First 10 differences:"
cmp -l lighthouse-1-${{ matrix.arch }} lighthouse-2-${{ matrix.arch }} | head -10
exit 1
fi

# Clean up verification artifacts but keep one image for publishing
rm -f lighthouse-*-${{ matrix.arch }}
docker rmi lighthouse-verify-1-${{ matrix.arch }} || true

# Re-tag the second image for publishing (we verified it's identical to first)
VERSION=${{ needs.extract-version.outputs.VERSION }}
FINAL_TAG="${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}:${VERSION}-${{ matrix.arch }}"
docker tag lighthouse-verify-2-${{ matrix.arch }} "$FINAL_TAG"

- name: Log in to Docker Hub
if: ${{ github.event_name != 'workflow_dispatch' }}
uses: docker/login-action@v3
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}

- name: Push verified image (${{ matrix.arch }})
if: ${{ github.event_name != 'workflow_dispatch' }}
run: |
VERSION=${{ needs.extract-version.outputs.VERSION }}
IMAGE_TAG="${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}:${VERSION}-${{ matrix.arch }}"
docker push "$IMAGE_TAG"

- name: Clean up local images
run: |
docker rmi lighthouse-verify-2-${{ matrix.arch }} || true
VERSION=${{ needs.extract-version.outputs.VERSION }}
docker rmi "${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}:${VERSION}-${{ matrix.arch }}" || true

- name: Upload verification artifacts (on failure)
if: failure()
uses: actions/upload-artifact@v4
with:
name: verification-failure-${{ matrix.arch }}
path: |
lighthouse-*-${{ matrix.arch }}

create-manifest:
name: create multi-arch manifest
runs-on: ubuntu-22.04
needs: [extract-version, verify-and-build]
if: ${{ github.event_name != 'workflow_dispatch' }}
steps:
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKER_PASSWORD }}

- name: Create and push multi-arch manifest
run: |
IMAGE_NAME=${{ env.DOCKER_REPRODUCIBLE_IMAGE_NAME }}
VERSION=${{ needs.extract-version.outputs.VERSION }}

# Create manifest for the version tag
docker manifest create \
${IMAGE_NAME}:${VERSION} \
${IMAGE_NAME}:${VERSION}-amd64 \
${IMAGE_NAME}:${VERSION}-arm64

docker manifest push ${IMAGE_NAME}:${VERSION}
20 changes: 10 additions & 10 deletions .github/workflows/local-testnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ concurrency:

jobs:
dockerfile-ubuntu:
runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "large"]') || 'ubuntu-latest' }}
runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v5

Expand All @@ -31,7 +31,7 @@ jobs:
retention-days: 3

run-local-testnet:
runs-on: ubuntu-22.04
runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }}
needs: dockerfile-ubuntu
steps:
- uses: actions/checkout@v5
Expand Down Expand Up @@ -89,7 +89,7 @@ jobs:
${{ steps.assertoor_test_result.outputs.failed_test_details }}
EOF
)

echo "Test Result: $test_result"
echo "$test_status"
if ! [ "$test_result" == "success" ]; then
Expand All @@ -100,7 +100,7 @@ jobs:

doppelganger-protection-success-test:
needs: dockerfile-ubuntu
runs-on: ubuntu-22.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5

Expand Down Expand Up @@ -136,7 +136,7 @@ jobs:

doppelganger-protection-failure-test:
needs: dockerfile-ubuntu
runs-on: ubuntu-22.04
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5

Expand Down Expand Up @@ -173,13 +173,13 @@ jobs:
# Tests checkpoint syncing to a live network (current fork) and a running devnet (usually next scheduled fork)
checkpoint-sync-test:
name: checkpoint-sync-test-${{ matrix.network }}
runs-on: ubuntu-latest
runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }}
needs: dockerfile-ubuntu
if: contains(github.event.pull_request.labels.*.name, 'syncing')
continue-on-error: true
strategy:
matrix:
network: [sepolia, devnet]
network: [sepolia]
steps:
- uses: actions/checkout@v5

Expand Down Expand Up @@ -216,7 +216,7 @@ jobs:
# Test syncing from genesis on a local testnet. Aims to cover forward syncing both short and long distances.
genesis-sync-test:
name: genesis-sync-test-${{ matrix.fork }}-${{ matrix.offline_secs }}s
runs-on: ubuntu-latest
runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }}
needs: dockerfile-ubuntu
strategy:
matrix:
Expand Down Expand Up @@ -259,7 +259,7 @@ jobs:
# a PR is safe to merge. New jobs should be added here.
local-testnet-success:
name: local-testnet-success
runs-on: ubuntu-latest
runs-on: ${{ github.repository == 'sigp/lighthouse' && 'warp-ubuntu-latest-x64-8x' || 'ubuntu-latest' }}
needs: [
'dockerfile-ubuntu',
'run-local-testnet',
Expand All @@ -272,4 +272,4 @@ jobs:
- name: Check that success job is dependent on all others
run: |
exclude_jobs='checkpoint-sync-test'
./scripts/ci/check-success-job.sh ./.github/workflows/local-testnet.yml local-testnet-success "$exclude_jobs"
./scripts/ci/check-success-job.sh ./.github/workflows/local-testnet.yml local-testnet-success "$exclude_jobs"
135 changes: 135 additions & 0 deletions .github/workflows/nightly-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# We only run tests on `RECENT_FORKS` on CI. To make sure we don't break prior forks, we run nightly tests to cover all prior forks.
name: nightly-tests

on:
schedule:
# Run at 8:30 AM UTC every day
- cron: '30 8 * * *'
workflow_dispatch: # Allow manual triggering

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
# Deny warnings in CI
# Disable debug info (see https://github.com/sigp/lighthouse/issues/4005)
RUSTFLAGS: "-D warnings -C debuginfo=0"
# Prevent Github API rate limiting.
LIGHTHOUSE_GITHUB_TOKEN: ${{ secrets.LIGHTHOUSE_GITHUB_TOKEN }}
# Disable incremental compilation
CARGO_INCREMENTAL: 0
# Enable portable to prevent issues with caching `blst` for the wrong CPU type
TEST_FEATURES: portable

jobs:
setup-matrix:
name: setup-matrix
runs-on: ubuntu-latest
outputs:
forks: ${{ steps.set-matrix.outputs.forks }}
steps:
- name: Set matrix
id: set-matrix
run: |
# All prior forks to cover in nightly tests. This list should be updated when we remove a fork from `RECENT_FORKS`.
echo 'forks=["phase0", "altair", "bellatrix", "capella", "deneb"]' >> $GITHUB_OUTPUT

beacon-chain-tests:
name: beacon-chain-tests
needs: setup-matrix
runs-on: 'ubuntu-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
steps:
- uses: actions/checkout@v5
- name: Get latest version of stable Rust
uses: moonrepo/setup-rust@v1
with:
channel: stable
cache-target: release
bins: cargo-nextest
- name: Run beacon_chain tests for ${{ matrix.fork }}
run: make test-beacon-chain-${{ matrix.fork }}
timeout-minutes: 60

http-api-tests:
name: http-api-tests
needs: setup-matrix
runs-on: 'ubuntu-latest'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
steps:
- uses: actions/checkout@v5
- name: Get latest version of stable Rust
uses: moonrepo/setup-rust@v1
with:
channel: stable
cache-target: release
bins: cargo-nextest
- name: Run http_api tests for ${{ matrix.fork }}
run: make test-http-api-${{ matrix.fork }}
timeout-minutes: 60

op-pool-tests:
name: op-pool-tests
needs: setup-matrix
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
steps:
- uses: actions/checkout@v5
- name: Get latest version of stable Rust
uses: moonrepo/setup-rust@v1
with:
channel: stable
cache-target: release
bins: cargo-nextest
- name: Run operation_pool tests for ${{ matrix.fork }}
run: make test-op-pool-${{ matrix.fork }}
timeout-minutes: 60

network-tests:
name: network-tests
needs: setup-matrix
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
strategy:
matrix:
fork: ${{ fromJson(needs.setup-matrix.outputs.forks) }}
fail-fast: false
steps:
- uses: actions/checkout@v5
- name: Get latest version of stable Rust
uses: moonrepo/setup-rust@v1
with:
channel: stable
cache-target: release
bins: cargo-nextest
- name: Create CI logger dir
run: mkdir ${{ runner.temp }}/network_test_logs
- name: Run network tests for ${{ matrix.fork }}
run: make test-network-${{ matrix.fork }}
timeout-minutes: 60
env:
TEST_FEATURES: portable
CI_LOGGER_DIR: ${{ runner.temp }}/network_test_logs
- name: Upload logs
if: always()
uses: actions/upload-artifact@v4
with:
name: network_test_logs_${{ matrix.fork }}
path: ${{ runner.temp }}/network_test_logs
Loading