Skip to content

Commit

Permalink
Add CI test for --use-local-toolchain
Browse files Browse the repository at this point in the history
  • Loading branch information
jaisnan committed Mar 13, 2024
1 parent e7a4d83 commit e1b35d5
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 1 deletion.
78 changes: 78 additions & 0 deletions .github/workflows/check-setup.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# Copyright Kani Contributors
# SPDX-License-Identifier: Apache-2.0 OR MIT
#
# Job to check if the setup flow and associated flags are working as expected
#
# This will run everytime there's a change to main
name: Check Setup
on:
pull_request:
push:
branches:
- 'main'

jobs:
test-use-local-toolchain:
name: TestLocalToolchain
strategy:
matrix:
os: [macos-13, ubuntu-20.04, ubuntu-22.04]
include:
- os: macos-13
rust_target: x86_64-apple-darwin
- os: ubuntu-20.04
rust_target: x86_64-unknown-linux-gnu
- os: ubuntu-22.04
rust_target: x86_64-unknown-linux-gnu
runs-on: ${{ matrix.os }}
steps:
- name: Checkout Kani
uses: actions/checkout@v4
with:
fetch-depth: '0'
submodules: 'true'

- name: Check download
run: |
ls -lh .
- name: Install from bundle
run: |
cargo install --locked --path .
- name: Extract nightly version date from rust-toolchain.toml
id: extract-date
run: |
DATE=$(grep 'channel' rust-toolchain.toml | cut -d '=' -f2 | tr -d ' "' | cut -d'-' -f2-)
echo "Nightly date: $DATE"
echo "DATE=$DATE" >> $GITHUB_ENV
- name: Remove installed Rust toolchain
run: rustup toolchain remove nightly-$DATE

- name: Create a custom toolchain directory
run: mkdir -p ${{ github.workspace }}/custom_toolchain

- name: Fetch the nightly tarball
run: |
echo "Downloading Rust toolchain from rust server."
curl --proto '=https' --tlsv1.2 -O https://static.rust-lang.org/dist/$DATE/rust-nightly-${{ matrix.rust_target }}.tar.gz
tar -xzf rust-nightly-${{ matrix.rust_target }}.tar.gz
./rust-nightly-${{ matrix.rust_target }}/install.sh --prefix=${{ github.workspace }}/custom_toolchain
- name: Ensure installation is correct
run: |
cargo kani setup --use-local-toolchain ${{ github.workspace }}/custom_toolchain/
- name: Ensure that the rustup toolchain is not present
run: ls -la ~/.rustup/toolchains/

- name: Run tests
run: |
ls ./tests/cargo-ui/
for dir in function multiple-harnesses verbose; do
>&2 echo "Running test $dir"
pushd ./tests/cargo-ui/$dir
cargo kani
popd
done
6 changes: 5 additions & 1 deletion src/setup.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,18 +145,22 @@ pub(crate) fn get_rust_toolchain_version(kani_dir: &Path) -> Result<String> {
fn setup_rust_toolchain(kani_dir: &Path, use_local_toolchain: Option<OsString>) -> Result<String> {
// Currently this means we require the bundle to have been unpacked first!
let toolchain_version = get_rust_toolchain_version(kani_dir)?;
println!("[3/5] Installing rust toolchain version: {}", &toolchain_version);

// Symlink to a local toolchain if the user explicitly requests
if let Some(local_toolchain_path) = use_local_toolchain {
let toolchain_path = Path::new(&local_toolchain_path);
// TODO: match the version against which kani was built
// Issue: https://github.com/model-checking/kani/issues/3060
symlink_rust_toolchain(toolchain_path, kani_dir)?;
println!(
"[3/5] Installing rust toolchain from path provided: {}",
&toolchain_path.to_string_lossy()
);
return Ok(toolchain_version);
}

// This is the default behaviour when no explicit path to a toolchain is mentioned
println!("[3/5] Installing rust toolchain version: {}", &toolchain_version);
Command::new("rustup").args(["toolchain", "install", &toolchain_version]).run()?;
let toolchain = home::rustup_home()?.join("toolchains").join(&toolchain_version);
symlink_rust_toolchain(&toolchain, kani_dir)?;
Expand Down

0 comments on commit e1b35d5

Please sign in to comment.