Dockerfile.desktop (105 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
FROM python:3.12-slim as moz-central
RUN apt-get -qq update && apt-get -qq install -y git
RUN git clone https://github.com/mozilla/gecko-dev.git --depth 1
FROM python:3.12-slim
USER root
ARG RESOLUTION="1920x1080x24"
ARG XARGS=""
ARG FIREFOX_VERSION=""
# Set env
ENV DEBIAN_FRONTEND=noninteractive \
LC_ALL=C.UTF-8 \
LANG=C.UTF-8 \
GECKODRIVER_VERSION=0.34.0 \
XVFB_RES="${RESOLUTION}" \
XVFB_ARGS="${XARGS}"
# Install requirements to install tools
RUN dependencies=' \
bzip2 \
curl \
gcc \
gnupg2 \
libasound2 \
libatspi2.0-0 \
libdbus-glib-1-2 \
libdrm2 \
libfontconfig1 \
libpango-1.0-0 \
libpangocairo-1.0-0 \
libgbm1 \
libglib2.0-0 \
libgtk-3-0 \
libgconf-2-4 \
libnss3 \
libxt6 \
libx11-xcb1 \
libxcomposite1 \
libxdamage1 \
libxfixes3 \
libxrender1 \
libxext6 \
libxrandr2 \
musl-dev \
wget \
xauth \
xvfb \
xz-utils \
' \
&& set -x \
&& apt-get -qq update && apt-get -qq install -y software-properties-common \
&& apt-get -qq update && apt-get -qq install --no-install-recommends -y $dependencies \
&& apt-get -y purge firefox \
&& rm -rf /var/lib/apt/lists/* /var/cache/apt/*
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
# Copy all files to the container
COPY . /code
WORKDIR /code
# Download Firefox
ARG FIREFOX_DOWNLOAD_URL=https://download.mozilla.org/?product=firefox${FIREFOX_VERSION}-latest-ssl&lang=en-US&os=linux64
RUN wget --no-verbose -O /tmp/firefox $FIREFOX_DOWNLOAD_URL \
&& rm -rf /opt/firefox \
&& tar -C /opt -xf /tmp/firefox \
&& rm /tmp/firefox \
&& ln -fs /opt/firefox/firefox /usr/bin/firefox
# @hackebrot
ARG GECKODRIVER_DOWNLOAD_URL=https://github.com/mozilla/geckodriver/releases/download/v$GECKODRIVER_VERSION/geckodriver-v$GECKODRIVER_VERSION-linux64.tar.gz
RUN rm -rf /opt/geckodriver \
&& wget --no-verbose -O /tmp/geckodriver.tar.gz $GECKODRIVER_DOWNLOAD_URL \
&& tar -C /opt -zxf /tmp/geckodriver.tar.gz \
&& rm /tmp/geckodriver.tar.gz \
&& mv /opt/geckodriver /opt/geckodriver-$GECKODRIVER_VERSION \
&& chmod 755 /opt/geckodriver-$GECKODRIVER_VERSION \
&& ln -fs /opt/geckodriver-$GECKODRIVER_VERSION /usr/bin/geckodriver
RUN mv /usr/bin/geckodriver /usr/bin/geckodriver2 \
&& mv ./utilities/geckodriver /usr/bin/geckodriver \
&& chmod +x /usr/bin/geckodriver
# Install python deps
RUN pip install poetry \
&& poetry install --no-root
# Download older firefox nightly
RUN FIREFOX_OLD_DOWNLOAD_URL=$(python3 utilities/download_old_firefox.py) \
&& wget -q -O /tmp/firefox_old $FIREFOX_OLD_DOWNLOAD_URL \
&& mkdir utilities/firefox-old-nightly \
&& mkdir utilities/firefox-old-nightly-disable-test \
&& tar -C utilities/firefox-old-nightly -xf /tmp/firefox_old \
&& tar -C utilities/firefox-old-nightly-disable-test -xf /tmp/firefox_old \
&& rm /tmp/firefox_old
# Create profile used for update tests
RUN utilities/firefox-old-nightly/firefox/firefox -CreateProfile -headless "klaatu-profile-old-base /code/utilities/klaatu-profile-old-base"
RUN utilities/firefox-old-nightly-disable-test/firefox/firefox -CreateProfile -headless "klaatu-profile-disable-test /code/utilities/klaatu-profile-disable-test"
RUN firefox -CreateProfile -headless "klaatu-profile-firefox-base /code/utilities/klaatu-profile-firefox-base"
RUN firefox -CreateProfile -headless "klaatu-profile-current-base /code/utilities/klaatu-profile-current-base"
# Copy prefs needed for test
RUN cp utilities/user.js utilities/klaatu-profile-old-base
RUN cp utilities/user.js utilities/klaatu-profile-current-base
RUN cp utilities/user.js utilities/klaatu-profile-disable-test
RUN cp utilities/user.js utilities/klaatu-profile-firefox-base
COPY --from=moz-central gecko-dev/browser/components/search/test/browser/telemetry/ /code/search_files/
RUN mv search_server/* search_files/
RUN sed -i 's/\r$//' xvfb-startup.sh
ENTRYPOINT ["/bin/bash", "xvfb-startup.sh"]