Skip to content

emulator: Add RISC-V compliance nightly tests #89

emulator: Add RISC-V compliance nightly tests

emulator: Add RISC-V compliance nightly tests #89

Workflow file for this run

# Licensed under the Apache-2.0 license
name: Build and Test
on:
push:
branches: ["main"]
pull_request:
workflow_call:
workflow_dispatch:
jobs:
build_and_test:
runs-on: ubuntu-24.04
env:
CARGO_INCREMENTAL: 0
SCCACHE_VERSION: 0.8.2
SCCACHE_GHA_CACHE_TO: sccache-caliptra-mcu-sw
SCCACHE_GHA_CACHE_FROM: sccache-caliptra-mcu-sw
# CPTRA_COVERAGE_PATH: /tmp
# Change this to a new random value if you suspect the cache is corrupted
SCCACHE_C_CUSTOM_CACHE_BUSTER: 8b42a6e70ec4
# Compiler warnings should fail to compile
EXTRA_CARGO_CONFIG: "target.'cfg(all())'.rustflags = [\"-Dwarnings\"]"
steps:
- name: Checkout repo
uses: actions/checkout@v4
with:
submodules: recursive
- name: Test commit name
run: |
echo "Build-Test: release_ref=$(git rev-parse HEAD)"
- name: Install required packages
run: |
sudo apt-get update -qy && \
sudo apt-get install build-essential curl gcc-multilib gcc-riscv64-unknown-elf git \
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf -y | sh
rustup update
- name: Restore sccache binary
uses: actions/cache/restore@v3
id: sccache_bin_restore
with:
path: ~/.cargo/bin/sccache
key: sccache-bin-${{ env.SCCACHE_VERSION }}-${{ env.SCCACHE_C_CUSTOM_CACHE_BUSTER }}
- name: Install sccache
if: steps.sccache_bin_restore.outputs.cache-hit != 'true'
run: |
cargo install sccache --version ${SCCACHE_VERSION} --no-default-features --features=gha --locked
# Save the sccache binary immediately so we can reuse it in future runs
# even if the rest of the current run fails.
- name: Save sccache binary
uses: actions/cache/save@v3
if: steps.sccache_bin_restore.outputs.cache-hit != 'true'
with:
path: ~/.cargo/bin/sccache
key: ${{ steps.sccache_bin_restore.outputs.cache-primary-key }}
- name: Configure sccache
uses: actions/github-script@v6
with:
script: |
core.exportVariable('RUSTC_WRAPPER', process.env.HOME + '/.cargo/bin/sccache');
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
- name: Check that Cargo.lock doesn't need to be updated
# Note: this isn't the same as checking that Cargo.lock is up to date
# (cargo update --locked), which makes sure that every package is the
# latest published version. This is just ensuring that every
# dependency has an entry in Cargo.lock that is compatible with the
# version requirements in all Cargo.toml files.
run: |
# This works because cargo tree requires a Cargo.lock with no required updates
cargo tree --locked > /dev/null || (
echo "Please include required changes to Cargo.lock in your pull request"
# Without the --locked flag, cargo will do the minimal possible update to Cargo.lock
cargo tree > /dev/null 2> /dev/null
# Print out the differences to ease debugging
git diff Cargo.lock
exit 1
)
- name: Run precheckin
run: |
cargo --config "$EXTRA_CARGO_CONFIG" xtask precheckin
sccache --show-stats