From 8053f9597d39ae082417f5ad80a9f2519a522141 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 15:30:24 -0800 Subject: [PATCH 01/29] chore: Better logging --- .../check-kurtosis-enclave-block-creation.sh | 131 ++++++++++++++++++ .github/workflows/kurtosis-op-local.yml | 79 +---------- .github/workflows/kurtosis-op-remote.yml | 73 +--------- 3 files changed, 137 insertions(+), 146 deletions(-) create mode 100755 .github/scripts/check-kurtosis-enclave-block-creation.sh diff --git a/.github/scripts/check-kurtosis-enclave-block-creation.sh b/.github/scripts/check-kurtosis-enclave-block-creation.sh new file mode 100755 index 000000000000..d866f305866f --- /dev/null +++ b/.github/scripts/check-kurtosis-enclave-block-creation.sh @@ -0,0 +1,131 @@ +#!/usr/bin/env bash + +# +# +# This is a test script used mostly in the CI pipeline +# +# It will search for all EL clients in a specified kurtosis enclave +# and will check whether their blocks advance in a reasonable amount of time +# +# Usage: +# +# ./check-kurtosis-enclave-block-creation.sh [TARGET_BLOCK_NUMBER] +# +# + +# Just so that we don't repeat ourselves +ENCLAVES_API_URL=http://127.0.0.1:9779/api/enclaves + +# We pass the enclave name and the target block as script arguments +ENCLAVE_NAME=$1 +if [ -z "$ENCLAVE_NAME" ]; then + echo "Please specify the enclave name as the first parameter" + exit 1 +fi + +# We default the target block to a good round 100 +TARGET_BLOCK=$2 +if [ -z "$TARGET_BLOCK" ]; then + TARGET_BLOCK=100 +fi + +# The number of sleeps the script will take +NUM_NAPS=$3 +if [ -z "$NUM_NAPS" ]; then + NUM_NAPS=100 +fi + +echo "Checking whether EL clients in enclave $ENCLAVE_NAME reach target block $TARGET_BLOCK in reasonable time ($NUM_NAPS of 5s)" + +# Get the enclave UUID from the API +# +# The | values at the end of the j1 transformation will convert null to an empty string +ENCLAVE_ID=$(curl -s $ENCLAVES_API_URL | jq -r 'to_entries | map(select(.value.name == "'$ENCLAVE_NAME'")) | .[0].key | values') + +# Make sure we got something +if [ -z "$ENCLAVE_ID" ]; then + No enclave found for enclave $ENCLAVE_NAME + exit 1 +fi + +echo "Got enclave UUID: $ENCLAVE_ID" + +# Now get all the EL client services +# +# We assume the convention is to name them op-el-xxx +ENCLAVE_SERVICES=$(curl -s $ENCLAVES_API_URL/$ENCLAVE_ID/services) +ENCLAVE_EL_SERVICES=$(echo $ENCLAVE_SERVICES | jq -r 'to_entries | map(select(.key | startswith("op-el-"))) | map(.value)') + +# Now get the EL client UUIDS and arrange them into a single-line space-delimited string +# +# This is useful for bash iteration below +ENCLAVE_EL_SERVICE_NAMES=$(echo $ENCLAVE_EL_SERVICES | jq -r 'map(.name) | join(" ")') +ENCLAVE_EL_SERVICE_RPC_PORTS=$(echo $ENCLAVE_EL_SERVICES | jq -r 'map(.public_ports.rpc.number) | join(" ")') + +# Make sure we got something +if [ -z "$ENCLAVE_EL_SERVICE_NAMES" ]; then + No EL clients found for enclave $ENCLAVE_NAME + exit 1 +fi + +echo "Got enclave EL services: $ENCLAVE_EL_SERVICE_NAMES" +echo "Got enclave EL RPC ports: $ENCLAVE_EL_SERVICE_RPC_PORTS" + +# Convert the lists into bash arrays +ENCLAVE_EL_SERVICE_NAMES_ARRAY=($ENCLAVE_EL_SERVICE_NAMES) +ENCLAVE_EL_SERVICE_RPC_PORTS_ARRAY=($ENCLAVE_EL_SERVICE_RPC_PORTS) + +# Now check that the clients advance +for STEP in $(seq 1 $NUM_NAPS); do + echo "Check $STEP/$NUM_NAPS" + + # Iterate over the names/RPC ports arrays + for I in "${!ENCLAVE_EL_SERVICE_NAMES_ARRAY[@]}"; do + SERVICE_NAME=${ENCLAVE_EL_SERVICE_NAMES_ARRAY[$I]} + SERVICE_RPC_PORT=${ENCLAVE_EL_SERVICE_RPC_PORTS_ARRAY[$I]} + SERVICE_RPC_URL="http://127.0.0.1:$SERVICE_RPC_PORT" + + BLOCK_NUMBER=$(cast bn --rpc-url $SERVICE_RPC_URL) + echo " Got block for $SERVICE_NAME: $BLOCK_NUMBER" + + # Check whether we reached the target block + if [ "$BLOCK_NUMBER" -gt "$TARGET_BLOCK" ]; then + echo " Target block $TARGET_BLOCK reached for $SERVICE_NAME" + + # If so, we remove the service from the array + unset ENCLAVE_EL_SERVICE_NAMES_ARRAY[$I] + unset ENCLAVE_EL_SERVICE_RPC_PORTS_ARRAY[$I] + fi + done + + # Since we used unset, we need to reindex the arrays, we need to remove any gaps left behind + ENCLAVE_EL_SERVICE_NAMES_ARRAY=("${ENCLAVE_EL_SERVICE_NAMES_ARRAY[@]}") + ENCLAVE_EL_SERVICE_RPC_PORTS_ARRAY=("${ENCLAVE_EL_SERVICE_RPC_PORTS_ARRAY[@]}") + + # Now we check whether the arrays are empty + # + # This means all target blocks have been reached and we can exit fine + if [ ${#ENCLAVE_EL_SERVICE_NAMES_ARRAY[@]} -eq 0 ]; then + echo "All target blocks have been reached. Exiting." + exit 0 + fi + + sleep 5 +done + +echo "Target blocks have not been reached for the following services" + +for I in "${!ENCLAVE_EL_SERVICE_NAMES_ARRAY[@]}"; do + SERVICE_NAME=${ENCLAVE_EL_SERVICE_NAMES_ARRAY[$I]} + + echo " $SERVICE_NAME" + + # On the CI we'll dump the logs in collapsible groups + if [ -n "$CI" ]; then + echo "::group::$SERVICE_NAME" + kurtosis service logs -a $ENCLAVE_NAME $SERVICE_NAME + echo "::endgroup::" + fi +done + +exit 1 diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 741b26da3a9a..a2f90c9213f4 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -66,7 +66,7 @@ jobs: cargo_features: optimism,asm-keccak cargo_package: crates/optimism/bin/Cargo.toml - test-op-geth: + test: timeout-minutes: 60 strategy: fail-fast: false @@ -102,85 +102,14 @@ jobs: docker image ls -a - name: Run kurtosis - run: | - kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_local.yaml - ENCLAVE_ID=$(curl http://127.0.0.1:9779/api/enclaves | jq --raw-output 'keys[0]') - GETH_PORT=$(curl "http://127.0.0.1:9779/api/enclaves/$ENCLAVE_ID/services" | jq '."op-el-1-op-geth-op-node-op-kurtosis".public_ports.rpc.number') - RETH_PORT=$(curl "http://127.0.0.1:9779/api/enclaves/$ENCLAVE_ID/services" | jq '."op-el-2-op-reth-op-node-op-kurtosis".public_ports.rpc.number') - echo "GETH_RPC=http://127.0.0.1:$GETH_PORT" >> $GITHUB_ENV - echo "RETH_RPC=http://127.0.0.1:$RETH_PORT" >> $GITHUB_ENV + run: kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_local.yaml - name: Assert that clients advance - run: | - for i in {1..100}; do - sleep 5 - BLOCK_GETH=$(cast bn --rpc-url $GETH_RPC) - BLOCK_RETH=$(cast bn --rpc-url $RETH_RPC) - - if [ $BLOCK_GETH -ge 100 ] && [ $BLOCK_RETH -ge 100 ] ; then exit 0; fi - echo "Waiting for clients to advance..., Reth: $BLOCK_RETH Geth: $BLOCK_GETH" - done - kurtosis service logs -a op-devnet op-el-2-op-reth-op-node-op-kurtosis - kurtosis service logs -a op-devnet op-cl-2-op-node-op-reth-op-kurtosis - exit 1 - - test-no-op-geth: - timeout-minutes: 60 - strategy: - fail-fast: false - name: Kurtosis without op-geth - runs-on: ubuntu-latest - needs: - - prepare-op-reth - - prepare-op-node - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup environment - uses: ./.github/actions/setup-environment - - - name: Download docker image artifacts - uses: actions/download-artifact@v4 - with: - pattern: artifacts--* - merge-multiple: true - path: /tmp - - - name: Load Docker images - run: | - # Load all images from artifacts - docker load -i /tmp/op_reth_image.tar - docker load -i /tmp/op_node_image.tar - - # List available images - docker image ls -a - - - name: Run kurtosis - run: | - kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_local_no_op_geth.yaml - ENCLAVE_ID=$(curl http://127.0.0.1:9779/api/enclaves | jq --raw-output 'keys[0]') - RETH_PORT=$(curl "http://127.0.0.1:9779/api/enclaves/$ENCLAVE_ID/services" | jq '."op-el-1-op-reth-op-node-op-kurtosis".public_ports.rpc.number') - echo "RETH_RPC=http://127.0.0.1:$RETH_PORT" >> $GITHUB_ENV - - - name: Assert that clients advance - run: | - for i in {1..100}; do - sleep 5 - BLOCK_RETH=$(cast bn --rpc-url $RETH_RPC) - - if [ $BLOCK_RETH -ge 100 ] ; then exit 0; fi - echo "Waiting for clients to advance..., Reth: $BLOCK_RETH" - done - kurtosis service logs -a op-devnet op-el-1-op-reth-op-node-op-kurtosis - kurtosis service logs -a op-devnet op-cl-1-op-node-op-reth-op-kurtosis - exit 1 + run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 notify-on-error: needs: - - test-op-geth - - test-no-op-geth + - test if: failure() runs-on: ubuntu-latest steps: diff --git a/.github/workflows/kurtosis-op-remote.yml b/.github/workflows/kurtosis-op-remote.yml index 8c04284970b1..b923fc255ccf 100644 --- a/.github/workflows/kurtosis-op-remote.yml +++ b/.github/workflows/kurtosis-op-remote.yml @@ -54,83 +54,14 @@ jobs: docker image ls -a - name: Run kurtosis - run: | - kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_remote.yaml - ENCLAVE_ID=$(curl http://127.0.0.1:9779/api/enclaves | jq --raw-output 'keys[0]') - GETH_PORT=$(curl "http://127.0.0.1:9779/api/enclaves/$ENCLAVE_ID/services" | jq '."op-el-1-op-geth-op-node-op-kurtosis".public_ports.rpc.number') - RETH_PORT=$(curl "http://127.0.0.1:9779/api/enclaves/$ENCLAVE_ID/services" | jq '."op-el-2-op-reth-op-node-op-kurtosis".public_ports.rpc.number') - echo "GETH_RPC=http://127.0.0.1:$GETH_PORT" >> $GITHUB_ENV - echo "RETH_RPC=http://127.0.0.1:$RETH_PORT" >> $GITHUB_ENV + run: kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_remote.yaml - name: Assert that clients advance - run: | - for i in {1..100}; do - sleep 5 - BLOCK_GETH=$(cast bn --rpc-url $GETH_RPC) - BLOCK_RETH=$(cast bn --rpc-url $RETH_RPC) - - if [ $BLOCK_GETH -ge 100 ] && [ $BLOCK_RETH -ge 100 ] ; then exit 0; fi - echo "Waiting for clients to advance..., Reth: $BLOCK_RETH Geth: $BLOCK_GETH" - done - kurtosis service logs -a op-devnet op-el-2-op-reth-op-node-op-kurtosis - kurtosis service logs -a op-devnet op-cl-2-op-node-op-reth-op-kurtosis - exit 1 - - test-no-op-geth: - timeout-minutes: 60 - strategy: - fail-fast: false - name: Kurtosis without op-geth - runs-on: ubuntu-latest - needs: - - prepare-op-reth - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup environment - uses: ./.github/actions/setup-environment - - - name: Download docker image artifacts - uses: actions/download-artifact@v4 - with: - pattern: artifacts--* - merge-multiple: true - path: /tmp - - - name: Load Docker images - run: | - # Load all images from artifacts - docker load -i /tmp/op_reth_image.tar - - # List available images - docker image ls -a - - - name: Run kurtosis - run: | - kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml - ENCLAVE_ID=$(curl http://127.0.0.1:9779/api/enclaves | jq --raw-output 'keys[0]') - RETH_PORT=$(curl "http://127.0.0.1:9779/api/enclaves/$ENCLAVE_ID/services" | jq '."op-el-1-op-reth-op-node-op-kurtosis".public_ports.rpc.number') - echo "RETH_RPC=http://127.0.0.1:$RETH_PORT" >> $GITHUB_ENV - - - name: Assert that clients advance - run: | - for i in {1..100}; do - sleep 5 - BLOCK_RETH=$(cast bn --rpc-url $RETH_RPC) - - if [ $BLOCK_RETH -ge 100 ] ; then exit 0; fi - echo "Waiting for clients to advance..., Reth: $BLOCK_RETH" - done - kurtosis service logs -a op-devnet op-el-1-op-reth-op-node-op-kurtosis - kurtosis service logs -a op-devnet op-cl-1-op-node-op-reth-op-kurtosis - exit 1 + run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 notify-on-error: needs: - test-op-geth - - test-no-op-geth if: failure() runs-on: ubuntu-latest steps: From 5d263034897b5eccff9b1405955abf4f77b5a00a Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 15:33:45 -0800 Subject: [PATCH 02/29] debug: Make it fail --- .github/workflows/kurtosis-op-remote.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-remote.yml b/.github/workflows/kurtosis-op-remote.yml index b923fc255ccf..7e5c23d205c9 100644 --- a/.github/workflows/kurtosis-op-remote.yml +++ b/.github/workflows/kurtosis-op-remote.yml @@ -57,7 +57,7 @@ jobs: run: kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_remote.yaml - name: Assert that clients advance - run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 + run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 3 notify-on-error: needs: From cad8dc5973f6aa174c40339282c42e5cf1703b0a Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 15:54:46 -0800 Subject: [PATCH 03/29] fix: Typos --- .../check-kurtosis-enclave-block-creation.sh | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/.github/scripts/check-kurtosis-enclave-block-creation.sh b/.github/scripts/check-kurtosis-enclave-block-creation.sh index d866f305866f..976efa6b8c80 100755 --- a/.github/scripts/check-kurtosis-enclave-block-creation.sh +++ b/.github/scripts/check-kurtosis-enclave-block-creation.sh @@ -9,7 +9,7 @@ # # Usage: # -# ./check-kurtosis-enclave-block-creation.sh [TARGET_BLOCK_NUMBER] +# ./check-kurtosis-enclave-block-creation.sh [TARGET_BLOCK_NUMBER] [NUMBER_OF_NAPS] # # @@ -56,7 +56,7 @@ echo "Got enclave UUID: $ENCLAVE_ID" ENCLAVE_SERVICES=$(curl -s $ENCLAVES_API_URL/$ENCLAVE_ID/services) ENCLAVE_EL_SERVICES=$(echo $ENCLAVE_SERVICES | jq -r 'to_entries | map(select(.key | startswith("op-el-"))) | map(.value)') -# Now get the EL client UUIDS and arrange them into a single-line space-delimited string +# Now get the EL client names and RPC ports and arrange them into single-line space-delimited strings # # This is useful for bash iteration below ENCLAVE_EL_SERVICE_NAMES=$(echo $ENCLAVE_EL_SERVICES | jq -r 'map(.name) | join(" ")') @@ -64,7 +64,7 @@ ENCLAVE_EL_SERVICE_RPC_PORTS=$(echo $ENCLAVE_EL_SERVICES | jq -r 'map(.public_po # Make sure we got something if [ -z "$ENCLAVE_EL_SERVICE_NAMES" ]; then - No EL clients found for enclave $ENCLAVE_NAME + echo "No EL clients found for enclave $ENCLAVE_NAME" exit 1 fi @@ -113,19 +113,12 @@ for STEP in $(seq 1 $NUM_NAPS); do sleep 5 done -echo "Target blocks have not been reached for the following services" +echo "Target blocks have not been reached for the following services:" for I in "${!ENCLAVE_EL_SERVICE_NAMES_ARRAY[@]}"; do SERVICE_NAME=${ENCLAVE_EL_SERVICE_NAMES_ARRAY[$I]} echo " $SERVICE_NAME" - - # On the CI we'll dump the logs in collapsible groups - if [ -n "$CI" ]; then - echo "::group::$SERVICE_NAME" - kurtosis service logs -a $ENCLAVE_NAME $SERVICE_NAME - echo "::endgroup::" - fi done exit 1 From 0fba2c645fe0d073914f57dfd67920c798d4deca Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 15:54:56 -0800 Subject: [PATCH 04/29] chore: Dump logs on failure --- .github/scripts/dump-kurtosis-logs.sh | 69 ++++++++++++++++++++++++ .github/workflows/kurtosis-op-local.yml | 4 ++ .github/workflows/kurtosis-op-remote.yml | 8 ++- 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100755 .github/scripts/dump-kurtosis-logs.sh diff --git a/.github/scripts/dump-kurtosis-logs.sh b/.github/scripts/dump-kurtosis-logs.sh new file mode 100755 index 000000000000..106e3f5598cb --- /dev/null +++ b/.github/scripts/dump-kurtosis-logs.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +# +# +# This is a log script used mostly in the CI pipeline +# +# It will search for all OP clients in a specified kurtosis enclave +# and will dump their logs in a CI-friendly manner +# +# Usage: +# +# ./dump-kurtosis-logs.sh +# +# + +# Just so that we don't repeat ourselves +ENCLAVES_API_URL=http://127.0.0.1:9779/api/enclaves + +# We pass the enclave name and the target block as script arguments +ENCLAVE_NAME=$1 +if [ -z "$ENCLAVE_NAME" ]; then + echo "Please specify the enclave name as the first parameter" + exit 1 +fi + +echo "Dumping logs of the OP services for enclave $ENCLAVE_NAME" + +# Get the enclave UUID from the API +# +# The | values at the end of the j1 transformation will convert null to an empty string +ENCLAVE_ID=$(curl -s $ENCLAVES_API_URL | jq -r 'to_entries | map(select(.value.name == "'$ENCLAVE_NAME'")) | .[0].key | values') + +# Make sure we got something +if [ -z "$ENCLAVE_ID" ]; then + No enclave found for enclave $ENCLAVE_NAME + exit 1 +fi + +echo "Got enclave UUID: $ENCLAVE_ID" + +# Now get all the OP client services +# +# We assume the convention is to name them op-xxx +ENCLAVE_SERVICES=$(curl -s $ENCLAVES_API_URL/$ENCLAVE_ID/services) +ENCLAVE_OP_SERVICES=$(echo $ENCLAVE_SERVICES | jq -r 'to_entries | map(select(.key | startswith("op-"))) | map(.value)') + +# Now get the OP client names and arrange them into a single-line space-delimited string +# +# This is useful for bash iteration below +ENCLAVE_OP_SERVICE_NAMES=$(echo $ENCLAVE_OP_SERVICES | jq -r 'map(.name) | join(" ")') + +# Make sure we got something +if [ -z "$ENCLAVE_OP_SERVICE_NAMES" ]; then + echo "No OP clients found for enclave $ENCLAVE_NAME" + exit 1 +fi + +echo "Got enclave OP services: $ENCLAVE_OP_SERVICE_NAMES" + +# Convert the list into a bash array +ENCLAVE_OP_SERVICE_NAMES_ARRAY=($ENCLAVE_OP_SERVICE_NAMES) + +# Iterate over the names/RPC ports arrays +for SERVICE_NAME in "${ENCLAVE_OP_SERVICE_NAMES_ARRAY[@]}"; do + # We use the github actions grouping to get a nicer output + echo "::group::$SERVICE_NAME" + kurtosis service logs -a $ENCLAVE_NAME $SERVICE_NAME + echo "::endgroup::" +done \ No newline at end of file diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index a2f90c9213f4..b2c2a957284d 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -107,6 +107,10 @@ jobs: - name: Assert that clients advance run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 + - name: Dump kurtosis logs on failure + if: ${{ failure() }} + run: ./.github/scripts/dump-kurtosis-logs.sh op-devnet + notify-on-error: needs: - test diff --git a/.github/workflows/kurtosis-op-remote.yml b/.github/workflows/kurtosis-op-remote.yml index 7e5c23d205c9..eb62c4ae5490 100644 --- a/.github/workflows/kurtosis-op-remote.yml +++ b/.github/workflows/kurtosis-op-remote.yml @@ -22,7 +22,7 @@ jobs: cargo_features: optimism,asm-keccak cargo_package: crates/optimism/bin/Cargo.toml - test-op-geth: + test: timeout-minutes: 60 strategy: fail-fast: false @@ -58,10 +58,14 @@ jobs: - name: Assert that clients advance run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 3 + + - name: Dump kurtosis logs on failure + if: ${{ failure() }} + run: ./.github/scripts/dump-kurtosis-logs.sh op-devnet notify-on-error: needs: - - test-op-geth + - test if: failure() runs-on: ubuntu-latest steps: From 106e4b378d205d195afa75859f89624c071f89b3 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 16:08:14 -0800 Subject: [PATCH 05/29] chore: Drop the remote job --- .../kurtosis_op_network_params_remote.yaml | 23 ------ ...s_op_network_params_remote_no_op_geth.yaml | 16 ---- ...s_op_network_params_remote_no_op_reth.yaml | 19 ----- ...twork_params_remote_op_reth_sequencer.yaml | 26 ------- .github/workflows/kurtosis-op-local.yml | 21 ++++- .github/workflows/kurtosis-op-remote.yml | 77 ------------------- 6 files changed, 17 insertions(+), 165 deletions(-) delete mode 100644 .github/assets/kurtosis_op_network_params_remote.yaml delete mode 100644 .github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml delete mode 100644 .github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml delete mode 100644 .github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml delete mode 100644 .github/workflows/kurtosis-op-remote.yml diff --git a/.github/assets/kurtosis_op_network_params_remote.yaml b/.github/assets/kurtosis_op_network_params_remote.yaml deleted file mode 100644 index 6f44db405c21..000000000000 --- a/.github/assets/kurtosis_op_network_params_remote.yaml +++ /dev/null @@ -1,23 +0,0 @@ -ethereum_package: - participants: - - el_type: reth - cl_type: lighthouse -optimism_package: - chains: - - participants: - # first participant is sequencer - - el_type: op-geth - el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest - cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop - cl_extra_params: - - "--l1.trustrpc=true" - - el_type: op-reth - el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" - cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop - cl_extra_params: - - "--l1.trustrpc=true" - batcher_params: - extra_params: - - "--throttle-interval=0" diff --git a/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml b/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml deleted file mode 100644 index 9684f2929e9d..000000000000 --- a/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml +++ /dev/null @@ -1,16 +0,0 @@ -ethereum_package: - participants: - - el_type: reth - cl_type: lighthouse -optimism_package: - chains: - - participants: - - el_type: op-reth - el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" - cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop - cl_extra_params: - - "--l1.trustrpc=true" - batcher_params: - extra_params: - - "--throttle-interval=0" diff --git a/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml b/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml deleted file mode 100644 index 683e2a4e0d6f..000000000000 --- a/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml +++ /dev/null @@ -1,19 +0,0 @@ -ethereum_package: - participants: - - el_type: reth - cl_type: lighthouse -optimism_package: - chains: - - participants: - - el_type: op-geth - el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest - cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop - cl_extra_params: - - "--l1.trustrpc=true" - batcher_params: - extra_params: - - "--throttle-interval=0" - network_params: - holocene_time_offset: 0 - isthmus_time_offset: 0 \ No newline at end of file diff --git a/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml b/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml deleted file mode 100644 index 1253d529e3d2..000000000000 --- a/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml +++ /dev/null @@ -1,26 +0,0 @@ -ethereum_package: - participants: - - el_type: reth - cl_type: lighthouse -optimism_package: - chains: - - participants: - # first participant is sequencer - - el_type: op-reth - el_image: "op-reth:latest" - cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop - cl_extra_params: - - "--l1.trustrpc=true" - - el_type: op-geth - el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest - cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop - cl_extra_params: - - "--l1.trustrpc=true" - batcher_params: - extra_params: - - "--throttle-interval=0" - network_params: - holocene_time_offset: 0 - isthmus_time_offset: 0 \ No newline at end of file diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index b2c2a957284d..fd9629a0304e 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -5,6 +5,16 @@ name: Run kurtosis (local images) on: workflow_dispatch: inputs: + args: + type: choice + required: true + description: "Kurtosis args file to use" + options: + - kurtosis_op_network_params_local_no_op_geth + - kurtosis_op_network_params_local_no_op_reth + - kurtosis_op_network_params_local_op_reth_sequencer + - kurtosis_op_network_params_local + default: kurtosis_op_network_params_local op-node-repo: type: string required: true @@ -70,8 +80,11 @@ jobs: timeout-minutes: 60 strategy: fail-fast: false - name: Kurtosis with op-geth + name: Kurtosis (${{ inputs.args }}) runs-on: ubuntu-latest + # We store the enclave name for easy access here + env: + ENCLAVE_NAME: op-devnet needs: - prepare-op-reth - prepare-op-geth @@ -102,14 +115,14 @@ jobs: docker image ls -a - name: Run kurtosis - run: kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_local.yaml + run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file .github/assets/${{ inputs.args }}.yaml - name: Assert that clients advance - run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 + run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh $ENCLAVE_NAME - name: Dump kurtosis logs on failure if: ${{ failure() }} - run: ./.github/scripts/dump-kurtosis-logs.sh op-devnet + run: ./.github/scripts/dump-kurtosis-logs.sh $ENCLAVE_NAME notify-on-error: needs: diff --git a/.github/workflows/kurtosis-op-remote.yml b/.github/workflows/kurtosis-op-remote.yml deleted file mode 100644 index eb62c4ae5490..000000000000 --- a/.github/workflows/kurtosis-op-remote.yml +++ /dev/null @@ -1,77 +0,0 @@ -# Runs simple OP stack setup in Kurtosis - -name: Run kurtosis (remote images) - -on: - workflow_dispatch: - -env: - CARGO_TERM_COLOR: always - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} - cancel-in-progress: true - -jobs: - prepare-op-reth: - name: Prepare op-reth docker image - uses: ./.github/workflows/prepare-op-reth.yml - with: - image_tag: ghcr.io/paradigmxyz/op-reth:kurtosis-ci - binary_name: op-reth - cargo_features: optimism,asm-keccak - cargo_package: crates/optimism/bin/Cargo.toml - - test: - timeout-minutes: 60 - strategy: - fail-fast: false - name: Kurtosis with op-geth - runs-on: ubuntu-latest - needs: - - prepare-op-reth - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup environment - uses: ./.github/actions/setup-environment - - - name: Download docker image artifacts - uses: actions/download-artifact@v4 - with: - pattern: artifacts--* - merge-multiple: true - path: /tmp - - - name: Load Docker images - run: | - # Load all images from artifacts - docker load -i /tmp/op_reth_image.tar - - # List available images - docker image ls -a - - - name: Run kurtosis - run: kurtosis run --enclave op-devnet github.com/ethpandaops/optimism-package --args-file .github/assets/kurtosis_op_network_params_remote.yaml - - - name: Assert that clients advance - run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh op-devnet 100 3 - - - name: Dump kurtosis logs on failure - if: ${{ failure() }} - run: ./.github/scripts/dump-kurtosis-logs.sh op-devnet - - notify-on-error: - needs: - - test - if: failure() - runs-on: ubuntu-latest - steps: - - name: Slack Webhook Action - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_COLOR: ${{ job.status }} - SLACK_MESSAGE: "Failed run: https://github.com/paradigmxyz/reth/actions/runs/${{ github.run_id }}" - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} From afed8188de1c659ca84e3c2c75cfbfb8af87c9fc Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 16:09:57 -0800 Subject: [PATCH 06/29] chore: Rename to prefix convention --- ...k-creation.sh => kurtosis-check-enclave-block-creation.sh} | 2 +- .../scripts/{dump-kurtosis-logs.sh => kurtosis-dump-logs.sh} | 2 +- .github/workflows/kurtosis-op-local.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) rename .github/scripts/{check-kurtosis-enclave-block-creation.sh => kurtosis-check-enclave-block-creation.sh} (98%) rename .github/scripts/{dump-kurtosis-logs.sh => kurtosis-dump-logs.sh} (98%) diff --git a/.github/scripts/check-kurtosis-enclave-block-creation.sh b/.github/scripts/kurtosis-check-enclave-block-creation.sh similarity index 98% rename from .github/scripts/check-kurtosis-enclave-block-creation.sh rename to .github/scripts/kurtosis-check-enclave-block-creation.sh index 976efa6b8c80..fac87246250c 100755 --- a/.github/scripts/check-kurtosis-enclave-block-creation.sh +++ b/.github/scripts/kurtosis-check-enclave-block-creation.sh @@ -9,7 +9,7 @@ # # Usage: # -# ./check-kurtosis-enclave-block-creation.sh [TARGET_BLOCK_NUMBER] [NUMBER_OF_NAPS] +# ./kurtosis-check-enclave-block-creation.sh [TARGET_BLOCK_NUMBER] [NUMBER_OF_NAPS] # # diff --git a/.github/scripts/dump-kurtosis-logs.sh b/.github/scripts/kurtosis-dump-logs.sh similarity index 98% rename from .github/scripts/dump-kurtosis-logs.sh rename to .github/scripts/kurtosis-dump-logs.sh index 106e3f5598cb..8b1b54089305 100755 --- a/.github/scripts/dump-kurtosis-logs.sh +++ b/.github/scripts/kurtosis-dump-logs.sh @@ -9,7 +9,7 @@ # # Usage: # -# ./dump-kurtosis-logs.sh +# ./kurtosis-dump-logs.sh # # diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index fd9629a0304e..800ec37fecdd 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -118,11 +118,11 @@ jobs: run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file .github/assets/${{ inputs.args }}.yaml - name: Assert that clients advance - run: ./.github/scripts/check-kurtosis-enclave-block-creation.sh $ENCLAVE_NAME + run: ./.github/scripts/kurtosis-check-enclave-block-creation.sh $ENCLAVE_NAME - name: Dump kurtosis logs on failure if: ${{ failure() }} - run: ./.github/scripts/dump-kurtosis-logs.sh $ENCLAVE_NAME + run: ./.github/scripts/kurtosis-dump-logs.sh $ENCLAVE_NAME notify-on-error: needs: From 58b92aea3bb48b0525fd130e9c159ddc103184c8 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 16:17:56 -0800 Subject: [PATCH 07/29] chore: Dynamic run name --- .github/workflows/kurtosis-op-local.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 800ec37fecdd..b4eed137ef15 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -1,6 +1,8 @@ # Runs simple OP stack setup in Kurtosis -name: Run kurtosis (local images) +name: Run kurtosis + +run-name: Run kurtosis (${{ inputs.args }}) on: workflow_dispatch: @@ -80,7 +82,7 @@ jobs: timeout-minutes: 60 strategy: fail-fast: false - name: Kurtosis (${{ inputs.args }}) + name: Kurtosis runs-on: ubuntu-latest # We store the enclave name for easy access here env: From b16c258af624878361e787b1ddec9fa2969e0bc0 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 16:20:42 -0800 Subject: [PATCH 08/29] debug: Job name --- .github/workflows/kurtosis-op-local.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index b4eed137ef15..741c300e29e1 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -84,9 +84,6 @@ jobs: fail-fast: false name: Kurtosis runs-on: ubuntu-latest - # We store the enclave name for easy access here - env: - ENCLAVE_NAME: op-devnet needs: - prepare-op-reth - prepare-op-geth From f872d0730d20686e334d2f614bcaa6a770e2deca Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 16:23:15 -0800 Subject: [PATCH 09/29] debug: Job name --- .github/workflows/kurtosis-op-local.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 741c300e29e1..30bacb797312 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -88,6 +88,8 @@ jobs: - prepare-op-reth - prepare-op-geth - prepare-op-node + env: + ENCLAVE_NAME: op-devnet steps: - uses: actions/checkout@v4 with: From b9bffee5c752245ea024e81d74d3c5b5fa79d823 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 16:38:02 -0800 Subject: [PATCH 10/29] chore: Drop notify-on-error since it was never working --- .github/workflows/kurtosis-op-local.yml | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 30bacb797312..a5a637d09bfe 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -123,17 +123,4 @@ jobs: - name: Dump kurtosis logs on failure if: ${{ failure() }} - run: ./.github/scripts/kurtosis-dump-logs.sh $ENCLAVE_NAME - - notify-on-error: - needs: - - test - if: failure() - runs-on: ubuntu-latest - steps: - - name: Slack Webhook Action - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_COLOR: ${{ job.status }} - SLACK_MESSAGE: "Failed run: https://github.com/paradigmxyz/reth/actions/runs/${{ github.run_id }}" - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }} + run: ./.github/scripts/kurtosis-dump-logs.sh $ENCLAVE_NAME \ No newline at end of file From f780ae5b7ef69f9783924596229334e4d8528fe5 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 16:46:49 -0800 Subject: [PATCH 11/29] chore: Restore remote args files --- .../kurtosis_op_network_params_remote.yaml | 23 ++++++++++++++++ ...s_op_network_params_remote_no_op_geth.yaml | 16 ++++++++++++ ...s_op_network_params_remote_no_op_reth.yaml | 19 ++++++++++++++ ...twork_params_remote_op_reth_sequencer.yaml | 26 +++++++++++++++++++ .github/workflows/kurtosis-op-local.yml | 4 +++ 5 files changed, 88 insertions(+) create mode 100644 .github/assets/kurtosis_op_network_params_remote.yaml create mode 100644 .github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml create mode 100644 .github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml create mode 100644 .github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml diff --git a/.github/assets/kurtosis_op_network_params_remote.yaml b/.github/assets/kurtosis_op_network_params_remote.yaml new file mode 100644 index 000000000000..6f44db405c21 --- /dev/null +++ b/.github/assets/kurtosis_op_network_params_remote.yaml @@ -0,0 +1,23 @@ +ethereum_package: + participants: + - el_type: reth + cl_type: lighthouse +optimism_package: + chains: + - participants: + # first participant is sequencer + - el_type: op-geth + el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest + cl_type: op-node + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_extra_params: + - "--l1.trustrpc=true" + - el_type: op-reth + el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" + cl_type: op-node + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_extra_params: + - "--l1.trustrpc=true" + batcher_params: + extra_params: + - "--throttle-interval=0" diff --git a/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml b/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml new file mode 100644 index 000000000000..9684f2929e9d --- /dev/null +++ b/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml @@ -0,0 +1,16 @@ +ethereum_package: + participants: + - el_type: reth + cl_type: lighthouse +optimism_package: + chains: + - participants: + - el_type: op-reth + el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" + cl_type: op-node + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_extra_params: + - "--l1.trustrpc=true" + batcher_params: + extra_params: + - "--throttle-interval=0" diff --git a/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml b/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml new file mode 100644 index 000000000000..683e2a4e0d6f --- /dev/null +++ b/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml @@ -0,0 +1,19 @@ +ethereum_package: + participants: + - el_type: reth + cl_type: lighthouse +optimism_package: + chains: + - participants: + - el_type: op-geth + el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest + cl_type: op-node + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_extra_params: + - "--l1.trustrpc=true" + batcher_params: + extra_params: + - "--throttle-interval=0" + network_params: + holocene_time_offset: 0 + isthmus_time_offset: 0 \ No newline at end of file diff --git a/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml b/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml new file mode 100644 index 000000000000..1253d529e3d2 --- /dev/null +++ b/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml @@ -0,0 +1,26 @@ +ethereum_package: + participants: + - el_type: reth + cl_type: lighthouse +optimism_package: + chains: + - participants: + # first participant is sequencer + - el_type: op-reth + el_image: "op-reth:latest" + cl_type: op-node + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_extra_params: + - "--l1.trustrpc=true" + - el_type: op-geth + el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest + cl_type: op-node + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_extra_params: + - "--l1.trustrpc=true" + batcher_params: + extra_params: + - "--throttle-interval=0" + network_params: + holocene_time_offset: 0 + isthmus_time_offset: 0 \ No newline at end of file diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index a5a637d09bfe..1825053ae3a0 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -16,6 +16,10 @@ on: - kurtosis_op_network_params_local_no_op_reth - kurtosis_op_network_params_local_op_reth_sequencer - kurtosis_op_network_params_local + - kurtosis_op_network_params_remote_no_op_geth + - kurtosis_op_network_params_remote_no_op_reth + - kurtosis_op_network_params_remote_op_reth_sequencer + - kurtosis_op_network_params_remote default: kurtosis_op_network_params_local op-node-repo: type: string From d8608f607b20d5432000449507a763b1a5f3f088 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 17:37:04 -0800 Subject: [PATCH 12/29] fix: Typo --- .../kurtosis_op_network_params_remote_op_reth_sequencer.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml b/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml index 1253d529e3d2..efab4dee916f 100644 --- a/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml +++ b/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml @@ -7,7 +7,7 @@ optimism_package: - participants: # first participant is sequencer - el_type: op-reth - el_image: "op-reth:latest" + el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" cl_type: op-node cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop cl_extra_params: From 5a332b9c6e821dfb4876f6dacf8fd6354b32a6b5 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 19:22:22 -0800 Subject: [PATCH 13/29] debug: op-node version --- .github/assets/kurtosis_op_network_params_remote.yaml | 6 +++--- .../kurtosis_op_network_params_remote_no_op_geth.yaml | 2 +- .../kurtosis_op_network_params_remote_no_op_reth.yaml | 2 +- ...kurtosis_op_network_params_remote_op_reth_sequencer.yaml | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/assets/kurtosis_op_network_params_remote.yaml b/.github/assets/kurtosis_op_network_params_remote.yaml index 6f44db405c21..1b8e6e9c9337 100644 --- a/.github/assets/kurtosis_op_network_params_remote.yaml +++ b/.github/assets/kurtosis_op_network_params_remote.yaml @@ -9,13 +9,13 @@ optimism_package: - el_type: op-geth el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest cl_extra_params: - "--l1.trustrpc=true" - el_type: op-reth - el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" + el_image: op-reth:latest cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest cl_extra_params: - "--l1.trustrpc=true" batcher_params: diff --git a/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml b/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml index 9684f2929e9d..00bd456f6f60 100644 --- a/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml +++ b/.github/assets/kurtosis_op_network_params_remote_no_op_geth.yaml @@ -8,7 +8,7 @@ optimism_package: - el_type: op-reth el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest cl_extra_params: - "--l1.trustrpc=true" batcher_params: diff --git a/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml b/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml index 683e2a4e0d6f..c4a1deee4b3a 100644 --- a/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml +++ b/.github/assets/kurtosis_op_network_params_remote_no_op_reth.yaml @@ -8,7 +8,7 @@ optimism_package: - el_type: op-geth el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest cl_extra_params: - "--l1.trustrpc=true" batcher_params: diff --git a/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml b/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml index efab4dee916f..14f1118f2856 100644 --- a/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml +++ b/.github/assets/kurtosis_op_network_params_remote_op_reth_sequencer.yaml @@ -9,13 +9,13 @@ optimism_package: - el_type: op-reth el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest cl_extra_params: - "--l1.trustrpc=true" - el_type: op-geth el_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:latest cl_type: op-node - cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:develop + cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest cl_extra_params: - "--l1.trustrpc=true" batcher_params: From 4c3e26b992a19234851f2e52f3b47498d81747df Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 19:40:03 -0800 Subject: [PATCH 14/29] fix: Reth image --- .github/assets/kurtosis_op_network_params_remote.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/assets/kurtosis_op_network_params_remote.yaml b/.github/assets/kurtosis_op_network_params_remote.yaml index 1b8e6e9c9337..7aed99a14ea4 100644 --- a/.github/assets/kurtosis_op_network_params_remote.yaml +++ b/.github/assets/kurtosis_op_network_params_remote.yaml @@ -13,7 +13,7 @@ optimism_package: cl_extra_params: - "--l1.trustrpc=true" - el_type: op-reth - el_image: op-reth:latest + el_image: "ghcr.io/paradigmxyz/op-reth:kurtosis-ci" cl_type: op-node cl_image: us-docker.pkg.dev/oplabs-tools-artifacts/images/op-node:latest cl_extra_params: From 8835f23355d4a991a0d38689fde923d1d7515f3a Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Wed, 29 Jan 2025 21:29:40 -0800 Subject: [PATCH 15/29] fix: Typos --- .github/scripts/kurtosis-check-enclave-block-creation.sh | 7 +++++-- .github/scripts/kurtosis-dump-logs.sh | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/scripts/kurtosis-check-enclave-block-creation.sh b/.github/scripts/kurtosis-check-enclave-block-creation.sh index fac87246250c..51d00089786e 100755 --- a/.github/scripts/kurtosis-check-enclave-block-creation.sh +++ b/.github/scripts/kurtosis-check-enclave-block-creation.sh @@ -39,12 +39,15 @@ echo "Checking whether EL clients in enclave $ENCLAVE_NAME reach target block $T # Get the enclave UUID from the API # -# The | values at the end of the j1 transformation will convert null to an empty string +# The API reponse is a JSON object with UUIDs as keys. To get the UUID we need to find a value +# with a matching "name" property. +# +# The "| values" at the end of the jq transformation will convert null to an empty string ENCLAVE_ID=$(curl -s $ENCLAVES_API_URL | jq -r 'to_entries | map(select(.value.name == "'$ENCLAVE_NAME'")) | .[0].key | values') # Make sure we got something if [ -z "$ENCLAVE_ID" ]; then - No enclave found for enclave $ENCLAVE_NAME + echo "No enclave found for enclave $ENCLAVE_NAME" exit 1 fi diff --git a/.github/scripts/kurtosis-dump-logs.sh b/.github/scripts/kurtosis-dump-logs.sh index 8b1b54089305..3b893b5e07e8 100755 --- a/.github/scripts/kurtosis-dump-logs.sh +++ b/.github/scripts/kurtosis-dump-logs.sh @@ -32,7 +32,7 @@ ENCLAVE_ID=$(curl -s $ENCLAVES_API_URL | jq -r 'to_entries | map(select(.value.n # Make sure we got something if [ -z "$ENCLAVE_ID" ]; then - No enclave found for enclave $ENCLAVE_NAME + echo "No enclave found for enclave $ENCLAVE_NAME" exit 1 fi From 74ec9d8ddb8559a8a453863e43993484f3e564ae Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 12:03:30 -0800 Subject: [PATCH 16/29] chore: Always dump kurtosis logs for all services --- .github/scripts/kurtosis-dump-logs.sh | 23 ++++++++--------------- .github/workflows/kurtosis-op-local.yml | 4 ++-- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/.github/scripts/kurtosis-dump-logs.sh b/.github/scripts/kurtosis-dump-logs.sh index 3b893b5e07e8..21f0ff6674d7 100755 --- a/.github/scripts/kurtosis-dump-logs.sh +++ b/.github/scripts/kurtosis-dump-logs.sh @@ -38,30 +38,23 @@ fi echo "Got enclave UUID: $ENCLAVE_ID" -# Now get all the OP client services -# -# We assume the convention is to name them op-xxx +# Now get all the service names ENCLAVE_SERVICES=$(curl -s $ENCLAVES_API_URL/$ENCLAVE_ID/services) -ENCLAVE_OP_SERVICES=$(echo $ENCLAVE_SERVICES | jq -r 'to_entries | map(select(.key | startswith("op-"))) | map(.value)') - -# Now get the OP client names and arrange them into a single-line space-delimited string -# -# This is useful for bash iteration below -ENCLAVE_OP_SERVICE_NAMES=$(echo $ENCLAVE_OP_SERVICES | jq -r 'map(.name) | join(" ")') +ENCLAVE_SERVICES_NAMES=$(echo $ENCLAVE_SERVICES | jq -r 'keys_unsorted | join(" ")') # Make sure we got something -if [ -z "$ENCLAVE_OP_SERVICE_NAMES" ]; then - echo "No OP clients found for enclave $ENCLAVE_NAME" - exit 1 +if [ -z "$ENCLAVE_SERVICES_NAMES" ]; then + echo "No clients found for enclave $ENCLAVE_NAME" + exit 0 fi -echo "Got enclave OP services: $ENCLAVE_OP_SERVICE_NAMES" +echo "Got enclave services: $ENCLAVE_SERVICES_NAMES" # Convert the list into a bash array -ENCLAVE_OP_SERVICE_NAMES_ARRAY=($ENCLAVE_OP_SERVICE_NAMES) +ENCLAVE_SERVICE_NAMES_ARRAY=($ENCLAVE_SERVICES_NAMES) # Iterate over the names/RPC ports arrays -for SERVICE_NAME in "${ENCLAVE_OP_SERVICE_NAMES_ARRAY[@]}"; do +for SERVICE_NAME in "${ENCLAVE_SERVICE_NAMES_ARRAY[@]}"; do # We use the github actions grouping to get a nicer output echo "::group::$SERVICE_NAME" kurtosis service logs -a $ENCLAVE_NAME $SERVICE_NAME diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 1825053ae3a0..0428e2fab2ae 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -125,6 +125,6 @@ jobs: - name: Assert that clients advance run: ./.github/scripts/kurtosis-check-enclave-block-creation.sh $ENCLAVE_NAME - - name: Dump kurtosis logs on failure - if: ${{ failure() }} + - name: Dump kurtosis logs + if: ${{ always() }} run: ./.github/scripts/kurtosis-dump-logs.sh $ENCLAVE_NAME \ No newline at end of file From 89c3e8f2e0c6da8038329f83ead36bb2abb3f2db Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 12:41:26 -0800 Subject: [PATCH 17/29] chore: Dynamic kurtosis matrix --- .../kurtosis-format-args-file-matrix.sh | 31 ++++++++++ .github/workflows/kurtosis-op-local.yml | 58 +++++++++++++------ 2 files changed, 72 insertions(+), 17 deletions(-) create mode 100755 .github/scripts/kurtosis-format-args-file-matrix.sh diff --git a/.github/scripts/kurtosis-format-args-file-matrix.sh b/.github/scripts/kurtosis-format-args-file-matrix.sh new file mode 100755 index 000000000000..27d6552aa8fb --- /dev/null +++ b/.github/scripts/kurtosis-format-args-file-matrix.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# +# +# This is a log script used mostly in the CI pipeline +# +# It will print a JSON formatted array of kurtosis args files +# passed in as an input to this script +# +# Usage: +# +# ./kurtosis-format-args-file-matrix.sh [...] +# +# + +# This scripts expects an array of args files as its arguments +ARGS_FILES=("$@") + +# All the echoes must go to stderr since stdout must be a JSON object +echo "Found ${#ARGS_FILES[@]} matching files: ${ARGS_FILES[@]}" 1>&2; + +# Format the results as a JSON array +ARGS_FILES_JSON=$(jq -cn --argjson files "$(printf '%s\n' "${ARGS_FILES[@]}" | jq -R . | jq -s .)" '$files') + +# Place the JSON array into a JSON object under "args" key +# +# This way the output can be directly used as a github action matrix definition +ARGS_FILES_MATRIX=$(jq -cn --argjson array "$ARGS_FILES_JSON" '{args: $array}') + +# Print the matrix to stdout +echo "$ARGS_FILES_MATRIX" \ No newline at end of file diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 0428e2fab2ae..79376851c534 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,25 +2,19 @@ name: Run kurtosis -run-name: Run kurtosis (${{ inputs.args }}) +run-name: Run kurtosis (${{ inputs.images }} images) on: workflow_dispatch: inputs: - args: + images: type: choice required: true - description: "Kurtosis args file to use" + description: "The variation of args files to use. Local means the images will be built, remote means already published images will be used" options: - - kurtosis_op_network_params_local_no_op_geth - - kurtosis_op_network_params_local_no_op_reth - - kurtosis_op_network_params_local_op_reth_sequencer - - kurtosis_op_network_params_local - - kurtosis_op_network_params_remote_no_op_geth - - kurtosis_op_network_params_remote_no_op_reth - - kurtosis_op_network_params_remote_op_reth_sequencer - - kurtosis_op_network_params_remote - default: kurtosis_op_network_params_local + - local + - remote + default: remote op-node-repo: type: string required: true @@ -82,13 +76,43 @@ jobs: cargo_features: optimism,asm-keccak cargo_package: crates/optimism/bin/Cargo.toml + # This job expands the "images" input parameter into a list of matching kurtosis args files + # and formats them into a JSON-encoded matrix + # + # This is so that we can just pick "local" or "remote" from a dropdown + # and based on the value we select, an appropriate matrix of jobs will be spun up + # without us needed to copy-paste sections of this workflow whenever a new argument file is added + prepare-job-matrix: + name: Prepare kurtosis test matrix + runs-on: ubuntu-latest + outputs: + # The output of this job is the JSON-encoded github actions matrix + matrix: ${{ steps.prepare.outputs.matrix }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Prepare matrix + id: prepare + run: | + # We use a helper shell script to format a list of matching yaml files into a github-actions-compatible matrix + MATRIX=$(./.github/scripts/kurtosis-format-args-file-matrix.sh ./.github/assets/kurtosis_op_network_params_${{ inputs.images }}_*.yaml) + + # And we use the matrix as an output of this step + echo "matrix=$MATRIX" >> $GITHUB_OUTPUT + + test: - timeout-minutes: 60 + name: Kurtosis (${{ matrix.args }}) + runs-on: ubuntu-latest strategy: + # This job uses the dynamic matrix created in prepare-job-matrix job + matrix: ${{ fromJson(needs.prepare-job-matrix.outputs.matrix) }} fail-fast: false - name: Kurtosis - runs-on: ubuntu-latest + timeout-minutes: 60 needs: + - prepare-job-matrix - prepare-op-reth - prepare-op-geth - prepare-op-node @@ -119,8 +143,8 @@ jobs: # List available images docker image ls -a - - name: Run kurtosis - run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file .github/assets/${{ inputs.args }}.yaml + - name: Run kurtosis using ${{ matrix.args }} + run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file .github/assets/${{ matrix.args }}.yaml - name: Assert that clients advance run: ./.github/scripts/kurtosis-check-enclave-block-creation.sh $ENCLAVE_NAME From 768823aadcde82a66fab89a8fa86bde0a31b2470 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 12:45:35 -0800 Subject: [PATCH 18/29] chore: Add repository info --- .github/workflows/kurtosis-op-local.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 79376851c534..ed070b38c882 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -48,7 +48,7 @@ concurrency: jobs: prepare-op-geth: - name: Prepare op-geth docker image + name: Prepare op-geth docker image (${{ inputs.op-geth-repo }}@${{ inputs.op-geth-ref }}) uses: ./.github/workflows/prepare-op-image.yml with: repo: ${{ inputs.op-geth-repo }} @@ -57,7 +57,7 @@ jobs: artifact_name: op_geth_image prepare-op-node: - name: Prepare op-node docker image + name: Prepare op-node docker image (${{ inputs.op-node-repo }}@${{ inputs.op-node-ref }}) uses: ./.github/workflows/prepare-op-image.yml with: repo: ${{ inputs.op-node-repo }} @@ -68,7 +68,7 @@ jobs: artifact_name: op_node_image prepare-op-reth: - name: Prepare op-reth docker image + name: Prepare op-reth docker image (${{ github.repository }}@${{ github.ref }}) uses: ./.github/workflows/prepare-op-reth.yml with: image_tag: ghcr.io/paradigmxyz/op-reth:kurtosis-ci From c1b59c65230a2edaeef90e47887fa62d383356dc Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 12:51:05 -0800 Subject: [PATCH 19/29] chore: Workflow run name --- .github/workflows/kurtosis-op-local.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index ed070b38c882..6fd696588c7c 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,7 +2,7 @@ name: Run kurtosis -run-name: Run kurtosis (${{ inputs.images }} images) +run-name: Run kurtosis (${{ inputs.images }} images ${{ inputs.images == 'local' && format('[op-geth: {0}:{1}; op-node: {2}:{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }}) on: workflow_dispatch: From 77e0457605dc3941fac8603a2ddfa3611e9439d5 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 12:55:16 -0800 Subject: [PATCH 20/29] debug: YAML --- .github/workflows/kurtosis-op-local.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 6fd696588c7c..17bd66bd5333 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,7 +2,7 @@ name: Run kurtosis -run-name: Run kurtosis (${{ inputs.images }} images ${{ inputs.images == 'local' && format('[op-geth: {0}:{1}; op-node: {2}:{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }}) +run-name: Run kurtosis (${{ inputs.images }} images) ${{ format('op-geth: {0}', inputs.op-geth-repo) }}) on: workflow_dispatch: From 166910ad599018cb8a9acc241c4043739e1462a4 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 12:57:26 -0800 Subject: [PATCH 21/29] debug: YAML --- .github/workflows/kurtosis-op-local.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 17bd66bd5333..33117d4cb11d 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,8 +2,7 @@ name: Run kurtosis -run-name: Run kurtosis (${{ inputs.images }} images) ${{ format('op-geth: {0}', inputs.op-geth-repo) }}) - +run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}:{1}; op-node: {2}:{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }})" on: workflow_dispatch: inputs: From 8caae587be52bafcae7801addf6fa52b4a311b86 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 13:00:23 -0800 Subject: [PATCH 22/29] chore: Declutter workflow name --- .github/workflows/kurtosis-op-local.yml | 10 +++++----- .github/workflows/prepare-op-image.yml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 33117d4cb11d..c291a681220d 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,7 +2,7 @@ name: Run kurtosis -run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}:{1}; op-node: {2}:{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }})" +run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }})" on: workflow_dispatch: inputs: @@ -17,8 +17,8 @@ on: op-node-repo: type: string required: true - description: "An optimizm repo (clone) to use for op-node" - default: https://github.com/ethereum-optimism/optimism.git + description: "An optimizm repo (clone) to use for op-node (formatted as org/repo)" + default: ethereum-optimism/optimism op-node-ref: type: string @@ -29,8 +29,8 @@ on: op-geth-repo: type: string required: true - description: "An op-geth repo (clone) to use for op-geth" - default: https://github.com/ethereum-optimism/op-geth.git + description: "An op-geth repo (clone) to use for op-geth (formatted as org/repo)" + default: ethereum-optimism/op-geth op-geth-ref: type: string diff --git a/.github/workflows/prepare-op-image.yml b/.github/workflows/prepare-op-image.yml index d517c2bf41d9..1c59292d8fe1 100644 --- a/.github/workflows/prepare-op-image.yml +++ b/.github/workflows/prepare-op-image.yml @@ -49,7 +49,7 @@ jobs: - name: Clone ${{ inputs.repo }} shell: bash - run: git clone --recurse-submodules ${{ inputs.repo }} ./tmp/submodule + run: git clone --recurse-submodules 'https://github.com/${{ inputs.repo }}.git' ./tmp/submodule - name: Checkout ${{ inputs.ref }} shell: bash From 57ebb4c2c5a5c1ce3b5282d08ed499946150d289 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 13:01:23 -0800 Subject: [PATCH 23/29] fix: false in workflow name --- .github/workflows/kurtosis-op-local.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index c291a681220d..87a8c45748e1 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,7 +2,7 @@ name: Run kurtosis -run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }})" +run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) || '' }})" on: workflow_dispatch: inputs: From 09cfdcf52afb058d4a583d5a6532643c6dc253e3 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 13:02:34 -0800 Subject: [PATCH 24/29] fix: Args file --- .github/workflows/kurtosis-op-local.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 87a8c45748e1..e0b603673831 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -143,7 +143,7 @@ jobs: docker image ls -a - name: Run kurtosis using ${{ matrix.args }} - run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file .github/assets/${{ matrix.args }}.yaml + run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file ${{ matrix.args }} - name: Assert that clients advance run: ./.github/scripts/kurtosis-check-enclave-block-creation.sh $ENCLAVE_NAME From d0af61d810d2409fb4c34a2104f2e73821865103 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 13:03:08 -0800 Subject: [PATCH 25/29] fix: Typo --- .github/workflows/kurtosis-op-local.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index e0b603673831..870eb38d7cdd 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,7 +2,7 @@ name: Run kurtosis -run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) || '' }})" +run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) || '' }}" on: workflow_dispatch: inputs: From 143bcb46cde6781bc9b484a797fd2e788bf90f5b Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 13:03:48 -0800 Subject: [PATCH 26/29] chore: Always show image names --- .github/workflows/kurtosis-op-local.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 870eb38d7cdd..8e91e061060a 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,7 +2,7 @@ name: Run kurtosis -run-name: "Run kurtosis (${{ inputs.images }} images) ${{ inputs.images == 'local' && format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) || '' }}" +run-name: "Run kurtosis (${{ inputs.images }} images) ${{ format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }}" on: workflow_dispatch: inputs: From af382d1828be311b7fc45dd874d1c6f721bd8940 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 13:27:16 -0800 Subject: [PATCH 27/29] chore: Why not a filter --- .github/workflows/kurtosis-op-local.yml | 26 +++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index 8e91e061060a..e2246c59898b 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -2,18 +2,15 @@ name: Run kurtosis -run-name: "Run kurtosis (${{ inputs.images }} images) ${{ format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }}" +run-name: "Run kurtosis ${{ inputs.filter && format('(only arg files matching {0})', inputs.filter) || '' }} ${{ format('[op-geth: {0}@{1}; op-node: {2}@{3}]', inputs.op-geth-repo, inputs.op-geth-ref, inputs.op-node-repo, inputs.op-node-ref) }}" on: workflow_dispatch: inputs: - images: - type: choice - required: true - description: "The variation of args files to use. Local means the images will be built, remote means already published images will be used" - options: - - local - - remote - default: remote + filter: + type: string + required: false + description: "A glob-style expression to filter the kurtosis args files, e.g. 'local', 'remote', 'no_op_geth' etc" + default: '' op-node-repo: type: string required: true @@ -49,6 +46,9 @@ jobs: prepare-op-geth: name: Prepare op-geth docker image (${{ inputs.op-geth-repo }}@${{ inputs.op-geth-ref }}) uses: ./.github/workflows/prepare-op-image.yml + needs: + # We add the prepare-job-matrix as a dependency so that we fail fast if there are no matching configurations + - prepare-job-matrix with: repo: ${{ inputs.op-geth-repo }} ref: ${{ inputs.op-geth-ref }} @@ -58,6 +58,9 @@ jobs: prepare-op-node: name: Prepare op-node docker image (${{ inputs.op-node-repo }}@${{ inputs.op-node-ref }}) uses: ./.github/workflows/prepare-op-image.yml + needs: + # We add the prepare-job-matrix as a dependency so that we fail fast if there are no matching configurations + - prepare-job-matrix with: repo: ${{ inputs.op-node-repo }} ref: ${{ inputs.op-node-ref }} @@ -69,6 +72,9 @@ jobs: prepare-op-reth: name: Prepare op-reth docker image (${{ github.repository }}@${{ github.ref }}) uses: ./.github/workflows/prepare-op-reth.yml + needs: + # We add the prepare-job-matrix as a dependency so that we fail fast if there are no matching configurations + - prepare-job-matrix with: image_tag: ghcr.io/paradigmxyz/op-reth:kurtosis-ci binary_name: op-reth @@ -96,7 +102,7 @@ jobs: id: prepare run: | # We use a helper shell script to format a list of matching yaml files into a github-actions-compatible matrix - MATRIX=$(./.github/scripts/kurtosis-format-args-file-matrix.sh ./.github/assets/kurtosis_op_network_params_${{ inputs.images }}_*.yaml) + MATRIX=$(./.github/scripts/kurtosis-format-args-file-matrix.sh "./.github/assets/kurtosis_op_network_params_*${{ inputs.filter }}*.yaml") # And we use the matrix as an output of this step echo "matrix=$MATRIX" >> $GITHUB_OUTPUT From 930fe34169816345843da98a56fa86d60ac7ac0e Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Thu, 30 Jan 2025 13:40:17 -0800 Subject: [PATCH 28/29] chore: Add job summary --- .github/workflows/kurtosis-op-local.yml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index e2246c59898b..a82591ce89b7 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -101,12 +101,28 @@ jobs: - name: Prepare matrix id: prepare run: | + # Just to keep things DRY + ASSETS_PREFIX="./.github/assets/kurtosis_op_network_params_" + + # If the filter does not match anything, we want the script to error out + # + # The default behaviour of globs with no matches it to return the expression + # so we'll adjust it to error out if there are no matches + compgen -G "$ASSETS_PREFIX*${{ inputs.filter }}*.yaml" || { echo '**No kurtosis args files matching filter `${{ inputs.filter }}`**' >> $GITHUB_STEP_SUMMARY; exit 1; } + # We use a helper shell script to format a list of matching yaml files into a github-actions-compatible matrix - MATRIX=$(./.github/scripts/kurtosis-format-args-file-matrix.sh "./.github/assets/kurtosis_op_network_params_*${{ inputs.filter }}*.yaml") + MATRIX=$(./.github/scripts/kurtosis-format-args-file-matrix.sh $ASSETS_PREFIX*${{ inputs.filter }}*.yaml) # And we use the matrix as an output of this step echo "matrix=$MATRIX" >> $GITHUB_OUTPUT + # Finally we make things visible to the user by creating a github job summary markdown + echo '### Kurtosis argument files used' >> $GITHUB_STEP_SUMMARY + echo '' >> $GITHUB_STEP_SUMMARY + + # We format the list of matching files as a markdown list + printf -- '- `%s`\n' $ASSETS_PREFIX*${{ inputs.filter }}*.yaml >> $GITHUB_STEP_SUMMARY + test: name: Kurtosis (${{ matrix.args }}) From 1777099dce03dc2042eb9616a9b5e2d9e55aeb01 Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Fri, 31 Jan 2025 09:12:48 -0800 Subject: [PATCH 29/29] chore: Beautify the github job names --- .../kurtosis-format-args-file-matrix.sh | 22 +++++++++++++++---- .github/workflows/kurtosis-op-local.yml | 6 ++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/.github/scripts/kurtosis-format-args-file-matrix.sh b/.github/scripts/kurtosis-format-args-file-matrix.sh index 27d6552aa8fb..6c3b4ddf2160 100755 --- a/.github/scripts/kurtosis-format-args-file-matrix.sh +++ b/.github/scripts/kurtosis-format-args-file-matrix.sh @@ -19,13 +19,27 @@ ARGS_FILES=("$@") # All the echoes must go to stderr since stdout must be a JSON object echo "Found ${#ARGS_FILES[@]} matching files: ${ARGS_FILES[@]}" 1>&2; -# Format the results as a JSON array -ARGS_FILES_JSON=$(jq -cn --argjson files "$(printf '%s\n' "${ARGS_FILES[@]}" | jq -R . | jq -s .)" '$files') +ARGS=() +for ARGS_FILE_PATH in "${ARGS_FILES[@]}"; do + # We get the kurtosis file basename + ARGS_FILE_NAME=$(basename "$ARGS_FILE_PATH") + # And try to remove the prefix to get the important version of the filename + ARGS_FILE_SUBNAME=$(echo "$ARGS_FILE_NAME" | awk 'sub(/kurtosis_op_network_params_/,"")') + + # Now we turn those into an object + ARGS_OBJECT=$(jq -cn --arg path "$ARGS_FILE_PATH" --arg name "$ARGS_FILE_NAME" --arg subname "$ARGS_FILE_SUBNAME" '{path: $path, name: $name, subname: $subname}') -# Place the JSON array into a JSON object under "args" key + # And push it to the ARGS array + ARGS+=("$ARGS_OBJECT") +done + +# We combine all the individual objects into a JSON array +ARGS_JSON=$(printf '%s\n' "${ARGS[@]}" | jq -sc .) + +# And put the array under an "args" key in an object # # This way the output can be directly used as a github action matrix definition -ARGS_FILES_MATRIX=$(jq -cn --argjson array "$ARGS_FILES_JSON" '{args: $array}') +ARGS_FILES_MATRIX=$(jq -cn --argjson array "$ARGS_JSON" '{args: $array}') # Print the matrix to stdout echo "$ARGS_FILES_MATRIX" \ No newline at end of file diff --git a/.github/workflows/kurtosis-op-local.yml b/.github/workflows/kurtosis-op-local.yml index a82591ce89b7..62e9767e8b21 100644 --- a/.github/workflows/kurtosis-op-local.yml +++ b/.github/workflows/kurtosis-op-local.yml @@ -125,7 +125,7 @@ jobs: test: - name: Kurtosis (${{ matrix.args }}) + name: Kurtosis (${{ matrix.args.subname }}) runs-on: ubuntu-latest strategy: # This job uses the dynamic matrix created in prepare-job-matrix job @@ -164,8 +164,8 @@ jobs: # List available images docker image ls -a - - name: Run kurtosis using ${{ matrix.args }} - run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file ${{ matrix.args }} + - name: Run kurtosis using ${{ matrix.args.path }} + run: kurtosis run --enclave $ENCLAVE_NAME github.com/ethpandaops/optimism-package --args-file ${{ matrix.args.path }} - name: Assert that clients advance run: ./.github/scripts/kurtosis-check-enclave-block-creation.sh $ENCLAVE_NAME