name: "Run Revive Differential Tests" description: "Builds and runs revive-differential-tests (retester) from this repo against the caller's Polkadot SDK." inputs: # Setup arguments & environment polkadot-sdk-path: description: "The path of the polkadot-sdk that should be compiled for the tests to run against." required: false default: "." type: string cargo-command: description: "The cargo command to use in compilations and running of tests (e.g., forklift cargo)." required: false default: "cargo" type: string revive-differential-tests-ref: description: "The branch, tag or SHA to checkout for the revive-differential-tests." required: false default: "main" type: string resolc-version: description: "The version of resolc to install and use in tests." required: false default: "0.5.0" type: string use-compilation-caches: description: "Controls if the compilation caches will be used for the test run or not." required: false default: true type: boolean # Test Execution Arguments platform: description: "The identifier of the platform to run the tests on (e.g., geth-evm-solc, revive-dev-node-revm-solc)" required: true type: string polkadot-omnichain-node-runtime-path: description: "The path of the WASM runtime to use with the polkadot-omni-node. This is only required if the polkadot-omni-node is one of the selected platforms." required: false type: string polkadot-omnichain-node-parachain-id: description: "The id of the parachain to spawn with the polkadot-omni-node. This is only required if the polkadot-omni-node is one of the selected platforms." type: number required: false runs: using: "composite" steps: - name: Checkout the Differential Tests Repository uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 with: repository: paritytech/revive-differential-tests ref: ${{ inputs['revive-differential-tests-ref'] }} path: revive-differential-tests submodules: recursive - name: Installing the Latest Resolc shell: bash if: ${{ runner.os == 'Linux' && runner.arch == 'X64' }} run: | VERSION="${{ inputs['resolc-version'] }}" ASSET_URL="https://github.com/paritytech/revive/releases/download/v$VERSION/resolc-x86_64-unknown-linux-musl" echo "Downloading resolc v$VERSION from $ASSET_URL" curl -Lsf --show-error -o resolc "$ASSET_URL" chmod +x resolc ./resolc --version - name: Installing Retester shell: bash run: ${{ inputs['cargo-command'] }} install --locked --path revive-differential-tests/crates/core - name: Creating a workdir for retester shell: bash run: mkdir workdir - name: Downloading & Initializing the compilation caches shell: bash if: ${{ inputs['use-compilation-caches'] == true }} run: | curl -fL --retry 3 --retry-all-errors --connect-timeout 10 -o cache.tar.gz "https://github.com/paritytech/revive-differential-tests/releases/download/compilation-caches-v1.1/cache.tar.gz" tar -zxf cache.tar.gz -C ./workdir > /dev/null 2>&1 - name: Building the dependencies from the Polkadot SDK shell: bash run: | ${{ inputs['cargo-command'] }} build --locked --profile release -p pallet-revive-eth-rpc -p revive-dev-node --manifest-path ${{ inputs['polkadot-sdk-path'] }}/Cargo.toml ${{ inputs['cargo-command'] }} build --locked --profile release --bin polkadot-omni-node --manifest-path ${{ inputs['polkadot-sdk-path'] }}/Cargo.toml - name: Running the Differential Tests shell: bash run: | OMNI_ARGS=() if [[ -n "${{ inputs['polkadot-omnichain-node-parachain-id'] }}" ]]; then OMNI_ARGS+=( --polkadot-omni-node.parachain-id "${{ inputs['polkadot-omnichain-node-parachain-id'] }}" ) fi if [[ -n "${{ inputs['polkadot-omnichain-node-runtime-path'] }}" ]]; then OMNI_ARGS+=( --polkadot-omni-node.runtime-wasm-path "${{ inputs['polkadot-omnichain-node-runtime-path'] }}" ) fi ${{ inputs['cargo-command'] }} run --locked --manifest-path revive-differential-tests/Cargo.toml -- test \ --test ./revive-differential-tests/resolc-compiler-tests/fixtures/solidity/simple \ --test ./revive-differential-tests/resolc-compiler-tests/fixtures/solidity/complex \ --test ./revive-differential-tests/resolc-compiler-tests/fixtures/solidity/translated_semantic_tests \ --platform ${{ inputs['platform'] }} \ --concurrency.number-of-nodes 10 \ --concurrency.number-of-threads 10 \ --concurrency.number-of-concurrent-tasks 100 \ --working-directory ./workdir \ --revive-dev-node.consensus manual-seal-200 \ --revive-dev-node.path ${{ inputs['polkadot-sdk-path'] }}/target/release/revive-dev-node \ --eth-rpc.path ${{ inputs['polkadot-sdk-path'] }}/target/release/eth-rpc \ --polkadot-omni-node.path ${{ inputs['polkadot-sdk-path'] }}/target/release/polkadot-omni-node \ --resolc.path ./resolc \ "${OMNI_ARGS[@]}" - name: Creating a markdown report of the test execution shell: bash if: ${{ always() }} run: | mv ./workdir/*.json report.json python3 revive-differential-tests/scripts/process-differential-tests-report.py report.json ${{ inputs['platform'] }} - name: Upload the Report to the CI uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f if: ${{ always() }} with: name: report-${{ inputs['platform'] }}.md path: report.md - name: Posting the report as a comment on the PR uses: marocchino/sticky-pull-request-comment@773744901bac0e8cbb5a0dc842800d45e9b2b405 if: ${{ always() }} with: header: diff-tests-report-${{ inputs['platform'] }} path: report.md