mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-02 16:21:42 +00:00
This PR enables some sync tests by default on CI - this will help catch breakages on sync happy paths, e.g. this would have caught the bug #7926 if lighthouse is not able to sync OR serve sync requests. The enabled tests are genesis-sync with 120s / 300s offline time, and should cover both serving / consuming by root and by range requests. I'm leaving the checkpoint sync tests optional, as it has external dependencies on checkpoint server (which may cause CI instability) and may cause extra loads on them.
276 lines
8.5 KiB
YAML
276 lines
8.5 KiB
YAML
# Test that local testnet starts successfully.
|
|
name: local testnet
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- unstable
|
|
pull_request:
|
|
merge_group:
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
dockerfile-ubuntu:
|
|
runs-on: ${{ github.repository == 'sigp/lighthouse' && fromJson('["self-hosted", "linux", "CI", "large"]') || 'ubuntu-latest' }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Build Docker image
|
|
run: |
|
|
docker build --build-arg FEATURES=portable,spec-minimal -t lighthouse:local .
|
|
docker save lighthouse:local -o lighthouse-docker.tar
|
|
|
|
- name: Upload Docker image artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: lighthouse-docker
|
|
path: lighthouse-docker.tar
|
|
retention-days: 3
|
|
|
|
run-local-testnet:
|
|
runs-on: ubuntu-22.04
|
|
needs: dockerfile-ubuntu
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Install Kurtosis
|
|
run: |
|
|
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
|
|
sudo apt update
|
|
sudo apt install -y kurtosis-cli
|
|
kurtosis analytics disable
|
|
|
|
- name: Download Docker image artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: lighthouse-docker
|
|
path: .
|
|
|
|
- name: Load Docker image
|
|
run: docker load -i lighthouse-docker.tar
|
|
|
|
- name: Start local testnet with Assertoor
|
|
run: ./start_local_testnet.sh -e local-assertoor -c -a -b false && sleep 60
|
|
working-directory: scripts/local_testnet
|
|
|
|
- name: Await Assertoor test result
|
|
id: assertoor_test_result
|
|
uses: ethpandaops/assertoor-github-action@v1
|
|
with:
|
|
kurtosis_enclave_name: local-assertoor
|
|
|
|
- name: Stop local testnet and dump logs
|
|
run: ./stop_local_testnet.sh local-assertoor
|
|
working-directory: scripts/local_testnet
|
|
|
|
- name: Upload logs artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: logs-local-testnet
|
|
path: |
|
|
scripts/local_testnet/logs
|
|
retention-days: 3
|
|
|
|
- name: Return Assertoor test result
|
|
shell: bash
|
|
run: |
|
|
test_result="${{ steps.assertoor_test_result.outputs.result }}"
|
|
test_status=$(
|
|
cat <<"EOF"
|
|
${{ steps.assertoor_test_result.outputs.test_overview }}
|
|
EOF
|
|
)
|
|
failed_test_status=$(
|
|
cat <<"EOF"
|
|
${{ steps.assertoor_test_result.outputs.failed_test_details }}
|
|
EOF
|
|
)
|
|
|
|
echo "Test Result: $test_result"
|
|
echo "$test_status"
|
|
if ! [ "$test_result" == "success" ]; then
|
|
echo "Failed Test Task Status:"
|
|
echo "$failed_test_status"
|
|
exit 1
|
|
fi
|
|
|
|
doppelganger-protection-success-test:
|
|
needs: dockerfile-ubuntu
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Install Kurtosis
|
|
run: |
|
|
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
|
|
sudo apt update
|
|
sudo apt install -y kurtosis-cli
|
|
kurtosis analytics disable
|
|
|
|
- name: Download Docker image artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: lighthouse-docker
|
|
path: .
|
|
|
|
- name: Load Docker image
|
|
run: docker load -i lighthouse-docker.tar
|
|
|
|
- name: Run the doppelganger protection success test script
|
|
run: |
|
|
./doppelganger_protection.sh success
|
|
working-directory: scripts/tests
|
|
|
|
- name: Upload logs artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: logs-doppelganger-protection-success
|
|
path: |
|
|
scripts/local_testnet/logs
|
|
retention-days: 3
|
|
|
|
doppelganger-protection-failure-test:
|
|
needs: dockerfile-ubuntu
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Install Kurtosis
|
|
run: |
|
|
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
|
|
sudo apt update
|
|
sudo apt install -y kurtosis-cli
|
|
kurtosis analytics disable
|
|
|
|
- name: Download Docker image artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: lighthouse-docker
|
|
path: .
|
|
|
|
- name: Load Docker image
|
|
run: docker load -i lighthouse-docker.tar
|
|
|
|
- name: Run the doppelganger protection failure test script
|
|
run: |
|
|
./doppelganger_protection.sh failure
|
|
working-directory: scripts/tests
|
|
|
|
- name: Upload logs artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: logs-doppelganger-protection-failure
|
|
path: |
|
|
scripts/local_testnet/logs
|
|
retention-days: 3
|
|
|
|
# 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
|
|
needs: dockerfile-ubuntu
|
|
if: contains(github.event.pull_request.labels.*.name, 'syncing')
|
|
continue-on-error: true
|
|
strategy:
|
|
matrix:
|
|
network: [sepolia, devnet]
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Install Kurtosis
|
|
run: |
|
|
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
|
|
sudo apt update
|
|
sudo apt install -y kurtosis-cli
|
|
kurtosis analytics disable
|
|
|
|
- name: Download Docker image artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: lighthouse-docker
|
|
path: .
|
|
|
|
- name: Load Docker image
|
|
run: docker load -i lighthouse-docker.tar
|
|
|
|
- name: Run the checkpoint sync test script
|
|
run: |
|
|
./checkpoint-sync.sh "sync-${{ matrix.network }}" "checkpoint-sync-config-${{ matrix.network }}.yaml"
|
|
working-directory: scripts/tests
|
|
|
|
- name: Upload logs artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: logs-checkpoint-sync-${{ matrix.network }}
|
|
path: |
|
|
scripts/local_testnet/logs
|
|
retention-days: 3
|
|
|
|
# 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
|
|
needs: dockerfile-ubuntu
|
|
strategy:
|
|
matrix:
|
|
fork: [electra, fulu]
|
|
offline_secs: [120, 300]
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
|
|
- name: Install Kurtosis
|
|
run: |
|
|
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
|
|
sudo apt update
|
|
sudo apt install -y kurtosis-cli
|
|
kurtosis analytics disable
|
|
|
|
- name: Download Docker image artifact
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: lighthouse-docker
|
|
path: .
|
|
|
|
- name: Load Docker image
|
|
run: docker load -i lighthouse-docker.tar
|
|
|
|
- name: Run the genesis sync test script
|
|
run: |
|
|
./genesis-sync.sh "sync-${{ matrix.fork }}-${{ matrix.offline_secs }}s" "genesis-sync-config-${{ matrix.fork }}.yaml" "${{ matrix.fork }}" "${{ matrix.offline_secs }}"
|
|
working-directory: scripts/tests
|
|
|
|
- name: Upload logs artifact
|
|
if: always()
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: logs-genesis-sync-${{ matrix.fork }}-${{ matrix.offline_secs }}s
|
|
path: |
|
|
scripts/local_testnet/logs
|
|
retention-days: 3
|
|
|
|
# This job succeeds ONLY IF all others succeed. It is used by the merge queue to determine whether
|
|
# a PR is safe to merge. New jobs should be added here.
|
|
local-testnet-success:
|
|
name: local-testnet-success
|
|
runs-on: ubuntu-latest
|
|
needs: [
|
|
'dockerfile-ubuntu',
|
|
'run-local-testnet',
|
|
'doppelganger-protection-success-test',
|
|
'doppelganger-protection-failure-test',
|
|
'genesis-sync-test'
|
|
]
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- 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"
|