Files
trezor-suite/docker/ci-base/Dockerfile
2025-08-06 13:34:04 +02:00

125 lines
3.7 KiB
Docker

# Base
## Use a proxy or fallback to no proxy at all (direct access to Docker Hub).
ARG CI_DOCKER_PROXY=""
FROM ${CI_DOCKER_PROXY}debian:bullseye-slim as base
RUN apt-get update && \
apt-get install -y --no-install-recommends \
ca-certificates \
zip unzip \
curl && \
rm -rf /var/lib/apt/lists/* && \
update-ca-certificates
# Docker
FROM base as docker
ENV DOCKER_VERSION=20.10.16
RUN curl -fsSLO https://download.docker.com/linux/static/stable/x86_64/docker-${DOCKER_VERSION}.tgz \
&& mv docker-${DOCKER_VERSION}.tgz docker.tgz \
&& tar xzvf docker.tgz \
&& mv docker/docker /usr/local/bin \
&& rm -r docker docker.tgz
# Docker Compose
FROM base as docker_compose
ENV DOCKER_COMPOSE_VERSION=1.29.2
RUN curl -L "https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose
# Final image
# bullseye is for debian 11. the same version as firmware team has in its Dockerfile.
FROM ${CI_DOCKER_PROXY}node:lts-bullseye
RUN apt-get update && apt-get install -y \
build-essential \
# required by playwright and node
xvfb \
libgtk2.0-0 \
libnotify-dev \
libgconf-2-4 \
libnss3 \
libxss1 \
libasound2 \
libcairo2-dev \
libpango1.0-dev \
libjpeg-dev \
libgif-dev \
librsvg2-dev \
# required by core/emulator
scons \
libsdl2-dev \
libsdl2-image-dev \
# why not
zip \
jq \
rsync \
curl
RUN apt-get install -y \
python3-dev \
python3-pip
RUN pip3 install attrs
RUN pip3 install --upgrade setuptools
# trezor ctl is not working with newer version of click
RUN pip3 install "click<8.1"
RUN pip3 install trezor
RUN pip3 install termcolor
USER root
# install Chromebrowser
RUN \
wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - && \
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google.list && \
apt-get update && \
apt-get install -y dbus-x11 google-chrome-stable google-chrome-beta && \
rm -rf /var/lib/apt/lists/*
# "fake" dbus address to prevent errors
# https://github.com/SeleniumHQ/docker-selenium/issues/87
ENV DBUS_SESSION_BUS_ADDRESS=/dev/null
# a few environment variables to make NPM installs easier
# good colors for most applications
ENV TERM xterm
# avoid million NPM install messages
ENV npm_config_loglevel warn
# allow installing when the main user is root
ENV npm_config_unsafe_perm true
# trezor emu
ENV SDL_VIDEODRIVER "dummy"
ENV XDG_RUNTIME_DIR "/var/tmp"
# trezorctl https://click.palletsprojects.com/en/7.x/python3/
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
# Install and use correct version of node - should match witch Nix and .nvmrc
ENV NODE_VERSION 20.12.2
# Out of the blue, we started to run into CI failures. All of them had one thing in common.
# Some of our dependencies postinstall scripts tried to execute a binary in ./node_modules/.bin/
# that was not available at the moment. This happens probably because of the async manner in which
# base packages are downloaded and installed in concurrence with the fact that the troublesome
# package relies on existence of another package already installed.
# as a quick fix, create a project and install needed packages to provide yarn cache on image level.
RUN yarn global add opencollective node-pre-gyp
# versions of local tools
RUN node -v
RUN npm -v
RUN yarn -v
RUN google-chrome --version
RUN google-chrome-beta --version
RUN zip --version
RUN git --version
RUN python3 --version
# RUN pipenv --version
RUN python3 -m pip --version
RUN trezorctl version
COPY --from=docker /usr/local/bin/docker /usr/local/bin
COPY --from=docker_compose /usr/local/bin/docker-compose /usr/local/bin