diff --git a/.github/actions/install-risc0/action.yml b/.github/actions/install-risc0/action.yml new file mode 100644 index 00000000000..cd53dcc9568 --- /dev/null +++ b/.github/actions/install-risc0/action.yml @@ -0,0 +1,15 @@ +name: "Install RISC0" +description: "Install RISC0 Toolchain" + +runs: + using: "composite" + steps: + - name: Install RISC0 + shell: bash + run: | + curl -L https://risczero.com/install | bash + ~/.risc0/bin/rzup install cargo-risczero 3.0.3 + ~/.risc0/bin/rzup install risc0-groth16 + ~/.risc0/bin/rzup install rust + ~/.risc0/bin/rzup install cpp + ~/.risc0/bin/rzup install r0vm 3.0.3 diff --git a/.github/workflows/pr-main_l2.yaml b/.github/workflows/pr-main_l2.yaml index e0557cad6c7..a7e2bd18da4 100644 --- a/.github/workflows/pr-main_l2.yaml +++ b/.github/workflows/pr-main_l2.yaml @@ -69,11 +69,7 @@ jobs: - name: Install RISC0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - curl -L https://risczero.com/install | bash - ~/.risc0/bin/rzup install cargo-risczero 3.0.3 - ~/.risc0/bin/rzup install risc0-groth16 - ~/.risc0/bin/rzup install rust + uses: ./.github/actions/install-risc0 - name: Create placeholder SP1 ELF run: | diff --git a/.github/workflows/pr-main_l2_prover.yaml b/.github/workflows/pr-main_l2_prover.yaml index 5e5be846518..56948e81ec7 100644 --- a/.github/workflows/pr-main_l2_prover.yaml +++ b/.github/workflows/pr-main_l2_prover.yaml @@ -30,17 +30,11 @@ jobs: - name: Add Rust Cache uses: Swatinem/rust-cache@v2 - - name: RISC-V Risc0 toolchain install + - name: Install RISC0 if: matrix.backend == 'risc0' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # should be able to specify a version for `rzup install rust` (toolchain version) - # but it throws a "error decoding response body" in that case - run: | - curl -L https://risczero.com/install | bash - ~/.risc0/bin/rzup install cargo-risczero 3.0.3 - ~/.risc0/bin/rzup install risc0-groth16 - ~/.risc0/bin/rzup install rust + uses: ./.github/actions/install-risc0 - name: RISC-V SP1 toolchain install if: matrix.backend == 'sp1' diff --git a/.github/workflows/tag_release.yaml b/.github/workflows/tag_release.yaml index 29682c1e31c..f9aa7c5868b 100644 --- a/.github/workflows/tag_release.yaml +++ b/.github/workflows/tag_release.yaml @@ -18,6 +18,7 @@ permissions: env: REGISTRY: ghcr.io IMAGE_NAME: ${{ github.repository }} + PROVER_REPRODUCIBLE_BUILD: true jobs: build-ethrex: @@ -96,11 +97,8 @@ jobs: if: ${{ matrix.platform == 'ubuntu-22.04' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - curl -L https://risczero.com/install | bash - ~/.risc0/bin/rzup install cargo-risczero 3.0.3 - ~/.risc0/bin/rzup install risc0-groth16 - ~/.risc0/bin/rzup install rust + uses: ./.github/actions/install-risc0 + - name: Install CUDA (only Linux x86 GPU) uses: Jimver/cuda-toolkit@v0.2.24 if: ${{ matrix.platform == 'ubuntu-22.04' && matrix.stack == 'l2_gpu' }} @@ -185,11 +183,7 @@ jobs: if: ${{ matrix.zkvm == 'risc0' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - curl -L https://risczero.com/install | bash - ~/.risc0/bin/rzup install cargo-risczero 3.0.3 - ~/.risc0/bin/rzup install risc0-groth16 - ~/.risc0/bin/rzup install rust + uses: ./.github/actions/install-risc0 - name: Build ethrex elf - ${{ matrix.zkvm }} run: | diff --git a/crates/l2/prover/src/guest_program/build.rs b/crates/l2/prover/src/guest_program/build.rs index ba2d8ea3fa1..58e205f3698 100644 --- a/crates/l2/prover/src/guest_program/build.rs +++ b/crates/l2/prover/src/guest_program/build.rs @@ -19,15 +19,22 @@ fn build_risc0_program() { vec![] }; - let docker_options = DockerOptionsBuilder::default() - .root_dir(format!("{}/../../../../../", env!("CARGO_MANIFEST_DIR"))) - .build() - .unwrap(); - let guest_options = GuestOptionsBuilder::default() - .features(features) - .use_docker(docker_options) - .build() - .unwrap(); + let guest_options = if option_env!("PROVER_REPRODUCIBLE_BUILD").is_some() { + let docker_options = DockerOptionsBuilder::default() + .root_dir(format!("{}/../../../../../", env!("CARGO_MANIFEST_DIR"))) + .build() + .unwrap(); + GuestOptionsBuilder::default() + .features(features) + .use_docker(docker_options) + .build() + .unwrap() + } else { + GuestOptionsBuilder::default() + .features(features) + .build() + .unwrap() + }; let built_guests = embed_methods_with_options(std::collections::HashMap::from([( "zkvm-risc0-program", @@ -66,7 +73,7 @@ fn build_sp1_program() { output_directory: Some("./src/sp1/out".to_string()), elf_name: Some("riscv32im-succinct-zkvm-elf".to_string()), features, - docker: true, + docker: option_env!("PROVER_REPRODUCIBLE_BUILD").is_some(), tag: "v5.0.8".to_string(), workspace_directory: Some(format!("{}/../../../../../", env!("CARGO_MANIFEST_DIR"))), ..Default::default()