Skip to content

Test (MSRV check)

Test (MSRV check) #139

name: Test (MSRV check)
# TL;DR https://github.com/noir-lang/noir/issues/4384
#
# This workflow acts to ensure that we can publish to crates.io, we need this extra check as libraries don't respect the Cargo.lock file committed in this repository.
# We must then always be able to build the workspace using the latest versions of all of our dependencies, so we explicitly update them and build in this workflow.
on:
schedule:
# Run a nightly check at 2 AM UTC
- cron: "0 2 * * *"
push:
branches:
- master
# This will cancel previous runs when a branch or PR is updated
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.ref || github.run_id }}
cancel-in-progress: true
jobs:
build-test-artifacts:
name: Build test artifacts
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup toolchain
uses: dtolnay/[email protected]
with:
targets: x86_64-unknown-linux-gnu
# We force the ACVM crate and all of its dependencies to update their dependencies
# This ensures that we'll be able to build the crates when they're being published.
- name: Update Cargo.lock
run: |
cargo update --package acvm --aggressive
cargo update --package bn254_blackbox_solver --aggressive
- uses: Swatinem/rust-cache@v2
with:
key: x86_64-unknown-linux-gnu-msrv-check
cache-on-failure: true
save-if: ${{ github.event_name != 'merge_group' }}
- name: Install nextest
uses: taiki-e/install-action@v2
with:
tool: [email protected]
- name: Build and archive tests
run: cargo nextest archive --workspace --release --archive-file nextest-archive.tar.zst
- name: Upload archive to workflow
uses: actions/upload-artifact@v4
with:
name: nextest-archive
path: nextest-archive.tar.zst
run-tests:
name: "Run tests (partition ${{matrix.partition}})"
runs-on: ubuntu-latest
needs: [build-test-artifacts]
strategy:
fail-fast: false
matrix:
partition: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v4
- name: Setup toolchain
uses: dtolnay/[email protected]
with:
targets: x86_64-unknown-linux-gnu
- name: Install nextest
uses: taiki-e/install-action@v2
with:
tool: [email protected]
- name: Download archive
uses: actions/download-artifact@v4
with:
name: nextest-archive
- name: Run tests
run: |
cargo nextest run --archive-file nextest-archive.tar.zst \
--partition count:${{ matrix.partition }}/4 \
--no-fail-fast
# This is a job which depends on all test jobs and reports the overall status.
# This allows us to add/remove test jobs without having to update the required workflows.
tests-end:
name: Rust End
runs-on: ubuntu-latest
# We want this job to always run (even if the dependant jobs fail) as we want this job to fail rather than skipping.
if: ${{ always() }}
needs:
- run-tests
steps:
- name: Report overall success
run: |
if [[ $FAIL == true ]]; then
exit 1
else
exit 0
fi
env:
# We treat any cancelled, skipped or failing jobs as a failure for the workflow as a whole.
FAIL: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'skipped') }}
- name: Checkout
if: ${{ failure() }}
uses: actions/checkout@v4
# Raise an issue if the tests failed
- name: Alert on failed publish
uses: JasonEtco/create-an-issue@v2
if: ${{ failure() }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
WORKFLOW_NAME: ${{ github.workflow }}
WORKFLOW_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
with:
update_existing: true
filename: .github/ACVM_NOT_PUBLISHABLE.md