mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-12 05:07:19 +00:00
This CL adds the foundation for running tests consistently in Kokoro and locally, for both x86 and aarch64. The crosvm_builder is similar to the original image from docker/crosvm.Dockerfile. The main difference is that ChromeOS dependencies are not compiled into the container, but built at runtime. The crosvm_aarch64_builder installs the build enviornment to cross-compile crosvm for aarch64. The tests are run with user-space emulation using qemu-aarch64-static. See ci/README.md for instructions on how to use these builders. Tests on aarch64 cannot all be run using user-space emulation. We will need a VM to pass all smoke tests, this work is tracked in b/177228167. BUG=b:177133814 TEST=Tested by running ./ci/builder bin/smoke_test ./ci/builder cargo test ./ci/aarch64_builder cargo build ./ci/aarch64_builder cargo test -p tempfile Change-Id: Iffffcf48894787dd72fff894af351fdaced0b429 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/2621994 Reviewed-by: Zach Reizner <zachr@chromium.org> Reviewed-by: Stephen Barber <smbarber@chromium.org> Tested-by: Dennis Kempin <denniskempin@google.com> Commit-Queue: Dennis Kempin <denniskempin@google.com>
79 lines
2.7 KiB
Markdown
79 lines
2.7 KiB
Markdown
# CrosVM Continuous Integration Builders
|
|
|
|
This directory contains the toolchain to build docker containers for building
|
|
and testing crosvm. They are used by Kokoro during presubmit and on continuous
|
|
integration runs, but can also be used locally to run tests in a predictable
|
|
environment.
|
|
|
|
## Overview
|
|
|
|
- ci/build_environment: Contains tooling for building the dependencies of
|
|
crosvm.
|
|
- ci/crosvm_base: Docker image shared by crosvm_builder and
|
|
crosvm_aarch64_builder
|
|
- ci/crosvm_builder: A native docker image for building and testing crosvm
|
|
- ci/crosvm_aarch64_builder: An x86 docker image to cross-compile for aarch64
|
|
and test with user-space emulation.
|
|
- ci/builder: Script to start the crosvm_builder container
|
|
- ci/aarch64_builder: Script to start the crosvm_aarch64_builder container
|
|
|
|
## Running the builder locally
|
|
|
|
You need to check out crosvm via `repo`, to pull all the required chromiumos
|
|
dependencies:
|
|
|
|
```
|
|
$ repo init -u https://chromium.googlesource.com/chromiumos/manifest.git --repo-url https://chromium.googlesource.com/external/repo.git -g crosvm
|
|
$ repo sync -j4
|
|
$ cd src/platform/crosvm
|
|
```
|
|
|
|
A standard chromiumos checkout following the
|
|
[ChromiumOS Developer Guide](https://chromium.googlesource.com/chromiumos/docs/+/master/developer_guide.md#Get-the-Source)
|
|
will work too.
|
|
|
|
To run the smoke tests suite for both x86 and aarch64 on an x86 machine, just
|
|
run:
|
|
|
|
```
|
|
$ cd platform/src/crosvm
|
|
$ ./ci/builder bin/smoke_test
|
|
$ ./ci/aarch64_builder bin/smoke_test
|
|
```
|
|
|
|
or start an interactive shell for either of them:
|
|
|
|
```
|
|
$ ./ci/builder
|
|
$ ./ci/aarch64_builder
|
|
```
|
|
|
|
Note: Tests on aarch64 are a work in progress and may not pass.
|
|
|
|
When the builder is started, it will prepare the environment for building and
|
|
running tests, this includes building dependencies for crosvm that are provided
|
|
by the ChromiumOS checkout.
|
|
|
|
The environment in both is setup so that `cargo test` or existing scripts like
|
|
`bin/smoke_tests` compile for the right target and execute tests correctly
|
|
(using qemu-user for aarch64).
|
|
|
|
The builders allow for incremental builds by storing build artifacts in
|
|
`$CARGO_TARGET/ci/crosvm_builder`.
|
|
|
|
### Using podman
|
|
|
|
Podman is a daemon-less docker replacement that runs containers without root
|
|
privileges. If podman is installed, it will be automatically used.
|
|
|
|
For Googlers, see [go/dont-install-docker](http://go/dont-install-docker) for
|
|
more details.
|
|
|
|
Note: Since podman runs with your users permissions, you need to setup access to
|
|
devices required by tests. Most notably `/dev/kvm` and `/dev/net/tun`.
|
|
|
|
### Building and uploading a new version of builders
|
|
|
|
The docker images for all builders can be built with `make` and uploaded with
|
|
`make upload`. Of course you need to have docker push permissions for
|
|
`registry.gitlab.com/crosvm-ci/crosvm-ci` for the upload to work.
|