crosvm/ci/kokoro/build-chromeos.sh

84 lines
2.5 KiB
Bash
Raw Normal View History

#!/bin/bash
# Copyright 2022 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.
#
# Note: To simulate this locally, sudo needs to be passwordless for the duration of the build (~1h).
# This could be achieved by refreshing sudo in the background before running ci/simulate.py:
#
# while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &
# ./ci/kokoro/simulate.py ./ci/kokoro/build-chromeos.sh
set -ex
CROS_ROOT="${KOKORO_ARTIFACTS_DIR}/cros"
CROSVM_ROOT="${KOKORO_ARTIFACTS_DIR}/git/crosvm"
DEPOT_TOOLS="${KOKORO_ARTIFACTS_DIR}/depot_tools"
BOARD="amd64-generic"
# TODO: Add other packages tracking the crosvm repo.
PACKAGE_LIST=(
'chromeos-base/crosvm'
)
# Python script to check for at least version 3.9
VERSION_CHECK="
import sys
sys.exit(sys.version_info.major != 3 or sys.version_info.minor < 9)
"
setup_depot_tools() {
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git \
"$DEPOT_TOOLS"
export PATH="${DEPOT_TOOLS}:${PATH}"
}
setup_cros_source() {
repo init -q -u https://chromium.googlesource.com/chromiumos/manifest \
-b stable --depth=1 -c -g minilayout,crosvm
time repo sync -c # ~5min
time cros_sdk --create # ~16min
}
setup_crosvm_source() {
# Pull kokoro's version of crosvm into the cros monorepo
(
cd "${CROS_ROOT}/src/platform/crosvm" &&
git remote add crosvm "$CROSVM_ROOT" &&
git fetch crosvm &&
git checkout FETCH_HEAD
)
# Uprev ebuild files
local colon_separated_packages="$(printf '%s:' "${PACKAGE_LIST[@]}")"
./chromite/scripts/cros_uprev \
--package="$colon_separated_packages" \
--overlay-type=public
}
build_and_test_crosvm() {
# TODO: We currently build crosvm twice. Once with build_packages, once to run tests.
# ~20min
time cros_sdk build_packages --board "$BOARD" implicit-system "${PACKAGE_LIST[@]}"
# ~6min
time cros_sdk cros_run_unit_tests --board "$BOARD" --packages "${PACKAGE_LIST[@]}"
}
main() {
# Ensure we have at least python 3.9. Kokoro requires us to use pyenv to install the required
# version.
if ! python3 -c "$VERSION_CHECK"; then
pyenv install --verbose --skip-existing 3.9.5
pyenv global 3.9.5
fi
mkdir -p "$CROS_ROOT"
cd "$CROS_ROOT"
setup_depot_tools
setup_cros_source
setup_crosvm_source
build_and_test_crosvm
}
main