Skip to content

Run manual test

Run manual test #319

Workflow file for this run

name: Run manual test
on:
workflow_dispatch:
inputs:
overrideTests:
description: 'Test IDs to run (eg. test1,test2)'
default: ""
type: string
overrideClientPairs:
description: 'Override client pairs to run this test with (eg. lighthouse-get,teku-besu)'
default: ""
type: string
overrideKurtosisConfig:
description: 'Override kurtosis config to run this test with (eg. kurtosis-config/default.yaml)'
default: ""
type: string
overrideKurtosisBranch:
description: 'Override kurtosis ethereum package branch to run this test with (eg. main)'
default: ""
type: string
overrideClientImages:
description: 'Override client images to use (eg. clients/latest-stable)'
default: "clients/latest-dev.yaml"
type: string
overrideAssertoorImage:
description: 'Override assertoor image to use (eg. ethpandaops/assertoor:latest)'
default: "ethpandaops/assertoor:master"
type: string
sendNotification:
description: 'Send Discord notification on test failure'
default: "false"
type: string
jobs:
get_tests:
name: "Load Tests"
runs-on: ubuntu-latest
outputs:
test_configs: ${{ steps.tests.outputs.test_configs }}
kurtosis_versions: ${{ steps.tests.outputs.kurtosis_versions }}
steps:
- name: Checkout Repository
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: "Load test configurations from tests.yaml"
id: tests
shell: bash
run: |
tests_file="tests.yaml"
override_tests="${{ inputs.overrideTests }}"
override_pairs="${{ inputs.overrideClientPairs }}"
override_kurtosis_config="${{ inputs.overrideKurtosisConfig }}"
override_kurtosis_branch="${{ inputs.overrideKurtosisBranch }}"
override_client_images="${{ inputs.overrideClientImages }}"
test_configs="$(cat $tests_file | yq -o json | jq -c '.tests')"
if [ -z "$override_tests" ]; then
test_configs="$(echo "$test_configs" | jq -c "map(select(.schedule == true))")"
else
# filter by tests
filter_str=""
while read test; do
if ! [ -z "$filter_str" ]; then
filter_str="$filter_str or"
fi
filter_str="$filter_str .id == \"$test\""
done <<< $(echo "$override_tests" | tr "," "\n")
test_configs="$(echo "$test_configs" | jq -c "map(select($filter_str))")"
fi
if ! [ -z "$override_pairs" ]; then
test_configs="$(echo "$test_configs" | jq -c "map(.clientPairs = [\"$override_pairs\"])")"
fi
if ! [ -z "$override_kurtosis_config" ]; then
test_configs="$(echo "$test_configs" | jq -c "map(.kurtosis = \"$override_kurtosis_config\")")"
fi
if ! [ -z "$override_kurtosis_branch" ]; then
test_configs="$(echo "$test_configs" | jq -c "map(.kurtosis_branch = \"$override_kurtosis_branch\")")"
fi
if ! [ -z "$override_client_images" ]; then
test_configs="$(echo "$test_configs" | jq -c "map(.clients = \"$override_client_images\")")"
fi
kurtosis_versions="$(echo "$test_configs" | jq -c "[.[] | select(.backend == \"docker\") | .kurtosis_version // \"latest\"] | unique")"
if [ $(echo "$kurtosis_versions" | jq -c ".[] | select(. == \"latest\")" | wc -l) -gt 0 ]; then
# get latest kurtosis version
echo "deb [trusted=yes] https://apt.fury.io/kurtosis-tech/ /" | sudo tee /etc/apt/sources.list.d/kurtosis.list
sudo apt-get update -o Dir::Etc::sourcelist="sources.list.d/kurtosis.list" -o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
latest_kurtosis_version=$(apt show kurtosis-cli | grep Version | awk '{print $2}')
test_configs=$(echo "$test_configs" | jq -c --arg latest_kurtosis_version "$latest_kurtosis_version" \
'map(if ((.kurtosis_version == "latest") or (.kurtosis_version == null)) and .backend == "docker" then .kurtosis_version = $latest_kurtosis_version else . end)')
kurtosis_versions=$(echo "$kurtosis_versions" | jq -c ". + [\"$latest_kurtosis_version\"] | [.[] | select(. != \"latest\")] | unique")
fi
echo "test_configs<<EOF" >> $GITHUB_OUTPUT
echo "$test_configs" >> $GITHUB_OUTPUT
echo "$(echo "$test_configs" | jq)"
echo "EOF" >> $GITHUB_OUTPUT
echo "kurtosis_versions<<EOF" >> $GITHUB_OUTPUT
echo "$kurtosis_versions" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
prepare_cache:
needs: get_tests
name: "Warmup docker cache"
runs-on: ubuntu-latest
if: ${{ needs.get_tests.outputs.kurtosis_versions != '[]' }}
strategy:
fail-fast: false
matrix:
version: ${{ fromJson(needs.get_tests.outputs.kurtosis_versions) }}
steps:
- name: Warmup kurtosis docker cache (${{ matrix.version }})
continue-on-error: true
id: cache
uses: ethpandaops/kurtosis-cache-github-action@v1 # v1
with:
kurtosis_version: ${{ matrix.version }}
warmup_cache: true
warmup_only: true
cache_prefix: "kurtosis-docker"
s3_access_key: ${{ secrets.S3CACHE_ACCESS_KEY }}
s3_secret_key: ${{ secrets.S3CACHE_ACCESS_SECRET }}
s3_bucket: ${{ vars.S3CACHE_BUCKET }}
s3_endpoint: ${{ vars.S3CACHE_ENDPOINT }}
run_tests:
needs: [get_tests, prepare_cache]
if: ${{ !cancelled() && needs.get_tests.outputs.test_configs != '[]' }}
uses: ./.github/workflows/_shared-run.yaml
name: "${{ matrix.config.name }}"
strategy:
fail-fast: false
matrix:
config: ${{ fromJson(needs.get_tests.outputs.test_configs) }}
with:
config: ${{ toJSON(matrix.config) }}
send_notification: ${{ inputs.sendNotification || 'false' }}
use_chatgpt: '{"url": "${{ vars.CHATGPT_URL }}", "model": "${{ vars.CHATGPT_MODEL }}", "extra_cfg": ${{ vars.CHATGPT_EXTRA_CFG }}}'
s3_bucket: ${{ vars.S3CACHE_BUCKET }}
s3_endpoint: ${{ vars.S3CACHE_ENDPOINT }}
assertoor_image: ${{ inputs.overrideAssertoorImage || 'ethpandaops/assertoor:master' }}
secrets:
RANCHER_URL: ${{ secrets.RANCHER_URL }}
RANCHER_TOKEN: ${{ secrets.RANCHER_TOKEN }}
DISCORD_HOOK: ${{ secrets.DISCORD_WEBHOOK }}
CHATGPT_KEY: ${{ secrets.CHATGPT_KEY }}
OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
S3_ACCESS_KEY: ${{ secrets.S3CACHE_ACCESS_KEY }}
S3_SECRET_KEY: ${{ secrets.S3CACHE_ACCESS_SECRET }}