Skip to content

Commit

Permalink
Feat/add to externalcl workflow lighthouse and gnosis support (#13774)
Browse files Browse the repository at this point in the history
This PR updates the **QA sync workflow** to improve flexibility and
expand compatibility with different consensus clients and networks.

#### Key Changes:
1. **Renamed Job**:  
- Changed `prysm-minimal-node-sync-from-scratch-test` →
`sync-with-externalcl` for broader applicability.

2. **Matrix Strategy for Multiple Clients & Chains**:  
   - Introduced `matrix` configuration to run tests for:
     - Clients: **Lighthouse, Prysm**
     - Chains: **Mainnet, Gnosis**
   - **Exclusion**: Prysm + Gnosis is **not** tested.

3. **Client-Specific Setup**:  
- Lighthouse and Prysm are now dynamically installed based on the matrix
configuration.
   - JWT secret is generated per test run.

4. **Erigon Sync Execution Update**:  
- Uses `${{ matrix.chain }}` and `${{ matrix.client }}` dynamically in
test execution and result logging.

5. **Enhanced Logging & Artifacts**:  
   - Client-specific logs are now uploaded as artifacts.
   - Improved log handling for both Lighthouse and Prysm.

6. **Additional Cleanup Steps**:  
- Removed consensus layer data (`CL_DATA_DIR`) after tests to free up
disk space.
  • Loading branch information
tosettil-polimi authored Feb 13, 2025
1 parent 156575f commit deaa32d
Showing 1 changed file with 47 additions and 15 deletions.
62 changes: 47 additions & 15 deletions .github/workflows/qa-sync-with-externalcl.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,34 @@ on:
push:
branches:
- 'release/2.*'
pull_request:
branches:
- 'release/2.*'
types:
- ready_for_review
workflow_dispatch: # Run manually

jobs:
tip-tracking-test-prysm:
runs-on: [self-hosted, Erigon2]
sync-with-externalcl:
strategy:
matrix:
include:
- chain: mainnet
client: lighthouse
runner: Erigon2
reference_data_dir: /opt/erigon-versions/reference-version/datadir
- chain: mainnet
client: prysm
runner: Erigon2
reference_data_dir: /opt/erigon-versions/reference-version/datadir
- chain: gnosis
client: prysm
runner: Gnosis
reference_data_dir: /opt/erigon-versions/reference-version-2/datadir
runs-on: [ self-hosted, "${{ matrix.runner }}" ]
timeout-minutes: 600
env:
ERIGON_REFERENCE_DATA_DIR: /opt/erigon-versions/reference-version/datadir
ERIGON_REFERENCE_DATA_DIR: ${{ matrix.reference_data_dir }}
CL_DATA_DIR: ${{ github.workspace }}/consensus
ERIGON_TESTBED_DATA_DIR: /opt/erigon-testbed/datadir
ERIGON_QA_PATH: /home/qarunner/erigon-qa
TRACKING_TIME_SECONDS: 14400 # 4 hours
TOTAL_TIME_SECONDS: 28800 # 8 hours
CHAIN: mainnet
TRACKING_TIME_SECONDS: 3600 # 1 hour
TOTAL_TIME_SECONDS: 25200 # 7 hours

steps:
- name: Check out repository
Expand All @@ -36,6 +46,19 @@ jobs:
make erigon
working-directory: ${{ github.workspace }}

- name: Install ${{ matrix.client }} and generate JWT secret
run: |
mkdir -p $CL_DATA_DIR
if [ "${{ matrix.client }}" == "lighthouse" ]; then
curl -LO https://github.com/sigp/lighthouse/releases/download/v7.0.0-beta.0/lighthouse-v7.0.0-beta.0-x86_64-unknown-linux-gnu.tar.gz
tar -xvf lighthouse-v7.0.0-beta.0-x86_64-unknown-linux-gnu.tar.gz -C $CL_DATA_DIR
rm lighthouse-v7.0.0-beta.0-x86_64-unknown-linux-gnu.tar.gz
elif [ "${{ matrix.client }}" == "prysm" ]; then
curl -L https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh -o $CL_DATA_DIR/prysm.sh
chmod +x $CL_DATA_DIR/prysm.sh
fi
openssl rand -hex 32 > $CL_DATA_DIR/jwt.hex
- name: Pause the Erigon instance dedicated to db maintenance
run: |
python3 $ERIGON_QA_PATH/test_system/db-producer/pause_production.py || true
Expand All @@ -52,7 +75,8 @@ jobs:
# 1. Launch the testbed Erigon instance
# 2. Allow time for the Erigon to achieve synchronization
# 3. Begin timing the duration that Erigon maintains synchronization
python3 $ERIGON_QA_PATH/test_system/qa-tests/tip-tracking/run_and_check_tip_tracking.py ${{ github.workspace }}/build/bin $ERIGON_REFERENCE_DATA_DIR $TRACKING_TIME_SECONDS $TOTAL_TIME_SECONDS Erigon2 $CHAIN standard_node no_statistics prysm
python3 $ERIGON_QA_PATH/test_system/qa-tests/tip-tracking/run_and_check_tip_tracking.py \
${{ github.workspace }}/build/bin $ERIGON_REFERENCE_DATA_DIR $TRACKING_TIME_SECONDS $TOTAL_TIME_SECONDS Erigon2 ${{ matrix.chain }} standard_node no_statistics ${{ matrix.client }} $CL_DATA_DIR
# Capture monitoring script exit status
test_exit_status=$?
Expand Down Expand Up @@ -88,14 +112,22 @@ jobs:
db_version="no-version"
fi
python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/upload_test_results.py --repo erigon --commit $(git rev-parse HEAD) --branch ${{ github.ref_name }} --test_name tip-tracking --chain $CHAIN --runner ${{ runner.name }} --db_version $db_version --outcome $TEST_RESULT --result_file ${{ github.workspace }}/result-$CHAIN.json
python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/upload_test_results.py --repo erigon --commit $(git rev-parse HEAD) --branch ${{ github.ref_name }} --test_name tip-tracking --chain ${{ matrix.chain }} --runner ${{ runner.name }} --db_version $db_version --outcome $TEST_RESULT --result_file ${{ github.workspace }}/result-${{ matrix.chain }}.json
- name: Upload test results
if: steps.test_step.outputs.test_executed == 'true'
uses: actions/upload-artifact@v4
with:
name: test-results
path: ${{ github.workspace }}/result-${{ env.CHAIN }}.json
name: test-results-${{ matrix.client }}-${{ matrix.chain }}
path: |
${{ github.workspace }}/result-${{ matrix.chain }}.json
${{ matrix.client == 'lighthouse' && '$CL_DATA_DIR/data/beacon/logs/beacon.log' || '' }}
${{ matrix.client == 'prysm' && '$CL_DATA_DIR/data/beacon.log' || '' }}
- name: Cleanup consensus runner directory
if: always()
run: |
rm -rf $CL_DATA_DIR
- name: Action for Success
if: steps.test_step.outputs.TEST_RESULT == 'success'
Expand Down

0 comments on commit deaa32d

Please sign in to comment.