From 114e75798870c966946c1578223b0338de0f2ae9 Mon Sep 17 00:00:00 2001 From: Chevdor Date: Mon, 4 Oct 2021 16:06:26 +0200 Subject: [PATCH] Add extrinsic ordering filtering (#3631) --- .../extrinsic-ordering-check-from-bin.yml | 21 +++++-- .../github/extrinsic-ordering-filter.sh | 55 +++++++++++++++++++ 2 files changed, 71 insertions(+), 5 deletions(-) create mode 100755 polkadot/scripts/github/extrinsic-ordering-filter.sh diff --git a/polkadot/.github/workflows/extrinsic-ordering-check-from-bin.yml b/polkadot/.github/workflows/extrinsic-ordering-check-from-bin.yml index 0d2ffc6f2b..199b3be6fe 100644 --- a/polkadot/.github/workflows/extrinsic-ordering-check-from-bin.yml +++ b/polkadot/.github/workflows/extrinsic-ordering-check-from-bin.yml @@ -6,7 +6,7 @@ on: inputs: reference_url: description: The WebSocket url of the reference node - default: wss://rpc.polkadot.io + default: wss://kusama-rpc.polkadot.io required: true binary_url: description: A url to a Linux binary for the node containing the runtime to test @@ -14,7 +14,7 @@ on: required: true chain: description: The name of the chain under test. Usually, you would pass a local chain - default: polkadot-local + default: kusama-local required: true jobs: @@ -27,6 +27,8 @@ jobs: REF_URL: ${{github.event.inputs.reference_url}} steps: + - uses: actions/checkout@v2 + - name: Fetch binary run: | echo Fetching $BIN_URL @@ -46,17 +48,26 @@ jobs: echo "Date: $(date)" >> output.txt echo "Reference: $REF_URL" >> output.txt echo "Target version: $VERSION" >> output.txt - echo "-------------------------------------------" >> output.txt + echo "Chain: $CHAIN" >> output.txt + echo "----------------------------------------------------------------------" >> output.txt + + - name: Pull polkadot-js-tools image + run: docker pull jacogr/polkadot-js-tools - name: Compare the metadata run: | - CMD="docker run --network host jacogr/polkadot-js-tools metadata $REF_URL ws://localhost:9944" + CMD="docker run --pull always --network host jacogr/polkadot-js-tools metadata $REF_URL ws://localhost:9944" echo -e "Running:\n$CMD" $CMD >> output.txt sed -z -i 's/\n\n/\n/g' output.txt + cat output.txt | egrep -n -i '' + SUMMARY=$(./scripts/github/extrinsic-ordering-filter.sh output.txt) + echo -e $SUMMARY + echo -e $SUMMARY >> output.txt - name: Show result - run: cat output.txt + run: | + cat output.txt - name: Stop our local node run: pkill polkadot diff --git a/polkadot/scripts/github/extrinsic-ordering-filter.sh b/polkadot/scripts/github/extrinsic-ordering-filter.sh new file mode 100755 index 0000000000..4fd3337f64 --- /dev/null +++ b/polkadot/scripts/github/extrinsic-ordering-filter.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +# This script is used in a Github Workflow. It helps filtering out what is interesting +# when comparing metadata and spot what would require a tx version bump. + +# shellcheck disable=SC2002,SC2086 + +FILE=$1 + +# Higlight indexes that were deleted +function find_deletions() { + echo "\n## Deletions\n" + RES=$(cat "$FILE" | grep -n '\[\-\]' | tr -s " ") + if [ "$RES" ]; then + echo "$RES" | awk '{ printf "%s\\n", $0 }' + else + echo "n/a" + fi +} + +# Highlight indexes that have been deleted +function find_index_changes() { + echo "\n## Index changes\n" + RES=$(cat "$FILE" | grep -E -n -i 'idx:\s*([0-9]+)\s*(->)\s*([0-9]+)' | tr -s " ") + if [ "$RES" ]; then + echo "$RES" | awk '{ printf "%s\\n", $0 }' + else + echo "n/a" + fi +} + +# Highlight values that decreased +function find_decreases() { + echo "\n## Decreases\n" + OUT=$(cat "$FILE" | grep -E -i -o '([0-9]+)\s*(->)\s*([0-9]+)' | awk '$1 > $3 { printf "%s;", $0 }') + IFS=$';' LIST=("$OUT") + unset RES + for line in "${LIST[@]}"; do + RES="$RES\n$(cat "$FILE" | grep -E -i -n \"$line\" | tr -s " ")" + done + + if [ "$RES" ]; then + echo "$RES" | awk '{ printf "%s\\n", $0 }' | sort -u -g | uniq + else + echo "n/a" + fi +} + +echo "\n------------------------------ SUMMARY -------------------------------" +echo "\n⚠️ This filter is here to help spotting changes that should be reviewed carefully." +echo "\n⚠️ It catches only index changes, deletions and value decreases". + +find_deletions "$FILE" +find_index_changes "$FILE" +find_decreases "$FILE" +echo "\n----------------------------------------------------------------------\n"