Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
96f11a1
Add script for compiling and generating hashes.
elle-j Feb 2, 2026
ff7fd85
Add script for comparing generated hashes.
elle-j Feb 2, 2026
1a31d89
Add GHA workflow for verifying reproducible builds.
elle-j Feb 2, 2026
e5e020c
Trigger new test-builds workflow after tests succeed.
elle-j Feb 2, 2026
0bd1995
Handle multiple compiled contracts from the same file.
elle-j Feb 2, 2026
e9ea206
Normalize the file path added as part of the hash entry.
elle-j Feb 2, 2026
364dd23
Fix concurrency group deadlock and reuse builds.
elle-j Feb 2, 2026
4b2c99f
Fix npm resolving which solc to use in sanity check.
elle-j Feb 2, 2026
6759c9e
Fix Windows 'Filename too long' error.
elle-j Feb 3, 2026
d967c82
Allow passing one contracts directory.
elle-j Feb 3, 2026
4e73e59
Move repeated logic into function.
elle-j Feb 3, 2026
2df795d
Make chosen optimization levels configurable by caller.
elle-j Feb 3, 2026
2bbe953
Try fix Windows hanging and add debug output.
elle-j Feb 3, 2026
f381f4e
Temporarily remove timeout-minutes.
elle-j Feb 3, 2026
b6635a9
Fix early termination.
elle-j Feb 4, 2026
c9e683c
Fix artifact upload on Windows.
elle-j Feb 5, 2026
a6f7c35
Refactor into Node scripts for shared logic across platforms.
elle-j Feb 9, 2026
e539d9e
Add Wasm to workflow job.
elle-j Feb 9, 2026
812d18a
Compile in project units to allow resolving imports.
elle-j Feb 10, 2026
b5e60af
Update workflow name in concurrency group id.
elle-j Feb 11, 2026
7267f63
Resolve import resolution for Windows.
elle-j Feb 11, 2026
e803931
Minor output update.
elle-j Feb 11, 2026
a0d6e7b
Update workflow name in concurrency group id.
elle-j Feb 12, 2026
396570f
Update to named arguments for easier use and maintenance.
elle-j Feb 12, 2026
5695cb6
Fix missing backslash.
elle-j Feb 12, 2026
8f1ded6
Merge branch 'main' into lj/ci-retester
elle-j Mar 12, 2026
c9d4aa3
Replace revive scripts with actions from the differential tests repo.
elle-j Mar 12, 2026
0123ad9
Update revive-differential-tests ref.
elle-j Mar 12, 2026
27da4b1
Update matrix.
elle-j Mar 12, 2026
eba7b9e
Update revive-differential-tests ref.
elle-j Mar 12, 2026
d8d1c08
Update revive-differential-tests ref.
elle-j Mar 13, 2026
fc8221e
Update revive-differential-tests ref.
elle-j Mar 13, 2026
ed39df3
Update revive-differential-tests ref.
elle-j Mar 17, 2026
352aa56
Update revive-differential-tests ref.
elle-j Mar 18, 2026
c8e488b
Run differential E2E tests.
elle-j Mar 19, 2026
e4c811e
Merge branch 'main' into lj/ci-retester
elle-j Mar 19, 2026
fd5a1a3
Update revive-differential-tests ref.
elle-j Mar 19, 2026
193f360
Pass explicit solc version to E2E test run.
elle-j Mar 19, 2026
794a8b8
Update revive-differential-tests ref.
elle-j Mar 19, 2026
45e8004
Prevent differential tests from being canceled by sibling job failures.
elle-j Mar 19, 2026
5d2560d
Update revive-differential-tests ref.
elle-j Mar 19, 2026
5838412
Update Polkadot SDK ref.
elle-j Mar 25, 2026
6e7151d
Update revive-differential-tests ref.
elle-j Mar 26, 2026
285a940
Prevent differential tests from being canceled by sibling job failures.
elle-j Mar 26, 2026
5e00736
Update revive-differential-tests ref.
elle-j Mar 26, 2026
382bcab
Update revive-differential-tests ref.
elle-j Mar 30, 2026
72895f2
Use new LLVM draft release.
elle-j Mar 30, 2026
13ccf19
Add auth bearer to llvm donwload.
elle-j Mar 30, 2026
5ab5139
Try fetch draft release.
elle-j Mar 30, 2026
9bb537a
Add comments to action.
elle-j Mar 30, 2026
559c35a
Update revive-differential-tests ref.
elle-j Mar 30, 2026
b1ed29f
Use LLVM draft release with patch.
elle-j Apr 6, 2026
01ae964
Merge branch 'main' into lj/ci-retester
elle-j Apr 8, 2026
5093a99
Update revive-differential-tests ref.
elle-j Apr 8, 2026
a663d58
Run differential tests on parity-large.
elle-j Apr 8, 2026
d801f05
Try utilize forklift for Polkadot SDK.
elle-j Apr 8, 2026
784b9bb
Configure forklift.
elle-j Apr 8, 2026
1c38116
Add timeout-minutes to differential tests.
elle-j Apr 8, 2026
4d6c2ed
Update revive-differential-tests ref.
elle-j Apr 8, 2026
cfa1fb6
Add expectations files (expected failures) for differential tests.
elle-j Apr 9, 2026
d455b5f
Merge branch 'main' into lj/ci-retester
elle-j Apr 9, 2026
96f975e
Use new LLVM draft release.
elle-j Apr 9, 2026
a1d3e44
Merge branch 'main' into lj/ci-retester
elle-j Apr 9, 2026
51938f6
Use new published LLVM release.
elle-j Apr 9, 2026
6a363cc
Merge branch 'main' into lj/ci-retester
elle-j Apr 10, 2026
0e77060
Remove unnecessary platform from workflow matrix.
elle-j Apr 10, 2026
f53904d
Update polkadot-sdk ref to match Cargo.toml.
elle-j Apr 13, 2026
ceafe46
Update revive-differential-tests ref.
elle-j Apr 13, 2026
9a6725a
Update file for expected differential tests execution failures.
elle-j Apr 13, 2026
527d539
Merge branch 'main' into lj/ci-retester
elle-j Apr 14, 2026
90f4c07
Update polkadot-sdk ref to match Cargo.toml (2603.0.0).
elle-j Apr 14, 2026
08a4384
Add compilation on macos-15-intel runner.
elle-j Apr 14, 2026
0991733
Rename workflow file.
elle-j Apr 14, 2026
8c4a504
Update solc from 0.8.33 to 0.8.34.
elle-j Apr 14, 2026
200cc8a
Move creations of macos universal to shared job in reusable-build
elle-j Apr 14, 2026
709fd3c
Update platform label.
elle-j Apr 14, 2026
efe5ce6
Configure concurrency for create-macos-universal job.
elle-j Apr 14, 2026
e028251
Cache the universal build.
elle-j Apr 14, 2026
a73e84a
Update revive-differential-tests ref.
elle-j Apr 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
939 changes: 939 additions & 0 deletions .github/assets/revive-dev-node-polkavm-resolc.json

