mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-10-21 11:16:17 +00:00
We experienced flakiness in the e2e tests after bumping the revive-differential-tests submodule which included changes to the global RPC concurrency limiter and batching layer. This PR attempts to fix the flakiness by lowering the number of concurrent tasks spawned.
180 lines
6.3 KiB
YAML
180 lines
6.3 KiB
YAML
name: Verify Reproducible Builds
|
|
|
|
on:
|
|
workflow_call:
|
|
|
|
env:
|
|
# The compiler modes to use for compilation by retester.
|
|
MODES: "Y M0 S+, Y M3 S+, Y Mz S+"
|
|
SOLC_VERSION: "0.8.35"
|
|
|
|
jobs:
|
|
build:
|
|
uses: ./.github/workflows/reusable-build.yml
|
|
with:
|
|
is_release: false
|
|
retention_days: 1
|
|
|
|
compile-and-export-hashes-native:
|
|
needs: build
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- platform: linux-x86_64
|
|
target: x86_64-unknown-linux-musl
|
|
runner: ubuntu-24.04
|
|
- platform: macos-arm64
|
|
target: universal-apple-darwin
|
|
runner: macos-15
|
|
- platform: macos-x86_64
|
|
target: universal-apple-darwin
|
|
runner: macos-15-intel
|
|
- platform: windows-x86_64
|
|
target: x86_64-pc-windows-msvc
|
|
runner: windows-2022
|
|
runs-on: ${{ matrix.runner }}
|
|
steps:
|
|
# For some deeply nested contracts in `resolc-compiler-tests`, Windows
|
|
# will generate a "Filename too long" error. This step enables long paths.
|
|
- name: Enable Git Long Paths (Windows)
|
|
if: ${{ runner.os == 'Windows' }}
|
|
run: git config --system core.longpaths true
|
|
|
|
- name: Checkout revive
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: revive
|
|
submodules: recursive
|
|
|
|
- name: Download Binary
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: resolc-${{ matrix.target }}
|
|
path: resolc-bin
|
|
|
|
- name: Make resolc Executable
|
|
shell: bash
|
|
run: chmod +x "resolc-bin/resolc-${{ matrix.target }}${{ runner.os == 'Windows' && '.exe' || '' }}"
|
|
|
|
- name: Compile Contracts
|
|
id: compile
|
|
uses: ./revive/revive-differential-tests/.github/actions/compile-contracts
|
|
with:
|
|
revive-differential-tests-path: revive/revive-differential-tests
|
|
resolc-path: resolc-bin/resolc-${{ matrix.target }}${{ runner.os == 'Windows' && '.exe' || '' }}
|
|
solc-version: ${{ env.SOLC_VERSION }}
|
|
modes: ${{ env.MODES }}
|
|
upload-artifact-name: compilation-report-${{ matrix.platform }}
|
|
|
|
- name: Export Bytecode Hashes
|
|
uses: ./revive/revive-differential-tests/.github/actions/export-bytecode-hashes
|
|
with:
|
|
revive-differential-tests-path: revive/revive-differential-tests
|
|
report-path: ${{ steps.compile.outputs.report-path }}
|
|
remove-prefix: ${{ steps.compile.outputs.contracts-source-prefix }}
|
|
platform-label: ${{ matrix.platform }}
|
|
upload-artifact-name: hashes-${{ matrix.platform }}
|
|
|
|
compare-hashes:
|
|
needs: compile-and-export-hashes-native
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- name: Checkout revive
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: revive
|
|
submodules: true
|
|
|
|
- name: Compare Bytecode Hashes
|
|
uses: ./revive/revive-differential-tests/.github/actions/compare-bytecode-hashes
|
|
with:
|
|
revive-differential-tests-path: revive/revive-differential-tests
|
|
hash-artifact-names: "hashes-linux-x86_64, hashes-macos-arm64, hashes-macos-x86_64, hashes-windows-x86_64"
|
|
modes: ${{ env.MODES }}
|
|
upload-artifact-name: hash-comparison-result
|
|
|
|
run-e2e-tests:
|
|
needs: build
|
|
runs-on: parity-large
|
|
timeout-minutes: 75
|
|
env:
|
|
# Commit SHA that produced the polkadot-sdk crate pinned in Cargo.toml,
|
|
# obtained from the crate's .cargo_vcs_info.json via:
|
|
# curl -sL https://crates.io/api/v1/crates/polkadot-sdk/<VERSION>/download | tar xzO '*/.cargo_vcs_info.json'
|
|
# Current version: 2603.0.0
|
|
POLKADOT_SDK_REF: "c56b086a3cfcb3a48b75fd1ef9c77ad9b7408b95"
|
|
RUSTFLAGS: "-Awarnings"
|
|
steps:
|
|
- name: Checkout revive
|
|
uses: actions/checkout@v4
|
|
with:
|
|
path: revive
|
|
submodules: recursive
|
|
|
|
- name: Download Binary
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: resolc-x86_64-unknown-linux-musl
|
|
path: ./resolc-bin
|
|
|
|
- name: Make resolc Executable
|
|
shell: bash
|
|
run: chmod +x ./resolc-bin/resolc-x86_64-unknown-linux-musl
|
|
|
|
- name: Checkout Polkadot SDK
|
|
uses: actions/checkout@v4
|
|
with:
|
|
repository: paritytech/polkadot-sdk
|
|
ref: ${{ env.POLKADOT_SDK_REF }}
|
|
path: polkadot-sdk
|
|
submodules: recursive
|
|
|
|
- name: Install Dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential pkg-config libssl-dev protobuf-compiler llvm clang libclang-dev
|
|
|
|
- name: Download forklift
|
|
run: |
|
|
curl -fsSLo forklift https://github.com/paritytech/forklift/releases/download/0.15.0/forklift_0.15.0_linux_amd64
|
|
chmod +x forklift
|
|
sudo mv forklift /usr/local/bin/
|
|
|
|
- name: Configure forklift
|
|
run: |
|
|
mkdir -p .forklift
|
|
cp polkadot-sdk/.forklift/config.toml .forklift/config.toml
|
|
|
|
- name: Set Up Rust Toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: "1.90.0"
|
|
target: "wasm32-unknown-unknown"
|
|
components: "rust-src"
|
|
rustflags: ""
|
|
|
|
- name: Run Differential E2E Tests
|
|
uses: ./revive/revive-differential-tests/.github/actions/run-differential-tests
|
|
with:
|
|
revive-differential-tests-path: revive/revive-differential-tests
|
|
polkadot-sdk-path: ./polkadot-sdk
|
|
cargo-command: "forklift cargo"
|
|
platform: revive-dev-node-polkavm-resolc
|
|
resolc-path: ./resolc-bin/resolc-x86_64-unknown-linux-musl
|
|
solc-version: ${{ env.SOLC_VERSION }}
|
|
expectations-file-path: ./revive/.github/assets/revive-dev-node-polkavm-resolc.json
|
|
# Using a higher concurrency, such as 100, currently overloads the dev node's RPC
|
|
# bridge, causing intermittent `eth_getTransactionReceipt` timeouts during code upload.
|
|
concurrency-number-of-concurrent-tasks: 50
|
|
|
|
# Sentinel job that depends on the jobs we want to allow completing (instead of
|
|
# being canceled once the other job chains complete). Thus, run-e2e-tests
|
|
# will always run even if compare-hashes finishes first, and vice versa.
|
|
wait-for-jobs:
|
|
if: ${{ always() }}
|
|
needs: [compare-hashes, run-e2e-tests]
|
|
runs-on: ubuntu-24.04
|
|
steps:
|
|
- run: echo "All jobs finished"
|