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-chain-spec-path: description: "The path of the chain-spec of the chain we're spawning'. 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 expectations-file-path: description: "Path to the expectations file to use to compare against." type: string 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: Installing retester shell: bash run: ${{ inputs['cargo-command'] }} install --path ./revive-differential-tests/crates/core - name: Installing report-processor shell: bash run: ${{ inputs['cargo-command'] }} install --path ./revive-differential-tests/crates/report-processor - 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-chain-spec-path'] }}" ]]; then OMNI_ARGS+=( --polkadot-omni-node.chain-spec-path "${{ inputs['polkadot-omnichain-node-chain-spec-path'] }}" ) fi retester 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'] }} \ --report.file-name report.json \ --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[@]}" || true - name: Generate the expectation file shell: bash run: report-processor generate-expectations-file --report-path ./workdir/report.json --output-path ./workdir/expectations.json --remove-prefix ./revive-differential-tests/resolc-compiler-tests - name: Upload the Report to the CI uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f with: name: ${{ inputs['platform'] }}-report.json path: ./workdir/report.json - name: Upload the Report to the CI uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f with: name: ${{ inputs['platform'] }}.json path: ./workdir/expectations.json - name: Check Expectations shell: bash if: ${{ inputs['expectations-file-path'] != '' }} run: report-processor compare-expectation-files --base-expectation-path ${{ inputs['expectations-file-path'] }} --other-expectation-path ./workdir/expectations.json