#!/bin/bash # Copyright 2021 The Chromium OS Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. set -e cd "$(dirname $0)/.." HELP="This will run presubmit checks for crosvm. To run all checks just run $ ./tools/presubmit The checks can be run in parallel for faster execution: $ ./tools/presubmit --tmux This will open a tmux session to run all presubmit builds in parallel. It will create a nested tmux session if you are already using it. All tests are executed in the local development environment. If your host is not set up for aarch64 builds, it will use './tools/dev_container' to build run those. There are three levels of presubmit tests that can be run: $ ./tools/presubmit --quick $ ./tools/presubmit $ ./tools/presubmit --all The quick mode will only cover x86 and does not require a dev_container. The default mode will add aarch64 tests, and the all mode will test everything that is also tested on Kokoro. " while [[ $# -gt 0 ]]; do case "$1" in -q | --quick) QUICK=true shift ;; -a | --all) ALL=true shift ;; --tmux) RUN_IN_TMUX=true shift ;; -h | --help) echo "$HELP" exit 0 shift ;; *) echo "unknown argument $1" exit 1 ;; esac done run_commands_in_tmux() { local tmux_commands=( set-option -g default-shell /bin/bash \; new-session "$1; read -p 'Press enter to close.'" \; ) for cmd in "${@:2}"; do tmux_commands+=( split-window -h "$cmd; read -p 'Press enter to close.'" \; ) done tmux_commands+=( select-layout even-horizontal \; ) TMUX="" tmux "${tmux_commands[@]}" } run_commands() { for cmd in "$@"; do echo "$ ${cmd}" bash -c "$cmd" echo done } aarch64_wrapper() { if ! (rustup target list --installed | grep -q aarch64 && dpkg --print-foreign-architectures | grep -q arm64); then echo "./tools/dev_container" fi } commands=( "./tools/fmt --check && ./tools/clippy" "./tools/run_tests --target=host" ) if [ "$ALL" == true ]; then commands+=( "$(aarch64_wrapper) ./tools/run_tests --target=vm:aarch64" "$(aarch64_wrapper) ./tools/run_tests --target=vm:aarch64 --arch=armhf" "cargo build --verbose --no-default-features" ) elif [ "$QUICK" != true ]; then commands+=( # Test via user-space emulation for faster, but less complete results. "$(aarch64_wrapper) ./tools/run_tests --target=host --arch=aarch64" ) fi if [ "$RUN_IN_TMUX" = true ]; then run_commands_in_tmux "${commands[@]}" else run_commands "${commands[@]}" fi