diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 00000000..b5c5aac9 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,141 @@ +name: CI + +on: + merge_group: + pull_request: + branches: [main, "release-*"] + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +# this is needed to gain access via OIDC to the S3 bucket for caching +permissions: + id-token: write + contents: read + +env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RISC0_TOOLCHAIN_VERSION: v2024-01-31.1 + +jobs: + # see: https://github.com/orgs/community/discussions/26822 + main-status-check: + if: always() + needs: + - check + - check-benchmarks + - check-template + - crates-validator + - doc + - examples + - reproducible-build + - stark2snark + - test + - web + runs-on: ubuntu-latest + steps: + - name: Check all job status + # see https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#needs-context + # see https://stackoverflow.com/a/67532120/4907315 + if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} + run: exit 1 + + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + # Full history is required by license-check.py + fetch-depth: 0 + - uses: ./.github/actions/rustup + - name: Install cargo-sort + uses: risc0/cargo-install@b9307573043522ab0d3e3be64a51763b765b52a4 + with: + crate: cargo-sort + version: "1.0" + - uses: actions/setup-node@v3 + with: + node-version: 18 + - run: cargo fmt --all --check + - run: cargo fmt --all --check --manifest-path relay/tests/methods/guest/Cargo.toml + - run: cargo clippy + env: + RISC0_SKIP_BUILD: true + - run: cargo sort --workspace --check + - run: cargo sort --workspace --check relay/tests/methods/guest + - uses: actions/setup-python@v4 + with: + python-version: "3.10" + - run: python license-check.py + + test: + runs-on: [self-hosted, prod, "${{ matrix.os }}", "${{ matrix.device }}"] + strategy: + fail-fast: false + matrix: + os: [Linux, macOS] + feature: [default] + device: [cpu] + include: + - os: Linux + feature: default + device: nvidia_rtx_a5000 + - os: macOS + feature: default + device: apple_m2_pro + env: + FEATURE: ${{ matrix.feature }} + RISC0_BUILD_LOCKED: 1 + RUST_BACKTRACE: full + steps: + # This is a workaround from: https://github.com/actions/checkout/issues/590#issuecomment-970586842 + - run: "git checkout -f $(git -c user.name=x -c user.email=x@x commit-tree $(git hash-object -t tree /dev/null) < /dev/null) || :" + - uses: actions/checkout@v4 + - if: matrix.feature == 'cuda' + uses: ./.github/actions/cuda + - uses: ./.github/actions/rustup + - uses: ./.github/actions/sccache + with: + key: ${{ matrix.os }}-${{ matrix.feature }} + # TODO(victor) How to install cargo-risczero + - run: cargo run --bin cargo-risczero --no-default-features -- risczero install --version $RISC0_TOOLCHAIN_VERSION + - name: build workspace + run: | + cargo test -F $FEATURE --workspace --timings --no-run \ + --exclude doc-test \ + --exclude bonsai-ethereum-contracts \ + --exclude bonsai-ethereum-relay \ + --exclude bonsai-rest-api-mock + - name: test workspace + run: | + cargo test -F $FEATURE -F prove --workspace --timings \ + --exclude doc-test \ + --exclude bonsai-ethereum-contracts \ + --exclude bonsai-ethereum-relay \ + --exclude bonsai-rest-api-mock + - uses: actions/upload-artifact@v3 + with: + name: cargo-timings-${{ matrix.os }}-${{ matrix.device }} + path: target/cargo-timings/ + retention-days: 5 + - run: sccache --show-stats + + doc: + runs-on: [self-hosted, prod, macOS, cpu] + steps: + # This is a workaround from: https://github.com/actions/checkout/issues/590#issuecomment-970586842 + - run: "git checkout -f $(git -c user.name=x -c user.email=x@x commit-tree $(git hash-object -t tree /dev/null) < /dev/null) || :" + - uses: actions/checkout@v4 + - uses: ./.github/actions/rustup + - uses: risc0/foundry-toolchain@2fe7e70b520f62368a0e3c464f997df07ede420f + with: + version: nightly-09fe3e041369a816365a020f715ad6f94dbce9f2 + - uses: ./.github/actions/sccache + with: + key: macOS-default + # TODO(victor): Figure out how to install cargo-risczro here + - run: cargo run --bin cargo-risczero --no-default-features -- risczero install --version $RISC0_TOOLCHAIN_VERSION + - run: cargo doc --no-deps --exclude=risc0-ethereum-relay-test-methods --workspace + - run: sccache --show-stats