Skip to content

Verify Reproducible Build #5

Verify Reproducible Build

Verify Reproducible Build #5

name: Verify Reproducible Build
on:
workflow_dispatch:
schedule:
- cron: "0 2 */3 * *"
jobs:
verify:
name: "[op-rbuilder] Verify reproducible builds"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- name: Build twice and compare
run: |
export REPRO_FLAGS="--C target-feature=+crt-static -C link-arg=-static-libgcc -C link-arg=-Wl,--build-id=none -C metadata='' --remap-path-prefix=$(pwd)=."
export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
RUSTFLAGS="$REPRO_FLAGS" CARGO_INCREMENTAL=0 LC_ALL=C TZ=UTC \
CFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" CXXFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" \
cargo build --release --locked -p op-rbuilder --target x86_64-unknown-linux-gnu
mv target/x86_64-unknown-linux-gnu/release/op-rbuilder build1
cargo clean
RUSTFLAGS="$REPRO_FLAGS" CARGO_INCREMENTAL=0 LC_ALL=C TZ=UTC \
CFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" CXXFLAGS="-D__TIME__=\"\" -D__DATE__=\"\"" \
cargo build --release --locked -p op-rbuilder --target x86_64-unknown-linux-gnu
mv target/x86_64-unknown-linux-gnu/release/op-rbuilder build2
if cmp -s build1 build2; then
echo "✅ Builds are reproducible"
else
echo "❌ Builds differ"
exit 1
fi