crosvm/tools/presubmit
Dennis Kempin ba4adc0efb Add python presubmit checks
This change adds python type and formatting checks and
consolidates code health checks in ./tools/health-check.

Dealing with relative imports in python is tricky, so
we are making ./tools/impl a proper package with no
directly executable files.

Some of the bash shorthands in ./tools had to be converted
to python for this.

To make the new checks pass, we run the formatter and fix
some mypy type checks.

TEST=./tools/health-check
BUG=b:218559722,b:219965702

Change-Id: Ie18d3d6dd2f5a033141e167a6e1aa762791941d6
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3558592
Reviewed-by: Daniel Verkamp <dverkamp@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Commit-Queue: Dennis Kempin <denniskempin@google.com>
2022-04-15 19:22:53 +00:00

118 lines
2.9 KiB
Bash
Executable file

#!/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/health-check"
"./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"
"./tools/run_tests --target=host --arch=win64 --build-only"
"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"
"./tools/run_tests --target=host --arch=win64 --build-only"
)
fi
if [ "$RUN_IN_TMUX" = true ]; then
run_commands_in_tmux "${commands[@]}"
else
run_commands "${commands[@]}"
fi