blob: 6918396d22b00cef483cc39908119ba90496ecad [file] [log] [blame] [edit]
# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Creates an image that can check out / build / test the perfetto source.
FROM ubuntu:20.04
# Prevent interactive prompts during package installation
ENV DEBIAN_FRONTEND=noninteractive
RUN set -ex; \
dpkg --add-architecture i386; \
apt-get update; \
apt-get -y install --no-install-recommends \
python3.9 \
python3-pip \
python3.9-dev \
python3.9-venv \
python3.9-distutils \
python-is-python3 \
git \
curl \
sudo \
lz4 \
tar \
tini \
libpulse0 \
libgl1 \
libxml2 \
libc6-dev-i386 \
linux-libc-dev:i386 \
linux-libc-dev \
libtinfo5 \
gnupg2 \
pkg-config \
zip \
g++ \
zlib1g-dev \
unzip \
xz-utils \
gcc-8 \
g++-8 \
gcc-8-multilib \
openjdk-11-jdk \
clang-8 \
libc++-8-dev \
llvm-dev \
libc++abi-8-dev; \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.9 1; \
python3 -m pip install --no-cache-dir protobuf pandas grpcio; \
python3 --version; \
python --version; \
pip3 --version; \
gcc-8 --version; \
g++-8 --version; \
clang-8 --version; \
clang++-8 --version; \
java -version
# Chrome/puppeteer deps.
RUN set -ex; \
apt-get update; \
apt-get -y install --no-install-recommends \
gconf-service \
libasound2 \
libatk1.0-0 \
libc6 \
libcairo2 \
libcups2 \
libdbus-1-3 \
libexpat1 \
libfontconfig1 \
libgbm1 \
libgcc1 \
libgconf-2-4 \
libgdk-pixbuf2.0-0 \
libglib2.0-0 \
libgtk-3-0 \
libnspr4 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libstdc++6 \
libx11-6 \
libx11-xcb1 \
libxcb1 \
libxcomposite1 \
libxcursor1 \
libxdamage1 \
libxext6 \
libxfixes3 \
libxi6 \
libxrandr2 \
libxrender1 \
libxss1 \
libxtst6 \
ca-certificates \
libappindicator3-1 \
libnss3 \
lsb-release \
xdg-utils \
fonts-liberation \
fonts-ipafont-gothic \
fonts-wqy-zenhei \
fonts-thai-tlwg \
fonts-kacst \
fonts-freefont-ttf;
# Additional Python utility packages
RUN set -ex; \
apt-get update; \
apt-get -y install --no-install-recommends \
procps \
jq \
python3-jwt \
python3-requests \
python3-oauth2client \
python3-httplib2 \
python3-google-auth \
python3-googleapi;
# Create user and group
RUN set -ex; \
groupadd -g 1986 perfetto; \
useradd -m -d /opt/ci -u 1986 -g perfetto -s /bin/bash perfetto; \
# Clean up
apt-get -y autoremove; \
apt-get -y clean; \
rm -rf /var/lib/apt/lists/*; \
rm -rf /root/.cache/ /usr/share/man/* /usr/share/doc/*;
# Install gcloud
RUN curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | \
gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg; \
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" \
| tee -a /etc/apt/sources.list.d/google-cloud-sdk.list; \
apt-get update && apt-get install -y google-cloud-cli;
# Install ccache from github, the version in ubunut repo (3.7) is too old for us.
RUN set -e; \
CCACHE_ARCHIVE_SHA256=7766991b91b3a5a177ab33fa043fe09e72c68586d5a86d20a563a05b74f119c0; \
CCACHE_VER=4.11.3; \
CCACHE_ARTIFACT_NAME=ccache-${CCACHE_VER}-linux-x86_64; \
curl -fsSL -O https://github.com/ccache/ccache/releases/download/v${CCACHE_VER}/${CCACHE_ARTIFACT_NAME}.tar.xz; \
echo "Downloaded ccache-${CCACHE_VER}."; \
DOWNLOADED_SHA256=$(sha256sum ${CCACHE_ARTIFACT_NAME}.tar.xz | awk '{print $1}'); \
[ "$CCACHE_ARCHIVE_SHA256" = "$DOWNLOADED_SHA256" ] || { echo "Error: sha256 do not match."; exit 1; }; \
tar -xf ${CCACHE_ARTIFACT_NAME}.tar.xz --one-top-level; \
cp ${CCACHE_ARTIFACT_NAME}/ccache /usr/local/bin/; \
ccache --version; \
rm -rf ${CCACHE_ARTIFACT_NAME} ${CCACHE_ARTIFACT_NAME}.tar.xz;
WORKDIR /opt/ci
COPY sandbox_entrypoint.sh ./
COPY tmp/config.py ./
# Download GitHub Actions runner.
# We should upkeep GHAR_VER with the latest version in
# https://api.github.com/repos/actions/runner/releases/latest
# Failing to do so will slow down every sandbox execution, as the script
# self-updates if it detects it's too old.
RUN set -ex; \
chmod 755 ./*; \
mkdir github-action-runner; \
cd github-action-runner; \
# As of May 2024, a recent version. Please check for the latest.
# For example, on May 8 2025, 2.323.0 was a version.
# You should update GHAR_VER to the latest from:
# https://api.github.com/repos/actions/runner/releases/latest
# Example: response.tag_name gives "v2.317.0", so GHAR_VER would be "2.317.0"
GHAR_VER=${GHAR_VER:-2.323.0}; \
GHAR_URL=https://github.com/actions/runner/releases/download/v${GHAR_VER}/actions-runner-linux-x64-${GHAR_VER}.tar.gz; \
echo "Downloading GitHub Actions Runner version ${GHAR_VER} from ${GHAR_URL}"; \
curl -L -o actions-runner.tar.gz $GHAR_URL; \
tar -xzf actions-runner.tar.gz; \
rm actions-runner.tar.gz; \
chown -R perfetto:perfetto .;
USER perfetto
ENTRYPOINT [ "tini", "-g", "--" ]
CMD [ "bash", "/opt/ci/sandbox_entrypoint.sh" ]