Large diffs are not rendered by default.

176 changes: 176 additions & 0 deletions .github/workflows/differential-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,176 @@
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.34"

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

# 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"
39 changes: 1 addition & 38 deletions .github/workflows/release-nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -53,46 +53,11 @@ jobs:
is_release: false
retention_days: 40

create-macos-fat-binary:
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
needs: [build]
outputs:
resolc-universal-apple-darwin_url: ${{ steps.set-output.outputs.resolc-universal-apple-darwin_url }}
resolc-universal-apple-darwin_sha: ${{ steps.set-output.outputs.resolc-universal-apple-darwin_sha }}
runs-on: macos-15
steps:
- uses: actions/download-artifact@v4
with:
merge-multiple: true

- name: Create macOS Fat Binary
run: |
lipo resolc-aarch64-apple-darwin resolc-x86_64-apple-darwin -create -output resolc-universal-apple-darwin

- name: Make Executable
run: |
chmod +x resolc-universal-apple-darwin

- uses: actions/upload-artifact@v4
id: artifact-upload-step
with:
name: resolc-universal-apple-darwin
path: resolc-universal-apple-darwin
retention-days: 40

- name: Set output variables
id: set-output
env:
TARGET: resolc-universal-apple-darwin
run: |
echo "${TARGET}_url=${{ steps.artifact-upload-step.outputs.artifact-url }}" >> "$GITHUB_OUTPUT"
echo "${TARGET}_sha=${{ steps.artifact-upload-step.outputs.artifact-digest }}" >> "$GITHUB_OUTPUT"

generate-nightly-json:
runs-on: ubuntu-24.04
if: ${{ needs.check_commits.outputs.has_commits == 'true' }}
environment: tags
needs: [build, create-macos-fat-binary, check_commits]
needs: [build, check_commits]
steps:
- name: Checkout revive
uses: actions/checkout@v4
Expand Down Expand Up @@ -129,8 +94,6 @@ jobs:
run: |
echo '[' > data.json
echo '${{ toJSON(needs.build.outputs) }}' >> data.json
echo ',' >> data.json
echo '${{ toJSON(needs.create-macos-fat-binary.outputs) }}' >> data.json
echo ']' >> data.json
chmod +x bins/resolc-x86_64-unknown-linux-musl
export FIRST_SOLC_VERSION=$(./bins/resolc-x86_64-unknown-linux-musl --supported-solc-versions | cut -f 1 -d "," | tr -d ">=")
Expand Down
20 changes: 8 additions & 12 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -69,31 +69,27 @@ jobs:
create-release:
if: startsWith(github.ref_name, 'v')
needs: [check-version-changed, build]
runs-on: macos-15
runs-on: ubuntu-24.04
environment: tags
steps:
- name: Download Artifacts
uses: actions/download-artifact@v4
with:
merge-multiple: true

- name: Create macOS Fat Binary
run: |
lipo resolc-aarch64-apple-darwin resolc-x86_64-apple-darwin -create -output resolc-universal-apple-darwin

- name: Make Executable
run: |
chmod +x resolc-x86_64-unknown-linux-musl
chmod +x resolc-universal-apple-darwin

- name: Create sha-256 checksum
run: |
shasum -a 256 resolc-x86_64-unknown-linux-musl > checksums.txt
shasum -a 256 resolc-universal-apple-darwin >> checksums.txt
shasum -a 256 resolc-x86_64-pc-windows-msvc.exe >> checksums.txt
shasum -a 256 resolc.js >> checksums.txt
shasum -a 256 resolc.wasm >> checksums.txt
shasum -a 256 resolc_web.js >> checksums.txt
sha256sum resolc-x86_64-unknown-linux-musl > checksums.txt
sha256sum resolc-universal-apple-darwin >> checksums.txt
sha256sum resolc-x86_64-pc-windows-msvc.exe >> checksums.txt
sha256sum resolc.js >> checksums.txt
sha256sum resolc.wasm >> checksums.txt
sha256sum resolc_web.js >> checksums.txt

- uses: actions/create-github-app-token@v1
id: app-token
Expand Down Expand Up @@ -126,7 +122,7 @@ jobs:

npm-release:
needs: [create-release]
runs-on: macos-15
runs-on: ubuntu-24.04
environment: tags
steps:
- uses: actions/checkout@v4
Expand Down
Loading
Loading