mirror of
https://github.com/pezkuwichain/revive.git
synced 2026-10-20 18:56:17 +00:00
229ce55bd6064d4bc4a6611fbe5b4204feaa5bd6
5
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
229ce55bd6 |
Reduce total CI duration (#536)
## Description
Improves overall time spent for our CI checks to complete. For cache
hits, total time decreases from ~70min to ~29min.
## Overview
```mermaid
gantt
title CI on a PR — BEFORE ~70m vs NOW ~29m
dateFormat HH:mm
axisFormat %M
section BEFORE ~70m
[release] build-wasm 20m :r1, 00:00, 20m
[release] build-x86_64-apple-darwin 17m :r2, 00:00, 17m
[release] build-x86_64-pc-windows-msvc 11m :r3, 00:00, 11m
[release] build-x86_64-unknown-linux-musl 10m :r4, 00:00, 10m
[release] build-aarch64-apple-darwin 8m :r5, 00:00, 8m
[release] create-macos-universal 14s :r6, 00:17, 1m
[test-wasm] own duplicate wasm build 19m :w1, 00:00, 19m
[test-wasm] test matrix 3m :w2, 00:19, 3m
[test] required 12m :crit, t1, 00:00, 12m
[differential-tests] build matrix waits 8m for release :crit, t2, 00:12, 8m
[differential-tests] macos-x86_64 compile and hash 44m :crit, t3, 00:20, 44m
[differential-tests] windows-x86_64 compile and hash 26m :t4, 00:20, 26m
[differential-tests] linux-x86_64 compile and hash 20m :t5, 00:20, 20m
[differential-tests] macos-arm64 compile and hash 15m :t6, 00:20, 15m
[differential-tests] run-e2e-tests parallel 43m :t7, 00:22, 43m
[differential-tests] compare-hashes 5m :crit, t8, 01:04, 5m
[hardhat] use-hardhat chained 1m :crit, t9, 01:09, 1m
section NOW ~29m
[release] build-windows 3m :nr1, 00:00, 3m
[release] build-x86_64-apple-darwin 7m :nr2, 00:00, 7m
[release] build-linux 2m :nr3, 00:00, 2m
[release] build-aarch64-apple-darwin 2m :nr4, 00:00, 2m
[release] create-macos-universal 23s :nr5, 00:07, 1m
[release] build-wasm cache hit ~11s :nr6, 00:15, 1m
[test-wasm] shared wasm build 15m :nw1, 00:00, 15m
[test-wasm] test matrix 3m :nw2, 00:15, 3m
[test] required 6m :crit, nt1, 00:00, 6m
[test] check-changes 2s parallel :nt2, 00:00, 1m
[differential-tests] per-target cache hits ~1m 30s :crit, nt3, 00:06, 2m
[differential-tests] windows-x86_64 compile and hash 19m :crit, nt4, 00:08, 19m
[differential-tests] linux-x86_64 compile and hash 16m :nt5, 00:08, 16m
[differential-tests] macos-arm64 compile and hash 13m :nt6, 00:08, 13m
[differential-tests] run-e2e-tests 16m :nt7, 00:08, 16m
[differential-tests] compare-hashes 2m :crit, nt8, 00:27, 2m
[hardhat] use-hardhat parallel 1m :nt9, 00:07, 1m
```
## Measurements
| Metric | Before | Now | Improvement |
|---|---|---|---|
| **PR CI wall-clock** | 70m 15s | 28m 47s | **−41m 28s (−59%)** |
| `test` job (required check) | 12m 10s | 6m 17s | −5m 53s (faster LLVM
download) |
| `compile-and-hash` build phase | ~7m 30s (waiting on release builds) |
~30s (builds already available) to ~1m 30s (if waiting for macos) |
−6-7m (per-target build split + faster LLVM download) |
| `run-e2e-tests` build phase | ~7m 30s (waiting on release builds) |
~30s (`linux-x86_64` already available) | −7m (per-target build split) |
| Longest `compile-and-hash` job | 44m 05s (`macos-x86_64`) | 19m 08s
(`windows-x86_64`) | −24m 57s (`macos-x86_64` excluded on PRs) |
| `compile-and-hash` matrix start time | 20m 13s | 7m 54s | −12m 19s
(per-target build split + faster LLVM download) |
| `run-e2e-tests` start time | 21m 50s | 7m 36s | −14m 14s (per-target
build split + faster LLVM download) |
| `run-e2e-tests` duration | 43m 28s | 16m 22s | −27m 06s (concurrency
bump + flakiness fix) |
## Changes
| Change | Before | Now |
|---|---|---|
| **Per-target build sub-workflows** | <ul><li>Getting a reusable build
depended on all builds completing.</li><li>Even if e.g. a macOS build is
cached, the waiting workflow with macOS runners could be queued for a
long time just to get the status and cache of the other workflow, since
macOS runners are more scarce than e.g. Ubuntu.</li></ul> |
<ul><li>Split umbrella `reusable-build.yml` into
`reusable-build-{linux,macos,windows,wasm}.yml`.</li><li>Consumers can
wait on a specific target and start earlier instead of blocking on the
whole matrix.</li><li>E.g. E2E and the compile-and-hash matrix start
earlier (gate only on the targets needed).</li></ul> |
| **Bottleneck macOS Intel only running on `main`** | macOS Intel
runners are 2-3× slower than macOS ARM for the contract compilation
tests. Ran on each PR, being the bottleneck. | This build is now
excluded from the matrix for PR runs, and only included for pushes to
`main`. |
| **E2E tests use higher concurrency** | `run-e2e-tests` duration:
~43min.</li></ul> | <ul><li>Uses higher number of concurrent tasks, made
possible by retester flakiness fix.</li><li>`run-e2e-tests` duration:
~16min.</li></ul> |
| **Faster LLVM downloads** | Building resolc took ~8-13min (~16 min on
macOS intel). | `get-llvm/action.yml` uses more efficient version
detection. Building resolc now takes ~2min (~4-7 min on macOS intel). |
| **Wasm tests use cached artifacts** | `test-wasm.yml` ran its own
duplicate build. | `test-wasm.yml` uses the reusable Wasm build. |
| **Skip unnecessary polkadot-sdk package** | For E2E tests,
`polkadot-omni-node` was unconditionally downloaded (~3-4min). | Only
`pallet-revive-eth-rpc` and `revive-dev-node` are downloaded from the
cache. |
| **Cache `report-processor`** | Only `retester` was cached. |
`report-processor` is cached for the compilations and export hashes
jobs. |
| **Hardhat unblocked from differential tests** | Started after the
differential tests succeeded in order to reuse the Linux build. | Starts
as soon as the required `test` job succeeds, using the reusable Linux
build. |
| **Conditionally skip workflows** | <ul><li>Some workflows
conditionally skipped for md-only changes.</li><li>Tooling-only changes
also ran e.g. `test-wasm.yml` and `differential-tests.yml`.</ul></li> |
<ul><li>Most workflows are skipped for doc-only
updates.</li><li>Tooling-only updates trigger only the respective
tooling test (Hardhat), apart from the required `test`
job.</li><li>Differential tests are skipped for js-only
updates.</li></ul> |
| **Miscellaneous** | <ul><li>Used actions running on soon-deprecated
Node 20.</li><li>Difficult to debug Playwright `test-wasm`
failures.</li></ul> | <ul><li>Upgraded actions that used Node
20.</li><li>Added Playwright debug traces uploaded on `test-wasm`
failures.</li></ul> |
## Resolved Issues
Closes #533
|
||
|
|
3a20436ddb |
Fix Retester Flakiness (#540)
# Description Fixes issues with retester and some flakiness in tests. Issue is described in detail in https://github.com/paritytech/revive-differential-tests/pull/296 |
||
|
|
a3d5058b1d |
Configure concurrency for e2e tests to fix flakiness (#530)
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. |
||
|
|
ee869cdd18 |
Support solc v0.8.35 (#512)
- Support solc v0.8.35 - The new `erc7201` is comptime (already translated to a constant in Yul) Didn't spot any relevant breakage or addition in the release notes so should be no-brainer. --------- Signed-off-by: Cyrill Leutwiler <bigcyrill@hotmail.com> |
||
|
|
733e01c78e |
Implement verification of reproducible builds and run differential E2E tests (#468)
## Description This adds verification for reproducible builds (via [revive-differential-tests](https://github.com/paritytech/revive-differential-tests) testing framework) by: 1. Compiling [contracts](https://github.com/paritytech/resolc-compiler-tests/tree/main/fixtures/solidity) and generating hashes from each bytecode * With the resolc builds: * linux musl * macos universal * windows * (future todo: wasm32 emscripten) * With optimization levels `0`, `3`, `z` for each contract 2. Exporting the hashes 3. Comparing the hashes * For each optimization level: * Checks if each hash for a specific contract is identical across the platforms This PR also runs the differential E2E tests (via `retester`) with the resolc linux musl build. All of the above only runs if our `test` workflow succeeds. ## Related This PR initially implemented the above in this repo but has now been implemented into the separate testing framework instead. The most relevant PRs implemented alongside this PR as prerequisites are: * `revive-differential-tests`: * [Generate bytecode hashes included in the report ](https://github.com/paritytech/revive-differential-tests/pull/238) * [Fix handling of resolc's optimizer `mode` and allow setting solc optimizer enabled](https://github.com/paritytech/revive-differential-tests/pull/243) * [Fix solc and resolc optimization settings](https://github.com/paritytech/revive-differential-tests/pull/253) * [Implement a `compile` context/subcommand for standalone compilation mode](https://github.com/paritytech/revive-differential-tests/pull/239) * [Implement support for `--mode` CLI argument for `compile`](https://github.com/paritytech/revive-differential-tests/pull/246) * [Implement `export-hashes` and `compare-hashes` subcommands for report processor ](https://github.com/paritytech/revive-differential-tests/pull/250) * [Implement GH actions for compiling, exporting and comparing hashes](https://github.com/paritytech/revive-differential-tests/pull/251) * [Gate zombienet-sdk behind `cfg(unix)` to fix Windows builds](https://github.com/paritytech/revive-differential-tests/pull/254) * [Link library-using contracts with dummy addresses for `--compile` command](https://github.com/paritytech/revive-differential-tests/pull/267) * `revive`: * [Build LLVM for Windows using MSVC-compatible Clang](https://github.com/paritytech/revive/pull/497) * [Apply LLVM patches for deterministic operand order and correct peephole optimization for `minsize` ](https://github.com/paritytech/revive/pull/500) * Investigation of comparison mismatches in third-party dependencies: * `llvm-project`: * [`SelectionDAG` type legalization produces different operand ordering for `i256` multiply across platforms](https://github.com/llvm/llvm-project/issues/190148) * `solidity`: * [Windows absolute paths in standard JSON break import resolution and library linking](https://github.com/argotorg/solidity/issues/16579) ## Notes ### Failed compilations Since [resolc-compiler-tests](https://github.com/paritytech/resolc-compiler-tests) currently includes contracts that are expected to fail resolc compilation (e.g. due to unsupported instructions, contracts that are expected to work with solc for evm/revm), the compilation workflow job is not expected to fail if compilation fails for a contract. Instead, if a contract compiles with one build but not with another, a hash will be missing and will thereby generate a mismatch when comparing all hashes, failing at the verification step. ## Resolved Issues Closes [#175](https://github.com/paritytech/revive/issues/175) |