1*bb4ee6a4SAndroid Build Coastguard Worker# Copyright 2021 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker# found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker# Development container for crosvm. 6*bb4ee6a4SAndroid Build Coastguard Worker# 7*bb4ee6a4SAndroid Build Coastguard Worker# Provides all dependencies specified in install-deps with some additonal 8*bb4ee6a4SAndroid Build Coastguard Worker# logic to cache cargo data in CI runs. 9*bb4ee6a4SAndroid Build Coastguard Worker 10*bb4ee6a4SAndroid Build Coastguard Worker# Build catapult dashboard upload tool in a builder container 11*bb4ee6a4SAndroid Build Coastguard WorkerFROM docker.io/golang:bullseye AS gobuilder 12*bb4ee6a4SAndroid Build Coastguard WorkerWORKDIR /root/ 13*bb4ee6a4SAndroid Build Coastguard WorkerRUN git clone https://fuchsia.googlesource.com/infra/infra 14*bb4ee6a4SAndroid Build Coastguard WorkerWORKDIR /root/infra/cmd/catapult 15*bb4ee6a4SAndroid Build Coastguard WorkerRUN go build 16*bb4ee6a4SAndroid Build Coastguard Worker 17*bb4ee6a4SAndroid Build Coastguard WorkerFROM docker.io/debian:testing-slim 18*bb4ee6a4SAndroid Build Coastguard Worker 19*bb4ee6a4SAndroid Build Coastguard WorkerENV RUSTUP_HOME=/usr/local/rustup \ 20*bb4ee6a4SAndroid Build Coastguard Worker CARGO_HOME=/usr/local/cargo \ 21*bb4ee6a4SAndroid Build Coastguard Worker PATH=/workspace/tools:/usr/local/cargo/bin:$PATH 22*bb4ee6a4SAndroid Build Coastguard Worker 23*bb4ee6a4SAndroid Build Coastguard Worker# Install pipx applications globally in /usr/local/bin 24*bb4ee6a4SAndroid Build Coastguard WorkerENV PIPX_HOME=/usr/local/pipx \ 25*bb4ee6a4SAndroid Build Coastguard Worker PIPX_BIN_DIR=/usr/local/bin 26*bb4ee6a4SAndroid Build Coastguard Worker 27*bb4ee6a4SAndroid Build Coastguard Worker# Use a dedicated target directory so we do not write into the source directory. 28*bb4ee6a4SAndroid Build Coastguard WorkerRUN mkdir -p /scratch/cargo_target \ 29*bb4ee6a4SAndroid Build Coastguard Worker && mkdir /cache 30*bb4ee6a4SAndroid Build Coastguard Worker 31*bb4ee6a4SAndroid Build Coastguard Worker# Prevent the container from writing __pycache__ files into the src. 32*bb4ee6a4SAndroid Build Coastguard WorkerENV PYTHONDONTWRITEBYTECODE=1 33*bb4ee6a4SAndroid Build Coastguard WorkerENV CARGO_TARGET_DIR=/scratch/cargo_target 34*bb4ee6a4SAndroid Build Coastguard Worker 35*bb4ee6a4SAndroid Build Coastguard Worker# Allow APT to cache packages between docker image builds 36*bb4ee6a4SAndroid Build Coastguard WorkerRUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache 37*bb4ee6a4SAndroid Build Coastguard Worker 38*bb4ee6a4SAndroid Build Coastguard Worker# Add foreign architectures for cross-compilation. 39*bb4ee6a4SAndroid Build Coastguard WorkerRUN dpkg --add-architecture arm64 \ 40*bb4ee6a4SAndroid Build Coastguard Worker && dpkg --add-architecture armhf 41*bb4ee6a4SAndroid Build Coastguard Worker 42*bb4ee6a4SAndroid Build Coastguard Worker# Install dependencies (APT and cargo packages are cached between image builds for faster iterative builds). 43*bb4ee6a4SAndroid Build Coastguard WorkerCOPY --chmod=555 tools/install-deps tools/install-aarch64-deps tools/install-armhf-deps tools/install-mingw64-deps tools/setup-wine64 rust-toolchain /tools/ 44*bb4ee6a4SAndroid Build Coastguard WorkerRUN cd /tools \ 45*bb4ee6a4SAndroid Build Coastguard Worker && apt-get update \ 46*bb4ee6a4SAndroid Build Coastguard Worker && apt-get install --yes sudo curl \ 47*bb4ee6a4SAndroid Build Coastguard Worker && ./install-deps \ 48*bb4ee6a4SAndroid Build Coastguard Worker # We only use the nightly toolchain for rustfmt, remove other parts to save space. 49*bb4ee6a4SAndroid Build Coastguard Worker && rustup component remove --toolchain nightly rust-std \ 50*bb4ee6a4SAndroid Build Coastguard Worker && rustup component remove --toolchain nightly cargo 51*bb4ee6a4SAndroid Build Coastguard Worker 52*bb4ee6a4SAndroid Build Coastguard Worker# HACK ALERT! 53*bb4ee6a4SAndroid Build Coastguard Worker# libc6:arm64 postinstall will attempt to call telinit to restart services. This will block 54*bb4ee6a4SAndroid Build Coastguard Worker# indefinitely in the container with no init running. Replace telinit with true to make it 55*bb4ee6a4SAndroid Build Coastguard Worker# a no-op. See b/322015733 56*bb4ee6a4SAndroid Build Coastguard WorkerRUN rm /usr/sbin/telinit && cp /bin/true /usr/sbin/telinit 57*bb4ee6a4SAndroid Build Coastguard Worker 58*bb4ee6a4SAndroid Build Coastguard WorkerRUN cd /tools \ 59*bb4ee6a4SAndroid Build Coastguard Worker && ./install-aarch64-deps \ 60*bb4ee6a4SAndroid Build Coastguard Worker && ./install-armhf-deps \ 61*bb4ee6a4SAndroid Build Coastguard Worker && ./install-mingw64-deps 62*bb4ee6a4SAndroid Build Coastguard Worker 63*bb4ee6a4SAndroid Build Coastguard Worker# Add wine64 to PATH, as debian removed alternative entry to wine64 64*bb4ee6a4SAndroid Build Coastguard WorkerENV PATH=/usr/lib/wine:$PATH 65*bb4ee6a4SAndroid Build Coastguard Worker 66*bb4ee6a4SAndroid Build Coastguard Worker# Setup wine for root user 67*bb4ee6a4SAndroid Build Coastguard WorkerRUN /tools/setup-wine64 68*bb4ee6a4SAndroid Build Coastguard Worker 69*bb4ee6a4SAndroid Build Coastguard Worker# Install global config.toml for cross-compilation 70*bb4ee6a4SAndroid Build Coastguard WorkerCOPY --chmod=555 .cargo/config.debian.toml /.cargo/config.toml 71*bb4ee6a4SAndroid Build Coastguard Worker 72*bb4ee6a4SAndroid Build Coastguard Worker# Install catapult dashboard upload tool 73*bb4ee6a4SAndroid Build Coastguard WorkerCOPY --from=gobuilder /root/infra/cmd/catapult/catapult /tools/ 74*bb4ee6a4SAndroid Build Coastguard Worker 75*bb4ee6a4SAndroid Build Coastguard Worker# Cache CARGO_HOME between container runs in CI. 76*bb4ee6a4SAndroid Build Coastguard WorkerVOLUME /cache 77*bb4ee6a4SAndroid Build Coastguard WorkerENV CROSVM_CACHE_DIR=/cache 78*bb4ee6a4SAndroid Build Coastguard WorkerENV CARGO_HOME=/cache/cargo_home 79*bb4ee6a4SAndroid Build Coastguard Worker 80*bb4ee6a4SAndroid Build Coastguard WorkerVOLUME /workspace 81*bb4ee6a4SAndroid Build Coastguard WorkerWORKDIR /workspace 82